我是 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]
成一个大功能。我在数独求解器中使用它。如果您认为可能有更相关的上下文,请告诉我。