on master help sign in
Return a non-empty list of errors in Type.Solve and Nitpick.PatternMatches
fa9aba2Evan Czaplicki
compiler/src/Nitpick/PatternMatches.hs+4−3
@@ -21,6 +21,7 @@ import qualified Data.List as List
21import qualified Data.Map as Map
21import qualified Data.Map as Map
22import qualified Data.Maybe as Maybe
22import qualified Data.Maybe as Maybe
23import qualified Data.Name as Name
23import qualified Data.Name as Name
24+import qualified Data.NonEmptyList as NE
24import qualified Data.Utf8 as Utf8
25import qualified Data.Utf8 as Utf8
25
26
26import qualified AST.Canonical as Can
27import qualified AST.Canonical as Can
@@ -202,14 +203,14 @@ data Context
202-- CHECK
203-- CHECK
203
204
204
205
205−check :: Can.Module -> Either [Error] ()
206+check :: Can.Module -> Either (NE.List Error) ()
206check (Can.Module _ _ decls _ _ _ _) =
207check (Can.Module _ _ decls _ _ _ _) =
207 case checkDecls decls [] of
208 case checkDecls decls [] of
208 [] ->
209 [] ->
209 Right ()
210 Right ()
210
211
211− errors ->
212+ e:es ->
212− Left errors
213+ Left (NE.List e es)
213
214
214
215
215
216
compiler/src/Type/Solve.hs+4−3
@@ -10,6 +10,7 @@ import Control.Monad
10import qualified Data.Map.Strict as Map
10import qualified Data.Map.Strict as Map
11import Data.Map.Strict ((!))
11import Data.Map.Strict ((!))
12import qualified Data.Name as Name
12import qualified Data.Name as Name
13+import qualified Data.NonEmptyList as NE
13import qualified Data.Vector as Vector
14import qualified Data.Vector as Vector
14import qualified Data.Vector.Mutable as MVector
15import qualified Data.Vector.Mutable as MVector
15
16
@@ -29,7 +30,7 @@ import qualified Type.UnionFind as UF
29-- RUN SOLVER
30-- RUN SOLVER
30
31
31
32
32−run :: Constraint -> IO (Either [Error.Error] (Map.Map Name.Name Can.Annotation))
33+run :: Constraint -> IO (Either (NE.List Error.Error) (Map.Map Name.Name Can.Annotation))
33run constraint =
34run constraint =
34 do pools <- MVector.replicate 8 []
35 do pools <- MVector.replicate 8 []
35
36
@@ -40,8 +41,8 @@ run constraint =
40 [] ->
41 [] ->
41 Right <$> traverse Type.toAnnotation env
42 Right <$> traverse Type.toAnnotation env
42
43
43− _ ->
44+ e:es ->
44− return $ Left errors
45+ return $ Left (NE.List e es)
45
46
46
47
47
48