5

私はpurescript wikidoを読んでいて、次のセクションを見つけまし>>=た.

とは>>=どういう意味ですか?

Do表記

do キーワードは、モナド式の単純な構文糖衣を導入します。

Maybe型にモナドを使用した例を次に示します。

 maybeSum :: Maybe Number -> Maybe Number -> Maybe Number 
 maybeSum a b = do   
     n <- a
     m <- b   
     let result = n + m   
     return result 

maybeSumタイプの 2 つの値を取りMaybe Number、どちらの数値も でない場合はそれらの合計を返します Nothing

do 表記を使用する場合、戻り値の型に対応する Monad 型クラスのインスタンスが存在する必要があります。ステートメントの形式は次のとおりです。

  • a <- x脱糖するx >>= \a -> ...
  • xx >>= \_ -> ...これが最後のステートメントである場合は、または単に xに脱糖します。
  • let バインディングlet a = xinキーワードがないことに注意してください。

maybeSum desugars to::

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

1 に答える 1

8

>>=は関数であり、それ以上のものではありません。これは Prelude モジュールにあり、 type クラスの関数の(>>=) :: forall m a b. (Bind m) => m a -> (a -> m b) -> m bエイリアスであるtype を持っています。Prelude モジュールの定義は、 Pursuit パッケージのインデックスにあるこのリンクにあります。bindBind

これは Haskell の型クラスと密接に関連しており、Monadリソースを見つけるのが少し簡単です。SO には、この概念に関する有名な質問があります。これは、bind 関数に関する知識を向上させたい場合の出発点として適しています (関数型プログラミングを今始めている場合は、しばらく飛ばしてもかまいません)。

于 2016-02-02T05:41:34.993 に答える