为什么WrappedMonad和WrappedArrow?

yon*_*ong 8 haskell applicative newtype

为什么存在WrappedMonad和WrappedArrow类型?是因为Monads不是Applicative吗?鉴于WrappedArrow存在,应该是实例

Arrow a => Applicative (Arrow a b) 
Run Code Online (Sandbox Code Playgroud)

简单地构建到Haskell本身就像Applicative现在的超类一样Monad?

Ørj*_*sen 9

非常适合WrappedMonad.我想它正在变得(也许已经是)基本上已经过时了.但是WrappedArrow是比较困难的,因为Arrow类型和Applicative类型有不同的种类,* -> * -> *对* -> *.并且由于GHC实例解析的工作方式,添加实例(我假设额外Arrow是一个错字)

instance Arrow a => Applicative (a b)
Run Code Online (Sandbox Code Playgroud)

意味着没有任何具有两个或更多参数的类型构造函数可以给出一个Applicative没有也给出一个Arrow- 这看起来相当激烈.

添加一个超类的逆向选择Applicative (a b) =>到Arrow a会显得更加美味-除了你不能有超有型forall'ed像b.这样的超类也可以用于其他事情,并且已经被多次提出过,所以我认为它很难很好地实现.

  • @dfeuer 子类,而不是超类。它不会直接影响“Applicative”。然而,在当前的阶级制度下这是不可能的。 (2认同)