代码之家  ›  专栏  ›  技术社区  ›  jorgen

一元管道图分割流

  •  2
  • jorgen  · 技术社区  · 6 年前

    我只是想弄明白 conduit . 跑步

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

    给予 ["abc"]

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

    给予 ["a", "b", "c"] .

    为什么一元版本会分割流?

    1 回复  |  直到 6 年前
        1
  •  3
  •   Michael Snoyman    6 年前

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

    • 第一个示例是字符列表上的纯转换
    • 第二个例子是列表单子内单个字符上的一元变换

    如果希望第二个示例的行为与第一个相同,请替换 身份证件 具有 pure (或 return ).