on master help sign in
cosmetic: factor out some shared code
commit577fc17340137f06bd2a2aa202a40fbc6c2767df authorEvan Czaplicki <info@elm-lang.org> dateSun 15 Jun 2014, 14:26 (12 years ago) parent0e0d613
1 file changed+8−6
compiler/Transform/Canonicalize/Variable.hs+8−6
compiler/Transform/Canonicalize/Variable.hs+8−6
@@ -33,8 +33,7 @@ tvar :: Environment -> String
3333tvar env var =
3434 case adts ++ aliases of
3535 [] -> notFound "type" (Map.keys (_adts env) ++ Map.keys (_aliases env)) var
36− [v] -> do _ <- Env.using (extract v)
37− return v
36+ [v] -> found extract v
3837 vs -> preferLocals' extract "type" vs var
3938 where
4039 adts = map Left . fromMaybe [] $ Map.lookup var (_adts env)
@@ -52,6 +51,11 @@ pvar env var =
5251 Just vs -> preferLocals "pattern" vs var
5352 Nothing -> notFound "pattern" (Map.keys (_patterns env)) var
5453
54+found :: (a -> Var.Canonical) -> a -> Canonicalizer String a
55+found extract v = do
56+ _ <- Env.using (extract v)
57+ return v
58+
5559notFound :: String -> [String] -> String -> Canonicalizer String a
5660notFound kind possibilities var =
5761 throwError $ "Could not find " ++ kind ++ " '" ++ var ++ "'." ++ msg
@@ -67,13 +71,11 @@ preferLocals' :: (a -> Var.Canonical) -> String -> [a] -> String -> Canonicalize
6771preferLocals' extract kind possibilities var =
6872 case filter (isLocal . extract) possibilities of
6973 [] -> ambiguous possibilities
70− [v] -> do _ <- Env.using (extract v)
71− return v
74+ [v] -> found extract v
7275 locals -> ambiguous locals
7376 where
7477 isLocal :: Var.Canonical -> Bool
75− isLocal (Var.Canonical Var.Local _) = True
76− isLocal (Var.Canonical _ _) = False
78+ isLocal (Var.Canonical home _) = home == Var.Local
7779
7880 ambiguous possibleVars =
7981 throwError msg