相关疑难解决方法(0)

观察同构,然后将它们证明为Monad

这个问题与这个答案有关.

有一个名为的类型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)?

monads haskell

6
推荐指数
2
解决办法
190
查看次数

Haskell中的部分应用类型

基于这个问题,在此代码中

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 …

haskell

4
推荐指数
1
解决办法
1023
查看次数

标签 统计

haskell ×2

monads ×1