相关疑难解决方法(0)

Monads有什么特别之处?

monad是一种数学结构,大量用于(纯)函数式编程,基本上是Haskell.然而,还有许多其他数学结构可用,例如应用函子,强单子或幺半群.有些更具体,有些更通用.然而,monads更受欢迎.这是为什么?

我提出的一个解释是,它们是通用性和特异性之间的最佳点.这意味着monad捕获关于数据的足够假设,以应用我们通常使用的算法以及我们通常满足monadic定律的数据.

另一种解释可能是Haskell为monad(do-notation)提供了语法,但没有为其他结构提供语法,这意味着Haskell程序员(以及函数式编程研究人员)直观地被用于monad,其中更通用或特定(高效)的函数将也工作.

math monads haskell functional-programming structure

27
推荐指数
4
解决办法
3358
查看次数

bind可以由fmap和join组成,所以我们必须使用monadic函数a - > mb吗?

我不太多使用Haskell,但我理解Monads的概念.

我被Kleisli三重混淆了,然而,类别,

fmap和加入

虽然Haskell中在返回和绑定功能方面限定单子,但也可以在以下方面,以限定一个单子return和其它两个操作,joinfmap.该公式更符合类别理论中monad的原始定义.fmap具有类型的操作(t ? u) ? M t ? M u在两种类型之间采用函数,并生成一个函数,该函数对monad中的值执行"相同的操作".该join类型的操作将M (M t) ? M t两层monadic信息"扁平"为一层.

帮助我了解Monads的背景原理.

这两个配方的相关内容如下:

fmap f m = m >>= (return . f)
join n   = n >>= id

fmap :: (a -> b) -> (m a -> m b)
unit :: a -> m a
join :: m (m a) -> m a
>>=  :: m a -> …
Run Code Online (Sandbox Code Playgroud)

math monads haskell functional-programming functor

7
推荐指数
2
解决办法
1072
查看次数