有没有可能通过使用 Monads 在一行中重写它?
input <- getLine
let parsed = reads input :: [(Int,String)]
我无法理解如何传递输入,我的尝试会考虑 lambda 表示法。
有没有可能通过使用 Monads 在一行中重写它?
input <- getLine
let parsed = reads input :: [(Int,String)]
我无法理解如何传递输入,我的尝试会考虑 lambda 表示法。
另一个地方fmap
!用于fmap
更改其他内容中的一个或多个值 - 在本例中为 inside getLine
,但它更广泛有用。
parsed <- fmap reads getLine :: IO [(Int,String)]
or with import Data.Functor
orimport Control.Applicative
你可以把它写成
parsed <- reads <$> getLine :: IO [(Int,String)]
编译器很可能能够Int
从其他地方推断出您的意思,在这种情况下,您可以省略显式类型签名。
fmap
确实是一个非常有用的功能。您可以在关于 fmap的其他答案中阅读更多内容,我最终在其中编写了一个迷你教程。
实际上,如果您对编写单行代码的简洁方式感兴趣,那么您应该了解更多关于 Applicative Functors 的信息。