on master help sign in
Give more specific errors when a variable cannot be found during canonicalization
commit0b9317124dc208a800189471aa68e898c34bac8b authorEvan Czaplicki <info@elm-lang.org> dateWed 7 Aug 2013, 09:38 (13 years ago) parentd85c01e
1 file changed+9−8
compiler/Transform/Canonicalize.hs+9−8
compiler/Transform/Canonicalize.hs+9−8
@@ -61,7 +61,7 @@ metadataModule ifaces modul =
6161 second f (a,b) = (,) a `fmap` f b
6262 third f (a,b,c) = (,,) a b `fmap` f c
6363 renameType' =
64− Either.either (\err -> Left [P.text err]) return . renameType (replace initialEnv)
64+ Either.either (\err -> Left [P.text err]) return . renameType (replace "type" initialEnv)
6565
6666 get1 (a,_,_) = a
6767 canon (name, importMethod) =
@@ -92,12 +92,12 @@ extend env pattern = Map.union (Map.fromList (zip xs xs)) env
9292 where xs = Set.toList (SD.boundVars pattern)
9393
9494
95−replace :: Env -> String -> Either String String
96−replace env v =
95+replace :: String -> Env -> String -> Either String String
96+replace variable env v =
9797 if List.isPrefixOf "Native." v then return v else
9898 case Map.lookup v env of
9999 Just v' -> return v'
100− Nothing -> Left $ "Could not find variable '" ++ v ++ "'." ++ msg
100+ Nothing -> Left $ "Could not find " ++ variable ++ " '" ++ v ++ "'." ++ msg
101101 where
102102 matches = filter (List.isInfixOf v) (Map.keys env)
103103 msg = if null matches then "" else
@@ -129,7 +129,7 @@ rename env lexpr@(L s expr) =
129129 frnm (f,e) = (,) f `liftM` rename env e
130130
131131 Binop op e1 e2 ->
132− do op' <- format (replace env op)
132+ do op' <- format (replace "variable" env op)
133133 Binop op' `liftM` rnm e1 `ap` rnm e2
134134
135135 Lambda pattern e ->
@@ -149,9 +149,10 @@ rename env lexpr@(L s expr) =
149149 Def p exp ->
150150 Def `liftM` format (renamePattern env' p) `ap` rename env' exp
151151 TypeAnnotation name tipe ->
152− TypeAnnotation name `liftM` renameType (format . replace env') tipe
152+ TypeAnnotation name `liftM`
153+ renameType (format . replace "variable" env') tipe
153154
154− Var x -> Var `liftM` format (replace env x)
155+ Var x -> Var `liftM` format (replace "variable" env x)
155156
156157 Data name es -> Data name `liftM` mapM rnm es
157158
@@ -173,5 +174,5 @@ renamePattern env pattern =
173174 PRecord _ -> return pattern
174175 PAnything -> return pattern
175176 PAlias x p -> PAlias x `liftM` renamePattern env p
176− PData name ps -> PData `liftM` replace env name
177+ PData name ps -> PData `liftM` replace "pattern" env name
177178 `ap` mapM (renamePattern env) ps