【问题标题】:What does >>= mean in purescript?>>= 在纯脚本中是什么意思?
【发布时间】:2016-02-02 13:41:34
【问题描述】:

我正在阅读purescript wiki 并找到以下部分,该部分根据>>= 解释do

>>= 是什么意思?

做符号

do 关键字为 monadic 引入了简单的语法糖 表达式。

这是一个示例,使用 Maybe 类型的 monad:

 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 &lt;- x 脱糖到 x &gt;&gt;= \a -&gt; ...
  • x 去糖到 x &gt;&gt;= \_ -&gt; ... 或者只是 x 如果这是最后一个语句。
  • 让绑定let a = x。请注意缺少 in 关键字。

例子maybeSum desugars to:::

 maybeSum a b =
   a >>= \n ->
     b >>= \m ->
       let result = n + m
       in return result

【问题讨论】:

  • > do 关键字为一元表达式引入了简单的语法糖。 6年后,这句话仍然毫无意义
  • @CodeWhisperer .. “语法糖”只是“写同样东西的更好方法。 monadic 表达式是使用 modad 的表达式。在这种情况下,Maybe monad。 Monads 是包装其他类型以使代码可组合/可链接的类型通常你包装你的基本类型......对包装的类型进行操作,......然后解开结果以查看你得到了什么。 Maybe monad 处理空属性。在这种情况下,do 可以让您跳过一些缩进,使代码看起来更加程序化

标签: purescript


【解决方案1】:

&gt;&gt;= 是一个函数,仅此而已。它位于 Prelude 模块中,类型为(&gt;&gt;=) :: forall m a b. (Bind m) =&gt; m a -&gt; (a -&gt; m b) -&gt; m b,是Bind 类型类的bind 函数的别名。您可以在 this link 中找到 Prelude 模块的定义,在 Pursuit package index 中找到。

这与Haskell中的Monad类型类密切相关,查找资源要容易一些。有一个关于这个概念的famous question on SO,如果你想提高你对绑定函数的了解,这是一个很好的起点(如果你现在开始学习函数式编程,你可以暂时跳过它)。

【讨论】:

    猜你喜欢
    • 2012-04-19
    • 2021-11-25
    • 2012-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-22
    • 1970-01-01
    相关资源
    最近更新 更多