doブロックでスコープがどのように機能するのかを理解しようとしています。私は次のコードをお持ちの場合haskellモナドでスコープを理解する
は:
l = [1, 2, 3]
m = [1, 2]
を、これは
res = do
a <- l
b <- m
return (a, b)
罰金作品やm
とl
のデカルト積を返します。私は別の形でこれを書き換えるしようとした範囲を理解することが
(ブロックを行うことなく、)
私はそれを「unsugar」とthisを使用してしようとしたので、ブロックはモナドの操作上だけ糖衣構文ですかということを知っていますこれを思いついた:
res = l >>= (\a -> m) >>= (\b -> return (a, b))
奇妙なことに、このエラーはNot in scope: ‘a’
です。
doブロック内のreturn
がアクセスできる魔法のように見えるので、どこが間違っているのか、おそらくどのようにスコープが機能するのか教えていただけますか?
は問題があなたのコード内のラムダの範囲がかなり右ではないということです非常に
私は申し訳ありませんが、2つの良い答えがあり、これは最初でした。 私は今理解しています。今はすべての異なるラムダがあるので、なぜこのコードについて私が混乱したのかが分かるので、すべて意味があります。 ありがとうございます(お二人とも) –