@@ -42,13 +42,13 @@ import Language.PureScript.TypeClassDictionaries
42import Language.PureScript.Environment
42import Language.PureScript.Environment
43import Language.PureScript.Errors
43import Language.PureScript.Errors
45−addDataType :: ModuleName -> DataDeclType -> ProperName -> [String] -> [(ProperName, [Type])] -> Kind -> Check ()
45+addDataType :: ModuleName -> DataDeclType -> ProperName -> [(String, Maybe Kind)] -> [(ProperName, [Type])] -> Kind -> Check ()
46addDataType moduleName dtype name args dctors ctorKind = do
46addDataType moduleName dtype name args dctors ctorKind = do
47 env <- getEnv
47 env <- getEnv
48 putEnv $ env { types = M.insert (Qualified (Just moduleName) name) (ctorKind, DataType args dctors) (types env) }
48 putEnv $ env { types = M.insert (Qualified (Just moduleName) name) (ctorKind, DataType args dctors) (types env) }
49 forM_ dctors $ \(dctor, tys) ->
49 forM_ dctors $ \(dctor, tys) ->
50 rethrow (strMsg ("Error in data constructor " ++ show dctor) <>) $
50 rethrow (strMsg ("Error in data constructor " ++ show dctor) <>) $
51− addDataConstructor moduleName dtype name args dctor tys
51+ addDataConstructor moduleName dtype name (map fst args) dctor tys
53addDataConstructor :: ModuleName -> DataDeclType -> ProperName -> [String] -> ProperName -> [Type] -> Check ()
53addDataConstructor :: ModuleName -> DataDeclType -> ProperName -> [String] -> ProperName -> [Type] -> Check ()
54addDataConstructor moduleName dtype name args dctor tys = do
54addDataConstructor moduleName dtype name args dctor tys = do
@@ -58,7 +58,7 @@ addDataConstructor moduleName dtype name args dctor tys = do
58 let polyType = mkForAll args dctorTy
58 let polyType = mkForAll args dctorTy
59 putEnv $ env { dataConstructors = M.insert (Qualified (Just moduleName) dctor) (dtype, name, polyType) (dataConstructors env) }
59 putEnv $ env { dataConstructors = M.insert (Qualified (Just moduleName) dctor) (dtype, name, polyType) (dataConstructors env) }
61−addTypeSynonym :: ModuleName -> ProperName -> [String] -> Type -> Kind -> Check ()
61+addTypeSynonym :: ModuleName -> ProperName -> [(String, Maybe Kind)] -> Type -> Kind -> Check ()
62addTypeSynonym moduleName name args ty kind = do
62addTypeSynonym moduleName name args ty kind = do
63 env <- getEnv
63 env <- getEnv
64 putEnv $ env { types = M.insert (Qualified (Just moduleName) name) (kind, TypeSynonym) (types env)
64 putEnv $ env { types = M.insert (Qualified (Just moduleName) name) (kind, TypeSynonym) (types env)
@@ -76,7 +76,7 @@ addValue moduleName name ty nameKind = do
76 env <- getEnv
76 env <- getEnv
77 putEnv (env { names = M.insert (moduleName, name) (ty, nameKind, Defined) (names env) })
77 putEnv (env { names = M.insert (moduleName, name) (ty, nameKind, Defined) (names env) })
79−addTypeClass :: ModuleName -> ProperName -> [String] -> [(Qualified ProperName, [Type])] -> [Declaration] -> Check ()
79+addTypeClass :: ModuleName -> ProperName -> [(String, Maybe Kind)] -> [(Qualified ProperName, [Type])] -> [Declaration] -> Check ()
80addTypeClass moduleName pn args implies ds =
80addTypeClass moduleName pn args implies ds =
81 let members = map toPair ds in
81 let members = map toPair ds in
82 modify $ \st -> st { checkEnv = (checkEnv st) { typeClasses = M.insert (Qualified (Just moduleName) pn) (args, members, implies) (typeClasses . checkEnv $ st) } }
82 modify $ \st -> st { checkEnv = (checkEnv st) { typeClasses = M.insert (Qualified (Just moduleName) pn) (args, members, implies) (typeClasses . checkEnv $ st) } }
@@ -129,7 +129,7 @@ typeCheckAll mainModuleName moduleName exps = go
129 when (dtype == Newtype) $ checkNewtype dctors
129 when (dtype == Newtype) $ checkNewtype dctors
130 checkDuplicateTypeArguments $ map fst args
130 checkDuplicateTypeArguments $ map fst args
131 ctorKind <- kindsOf True moduleName name args (concatMap snd dctors)
131 ctorKind <- kindsOf True moduleName name args (concatMap snd dctors)
132− addDataType moduleName dtype name (map fst args) dctors ctorKind
132+ addDataType moduleName dtype name args dctors ctorKind
133 ds <- go rest
133 ds <- go rest
134 return $ d : ds
134 return $ d : ds
@@ -144,10 +144,10 @@ typeCheckAll mainModuleName moduleName exps = go
144 (syn_ks, data_ks) <- kindsOfAll moduleName syns (map (\(_, name, args, dctors) -> (name, args, concatMap snd dctors)) dataDecls)
144 (syn_ks, data_ks) <- kindsOfAll moduleName syns (map (\(_, name, args, dctors) -> (name, args, concatMap snd dctors)) dataDecls)
145 forM_ (zip dataDecls data_ks) $ \((dtype, name, args, dctors), ctorKind) -> do
145 forM_ (zip dataDecls data_ks) $ \((dtype, name, args, dctors), ctorKind) -> do
146 checkDuplicateTypeArguments $ map fst args
146 checkDuplicateTypeArguments $ map fst args
147− addDataType moduleName dtype name (map fst args) dctors ctorKind
147+ addDataType moduleName dtype name args dctors ctorKind
148 forM_ (zip syns syn_ks) $ \((name, args, ty), kind) -> do
148 forM_ (zip syns syn_ks) $ \((name, args, ty), kind) -> do
149 checkDuplicateTypeArguments $ map fst args
149 checkDuplicateTypeArguments $ map fst args
150− addTypeSynonym moduleName name (map fst args) ty kind
150+ addTypeSynonym moduleName name args ty kind
151 ds <- go rest
151 ds <- go rest
152 return $ d : ds
152 return $ d : ds
@@ -161,7 +161,7 @@ typeCheckAll mainModuleName moduleName exps = go
161 rethrow (strMsg ("Error in type synonym " ++ show name) <>) $ do
161 rethrow (strMsg ("Error in type synonym " ++ show name) <>) $ do
162 checkDuplicateTypeArguments $ map fst args
162 checkDuplicateTypeArguments $ map fst args
163 kind <- kindsOf False moduleName name args [ty]
163 kind <- kindsOf False moduleName name args [ty]
164− addTypeSynonym moduleName name (map fst args) ty kind
164+ addTypeSynonym moduleName name args ty kind
165 ds <- go rest
165 ds <- go rest
166 return $ d : ds
166 return $ d : ds
167 go (TypeDeclaration _ _ : _) = error "Type declarations should have been removed"
167 go (TypeDeclaration _ _ : _) = error "Type declarations should have been removed"
@@ -216,7 +216,7 @@ typeCheckAll mainModuleName moduleName exps = go
216 ds <- go rest
216 ds <- go rest
217 return $ d : ds
217 return $ d : ds
218 go (d@(TypeClassDeclaration pn args implies tys) : rest) = do
218 go (d@(TypeClassDeclaration pn args implies tys) : rest) = do
219− addTypeClass moduleName pn (map fst args) implies tys
219+ addTypeClass moduleName pn args implies tys
220 ds <- go rest
220 ds <- go rest
221 return $ d : ds
221 return $ d : ds
222 go (TypeInstanceDeclaration dictName deps className tys _ : rest) =
222 go (TypeInstanceDeclaration dictName deps className tys _ : rest) =