【问题标题】:Monadic conduit map splits the streamMonadic 管道地图拆分流
【发布时间】:2017-11-19 10:56:19
【问题描述】:

我正在尝试理解conduit。跑步

runConduit $ yield "abc" .| mapC id .| sinkList

在运行时提供["abc"]

runConduit $ yield "abc" .| mapMC id .| sinkList

["a", "b", "c"]

为什么 monadic 版本会拆分流?

【问题讨论】:

    标签: haskell monads conduit


    【解决方案1】:

    这与这里使用的类型有关。 mapC 需要 a -> b 类型的函数,而 mapMC 需要 a -> m b 用于 Monad m 的某些实例。在这两种情况下,您都使用id 作为该函数,因此在第一个示例中,您提供的任何输入都将被视为b,在第二个示例中被视为m b。由于您产生的值是[Char] 类型,因此可以分解为:

    • 第一个示例是对字符列表的纯转换
    • 第二个示例是在单子列表中对单个字符进行单子转换

    如果您希望第二个示例的行为与第一个相同,请将id 替换为pure(或return)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-26
      • 1970-01-01
      相关资源
      最近更新 更多