on master help sign in
Save the current environment on CSaveEnv
commitca4502b70a059480ec4057460631641ef08836f3 authorEvan Czaplicki <info@elm-lang.org> dateFri 19 Jul 2013, 18:03 (13 years ago) parentb0f96a2
1 file changed+7−6
compiler/Type/Solve.hs+7−6
compiler/Type/Solve.hs+7−6
@@ -89,30 +89,32 @@ adjustRank youngMark visitedMark groupRank variable =
8989
9090
9191
92−solve :: TypeConstraint -> StateT TS.SolverState IO (Map.Map String Variable)
92+solve :: TypeConstraint -> StateT TS.SolverState IO ()
9393solve constraint =
9494 case constraint of
95− CTrue -> TS.getEnv
95+ CTrue -> return ()
96+
97+ CSaveEnv -> TS.saveLocalEnv
9698
9799 CEqual term1 term2 -> do
98100 t1 <- TS.flatten term1
99101 t2 <- TS.flatten term2
100102 unify t1 t2
101− TS.getEnv
102103
103− CAnd cs -> mapM solve cs >> TS.getEnv
104+ CAnd cs -> mapM_ solve cs
104105
105106 CLet [Scheme [] fqs constraint' _] CTrue -> do
106107 oldEnv <- TS.getEnv
107108 mapM TS.introduce fqs
108109 solve constraint'
109110 TS.modifyEnv (\_ -> oldEnv)
110− return oldEnv
111111
112112 CLet schemes constraint' -> do
113+ oldEnv <- TS.getEnv
113114 headers <- mapM solveScheme schemes
114115 TS.modifyEnv $ \env -> Map.unions (headers ++ [env])
115116 solve constraint'
117+ TS.modifyEnv (\_ -> oldEnv)
116118
117119 CInstance name term -> do
118120 env <- TS.getEnv
@@ -120,7 +122,6 @@ solve constraint =
120122 freshCopy <- TS.makeInstance (Map.findWithDefault (error msg) name env)
121123 t <- TS.flatten term
122124 unify freshCopy t
123− TS.getEnv
124125
125126solveScheme :: TypeScheme -> StateT TS.SolverState IO (Map.Map String Variable)
126127solveScheme scheme =