【发布时间】:2017-11-19 10:56:19
【问题描述】:
我正在尝试理解conduit。跑步
runConduit $ yield "abc" .| mapC id .| sinkList
在运行时提供["abc"]
runConduit $ yield "abc" .| mapMC id .| sinkList
给["a", "b", "c"]。
为什么 monadic 版本会拆分流?
【问题讨论】:
我正在尝试理解conduit。跑步
runConduit $ yield "abc" .| mapC id .| sinkList
在运行时提供["abc"]
runConduit $ yield "abc" .| mapMC id .| sinkList
给["a", "b", "c"]。
为什么 monadic 版本会拆分流?
【问题讨论】:
这与这里使用的类型有关。 mapC 需要 a -> b 类型的函数,而 mapMC 需要 a -> m b 用于 Monad m 的某些实例。在这两种情况下,您都使用id 作为该函数,因此在第一个示例中,您提供的任何输入都将被视为b,在第二个示例中被视为m b。由于您产生的值是[Char] 类型,因此可以分解为:
如果您希望第二个示例的行为与第一个相同,请将id 替换为pure(或return)。
【讨论】: