summaryrefslogtreecommitdiff
path: root/Sweeten.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Sweeten.hs')
-rw-r--r--Sweeten.hs21
1 files changed, 21 insertions, 0 deletions
diff --git a/Sweeten.hs b/Sweeten.hs
new file mode 100644
index 0000000..929f9f8
--- /dev/null
+++ b/Sweeten.hs
@@ -0,0 +1,21 @@
1{-# LANGUAGE ScopedTypeVariables #-}
2module Sweeten where
3
4import Data.Data
5import Data.Generics.Aliases
6import Data.Generics.Schemes
7import Language.Haskell.Exts.Syntax as HS
8
9applyDoSyntax :: forall l. (Typeable l, Data l) => Exp l -> Exp l
10applyDoSyntax = everywhere (mkT (applyDoSyntax1 :: Exp l -> Exp l))
11
12applyDoSyntax1 :: Exp l -> Exp l
13applyDoSyntax1 exp@(InfixApp la x (QVarOp lb (UnQual lc (Symbol ld ">>="))) (Lambda le [pat] y)) =
14 case y of
15 Do lf ss -> Do la (Generator lb pat x : ss)
16 _ -> Do la [Generator lb pat x, Qualifier le y]
17applyDoSyntax1 exp@(InfixApp la x (QVarOp lb (UnQual lc (Symbol ld ">>"))) y) =
18 case y of
19 Do lf ss -> Do la (Qualifier lb x : ss)
20 _ -> Do la [Qualifier lb x, Qualifier lc y]
21applyDoSyntax1 exp = exp