git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Fix transitive import issue
5564d57Phil Freeman
libraries/prelude/tests/Eff.purs+7−3
@@ -1,9 +1,13 @@
1module Tests where
1module Tests where
2
2
3import Prelude
3import Prelude
4+import Eff
4import Errors
5import Errors
6+import Trace
5
7
6−test n = catchError (\s -> eff do return 0) ( eff do
8+test = \n -> catchError (\s -> eff do return 0) $ eff do
7 case {} of
9 case {} of
10+ _ | n > 10 -> eff do
11+ trace "n > 10"
8− _ | n > 10 -> throwError "Error!"
12+ throwError "Error!"
9− _ -> eff do return n)
13+ _ -> eff do return n
src/Language/PureScript/TypeChecker.hs+10−5
@@ -155,22 +155,27 @@ typeCheckAll currentModule (ImportDeclaration moduleName idents : rest) = do
155 moduleExists env = not (null (filterModule (names env))) || not (null (filterModule (types env)))
155 moduleExists env = not (null (filterModule (names env))) || not (null (filterModule (types env)))
156 shadowIdents idents' env =
156 shadowIdents idents' env =
157 forM_ idents' $ \ident -> do
157 forM_ idents' $ \ident -> do
158− guardWith (show currentModule ++ "." ++ show ident ++ " is already defined") $ (currentModule, ident) `M.notMember` names env
159 case (moduleName, ident) `M.lookup` names env of
158 case (moduleName, ident) `M.lookup` names env of
159+ Just (_, Alias _ _) -> return ()
160+ Just (pt, _) -> do
161+ guardWith (show currentModule ++ "." ++ show ident ++ " is already defined") $ (currentModule, ident) `M.notMember` names env
160− Just (pt, _) -> modifyEnv (\e -> e { names = M.insert (currentModule, ident) (pt, Alias moduleName ident) (names e) })
162+ modifyEnv (\e -> e { names = M.insert (currentModule, ident) (pt, Alias moduleName ident) (names e) })
161 Nothing -> throwError (show moduleName ++ "." ++ show ident ++ " is undefined")
163 Nothing -> throwError (show moduleName ++ "." ++ show ident ++ " is undefined")
162 shadowTypes pns env =
164 shadowTypes pns env =
163 forM_ pns $ \pn -> do
165 forM_ pns $ \pn -> do
164− guardWith (show currentModule ++ "." ++ show pn ++ " is already defined") $ (currentModule, pn) `M.notMember` types env
165 case (moduleName, pn) `M.lookup` types env of
166 case (moduleName, pn) `M.lookup` types env of
166 Nothing -> throwError (show moduleName ++ "." ++ show pn ++ " is undefined")
167 Nothing -> throwError (show moduleName ++ "." ++ show pn ++ " is undefined")
168+ Just (_, DataAlias _ _) -> return ()
167 Just (k, _) -> do
169 Just (k, _) -> do
170+ guardWith (show currentModule ++ "." ++ show pn ++ " is already defined") $ (currentModule, pn) `M.notMember` types env
168 modifyEnv (\e -> e { types = M.insert (currentModule, pn) (k, DataAlias moduleName pn) (types e) })
171 modifyEnv (\e -> e { types = M.insert (currentModule, pn) (k, DataAlias moduleName pn) (types e) })
169 let keys = map (snd . fst) . filter (\(_, (fn, _)) -> fn `constructs` pn) . M.toList . dataConstructors $ env
172 let keys = map (snd . fst) . filter (\(_, (fn, _)) -> fn `constructs` pn) . M.toList . dataConstructors $ env
170 forM_ keys $ \dctor -> do
173 forM_ keys $ \dctor -> do
171− guardWith (show currentModule ++ "." ++ show dctor ++ " is already defined") $ (currentModule, dctor) `M.notMember` dataConstructors env
172 case (moduleName, dctor) `M.lookup` dataConstructors env of
174 case (moduleName, dctor) `M.lookup` dataConstructors env of
175+ Just (_, Alias _ _) -> return ()
176+ Just (ctorTy, _) -> do
177+ guardWith (show currentModule ++ "." ++ show dctor ++ " is already defined") $ (currentModule, dctor) `M.notMember` dataConstructors env
173− Just (ctorTy, _) -> modifyEnv (\e -> e { dataConstructors = M.insert (currentModule, dctor) (ctorTy, Alias moduleName (Ident (runProperName dctor))) (dataConstructors e) })
178+ modifyEnv (\e -> e { dataConstructors = M.insert (currentModule, dctor) (ctorTy, Alias moduleName (Ident (runProperName dctor))) (dataConstructors e) })
174 Nothing -> throwError (show moduleName ++ "." ++ show dctor ++ " is undefined")
179 Nothing -> throwError (show moduleName ++ "." ++ show dctor ++ " is undefined")
175 constructs (TypeConstructor (Qualified (Just mn) pn')) pn
180 constructs (TypeConstructor (Qualified (Just mn) pn')) pn
176 = mn == moduleName && pn' == pn
181 = mn == moduleName && pn' == pn