git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Fix transitive import issue
commit5564d570846e948b950633258cfd69e3b65a5c44 authorPhil Freeman <paf31@cantab.net> dateFri 10 Jan 2014, 16:45 (13 years ago) parentbd1afdc
2 files changed+17−8
libraries/prelude/tests/Eff.purs+7−3 src/Language/PureScript/TypeChecker.hs+10−5
libraries/prelude/tests/Eff.purs+7−3
@@ -1,9 +1,13 @@
11module Tests where
22
33import Prelude
4+import Eff
45import Errors
6+import Trace
57
6−test n = catchError (\s -> eff do return 0) ( eff do
8+test = \n -> catchError (\s -> eff do return 0) $ eff do
79 case {} of
8− _ | n > 10 -> throwError "Error!"
9− _ -> eff do return n)
10+ _ | n > 10 -> eff do
11+ trace "n > 10"
12+ throwError "Error!"
13+ _ -> eff do return n
src/Language/PureScript/TypeChecker.hs+10−5
@@ -155,22 +155,27 @@ typeCheckAll currentModule (ImportDeclaration moduleName idents : rest) = do
155155 moduleExists env = not (null (filterModule (names env))) || not (null (filterModule (types env)))
156156 shadowIdents idents' env =
157157 forM_ idents' $ \ident -> do
158− guardWith (show currentModule ++ "." ++ show ident ++ " is already defined") $ (currentModule, ident) `M.notMember` names env
159158 case (moduleName, ident) `M.lookup` names env of
160− Just (pt, _) -> modifyEnv (\e -> e { names = M.insert (currentModule, ident) (pt, Alias moduleName ident) (names e) })
159+ Just (_, Alias _ _) -> return ()
160+ Just (pt, _) -> do
161+ guardWith (show currentModule ++ "." ++ show ident ++ " is already defined") $ (currentModule, ident) `M.notMember` names env
162+ modifyEnv (\e -> e { names = M.insert (currentModule, ident) (pt, Alias moduleName ident) (names e) })
161163 Nothing -> throwError (show moduleName ++ "." ++ show ident ++ " is undefined")
162164 shadowTypes pns env =
163165 forM_ pns $ \pn -> do
164− guardWith (show currentModule ++ "." ++ show pn ++ " is already defined") $ (currentModule, pn) `M.notMember` types env
165166 case (moduleName, pn) `M.lookup` types env of
166167 Nothing -> throwError (show moduleName ++ "." ++ show pn ++ " is undefined")
168+ Just (_, DataAlias _ _) -> return ()
167169 Just (k, _) -> do
170+ guardWith (show currentModule ++ "." ++ show pn ++ " is already defined") $ (currentModule, pn) `M.notMember` types env
168171 modifyEnv (\e -> e { types = M.insert (currentModule, pn) (k, DataAlias moduleName pn) (types e) })
169172 let keys = map (snd . fst) . filter (\(_, (fn, _)) -> fn `constructs` pn) . M.toList . dataConstructors $ env
170173 forM_ keys $ \dctor -> do
171− guardWith (show currentModule ++ "." ++ show dctor ++ " is already defined") $ (currentModule, dctor) `M.notMember` dataConstructors env
172174 case (moduleName, dctor) `M.lookup` dataConstructors env of
173− Just (ctorTy, _) -> modifyEnv (\e -> e { dataConstructors = M.insert (currentModule, dctor) (ctorTy, Alias moduleName (Ident (runProperName dctor))) (dataConstructors e) })
175+ Just (_, Alias _ _) -> return ()
176+ Just (ctorTy, _) -> do
177+ guardWith (show currentModule ++ "." ++ show dctor ++ " is already defined") $ (currentModule, dctor) `M.notMember` dataConstructors env
178+ modifyEnv (\e -> e { dataConstructors = M.insert (currentModule, dctor) (ctorTy, Alias moduleName (Ident (runProperName dctor))) (dataConstructors e) })
174179 Nothing -> throwError (show moduleName ++ "." ++ show dctor ++ " is undefined")
175180 constructs (TypeConstructor (Qualified (Just mn) pn')) pn
176181 = mn == moduleName && pn' == pn