Поскольку я изучаю Haskell, я понимаю, что обозначение do
- это просто синтаксический сахар:
a = do x <- [3..4]
[1..2]
return (x, 42)
Переводится на
a = [3..4] >>= (\x -> [1..2] >>= (\_ -> return (x, 42)))
Я понимаю, что я, вероятно, буду использовать do-notation, но я хотел бы понять, что происходит в переводе. Итак, чисто для педагогических соображений, есть ли способ для ghc/ghci дать мне соответствующие инструкции привязки для довольно сложной монады, написанной в do-notation?
Изменить. Оказывается, lambdabot на #haskell может это сделать:
<Guest61347> @undo do x <- [3..4] ; [1..2] ; return (x, 42)
<lambdabot> [3 .. 4] >>= \ x -> [1 .. 2] >> return (x, 42)
Здесь исходный код Отменить плагин.