haskell - 赋值前处理monad值

标签 haskell syntax

是否可以将这两行设为一行:

main = do line <- getLine 
    let result = words line

我的意思是类似于非一元代码

结果 = 单词 getLine

这——在我看来——会提高可读性。

最佳答案

试试这个:result <- fmap words getLinefmap接受一个类型为 a -> b 的函数并将其转换为 f a -> f b对于任何 Functor 的实例, 其中应包括所有 Monad实例。

有一个等效的函数叫做 liftM特定于 Monad ,出于模糊的历史原因。在某些情况下,您可能需要使用它,但对于像 IO 这样的标准 monad你可以坚持fmap .

也可以导入Data.FunctorControl.Applicative获得一个不错的 fmap 的运算符(operator)版本, 所以你可以写 words <$> getLine相反,它通常看起来更漂亮。

关于haskell - 赋值前处理monad值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9008219/

相关文章:

mysql,字段列表中的未知列

haskell - 使用 hs_init 分析共享 cabal 库时出现 GHC RTS 运行时错误

java - 类名之间的点符号是什么,它是什么意思?

syntax - ksh bad [ … ] 语法不会导致错误

javascript - 对 React(?) 或 javascript 语法感到好奇

python - in line.split ('+' )[-1] 方括号中的-1在Python中表示什么

haskell - 是否有惯用的pointfree方法通过另一个函数调用带参数的函数

haskell - Haskell中的O(1)循环缓冲区?

haskell - 成功导入的数据构造函数不在范围内?

haskell - 偏向 Monad 变压器