我只是想弄明白 conduit . 跑步
conduit
runConduit $ yield "abc" .| mapC id .| sinkList
给予 ["abc"]
["abc"]
runConduit $ yield "abc" .| mapMC id .| sinkList
给予 ["a", "b", "c"] .
["a", "b", "c"]
为什么一元版本会分割流?
这与这里的类型有关。 mapC 需要类型为的函数 a -> b 鉴于 mapMC 期望 a -> m b 例如: Monad m . 在这两种情况下,您都在使用 id 作为该函数,因此,您提供的任何输入都被视为 b 在第一个示例中,以及 m b 在第二个。因为你产生的价值是 [Char] ,这可以分解为:
mapC
a -> b
mapMC
a -> m b
Monad
m
id
b
m b
[Char]
如果希望第二个示例的行为与第一个相同,请替换 身份证件 具有 pure (或 return ).
身份证件
pure
return