【问题标题】:Arrow equivalent of mapM?相当于mapM的箭头?
【发布时间】:2012-07-03 10:56:22
【问题描述】:

我正在尝试与 Arrows 一起探索和工作,但遇到了一些困难。我有一个需要Arrow [a] [b] 的上下文,我想写一个Arrow a b 并将其映射/排序在箭头内,例如mapM。具体来说,箭头是 Hakyll Compiler,但我认为这对答案并不重要。

给定一个箭头

myInnerArrow :: Arrow a => a b c

我怎样才能把它变成一个箭头

myOuterArrow :: Arrow a => a [b] [c]

?

我已经搜索了基础库,特别是在 Data.ListControl.Arrow 中,但我找不到任何看起来可以完成这项工作的东西。它是否以我没想到的名字存在?它是由其他图书馆提供的吗?是不是因为某种原因不能写?

【问题讨论】:

  • 跟进:Hakyll 有一个mapCompiler 函数。

标签: haskell arrows


【解决方案1】:

你不能没有选择。提升功能将具有这种类型:

mapA :: (ArrowChoice a) => a b c -> a [b] [c]

最简单的实现方法是使用proc 表示法:

mapA c =
    proc xs' ->
        case xs' of
            [] -> returnA -< []
            (x:xs) -> uncurry (:) ^<< c *** mapA c -< (x, xs)

未经测试的代码,但应该可以工作。但是请注意,通用的函数将非常慢。我建议专门为您的箭头编写此映射函数。

【讨论】:

    猜你喜欢
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    • 2014-04-22
    • 1970-01-01
    • 2013-07-13
    • 2020-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多