Haskell 我怎样才能证明‘Monad’实际上是‘Applicative’和‘Functor’?
在Haskell中,类Haskell 我怎样才能证明‘Monad’实际上是‘Applicative’和‘Functor’?,haskell,monads,Haskell,Monads,在Haskell中,类Monad声明为: class Applicative m => Monad m where return :: a -> m a (>>=) :: m a -> (a -> m b) -> m b return = pure 我如何证明Monad实际上是Applicative,声明如下 class Functor f => Applicativ
Monad
声明为:
class Applicative m => Monad m where
return :: a -> m a
(>>=) :: m a -> (a -> m b) -> m b
return = pure
我如何证明Monad
实际上是Applicative
,声明如下
class Functor f => Applicative f where
pure :: a -> f a
(<*>) :: f (a -> b) -> f a -> f b
class Functor f where
fmap :: (a -> b) -> f a -> f b
具体地说,我如何编写
fmap
,返回和>=
?这些都在文档中
具体来说,我如何编写pure
和
返回和>=
具体见本节:
此外,Monad和Applicative操作应如下所示:
pure = return
(<*>) = ap
当然,使用我上面引用的内容,您可以使用fmap
实现return
和>=
正如@duplode所指出的,对于单子和应用程序,它们(本质上,尽管它们不是这样定义的)是fmap
的同义词,专门针对它们的特定类型类。为了完整性,你可能想提到liftM
和liftA
。这两个词的有趣之处在于它们并不是同义词。它们是fmap
什么是ap
什么是()
:liftM f m1=do{x1谢谢。我怎样才能用返回和>>=?我怎样才能用返回和>>=?duplode我可以问一下你对我在上述评论中提出的问题有什么看法吗?@Tim-你试过谷歌吗?网上有很多关于这个问题的解释(包括最终的、令人钦佩的简短的
fmap f x = pure f <*> x