モナド計算を接頭辞表記で書き直す方法を見つけようとしています(実際の実用的な目標ではなく、研究のためだけです)が、あるラムダが別のラムダのパラメータを認識しないという問題
与えられた実際の例
*Main> [1, 3, 4] >>= \x -> [x + 1, x - 1] >>= \y -> return (y*x)
[2,0,12,6,20,12]
書き換えられたものは、他のラムダのパラメーターが表示されないというエラーを示しています
*Main> (>>=) ( (>>=) [1, 3, 4] (\x -> [x + 1, x - 1]) ) (\y -> return (y*x))
<interactive>:133:68: Not in scope: `x'
しかし、それを使用しない最後のものを作成すると(xをyに置き換えることにより)、計算が機能し始めます
*Main> (>>=) ( (>>=) [1, 3, 4] (\x -> [x + 1, x - 1]) ) (\y -> return (y*y))
[4,0,16,4,25,9]
接頭辞表記の完全な書き換えは技術的に可能ですか?それとも、他のラムダ パラメータにアクセスするこのプロパティは、中置表記だけに限定されているのでしょうか?