有没有办法通过使用Monads在一行中重写这个?
input <- getLine
let parsed = reads input :: [(Int,String)]
我无法理解如何传递输入, 我的尝试是考虑lambda符号。
答案 0 :(得分:7)
fmap
的另一个地方!使用fmap
更改其他内容的值 - 在这种情况下,在getLine
内,但它更有用。
parsed <- fmap reads getLine :: IO [(Int,String)]
或import Data.Functor
或import Control.Applicative
您可以将其写为
parsed <- reads <$> getLine :: IO [(Int,String)]
编译器很可能从其他地方推断出你的意思Int
,在这种情况下你可以省略显式类型签名。
fmap
是一个非常有用的功能。你可以在other answer about fmap阅读更多内容,我最后写了一个迷你教程。
实际上,如果您对编写单行内容的方式感兴趣,那么您应该了解有关Applicative Functors的更多信息。
答案 1 :(得分:4)