@@ -16,48 +16,7 @@ import qualified AST.Variable as Var
16import Text.PrettyPrint (Doc)
16import Text.PrettyPrint (Doc)
19−type Dict a =
19+-- ENVIRONMENT
23−dict :: [(String,a)] -> Dict a
25− Map.fromList $ map (second (:[])) pairs
28−insert :: String -> a -> Dict a -> Dict a
30− Map.insertWith (++) key [value]
33−type Canonicalizer err a =
34− Error.ErrorT err (State.State (Set.Set Module.Name)) a
37−uses :: (Error.Error e) => Module.Name -> Canonicalizer e ()
39− Error.lift (State.modify (Set.insert home))
42−using :: Var.Canonical -> Canonicalizer String Var.Canonical
43−using var@(Var.Canonical home _) =
45− Var.BuiltIn -> return ()
46− Var.Module path -> uses path
47− Var.Local -> return ()
51−onError :: (String -> Doc) -> Canonicalizer String a -> Canonicalizer [Doc] a
52−onError handler canonicalizer =
53− do usedModules <- Error.lift State.get
54− let (result, usedModules') =
55− State.runState (Error.runErrorT canonicalizer) usedModules
56− Error.lift (State.put usedModules')
58− Left err -> Error.throwError [handler err]
62data Environment = Env
21data Environment = Env
63 { _home :: Module.Name
22 { _home :: Module.Name
@@ -101,3 +60,50 @@ merge (Env n1 v1 t1 a1 p1) (Env n2 v2 t2 a2 p2)
101 , _aliases = Map.unionWith (++) a1 a2
60 , _aliases = Map.unionWith (++) a1 a2
102 , _patterns = Map.unionWith (++) p1 p2
61 , _patterns = Map.unionWith (++) p1 p2
65+-- RAW NAMES to CANONICAL NAMES
71+dict :: [(String,a)] -> Dict a
73+ Map.fromList $ map (second (:[])) pairs
76+insert :: String -> a -> Dict a -> Dict a
78+ Map.insertWith (++) key [value]
81+-- CANONICALIZATION MANAGER
83+type Canonicalizer err a =
84+ Error.ErrorT err (State.State (Set.Set Module.Name)) a
87+uses :: (Error.Error e) => Module.Name -> Canonicalizer e ()
89+ Error.lift (State.modify (Set.insert home))
92+using :: Var.Canonical -> Canonicalizer String Var.Canonical
93+using var@(Var.Canonical home _) =
95+ Var.BuiltIn -> return ()
96+ Var.Module path -> uses path
97+ Var.Local -> return ()
101+onError :: (String -> Doc) -> Canonicalizer String a -> Canonicalizer [Doc] a
102+onError handler canonicalizer =
103+ do usedModules <- Error.lift State.get
104+ let (result, usedModules') =
105+ State.runState (Error.runErrorT canonicalizer) usedModules
106+ Error.lift (State.put usedModules')
108+ Left err -> Error.throwError [handler err]