haskellwikiから:
expr1 >>= \x ->
(>>=) 演算子の右側が気になります\x ->
。どういう意味ですか?
GHCiではNor \x ->
nor も\x
認識され:type
ません。
haskellwikiから:
expr1 >>= \x ->
(>>=) 演算子の右側が気になります\x ->
。どういう意味ですか?
GHCiではNor \x ->
nor も\x
認識され:type
ません。
明確にするために、引用しているセクションは次のとおりです。
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))