在haskell中传递变量的单子

在haskell中传递变量的单子,haskell,Haskell,有没有可能通过使用单子在一行中重写这一点 input <- getLine let parsed = reads input :: [(Int,String)] input当然,您可以使用(或者,因为还有一个实例)将其放在一行上 parsed <- (reads :: ReadS Int) `liftM` getLine 解析了另一个地方的fmap!使用fmap来更改其他内容中的一个或多个值-在本例中,在getLine中,但它更为有用 parsed <- fmap read

有没有可能通过使用单子在一行中重写这一点

input <- getLine
let parsed = reads input :: [(Int,String)]
input当然,您可以使用(或者,因为还有一个实例)将其放在一行上

parsed <- (reads :: ReadS Int) `liftM` getLine

解析了另一个地方的
fmap
!使用
fmap
来更改其他内容中的一个或多个值-在本例中,在
getLine
中,但它更为有用

parsed <- fmap reads getLine :: IO [(Int,String)]
编译器很可能能够从别处推断出您的意思是
Int
,在这种情况下,您可以省略显式类型签名

fmap
确实是一个非常有用的函数。你可以在这本书中读到更多,我最后写了一个迷你教程


事实上,如果您对编写一行程序的简洁方法感兴趣,那么您应该了解更多关于应用程序函子的信息。

谢谢,@sinelaw使链接地址变得更短。
Control中的
liftA
。Applicative
与来自同一模块的
操作符是一样的。
parsed <- reads <$> getLine :: IO [(Int,String)]