当前位置:  开发笔记 > 编程语言 > 正文

monad是什么类型的数据结构?

如何解决《monad是什么类型的数据结构?》经验,为你挑选了2个好方法。

我对monad是什么(一个为有用的计算构建提供上下文的参数化类型),为什么它存在(所以你可以做需要上下文的事情,比如IO),如何使用它(bind返回)变量与>>=),并且非常粗略地理解它在类别理论中的适用范围(保证函数上下文同质性的类别)**.

然而,就基础数据结构而言,monad是什么?因为它与一个applicative functor(看起来像一个列表)有关,我的猜测是GHC获取monad的内容并将它们放入某种链接列表中,并在整个计算过程中传递它们.

引擎盖下真的发生了什么?

**如果您了解更多,请随时纠正这些问题.



1> user3237465..:

Monad不是一个数据结构 - 它是一个属性.

您可以定义一类具有某些默认值的数据类型(例如[]列表,0for Int,Falsefor Bool等).我们叫这个班Defaultable.然后你假设默认整数是0,从而证明整数的类型是Defaultable.Bool是以Defaultable同样的方式.

另一个例子是ToStringable类(Show在Haskell中):一个类型是ToStringable如果有一个函数从它到String.IntBoolToStringable的,因为你可以编写功能

intToString  :: Int  -> String
boolToString :: Bool -> String

(如果是,则列表类型[a]有意义)ToStringableaToStringable

同样,列表的类型是一个单子:你可以定义两种操作(即服从某些法律)return(>>=),从而证明了列表的类型形成一个单子.那就是:如果你可以定义两个操作

return :: a -> m a
(>>=)  :: m a -> (a -> m b) -> m b

对于一些具体的m,那么这m是一个monad.所以Monad是一个类和类非常提醒OOP中的接口.

在内部,它只是字典传递.



2> dfeuer..:

monad可能是也可能不是数据结构.为了将一些数据结构直觉变成monad,你一定要阅读Dan Piponi的博客文章Monads are Trees with Grafting.

最无聊的数据结构monad是一个functor上的免费monad,

data Free f a = Pure a
              | Free (f (Free a))

instance Functor f => Monad (Free f) where ...

既然你提到了列表,你应该看一下可操作的monad和密度monad.

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有