简化表示法

时间:2016-02-15 03:07:26

标签: haskell

我正在尝试执行非常简单的时间字符串解析

data Time = Time Int Int Int String

-- example input: 07:00:00AM
timeParser :: Parser Time
timeParser = do
    hh <- digits
    _ <- colon
    mm <- digits
    _ <-colon
    ss <- digits
    p <- period
    return $ Time hh mm ss p

有没有办法通过do(>>)运算符的组合简化(>>=)块?

2 个答案:

答案 0 :(得分:12)

由于您的setProgressBarIndeterminateVisibility(true); 也应该是Applicative的实例:

Parser

答案 1 :(得分:3)

简单地抛出colon的结果,缩短版本的函数(仍然使用do-notation)可能看起来像这样:

timeParser :: Parser Time
timeParser = do
  hh <-          digits
  mm <- colon >> digits
  ss <- colon >> digits
  p  <- period
  return $ Time hh mm ss p

任何进一步贬低的记录都会牺牲可读性。

话虽如此,我真的很喜欢Zeta的回答以及Haskell编程的应用风格。