[英]Why is there no type class for monoids on functors in Haskell?
我承认这个问题有点不具体,但我想知道为什么我从来没有在 Haskell 中偶然发现一个用于函子上的幺半群的类型类。 我只是想念它,这次缺席是否有充分的理由,或者完全是由于历史原因? 恕我直言,下面的继承图没有右上角看起来有点奇怪:
Functor
|
V
Applicative ––> Alternative
| |
V V
Monad ––> MonadPlus
这里要考虑的一个关键因素是,“来自Functor
的箭头到底意味着什么?” 如果没有将Functor
与FunctorPlus
统一的公理,那么您不妨定义instance Monoid (F t) where ...
并完成它。 那么你在寻找什么公理——只是fmap f fempty = fempty
或者fmap fx <|> fmap fy == fmap f (x <|> y)
...?
另一个关键因素是缺乏有趣的结构,这些结构是函子而不是应用。 可能有一个论点与泛型编程(元编程deriving
关键字)有关,其中一切都是乘积的总和,因此我们可以为任何类型的* -> *
派生Applicative
,但我不知道细节。 FunctorPlus
可能具有的唯一价值是“ FunctorPlus
做 Alternative 所做的相同的事情”,所以如果这个集合真的很小,那么显然没有多少附加值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.