是否可以将这两行设为一行:
main = do line <- getLine
let result = words line
我的意思是类似于非一元代码
结果 = 单词 getLine
这——在我看来——会提高可读性。
最佳答案
试试这个:result <- fmap words getLine
fmap
接受一个类型为 a -> b
的函数并将其转换为 f a -> f b
对于任何 Functor
的实例, 其中应包括所有 Monad
实例。
有一个等效的函数叫做 liftM
特定于 Monad
,出于模糊的历史原因。在某些情况下,您可能需要使用它,但对于像 IO
这样的标准 monad你可以坚持fmap
.
也可以导入Data.Functor
或 Control.Applicative
获得一个不错的 fmap
的运算符(operator)版本, 所以你可以写 words <$> getLine
相反,它通常看起来更漂亮。
关于haskell - 赋值前处理monad值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9008219/