小编Nic*_*oux的帖子

使 Applicative 成为 Monad 所需的“最低限度”是多少?

Monad类型类可以来定义return(>>=)。然而,如果我们已经有一个Functor实例针对某些类型的构造函数f,那么这个定义是有点“比我们更需要”在(>>=)return可以用来实现fmap,所以我们赚不到使用的Functor,我们假设实例。

相比之下,定义returnjoin似乎是一个更“最小” /更少冗余的方式,使f一个Monad。这样,Functor约束是必不可少的,因为fmap不能根据这些操作来编写。(注意join不一定是从Functor到的唯一最小方法Monad:我认为(>=>)也有效。)

类似地,Applicative可以用pure和来定义(<*>),但是这个定义同样没有利用Functor约束,因为这些操作足以定义fmap

但是,Applicative f也可以使用unit :: f ()和来定义(>*<) :: f a -> f b -> f (a, b)。这些操作不足以定义,fmap所以我会说从某种意义上说这是从Functor到的更简单的方法Applicative

是否有 …

monads haskell functional-programming category-theory applicative

16
推荐指数
1
解决办法
282
查看次数