我正在尝试执行非常简单的时间字符串解析
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
和(>>)
运算符的组合简化(>>=)
块?
答案 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编程的应用风格。