haskell - 多个数据构造函数的 Monad 实例

标签 haskell monads

我不久前开始使用 Haskell,现在正在自学 monad,所以我在这里为自己想出了一个愚蠢的例子来帮助我理解 monad 的一个方面。

给定类型确定性定义为

data Certainty a = Definitely a | Perhaps a | Nope

以及所述类型的 Monad 实例

instance Monad Certainty where
  return = ...

如何为确定性及其每个数据构造函数定义方法return

最佳答案

你必须选择一个 - 根据我建议的命名

return value = Definitely value

记住return a >>= f必须是f a

绑定(bind)可能应该是

(Definitely a) >>= f = f a
(Perhaps a)    >>= f = case f a of
                          Definitely b -> Perhaps b
                          Perhaps b    -> Perhaps b
                          Nope         -> Nope
Nope           >>= _ = Nope

关于haskell - 多个数据构造函数的 Monad 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37033545/

相关文章:

Haskell:显示 Hlist 上所有 "showable"的元素

haskell - 为什么 Prelude 中的 init 函数有两种定义?

multithreading - 简单的多线程Haskell占用大量内存

haskell - 将 IO (Maybe (IO (Maybe a))) 减少到 IO (Maybe a)

scala - 为什么 scala.util.Success.flatMap (Try.flatMap) 在应用其参数后再次使用 try-catch ?

haskell - 努力实现 Monad 函数

haskell - xml-conduit:如何仅获取第一个 tbody 和该 tbody 的直接子 tr?

haskell - 为什么绑定(bind)运算符(>>=)按原样定义?

list - 流(无限列表)monad 模拟了哪些效果?

c - 类型俄罗斯方 block - 卡住混合单子(monad)和纯代码