最近对Haskell做了简要的回顾之后,什么才是简洁实用关于单曲本质上是什么的解释?我发现我遇到的大多数解释都很难理解,而且缺乏实际的细节。
3 回答
互换的青春
TA贡献1797条经验 获得超6个赞
事实上,与人们对Monad的共识相反,它们与国家无关。Monad仅仅是一种包装事物的方法,并提供了对包装的东西进行操作的方法,而不需要对其展开包装。
例如,您可以在Haskell中创建一个类型来包装另一个类型:
data Wrapped a = Wrap a
包装我们定义的东西
return :: a -> Wrapped a return x = Wrap x
若要在不展开包装的情况下执行操作,请假定您有一个函数。f :: a -> b
,然后你可以这样做电梯该函数的作用是对包装好的值进行操作:
fmap :: (a -> b) -> (Wrapped a -> Wrapped b)fmap f (Wrap x) = Wrap (f x)
这就是我们要理解的一切。然而,事实证明,这样做有一个更通用的功能。起重,也就是bind
:
bind :: (a -> Wrapped b) -> (Wrapped a -> Wrapped b)bind f (Wrap x) = f x
bind
能做的比fmap
,反之亦然。实际上,fmap
只能根据bind
和return
..所以,在定义单曲时.。你给出它的类型(这里是Wrapped a
)然后说出它是如何return
和bind
行动有效。
最酷的是,这是一个如此普遍的模式,它弹出的地方到处都是,以一种纯粹的方式封装状态只是其中之一。
至于对单曲的理解,不要太担心。读一读你觉得有趣的东西,如果你不马上理解的话,不要担心。然后,只要潜入像Haskell这样的语言就可以了。单簧管就是这样一种东西,当你通过练习了解你的大脑时,有一天你突然意识到你理解了它们。
添加回答
举报
0/150
提交
取消