我知道Functor和Applicative应该是超Monad,但不是由于历史的原因.但是,为什么不能声明Monad一个实例Functor呢?这将产生大致相同的效果,但无需修改现有代码.如果你想这样做,GHC抱怨:
instance Functor Monad where
fmap = liftM
Class `Monad' used as a type
In the instance declaration for `Functor Monad'
Run Code Online (Sandbox Code Playgroud)
这是为什么?这可能是一个很好的理由.
fuz*_*fuz 11
你的语法错了.Monad是类型类,而不是数据类型.你能写的是什么
instance Monad a => Functor a where fmap = liftM
Run Code Online (Sandbox Code Playgroud)
然而,这只会与扩展工作FlexibleInstances(许可情况下是形式的不哪里是类型变量并没有上下文)和(允许这个特定的实例[我不知道这是为什么需要]).T a1 a2 ... ana1, a2, ... anUndecidableInstances
| 归档时间: |
|
| 查看次数: |
338 次 |
| 最近记录: |