Haskell LYHFGG:“是的;单子只是支持>&燃气轮机=&引用;。这句话在什么意义上是正确的?
在本文中,作者指出“单子只是支持>>=的应用函数” (见下图)。 如果我看一看这个词的定义,我不明白这句话怎么可能是真的 Monad类型类似乎与类型类没有任何关系,例如Monad类型类不是Applicative的子类型。所以很明显,从技术上讲,在Haskell中,monad和Applicative functor是完全独立的类型类。因此,如果作者的陈述是正确的,那么它必须在不同的上下文中是正确的 有人能解释一下作者这句看似不真实的话是什么意思吗 他的声明应该如何解释?在什么情况下?也许是在范畴理论的背景下 换句话说: 我不明白如何将任何给定的单子转换为应用函子。因为如果作者的陈述是真的,那么每个单子都可以机械地(通过使用算法)转换成一个应用函子。但这真的有可能吗?如果是,如何进行Haskell LYHFGG:“是的;单子只是支持>&燃气轮机=&引用;。这句话在什么意义上是正确的?,haskell,monads,applicative,category-theory,Haskell,Monads,Applicative,Category Theory,在本文中,作者指出“单子只是支持>>=的应用函数” (见下图)。 如果我看一看这个词的定义,我不明白这句话怎么可能是真的 Monad类型类似乎与类型类没有任何关系,例如Monad类型类不是Applicative的子类型。所以很明显,从技术上讲,在Haskell中,monad和Applicative functor是完全独立的类型类。因此,如果作者的陈述是正确的,那么它必须在不同的上下文中是正确的 有人能解释一下作者这句看似不真实的话是什么意思吗 他的声明应该如何解释?在什么情况下?也许是在范畴理
您是对的,该语句意味着您可以编写一个应用程序实例,而您只知道您的类型构造函数是monad。如果M是单子,那么您可以写:
instance Applicative M where
pure = return
mf <*> mx =
mf >>= \f ->
mx >>= \x ->
return (f x)
实例应用程序M其中
纯=返回
mf mx=
mf>>=\f->
mx>>=\x->
返回(f x)
实际上,从GHC 7.10开始,
Applicative
将是Monad
的一个超类,这意味着“Monad是Applicative plus…”的概念将在标准库中烘焙。作者完全正确
所以很明显,从技术上讲,在Haskell中,monad和Applicative functor是完全独立的类型类
事实上,Monad
应该是Applicative
的“子类”。它可能会在Haskell 2014年标准化。每个人都同意,从一开始就不这样做是错误的
我们知道Monad
是一个Monad,如果它定义了:
返回
>=
(可以从>
和>=
返回中派生)
失败
放在一边
您可以看到,
Applicative
定义了与return
相同的pure
,以及与>
相同的*>
。因此,唯一剩下的区别是>=
的定义是的,这确实是可能的,正如对这个问题的回答所述:。非常感谢您解决了这个困惑Monad
是Applicative
的一个子类,如果您想更新答案的话。