0

haskellwikiから: expr1 >>= \x ->

(>>=) 演算子の右側が気になります\x ->。どういう意味ですか?

GHCiではNor \x ->nor も\x認識され:typeません。

4

1 に答える 1

2

明確にするために、引用しているセクションは次のとおりです。

do 記法から標準の単項演算子への実際の変換は、大まかに言って、パターンに一致するすべての式が次のようx <- expr1になります。

expr1 >>= \x ->

変数代入のないすべての式は、次のようにexpr2なります。

expr2 >>= \_ ->

すべての do ブロックは単項式で終了する必要があり、do ブロックの先頭で let 句を使用できます (ただし、do ブロック内の let 句ではinキーワードを使用しません)。上記の定義は次のmothersPaternalGrandfatherように翻訳されます。

mothersPaternalGrandfather s = mother s >>= \m ->
                           father m >>= \gf ->
                           father gf

ご覧のとおり、->は実際には末尾ではありません。上記の引用の最後の例を見ると、が定義されている場合、すべての s に右辺があり、次の行に続くmothersPaternalGrandfatherことがわかります。->定義の最後の行が で終わっていません->

ウィキのテキストで説明されているように、これexpr1 >>= \x ->は「大まかに」起こることです。expr1 >>= \x ->正しい構文ではありません。関数定義のより完全に括弧で囲まれたバージョンは、次のようになります。

mothersPaternalGrandfather s =
  mother s >>= (\m -> father m >>= (\gf -> father gf))
于 2014-08-24T07:19:04.353 に答える