【发布时间】:2013-08-24 10:20:27
【问题描述】:
我是 Haskell 的初学者,但在数学方面有丰富的背景,尤其是代数,所以像“单子是内函子类别中的幺半群”这样的陈述对我来说不是问题。
即便如此,我只是了解 Haskell 中单子的一部分,在学习过程中我发现自己编写了以下函数:
bindMap ::(Monad m) => [a -> m a] -> m a -> m a
bindMap (f:fs) s = bindMap fs (s >>= f)
bindMap _ s = s
这完全符合我的目的,但它似乎是一个如此明显的功能,以至于我认为我应该能够找到它或使用一些简单的组合器进行定义,或者(更有可能)我应该以不同的方式思考事物.
我原来是用类型签名写的
[a -> [a]] -> [a] -> [a]
这可能更能说明我在追求什么。这个想法是加入一个功能列表
a -> [a]
整合到一个大功能中。我在数独求解器中使用它。如果您认为可能有更相关的上下文,请告诉我。
【问题讨论】:
-
a -> m a形式的函数,其中m是一个单子,称为Kleisli arrows,它们是Category的一个实例,允许您使用(.)组合它们。跨度>