@@ -27,7 +27,6 @@ import Language.PureScript.TypeChecker.Synonyms as T
2727
2828import Data.Maybe
2929import Data.List (nub, (\\), find, intercalate)
30−import Data.Monoid ((<>))
3130import Data.Foldable (for_)
3231import qualified Data.Map as M
3332
@@ -47,7 +46,7 @@ addDataType moduleName dtype name args dctors ctorKind = do
4746 env <- getEnv
4847 putEnv $ env { types = M.insert (Qualified (Just moduleName) name) (ctorKind, DataType args dctors) (types env) }
4948 forM_ dctors $ \(dctor, tys) ->
50− rethrow (strMsg ("Error in data constructor " ++ show dctor) <>) $
49+ rethrow (mkCompileError ("Error in data constructor " ++ show dctor) Nothing `combineErrors`) $
5150 addDataConstructor moduleName dtype name (map fst args) dctor tys
5251
5352addDataConstructor :: ModuleName -> DataDeclType -> ProperName -> [String] -> ProperName -> [Type] -> Check ()
@@ -134,7 +133,7 @@ typeCheckAll mainModuleName moduleName exps = go
134133 go :: [Declaration] -> Check [Declaration]
135134 go [] = return []
136135 go (DataDeclaration dtype name args dctors : rest) = do
137− rethrow (strMsg ("Error in type constructor " ++ show name) <>) $ do
136+ rethrow (mkCompileError ("Error in type constructor " ++ show name) Nothing `combineErrors`) $ do
138137 when (dtype == Newtype) $ checkNewtype dctors
139138 checkDuplicateTypeArguments $ map fst args
140139 ctorKind <- kindsOf True moduleName name args (concatMap snd dctors)
@@ -148,7 +147,7 @@ typeCheckAll mainModuleName moduleName exps = go
148147 checkNewtype [(_, _)] = throwError . strMsg $ "newtypes constructors must have a single argument"
149148 checkNewtype _ = throwError . strMsg $ "newtypes must have a single constructor"
150149 go (d@(DataBindingGroupDeclaration tys) : rest) = do
151− rethrow (strMsg "Error in data binding group" <>) $ do
150+ rethrow (mkCompileError "Error in data binding group" Nothing `combineErrors`) $ do
152151 let syns = mapMaybe toTypeSynonym tys
153152 let dataDecls = mapMaybe toDataDecl tys
154153 (syn_ks, data_ks) <- kindsOfAll moduleName syns (map (\(_, name, args, dctors) -> (name, args, concatMap snd dctors)) dataDecls)
@@ -170,7 +169,7 @@ typeCheckAll mainModuleName moduleName exps = go
170169 toDataDecl (PositionedDeclaration _ _ d') = toDataDecl d'
171170 toDataDecl _ = Nothing
172171 go (TypeSynonymDeclaration name args ty : rest) = do
173− rethrow (strMsg ("Error in type synonym " ++ show name) <>) $ do
172+ rethrow (mkCompileError ("Error in type synonym " ++ show name) Nothing `combineErrors`) $ do
174173 checkDuplicateTypeArguments $ map fst args
175174 kind <- kindsOf False moduleName name args [ty]
176175 let args' = args `withKinds` kind
@@ -179,7 +178,7 @@ typeCheckAll mainModuleName moduleName exps = go
179178 return $ TypeSynonymDeclaration name args ty : ds
180179 go (TypeDeclaration _ _ : _) = error "Type declarations should have been removed"
181180 go (ValueDeclaration name nameKind [] (Right val) : rest) = do
182− d <- rethrow (strMsg ("Error in declaration " ++ show name) <>) $ do
181+ d <- rethrow (mkCompileError ("Error in declaration " ++ show name) Nothing `combineErrors`) $ do
183182 valueIsNotDefined moduleName name
184183 [(_, (val', ty))] <- typesOf mainModuleName moduleName [(name, val)]
185184 addValue moduleName name ty nameKind
@@ -188,7 +187,7 @@ typeCheckAll mainModuleName moduleName exps = go
188187 return $ d : ds
189188 go (ValueDeclaration{} : _) = error "Binders were not desugared"
190189 go (BindingGroupDeclaration vals : rest) = do
191− d <- rethrow (strMsg ("Error in binding group " ++ show (map (\(ident, _, _) -> ident) vals)) <>) $ do
190+ d <- rethrow (mkCompileError ("Error in binding group " ++ show (map (\(ident, _, _) -> ident) vals)) Nothing `combineErrors`) $ do
192191 forM_ (map (\(ident, _, _) -> ident) vals) $ \name ->
193192 valueIsNotDefined moduleName name
194193 tys <- typesOf mainModuleName moduleName $ map (\(ident, _, ty) -> (ident, ty)) vals
@@ -208,7 +207,7 @@ typeCheckAll mainModuleName moduleName exps = go
208207 ds <- go rest
209208 return $ d : ds
210209 go (d@(ExternDeclaration importTy name _ ty) : rest) = do
211− rethrow (strMsg ("Error in foreign import declaration " ++ show name) <>) $ do
210+ rethrow (mkCompileError ("Error in foreign import declaration " ++ show name) Nothing `combineErrors`) $ do
212211 env <- getEnv
213212 kind <- kindOf moduleName ty
214213 guardWith (strMsg "Expected kind *") $ kind == Star