@@ -21,7 +21,7 @@ variable env var =
2121
2222 _ -> case Map.lookup var (_values env) of
2323 Just [v] -> Env.using v
24− Just vs -> preferLocals "variable" vs var
24+ Just vs -> preferLocals env "variable" vs var
2525 Nothing -> notFound "variable" (Map.keys (_values env)) var
2626 where
2727 (modul, name) = case Help.splitDots var of
@@ -34,7 +34,7 @@ tvar env var =
3434 case adts ++ aliases of
3535 [] -> notFound "type" (Map.keys (_adts env) ++ Map.keys (_aliases env)) var
3636 [v] -> found extract v
37− vs -> preferLocals' extract "type" vs var
37+ vs -> preferLocals' env extract "type" vs var
3838 where
3939 adts = map Left . fromMaybe [] $ Map.lookup var (_adts env)
4040 aliases = map Right . fromMaybe [] $ Map.lookup var (_aliases env)
@@ -48,7 +48,7 @@ pvar :: Environment -> String -> Canonicalizer String Var.Canonical
4848pvar env var =
4949 case Map.lookup var (_patterns env) of
5050 Just [v] -> Env.using v
51− Just vs -> preferLocals "pattern" vs var
51+ Just vs -> preferLocals env "pattern" vs var
5252 Nothing -> notFound "pattern" (Map.keys (_patterns env)) var
5353
5454found :: (a -> Var.Canonical) -> a -> Canonicalizer String a
@@ -64,18 +64,24 @@ notFound kind possibilities var =
6464 msg = if null matches then "" else
6565 "\nClose matches include: " ++ List.intercalate ", " matches
6666
67−preferLocals :: String -> [Var.Canonical] -> String -> Canonicalizer String Var.Canonical
68−preferLocals = preferLocals' id
67+preferLocals :: Environment -> String -> [Var.Canonical] -> String
68+ -> Canonicalizer String Var.Canonical
69+preferLocals env = preferLocals' env id
6970
70−preferLocals' :: (a -> Var.Canonical) -> String -> [a] -> String -> Canonicalizer String a
71−preferLocals' extract kind possibilities var =
71+preferLocals' :: Environment -> (a -> Var.Canonical) -> String -> [a] -> String
72+ -> Canonicalizer String a
73+preferLocals' env extract kind possibilities var =
7274 case filter (isLocal . extract) possibilities of
7375 [] -> ambiguous possibilities
7476 [v] -> found extract v
7577 locals -> ambiguous locals
7678 where
7779 isLocal :: Var.Canonical -> Bool
78− isLocal (Var.Canonical home _) = home == Var.Local
80+ isLocal (Var.Canonical home _) =
81+ case home of
82+ Var.Local -> True
83+ Var.BuiltIn -> False
84+ Var.Module name -> name == Env._home env
7985
8086 ambiguous possibleVars =
8187 throwError msg