[convert Subst from association list to Data.Map
Helmut Grohne <grohne@cs.uni-bonn.de>**20140725145341
 Ignore-this: 8a718d762841825b497f1f61cdf687ab
] hunk ./src/Syntax/Class/Subst.hs 25
+import qualified Data.Map as M
hunk ./src/Syntax/Class/Subst.hs 36
-newtype Subst t = Subst { assocs :: [(Name,t)] } deriving (Show)
+newtype Subst t = Subst { unSubst :: M.Map Name t } deriving (Show)
hunk ./src/Syntax/Class/Subst.hs 40
-nullSubst   = Subst []
+nullSubst   = Subst M.empty
hunk ./src/Syntax/Class/Subst.hs 44
-n <~ t     = Subst [(n, t)]
+n <~ t     = Subst (M.singleton n t)
hunk ./src/Syntax/Class/Subst.hs 51
-s1 @@ s2    = Subst $ [ (n, apply s1 t) | (n,t) <- assocs s2 ] ++ assocs s1
+s1 @@ s2    = Subst $ M.union (M.map (apply s1) (unSubst s2)) (unSubst s1)
hunk ./src/Syntax/Class/Subst.hs 58
-merge s1 s2 = if agree then return $ Subst (assocs s1 ++ assocs s2) else fail "merge fails"
+merge s1 s2 = if agree then return $ Subst ((M.union `on` unSubst) s1 s2) else fail "merge fails"
hunk ./src/Syntax/Class/Subst.hs 64
-lookupS n (Subst s) = lookup n s
+lookupS n = M.lookup n . unSubst
+assocs = M.assocs . unSubst
