小编Nir*_*n M的帖子

为什么单子不根据组成关闭?

当我Composing Types从Haskell Book 学习章节时,我被赋予编写以下类型的Functor和Applicative实例的任务。

newtype Compose f g a = Compose { getCompose :: f (g a) }
Run Code Online (Sandbox Code Playgroud)

我写了以下定义

函子:

fmap f (Compose fga) = Compose $ (fmap . fmap) f fga
Run Code Online (Sandbox Code Playgroud)

适用范围:

(Compose f) <*> (Compose a) = Compose $ (<*>) <$> f <*> a
Run Code Online (Sandbox Code Playgroud)

我了解到,组成两个Functor或Applicatives分别会给Functor和Applicative。

作者还解释说,不可能以相同的方式组成两个Monad。因此,我们使用Monad变形金刚。我只是不想阅读Monad Transformers,除非我清楚为什么Monad不作曲。

到目前为止,我尝试编写如下bind函数:

单子:

(>>=) :: Compose f g a -> (a -> Compose f g b) -> Compose f g b
(Compose fga) >>= h = (fmap.fmap) h …
Run Code Online (Sandbox Code Playgroud)

monads haskell composition monad-transformers

11
推荐指数
1
解决办法
475
查看次数

标签 统计

composition ×1

haskell ×1

monad-transformers ×1

monads ×1