@@ -26,7 +26,6 @@ import Language.PureScript.TypeChecker.Types as T
2626import Language.PureScript.TypeChecker.Synonyms as T
2727
2828import Data.Maybe
29- import Data.Monoid ((<>) )
3029import qualified Data.Map as M
3130import Control.Monad.State
3231import Control.Monad.Error
@@ -37,13 +36,14 @@ import Language.PureScript.Kinds
3736import Language.PureScript.Declarations
3837import Language.PureScript.TypeClassDictionaries
3938import Language.PureScript.Environment
39+ import Language.PureScript.Pretty.Types
4040
4141addDataType :: ModuleName -> ProperName -> [String ] -> [(ProperName , [Type ])] -> Kind -> Check ()
4242addDataType moduleName name args dctors ctorKind = do
4343 env <- getEnv
4444 putEnv $ env { types = M. insert (Qualified (Just moduleName) name) (ctorKind, DataType args dctors) (types env) }
4545 forM_ dctors $ \ (dctor, tys) ->
46- rethrow (strMsg (" Error in data constructor " ++ show dctor) <> ) $
46+ rethrow ((" Error in data constructor " ++ show dctor ++ " : \n " ) ++ ) $
4747 addDataConstructor moduleName name args dctor tys
4848
4949addDataConstructor :: ModuleName -> ProperName -> [String ] -> ProperName -> [Type ] -> Check ()
@@ -64,7 +64,7 @@ valueIsNotDefined :: ModuleName -> Ident -> Check ()
6464valueIsNotDefined moduleName name = do
6565 env <- getEnv
6666 case M. lookup (moduleName, name) (names env) of
67- Just _ -> throwError . strMsg $ show name ++ " is already defined"
67+ Just _ -> throwError $ show name ++ " is already defined"
6868 Nothing -> return ()
6969
7070addValue :: ModuleName -> Ident -> Type -> NameKind -> Check ()
@@ -85,10 +85,10 @@ checkTypeClassInstance :: ModuleName -> Type -> Check ()
8585checkTypeClassInstance _ (TypeVar _) = return ()
8686checkTypeClassInstance _ (TypeConstructor ctor) = do
8787 env <- getEnv
88- when (ctor `M.member` typeSynonyms env) . throwError . strMsg $ " Type synonym instances are disallowed"
88+ when (ctor `M.member` typeSynonyms env) $ throwError " Type synonym instances are disallowed"
8989 return ()
9090checkTypeClassInstance m (TypeApp t1 t2) = checkTypeClassInstance m t1 >> checkTypeClassInstance m t2
91- checkTypeClassInstance _ ty = throwError $ mkUnifyErrorStack " Type class instance head is invalid. " ( Just ( TypeError ty))
91+ checkTypeClassInstance _ ty = throwError $ " Type class instance head is invalid: " ++ prettyPrintType ty
9292
9393-- |
9494-- Type check all declarations in a module
@@ -106,13 +106,13 @@ checkTypeClassInstance _ ty = throwError $ mkUnifyErrorStack "Type class instanc
106106typeCheckAll :: Maybe ModuleName -> ModuleName -> [Declaration ] -> Check [Declaration ]
107107typeCheckAll _ _ [] = return []
108108typeCheckAll mainModuleName moduleName (d@ (DataDeclaration name args dctors) : rest) = do
109- rethrow (strMsg (" Error in type constructor " ++ show name) <> ) $ do
109+ rethrow ((" Error in type constructor " ++ show name ++ " : \n " ) ++ ) $ do
110110 ctorKind <- kindsOf True moduleName name args (concatMap snd dctors)
111111 addDataType moduleName name args dctors ctorKind
112112 ds <- typeCheckAll mainModuleName moduleName rest
113113 return $ d : ds
114114typeCheckAll mainModuleName moduleName (d@ (DataBindingGroupDeclaration tys) : rest) = do
115- rethrow (strMsg " Error in data binding group" <> ) $ do
115+ rethrow (" Error in data binding group: \n " ++ ) $ do
116116 let syns = mapMaybe toTypeSynonym tys
117117 let dataDecls = mapMaybe toDataDecl tys
118118 (syn_ks, data_ks) <- kindsOfAll moduleName syns (map (\ (name, args, dctors) -> (name, args, concatMap snd dctors)) dataDecls)
@@ -128,14 +128,14 @@ typeCheckAll mainModuleName moduleName (d@(DataBindingGroupDeclaration tys) : re
128128 toDataDecl (DataDeclaration nm args dctors) = Just (nm, args, dctors)
129129 toDataDecl _ = Nothing
130130typeCheckAll mainModuleName moduleName (d@ (TypeSynonymDeclaration name args ty) : rest) = do
131- rethrow (strMsg (" Error in type synonym " ++ show name) <> ) $ do
131+ rethrow ((" Error in type synonym " ++ show name ++ " : \n " ) ++ ) $ do
132132 kind <- kindsOf False moduleName name args [ty]
133133 addTypeSynonym moduleName name args ty kind
134134 ds <- typeCheckAll mainModuleName moduleName rest
135135 return $ d : ds
136136typeCheckAll _ _ (TypeDeclaration _ _ : _) = error " Type declarations should have been removed"
137137typeCheckAll mainModuleName moduleName (ValueDeclaration name nameKind [] Nothing val : rest) = do
138- d <- rethrow (strMsg (" Error in declaration " ++ show name) <> ) $ do
138+ d <- rethrow ((" Error in declaration " ++ show name ++ " : \n " ) ++ ) $ do
139139 valueIsNotDefined moduleName name
140140 [(_, (val', ty))] <- typesOf mainModuleName moduleName [(name, val)]
141141 addValue moduleName name ty nameKind
@@ -144,7 +144,7 @@ typeCheckAll mainModuleName moduleName (ValueDeclaration name nameKind [] Nothin
144144 return $ d : ds
145145typeCheckAll _ _ (ValueDeclaration {} : _) = error " Binders were not desugared"
146146typeCheckAll mainModuleName moduleName (BindingGroupDeclaration vals : rest) = do
147- d <- rethrow (strMsg (" Error in binding group " ++ show (map (\ (ident, _, _) -> ident) vals)) <> ) $ do
147+ d <- rethrow ((" Error in binding group " ++ show (map (\ (ident, _, _) -> ident) vals) ++ " : \n " ) ++ ) $ do
148148 forM_ (map (\ (ident, _, _) -> ident) vals) $ \ name ->
149149 valueIsNotDefined moduleName name
150150 tys <- typesOf mainModuleName moduleName $ map (\ (ident, _, ty) -> (ident, ty)) vals
@@ -160,19 +160,19 @@ typeCheckAll mainModuleName moduleName (d@(ExternDataDeclaration name kind) : re
160160 ds <- typeCheckAll mainModuleName moduleName rest
161161 return $ d : ds
162162typeCheckAll mainModuleName moduleName (d@ (ExternDeclaration importTy name _ ty) : rest) = do
163- rethrow (strMsg (" Error in foreign import declaration " ++ show name) <> ) $ do
163+ rethrow ((" Error in foreign import declaration " ++ show name ++ " : \n " ) ++ ) $ do
164164 env <- getEnv
165165 kind <- kindOf moduleName ty
166- guardWith (strMsg " Expected kind *" ) $ kind == Star
166+ guardWith " Expected kind *" $ kind == Star
167167 case M. lookup (moduleName, name) (names env) of
168- Just _ -> throwError . strMsg $ show name ++ " is already defined"
168+ Just _ -> throwError $ show name ++ " is already defined"
169169 Nothing -> putEnv (env { names = M. insert (moduleName, name) (ty, Extern importTy) (names env) })
170170 ds <- typeCheckAll mainModuleName moduleName rest
171171 return $ d : ds
172172typeCheckAll mainModuleName moduleName (d@ (FixityDeclaration _ name) : rest) = do
173173 ds <- typeCheckAll mainModuleName moduleName rest
174174 env <- getEnv
175- guardWith (strMsg ( " Fixity declaration with no binding: " ++ name) ) $ M. member (moduleName, Op name) $ names env
175+ guardWith (" Fixity declaration with no binding: " ++ name) $ M. member (moduleName, Op name) $ names env
176176 return $ d : ds
177177typeCheckAll mainModuleName currentModule (d@ (ImportDeclaration moduleName _ _) : rest) = do
178178 env <- getEnv
0 commit comments