@@ -41,7 +41,7 @@ import Language.PureScript.Sugar.TypeClasses
4141addDataType :: ModuleName -> ProperName -> [String] -> [(ProperName, [Type])] -> Kind -> Check ()
4242addDataType moduleName name args dctors ctorKind = do
4343 env <- getEnv
44− putEnv $ env { types = M.insert (Qualified (Just moduleName) name) (ctorKind, Data) (types env) }
44+ putEnv $ env { types = M.insert (Qualified (Just moduleName) name) ctorKind (types env) }
4545 forM_ dctors $ \(dctor, tys) ->
4646 rethrow (("Error in data constructor " ++ show dctor ++ ":\n") ++) $
4747 addDataConstructor moduleName name args dctor tys
@@ -57,15 +57,9 @@ addDataConstructor moduleName name args dctor tys = do
5757addTypeSynonym :: ModuleName -> ProperName -> [String] -> Type -> Kind -> Check ()
5858addTypeSynonym moduleName name args ty kind = do
5959 env <- getEnv
60− putEnv $ env { types = M.insert (Qualified (Just moduleName) name) (kind, TypeSynonym) (types env)
60+ putEnv $ env { types = M.insert (Qualified (Just moduleName) name) kind (types env)
6161 , typeSynonyms = M.insert (Qualified (Just moduleName) name) (args, ty) (typeSynonyms env) }
6262
63−typeIsNotDefined :: ModuleName -> ProperName -> Check ()
64−typeIsNotDefined moduleName name = do
65− env <- getEnv
66− guardWith (show name ++ " is already defined") $
67− not $ M.member (Qualified (Just moduleName) name) (types env)
68−
6963valueIsNotDefined :: ModuleName -> Ident -> Check ()
7064valueIsNotDefined moduleName name = do
7165 env <- getEnv
@@ -108,7 +102,6 @@ typeCheckAll :: Maybe ModuleName -> ModuleName -> [Declaration] -> Check [Declar
108102typeCheckAll _ _ [] = return []
109103typeCheckAll mainModuleName moduleName (d@(DataDeclaration name args dctors) : rest) = do
110104 rethrow (("Error in type constructor " ++ show name ++ ":\n") ++) $ do
111− typeIsNotDefined moduleName name
112105 ctorKind <- kindsOf moduleName name args (concatMap snd dctors)
113106 addDataType moduleName name args dctors ctorKind
114107 ds <- typeCheckAll mainModuleName moduleName rest
@@ -119,10 +112,8 @@ typeCheckAll mainModuleName moduleName (d@(DataBindingGroupDeclaration tys) : re
119112 let dataDecls = mapMaybe toDataDecl tys
120113 (syn_ks, data_ks) <- kindsOfAll moduleName syns (map (\(name, args, dctors) -> (name, args, concatMap snd dctors)) dataDecls)
121114 forM_ (zip dataDecls data_ks) $ \((name, args, dctors), ctorKind) -> do
122− typeIsNotDefined moduleName name
123115 addDataType moduleName name args dctors ctorKind
124116 forM_ (zip syns syn_ks) $ \((name, args, ty), kind) -> do
125− typeIsNotDefined moduleName name
126117 addTypeSynonym moduleName name args ty kind
127118 ds <- typeCheckAll mainModuleName moduleName rest
128119 return $ d : ds
@@ -133,7 +124,6 @@ typeCheckAll mainModuleName moduleName (d@(DataBindingGroupDeclaration tys) : re
133124 toDataDecl _ = Nothing
134125typeCheckAll mainModuleName moduleName (d@(TypeSynonymDeclaration name args ty) : rest) = do
135126 rethrow (("Error in type synonym " ++ show name ++ ":\n") ++) $ do
136− typeIsNotDefined moduleName name
137127 kind <- kindsOf moduleName name args [ty]
138128 addTypeSynonym moduleName name args ty kind
139129 ds <- typeCheckAll mainModuleName moduleName rest
@@ -161,8 +151,7 @@ typeCheckAll mainModuleName moduleName (BindingGroupDeclaration vals : rest) = d
161151 return $ d : ds
162152typeCheckAll mainModuleName moduleName (d@(ExternDataDeclaration name kind) : rest) = do
163153 env <- getEnv
164− guardWith (show name ++ " is already defined") $ not $ M.member (Qualified (Just moduleName) name) (types env)
165− putEnv $ env { types = M.insert (Qualified (Just moduleName) name) (kind, TypeSynonym) (types env) }
154+ putEnv $ env { types = M.insert (Qualified (Just moduleName) name) kind (types env) }
166155 ds <- typeCheckAll mainModuleName moduleName rest
167156 return $ d : ds
168157typeCheckAll mainModuleName moduleName (d@(ExternDeclaration importTy name _ ty) : rest) = do
@@ -211,10 +200,8 @@ typeCheckAll mainModuleName currentModule (d@(ImportDeclaration moduleName ident
211200 forM_ pns $ \pn ->
212201 case Qualified (Just moduleName) pn `M.lookup` types env of
213202 Nothing -> throwError (show moduleName ++ "." ++ show pn ++ " is undefined")
214− Just (_, DataAlias _ _) -> return ()
215− Just (k, _) -> do
216− guardWith (show currentModule ++ "." ++ show pn ++ " is already defined") $ Qualified (Just currentModule) pn `M.notMember` types env
217− modifyEnv (\e -> e { types = M.insert (Qualified (Just currentModule) pn) (k, DataAlias moduleName pn) (types e) })
203+ Just k -> do
204+ modifyEnv (\e -> e { types = M.insert (Qualified (Just currentModule) pn) k (types e) })
218205 let keys = map fst . filter (\(_, fn) -> fn `constructs` pn) . M.toList . dataConstructors $ env
219206 forM_ keys $ \dctor ->
220207 case dctor `M.lookup` dataConstructors env of