是否可以将这两行排成一行:
main = do line <- getLine
let result = words line
我的意思是非monadic代码
result = words getLine
- 在我看来 - 会提高可读性。
答案 0 :(得分:14)
试试这个:result <- fmap words getLine
fmap
使用a -> b
类型的函数,并将其转换为f a -> f b
,以用于Functor
的实例,其中应该包括所有Monad
个实例。
由于一些模糊的历史原因,有一个名为liftM
的等效函数,该函数特定于Monad
。在某些情况下,您可能需要使用它,但对于像IO
这样的标准monad,您可以坚持使用fmap
。
您还可以导入Data.Functor
或Control.Applicative
以获得fmap
的良好运营商版本,因此您可以改为编写words <$> getLine
,这通常看起来更漂亮。