@@ -33,8 +33,7 @@ tvar :: Environment -> String
33tvar env var =
33tvar env var =
34 case adts ++ aliases of
34 case adts ++ aliases of
35 [] -> notFound "type" (Map.keys (_adts env) ++ Map.keys (_aliases env)) var
35 [] -> notFound "type" (Map.keys (_adts env) ++ Map.keys (_aliases env)) var
36− [v] -> do _ <- Env.using (extract v)
36+ [v] -> found extract v
38 vs -> preferLocals' extract "type" vs var
37 vs -> preferLocals' extract "type" vs var
40 adts = map Left . fromMaybe [] $ Map.lookup var (_adts env)
39 adts = map Left . fromMaybe [] $ Map.lookup var (_adts env)
@@ -52,6 +51,11 @@ pvar env var =
52 Just vs -> preferLocals "pattern" vs var
51 Just vs -> preferLocals "pattern" vs var
53 Nothing -> notFound "pattern" (Map.keys (_patterns env)) var
52 Nothing -> notFound "pattern" (Map.keys (_patterns env)) var
54+found :: (a -> Var.Canonical) -> a -> Canonicalizer String a
56+ _ <- Env.using (extract v)
55notFound :: String -> [String] -> String -> Canonicalizer String a
59notFound :: String -> [String] -> String -> Canonicalizer String a
56notFound kind possibilities var =
60notFound kind possibilities var =
57 throwError $ "Could not find " ++ kind ++ " '" ++ var ++ "'." ++ msg
61 throwError $ "Could not find " ++ kind ++ " '" ++ var ++ "'." ++ msg
@@ -67,13 +71,11 @@ preferLocals' :: (a -> Var.Canonical) -> String -> [a] -> String -> Canonicalize
67preferLocals' extract kind possibilities var =
71preferLocals' extract kind possibilities var =
68 case filter (isLocal . extract) possibilities of
72 case filter (isLocal . extract) possibilities of
69 [] -> ambiguous possibilities
73 [] -> ambiguous possibilities
70− [v] -> do _ <- Env.using (extract v)
74+ [v] -> found extract v
72 locals -> ambiguous locals
75 locals -> ambiguous locals
74 isLocal :: Var.Canonical -> Bool
77 isLocal :: Var.Canonical -> Bool
75− isLocal (Var.Canonical Var.Local _) = True
78+ isLocal (Var.Canonical home _) = home == Var.Local
76− isLocal (Var.Canonical _ _) = False
78 ambiguous possibleVars =
80 ambiguous possibleVars =
79 throwError msg
81 throwError msg