这个问题与这个答案有关.
有一个名为的类型Promise:
data Promise f a = PendingPromise f | ResolvedPromise a | BrokenPromise deriving (Show)
Run Code Online (Sandbox Code Playgroud)
据说:
Promise f a ? Maybe (Either f a)
Run Code Online (Sandbox Code Playgroud)
现在我无法理解上面的表达方式.它们是如何等同和同构的(从那你怎么能得出结论它是Monad)?
基于这个问题,在此代码中
data Promise a b = Pending (a -> b) | Resolved b | Broken
instance Functor (Promise x) where
fmap f (Pending g) = Pending (f . g)
Run Code Online (Sandbox Code Playgroud)
如果
g :: a -> b
Run Code Online (Sandbox Code Playgroud)
然后
Pending g :: Promise a b
Run Code Online (Sandbox Code Playgroud)
也
f :: b -> c
Run Code Online (Sandbox Code Playgroud)
因为存在f . g.
这意味着
Pending (f . g) :: Promise a c`.
Run Code Online (Sandbox Code Playgroud)
包起来
fmap :: (b -> c) -> Promise a b -> Promise a c
Run Code Online (Sandbox Code Playgroud)
现在fmap …