main = untilM (isCorrect 42) (read `liftM` getLine)
并且
isCorrect num guess =
case compare num guess of
EQ -> putStrLn "You Win!" >> return True
...
Martijn乐于提供替代方案:
main = untilM (isCorrect 42) (read <$> getLine)
EQ -> True <$ putStrLn "You Win!"
使用Control.Applicative的抽象可以使Haskell代码中哪些常见模式更清晰?使用Control.Applicative有效的有哪些有用的经验法则?
f <$> (e1 >>= e2) <*> e3
。 - AndrewC