我正在读purescript维基,发现下面的章节这也解释了do在以下方面>>=.
什么>>=意思?
记谱法
do关键字为monadic表达式引入了简单的语法糖.
这是一个例子,使用monad作为
Maybe类型:Run Code Online (Sandbox Code Playgroud)maybeSum :: Maybe Number -> Maybe Number -> Maybe Number maybeSum a b = do n <- a m <- b let result = n + m return result
maybeSum取两个值类型Maybe Number,如果两个数字都不是,则返回它们的总和Nothing.使用do表示法时,返回类型必须有Monad类型的相应实例.声明可以采用以下形式:
a <- x不好意思x >>= \a -> ...xx >>= \_ -> ...如果这是最后一个陈述,那就是去掉或者只是x.- 一个让绑定
let a = x.注意缺少in关键字.例子
maybeSum desugars to::Run Code Online (Sandbox Code Playgroud)maybeSum a b = a >>= \n -> b >>= \m -> let result = n + m in return result
>>=是一个功能,仅此而已.它驻留在Prelude模块中,并且具有type (>>=) :: forall m a b. (Bind m) => m a -> (a -> m b) -> m b,作为类型类bind函数的别名Bind.您可以在此链接中找到Prelude模块的定义,可在Pursuit包索引中找到.
这与MonadHaskell中的类型类密切相关,它更容易找到资源.关于这个概念有一个关于SO的着名问题,如果你想提高你对绑定函数的知识,那么这是一个很好的起点(如果你现在开始进行函数式编程,你可以跳过它一段时间).