Desugaring Haskell's do-notation into applicative operations
an analysis of alpha - beta pruning .