@@ -21,7 +21,7 @@ variable env var =
22 _ -> case Map.lookup var (_values env) of
22 _ -> case Map.lookup var (_values env) of
23 Just [v] -> Env.using v
23 Just [v] -> Env.using v
24− Just vs -> preferLocals "variable" vs var
24+ Just vs -> preferLocals env "variable" vs var
25 Nothing -> notFound "variable" (Map.keys (_values env)) var
25 Nothing -> notFound "variable" (Map.keys (_values env)) var
27 (modul, name) = case Help.splitDots var of
27 (modul, name) = case Help.splitDots var of
@@ -34,7 +34,7 @@ tvar 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] -> found extract v
36 [v] -> found extract v
37− vs -> preferLocals' extract "type" vs var
37+ vs -> preferLocals' env extract "type" vs var
39 adts = map Left . fromMaybe [] $ Map.lookup var (_adts env)
39 adts = map Left . fromMaybe [] $ Map.lookup var (_adts env)
40 aliases = map Right . fromMaybe [] $ Map.lookup var (_aliases env)
40 aliases = map Right . fromMaybe [] $ Map.lookup var (_aliases env)
@@ -48,7 +48,7 @@ pvar :: Environment -> String -> Canonicalizer String Var.Canonical
48pvar env var =
48pvar env var =
49 case Map.lookup var (_patterns env) of
49 case Map.lookup var (_patterns env) of
50 Just [v] -> Env.using v
50 Just [v] -> Env.using v
51− Just vs -> preferLocals "pattern" vs var
51+ Just vs -> preferLocals env "pattern" vs var
52 Nothing -> notFound "pattern" (Map.keys (_patterns env)) var
52 Nothing -> notFound "pattern" (Map.keys (_patterns env)) var
54found :: (a -> Var.Canonical) -> a -> Canonicalizer String a
54found :: (a -> Var.Canonical) -> a -> Canonicalizer String a
@@ -64,18 +64,24 @@ notFound kind possibilities var =
64 msg = if null matches then "" else
64 msg = if null matches then "" else
65 "\nClose matches include: " ++ List.intercalate ", " matches
65 "\nClose matches include: " ++ List.intercalate ", " matches
67−preferLocals :: String -> [Var.Canonical] -> String -> Canonicalizer String Var.Canonical
67+preferLocals :: Environment -> String -> [Var.Canonical] -> String
68+ -> Canonicalizer String Var.Canonical
68−preferLocals = preferLocals' id
69+preferLocals env = preferLocals' env id
70−preferLocals' :: (a -> Var.Canonical) -> String -> [a] -> String -> Canonicalizer String a
71+preferLocals' :: Environment -> (a -> Var.Canonical) -> String -> [a] -> String
72+ -> Canonicalizer String a
71−preferLocals' extract kind possibilities var =
73+preferLocals' env extract kind possibilities var =
72 case filter (isLocal . extract) possibilities of
74 case filter (isLocal . extract) possibilities of
73 [] -> ambiguous possibilities
75 [] -> ambiguous possibilities
74 [v] -> found extract v
76 [v] -> found extract v
75 locals -> ambiguous locals
77 locals -> ambiguous locals
77 isLocal :: Var.Canonical -> Bool
79 isLocal :: Var.Canonical -> Bool
78− isLocal (Var.Canonical home _) = home == Var.Local
80+ isLocal (Var.Canonical home _) =
84+ Var.Module name -> name == Env._home env
80 ambiguous possibleVars =
86 ambiguous possibleVars =
81 throwError msg
87 throwError msg