【发布时间】:2013-01-09 01:20:59
【问题描述】:
有没有可能通过使用 Monads 在一行中重写它?
input <- getLine
let parsed = reads input :: [(Int,String)]
我无法理解如何传递输入, 我的尝试会考虑 lambda 表示法。
【问题讨论】:
标签: haskell
有没有可能通过使用 Monads 在一行中重写它?
input <- getLine
let parsed = reads input :: [(Int,String)]
我无法理解如何传递输入, 我的尝试会考虑 lambda 表示法。
【问题讨论】:
标签: haskell
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 的更多信息。
【讨论】:
【讨论】:
Control.Applicative 的liftA 是一回事,来自同一模块的<$> 运算符也是如此。