{-# LANGUAGE Safe #-}
module Test.TrackedErrors (tests) where
import Base.CompilerError
import Base.TrackedErrors
tests :: [IO (TrackedErrors ())]
tests :: [IO (TrackedErrors ())]
tests = [
Char -> TrackedErrorsIO Char -> IO (TrackedErrors ())
forall a.
(Eq a, Show a) =>
a -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkSuccess Char
'a' (Char -> TrackedErrorsIO Char
forall (m :: * -> *) a. Monad m => a -> m a
return Char
'a'),
String -> TrackedErrorsIO Char -> IO (TrackedErrors ())
forall a.
(Eq a, Show a) =>
String -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkError String
"error\n" (String -> TrackedErrorsIO Char
forall (m :: * -> *) a. ErrorContextM m => String -> m a
compilerErrorM String
"error" :: TrackedErrorsIO Char),
String -> TrackedErrorsIO Char -> IO (TrackedErrors ())
forall a.
(Eq a, Show a) =>
String -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkError String
"" (TrackedErrorsIO Char
forall (m :: * -> *) a. CollectErrorsM m => m a
emptyErrorM :: TrackedErrorsIO Char),
String -> TrackedErrorsIO String -> IO (TrackedErrors ())
forall a.
(Eq a, Show a) =>
a -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkSuccess [Char
'a',Char
'b'] ([TrackedErrorsIO Char] -> TrackedErrorsIO String
forall (m :: * -> *) (f :: * -> *) a.
(CollectErrorsM m, Foldable f) =>
f (m a) -> m [a]
collectAllM [Char -> TrackedErrorsIO Char
forall (m :: * -> *) a. Monad m => a -> m a
return Char
'a',Char -> TrackedErrorsIO Char
forall (m :: * -> *) a. Monad m => a -> m a
return Char
'b']),
String -> TrackedErrorsIO String -> IO (TrackedErrors ())
forall a.
(Eq a, Show a) =>
a -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkSuccess [] ([TrackedErrorsIO Char] -> TrackedErrorsIO String
forall (m :: * -> *) (f :: * -> *) a.
(CollectErrorsM m, Foldable f) =>
f (m a) -> m [a]
collectAllM [] :: TrackedErrorsIO [Char]),
String -> TrackedErrorsIO String -> IO (TrackedErrors ())
forall a.
(Eq a, Show a) =>
String -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkError String
"error1\nerror2\n" ([TrackedErrorsIO Char] -> TrackedErrorsIO String
forall (m :: * -> *) (f :: * -> *) a.
(CollectErrorsM m, Foldable f) =>
f (m a) -> m [a]
collectAllM [String -> TrackedErrorsIO Char
forall (m :: * -> *) a. ErrorContextM m => String -> m a
compilerErrorM String
"error1",Char -> TrackedErrorsIO Char
forall (m :: * -> *) a. Monad m => a -> m a
return Char
'b',String -> TrackedErrorsIO Char
forall (m :: * -> *) a. ErrorContextM m => String -> m a
compilerErrorM String
"error2"]),
String -> TrackedErrorsIO String -> IO (TrackedErrors ())
forall a.
(Eq a, Show a) =>
a -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkSuccess String
"ab" ([TrackedErrorsIO Char] -> TrackedErrorsIO String
forall (m :: * -> *) (f :: * -> *) a.
(CollectErrorsM m, Foldable f) =>
f (m a) -> m [a]
collectAnyM [Char -> TrackedErrorsIO Char
forall (m :: * -> *) a. Monad m => a -> m a
return Char
'a',Char -> TrackedErrorsIO Char
forall (m :: * -> *) a. Monad m => a -> m a
return Char
'b']),
String -> TrackedErrorsIO String -> IO (TrackedErrors ())
forall a.
(Eq a, Show a) =>
a -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkSuccess String
"" ([TrackedErrorsIO Char] -> TrackedErrorsIO String
forall (m :: * -> *) (f :: * -> *) a.
(CollectErrorsM m, Foldable f) =>
f (m a) -> m [a]
collectAnyM [] :: TrackedErrorsIO [Char]),
String -> TrackedErrorsIO String -> IO (TrackedErrors ())
forall a.
(Eq a, Show a) =>
a -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkSuccess String
"b" ([TrackedErrorsIO Char] -> TrackedErrorsIO String
forall (m :: * -> *) (f :: * -> *) a.
(CollectErrorsM m, Foldable f) =>
f (m a) -> m [a]
collectAnyM [String -> TrackedErrorsIO Char
forall (m :: * -> *) a. ErrorContextM m => String -> m a
compilerErrorM String
"error1",Char -> TrackedErrorsIO Char
forall (m :: * -> *) a. Monad m => a -> m a
return Char
'b',String -> TrackedErrorsIO Char
forall (m :: * -> *) a. ErrorContextM m => String -> m a
compilerErrorM String
"error2"]),
Char -> TrackedErrorsIO Char -> IO (TrackedErrors ())
forall a.
(Eq a, Show a) =>
a -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkSuccess Char
'a' ([TrackedErrorsIO Char] -> TrackedErrorsIO Char
forall (m :: * -> *) (f :: * -> *) a.
(CollectErrorsM m, Foldable f) =>
f (m a) -> m a
collectFirstM [Char -> TrackedErrorsIO Char
forall (m :: * -> *) a. Monad m => a -> m a
return Char
'a',Char -> TrackedErrorsIO Char
forall (m :: * -> *) a. Monad m => a -> m a
return Char
'b']),
String -> TrackedErrorsIO Char -> IO (TrackedErrors ())
forall a.
(Eq a, Show a) =>
String -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkError String
"" ([TrackedErrorsIO Char] -> TrackedErrorsIO Char
forall (m :: * -> *) (f :: * -> *) a.
(CollectErrorsM m, Foldable f) =>
f (m a) -> m a
collectFirstM [] :: TrackedErrorsIO Char),
Char -> TrackedErrorsIO Char -> IO (TrackedErrors ())
forall a.
(Eq a, Show a) =>
a -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkSuccess Char
'b' ([TrackedErrorsIO Char] -> TrackedErrorsIO Char
forall (m :: * -> *) (f :: * -> *) a.
(CollectErrorsM m, Foldable f) =>
f (m a) -> m a
collectFirstM [String -> TrackedErrorsIO Char
forall (m :: * -> *) a. ErrorContextM m => String -> m a
compilerErrorM String
"error1",Char -> TrackedErrorsIO Char
forall (m :: * -> *) a. Monad m => a -> m a
return Char
'b',String -> TrackedErrorsIO Char
forall (m :: * -> *) a. ErrorContextM m => String -> m a
compilerErrorM String
"error2"]),
String -> () -> TrackedErrorsIO () -> IO (TrackedErrors ())
forall a.
(Eq a, Show a) =>
String -> a -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkSuccessAndWarnings String
"warning1\nwarning2\n" ()
(String -> TrackedErrorsIO ()
forall (m :: * -> *). ErrorContextM m => String -> m ()
compilerWarningM String
"warning1" TrackedErrorsIO () -> TrackedErrorsIO () -> TrackedErrorsIO ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> () -> TrackedErrorsIO ()
forall (m :: * -> *) a. Monad m => a -> m a
return () TrackedErrorsIO () -> TrackedErrorsIO () -> TrackedErrorsIO ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> String -> TrackedErrorsIO ()
forall (m :: * -> *). ErrorContextM m => String -> m ()
compilerWarningM String
"warning2"),
String -> String -> TrackedErrorsIO () -> IO (TrackedErrors ())
forall a.
(Eq a, Show a) =>
String -> String -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkErrorAndWarnings String
"warning1\n" String
"error\n"
(String -> TrackedErrorsIO ()
forall (m :: * -> *). ErrorContextM m => String -> m ()
compilerWarningM String
"warning1" TrackedErrorsIO ()
-> TrackedErrorsT IO Any -> TrackedErrorsT IO Any
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> String -> TrackedErrorsT IO Any
forall (m :: * -> *) a. ErrorContextM m => String -> m a
compilerErrorM String
"error" TrackedErrorsT IO Any -> TrackedErrorsIO () -> TrackedErrorsIO ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> String -> TrackedErrorsIO ()
forall (m :: * -> *). ErrorContextM m => String -> m ()
compilerWarningM String
"warning2" :: TrackedErrorsIO ()),
String -> TrackedErrorsIO String -> IO (TrackedErrors ())
forall a.
(Eq a, Show a) =>
a -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkSuccess [Char
'a',Char
'b'] ([TrackedErrorsIO Char] -> TrackedErrorsIO String
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence [Char -> TrackedErrorsIO Char
forall (m :: * -> *) a. Monad m => a -> m a
return Char
'a',Char -> TrackedErrorsIO Char
forall (m :: * -> *) a. Monad m => a -> m a
return Char
'b']),
String -> TrackedErrorsIO String -> IO (TrackedErrors ())
forall a.
(Eq a, Show a) =>
a -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkSuccess [] ([TrackedErrorsIO Char] -> TrackedErrorsIO String
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence [] :: TrackedErrorsIO [Char]),
String -> TrackedErrorsIO String -> IO (TrackedErrors ())
forall a.
(Eq a, Show a) =>
String -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkError String
"error1\n" ([TrackedErrorsIO Char] -> TrackedErrorsIO String
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence [String -> TrackedErrorsIO Char
forall (m :: * -> *) a. ErrorContextM m => String -> m a
compilerErrorM String
"error1",Char -> TrackedErrorsIO Char
forall (m :: * -> *) a. Monad m => a -> m a
return Char
'b',String -> TrackedErrorsIO Char
forall (m :: * -> *) a. ErrorContextM m => String -> m a
compilerErrorM String
"error2"]),
Char -> TrackedErrorsIO Char -> IO (TrackedErrors ())
forall a.
(Eq a, Show a) =>
a -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkSuccess Char
'a' (Char -> TrackedErrorsIO Char
forall (m :: * -> *) a. Monad m => a -> m a
return Char
'a' TrackedErrorsIO Char -> String -> TrackedErrorsIO Char
forall (m :: * -> *) a. ErrorContextM m => m a -> String -> m a
`withContextM` String
"message"),
String -> TrackedErrorsIO () -> IO (TrackedErrors ())
forall a.
(Eq a, Show a) =>
String -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkError String
"message\n error\n" (String -> TrackedErrorsIO ()
forall (m :: * -> *) a. ErrorContextM m => String -> m a
compilerErrorM String
"error" TrackedErrorsIO () -> String -> TrackedErrorsIO ()
forall (m :: * -> *) a. ErrorContextM m => m a -> String -> m a
`withContextM` String
"message" :: TrackedErrorsIO ()),
String -> () -> TrackedErrorsIO () -> IO (TrackedErrors ())
forall a.
(Eq a, Show a) =>
String -> a -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkSuccessAndWarnings String
"message\n warning\n" ()
(String -> TrackedErrorsIO ()
forall (m :: * -> *). ErrorContextM m => String -> m ()
compilerWarningM String
"warning" TrackedErrorsIO () -> String -> TrackedErrorsIO ()
forall (m :: * -> *) a. ErrorContextM m => m a -> String -> m a
`withContextM` String
"message" :: TrackedErrorsIO ()),
String -> String -> TrackedErrorsIO () -> IO (TrackedErrors ())
forall a.
(Eq a, Show a) =>
String -> String -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkErrorAndWarnings String
"message\n warning\n" String
"message\n error\n"
((String -> TrackedErrorsIO ()
forall (m :: * -> *). ErrorContextM m => String -> m ()
compilerWarningM String
"warning" TrackedErrorsIO () -> TrackedErrorsIO () -> TrackedErrorsIO ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> String -> TrackedErrorsIO ()
forall (m :: * -> *) a. ErrorContextM m => String -> m a
compilerErrorM String
"error") TrackedErrorsIO () -> String -> TrackedErrorsIO ()
forall (m :: * -> *) a. ErrorContextM m => m a -> String -> m a
`withContextM` String
"message" :: TrackedErrorsIO ()),
String -> () -> TrackedErrorsIO () -> IO (TrackedErrors ())
forall a.
(Eq a, Show a) =>
String -> a -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkSuccessAndWarnings String
"" () (() -> TrackedErrorsIO ()
forall (m :: * -> *) a. Monad m => a -> m a
return () TrackedErrorsIO () -> String -> TrackedErrorsIO ()
forall (m :: * -> *) a. ErrorContextM m => m a -> String -> m a
`withContextM` String
"message"),
String -> String -> TrackedErrorsIO () -> IO (TrackedErrors ())
forall a.
(Eq a, Show a) =>
String -> String -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkErrorAndWarnings String
"" String
"message\n" (TrackedErrorsIO ()
forall (m :: * -> *) a. CollectErrorsM m => m a
emptyErrorM TrackedErrorsIO () -> String -> TrackedErrorsIO ()
forall (m :: * -> *) a. ErrorContextM m => m a -> String -> m a
`withContextM` String
"message" :: TrackedErrorsIO ()),
Char -> TrackedErrorsIO Char -> IO (TrackedErrors ())
forall a.
(Eq a, Show a) =>
a -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkSuccess Char
'a' (Char -> TrackedErrorsIO Char
forall (m :: * -> *) a. Monad m => a -> m a
return Char
'a' TrackedErrorsIO Char -> String -> TrackedErrorsIO Char
forall (m :: * -> *) a. ErrorContextM m => m a -> String -> m a
`summarizeErrorsM` String
"message"),
String -> TrackedErrorsIO () -> IO (TrackedErrors ())
forall a.
(Eq a, Show a) =>
String -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkError String
"message\n error\n" (String -> TrackedErrorsIO ()
forall (m :: * -> *) a. ErrorContextM m => String -> m a
compilerErrorM String
"error" TrackedErrorsIO () -> String -> TrackedErrorsIO ()
forall (m :: * -> *) a. ErrorContextM m => m a -> String -> m a
`summarizeErrorsM` String
"message" :: TrackedErrorsIO ()),
String -> () -> TrackedErrorsIO () -> IO (TrackedErrors ())
forall a.
(Eq a, Show a) =>
String -> a -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkSuccessAndWarnings String
"warning\n" ()
(String -> TrackedErrorsIO ()
forall (m :: * -> *). ErrorContextM m => String -> m ()
compilerWarningM String
"warning" TrackedErrorsIO () -> String -> TrackedErrorsIO ()
forall (m :: * -> *) a. ErrorContextM m => m a -> String -> m a
`summarizeErrorsM` String
"message" :: TrackedErrorsIO ()),
String -> String -> TrackedErrorsIO () -> IO (TrackedErrors ())
forall a.
(Eq a, Show a) =>
String -> String -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkErrorAndWarnings String
"warning\n" String
"message\n error\n"
((String -> TrackedErrorsIO ()
forall (m :: * -> *). ErrorContextM m => String -> m ()
compilerWarningM String
"warning" TrackedErrorsIO () -> TrackedErrorsIO () -> TrackedErrorsIO ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> String -> TrackedErrorsIO ()
forall (m :: * -> *) a. ErrorContextM m => String -> m a
compilerErrorM String
"error") TrackedErrorsIO () -> String -> TrackedErrorsIO ()
forall (m :: * -> *) a. ErrorContextM m => m a -> String -> m a
`summarizeErrorsM` String
"message" :: TrackedErrorsIO ()),
String -> () -> TrackedErrorsIO () -> IO (TrackedErrors ())
forall a.
(Eq a, Show a) =>
String -> a -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkSuccessAndWarnings String
"" () (() -> TrackedErrorsIO ()
forall (m :: * -> *) a. Monad m => a -> m a
return () TrackedErrorsIO () -> String -> TrackedErrorsIO ()
forall (m :: * -> *) a. ErrorContextM m => m a -> String -> m a
`summarizeErrorsM` String
"message"),
String -> String -> TrackedErrorsIO () -> IO (TrackedErrors ())
forall a.
(Eq a, Show a) =>
String -> String -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkErrorAndWarnings String
"" String
"message\n" (TrackedErrorsIO ()
forall (m :: * -> *) a. CollectErrorsM m => m a
emptyErrorM TrackedErrorsIO () -> String -> TrackedErrorsIO ()
forall (m :: * -> *) a. ErrorContextM m => m a -> String -> m a
`summarizeErrorsM` String
"message" :: TrackedErrorsIO ()),
String -> () -> TrackedErrorsIO () -> IO (TrackedErrors ())
forall a.
(Eq a, Show a) =>
String -> a -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkSuccessAndWarnings String
"error\n" ()
(TrackedErrors Any -> TrackedErrorsIO ()
forall (m :: * -> *) a.
Monad m =>
TrackedErrors a -> TrackedErrorsT m ()
asCompilerWarnings (TrackedErrors Any -> TrackedErrorsIO ())
-> TrackedErrors Any -> TrackedErrorsIO ()
forall a b. (a -> b) -> a -> b
$ String -> TrackedErrors Any
forall (m :: * -> *) a. ErrorContextM m => String -> m a
compilerErrorM String
"error" :: TrackedErrorsIO ()),
String -> String -> TrackedErrorsIO () -> IO (TrackedErrors ())
forall a.
(Eq a, Show a) =>
String -> String -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkErrorAndWarnings String
"" String
"warning\n"
(TrackedErrors () -> TrackedErrorsIO ()
forall (m :: * -> *) a.
Monad m =>
TrackedErrors a -> TrackedErrorsT m ()
asCompilerError (TrackedErrors () -> TrackedErrorsIO ())
-> TrackedErrors () -> TrackedErrorsIO ()
forall a b. (a -> b) -> a -> b
$ String -> TrackedErrors ()
forall (m :: * -> *). ErrorContextM m => String -> m ()
compilerWarningM String
"warning" :: TrackedErrorsIO ()),
Char -> TrackedErrorsIO Char -> IO (TrackedErrors ())
forall a.
(Eq a, Show a) =>
a -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkSuccess Char
'a' (String -> TrackedErrorsIO ()
forall (m :: * -> *). ErrorContextM m => String -> m ()
compilerBackgroundM String
"background" TrackedErrorsIO () -> TrackedErrorsIO Char -> TrackedErrorsIO Char
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Char -> TrackedErrorsIO Char
forall (m :: * -> *) a. Monad m => a -> m a
return Char
'a'),
String -> TrackedErrorsIO () -> IO (TrackedErrors ())
forall a.
(Eq a, Show a) =>
String -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkError String
"error\n background\n"
(String -> TrackedErrorsIO ()
forall (m :: * -> *). ErrorContextM m => String -> m ()
compilerBackgroundM String
"background" TrackedErrorsIO () -> TrackedErrorsIO () -> TrackedErrorsIO ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> String -> TrackedErrorsIO ()
forall (m :: * -> *) a. ErrorContextM m => String -> m a
compilerErrorM String
"error" :: TrackedErrorsIO ()),
String -> TrackedErrorsIO [()] -> IO (TrackedErrors ())
forall a.
(Eq a, Show a) =>
String -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkError String
"error\n background\n"
([TrackedErrorsIO ()] -> TrackedErrorsIO [()]
forall (m :: * -> *) (f :: * -> *) a.
(CollectErrorsM m, Foldable f) =>
f (m a) -> m [a]
collectAllM [String -> TrackedErrorsIO ()
forall (m :: * -> *). ErrorContextM m => String -> m ()
compilerBackgroundM String
"background"] TrackedErrorsIO [()]
-> TrackedErrorsIO [()] -> TrackedErrorsIO [()]
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> String -> TrackedErrorsIO [()]
forall (m :: * -> *) a. ErrorContextM m => String -> m a
compilerErrorM String
"error" :: TrackedErrorsIO [()]),
String -> TrackedErrorsIO () -> IO (TrackedErrors ())
forall a.
(Eq a, Show a) =>
String -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkError String
"error\n background\n"
([TrackedErrorsIO ()] -> TrackedErrorsIO ()
forall (m :: * -> *) (f :: * -> *) a.
(CollectErrorsM m, Foldable f) =>
f (m a) -> m a
collectFirstM [String -> TrackedErrorsIO ()
forall (m :: * -> *). ErrorContextM m => String -> m ()
compilerBackgroundM String
"background"] TrackedErrorsIO () -> TrackedErrorsIO () -> TrackedErrorsIO ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> String -> TrackedErrorsIO ()
forall (m :: * -> *) a. ErrorContextM m => String -> m a
compilerErrorM String
"error" :: TrackedErrorsIO ()),
Char -> TrackedErrorsIO Char -> IO (TrackedErrors ())
forall a.
(Eq a, Show a) =>
a -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkSuccess Char
'a' ((TrackedErrorsIO () -> TrackedErrorsIO ()
forall (m :: * -> *) a. ErrorContextM m => m a -> m a
resetBackgroundM (TrackedErrorsIO () -> TrackedErrorsIO ())
-> TrackedErrorsIO () -> TrackedErrorsIO ()
forall a b. (a -> b) -> a -> b
$ String -> TrackedErrorsIO ()
forall (m :: * -> *). ErrorContextM m => String -> m ()
compilerBackgroundM String
"background") TrackedErrorsIO () -> TrackedErrorsIO Char -> TrackedErrorsIO Char
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Char -> TrackedErrorsIO Char
forall (m :: * -> *) a. Monad m => a -> m a
return Char
'a'),
String -> TrackedErrorsIO () -> IO (TrackedErrors ())
forall a.
(Eq a, Show a) =>
String -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkError String
"error\n"
((TrackedErrorsIO () -> TrackedErrorsIO ()
forall (m :: * -> *) a. ErrorContextM m => m a -> m a
resetBackgroundM (TrackedErrorsIO () -> TrackedErrorsIO ())
-> TrackedErrorsIO () -> TrackedErrorsIO ()
forall a b. (a -> b) -> a -> b
$ String -> TrackedErrorsIO ()
forall (m :: * -> *). ErrorContextM m => String -> m ()
compilerBackgroundM String
"background") TrackedErrorsIO () -> TrackedErrorsIO () -> TrackedErrorsIO ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> String -> TrackedErrorsIO ()
forall (m :: * -> *) a. ErrorContextM m => String -> m a
compilerErrorM String
"error" :: TrackedErrorsIO ())
]
checkSuccess :: (Eq a, Show a) => a -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkSuccess :: a -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkSuccess a
x TrackedErrorsIO a
y = do
TrackedErrors a
y' <- TrackedErrorsIO a -> IO (TrackedErrors a)
forall (m :: * -> *) a.
Monad m =>
TrackedErrorsT m a -> m (TrackedErrors a)
toTrackedErrors TrackedErrorsIO a
y
if TrackedErrors a -> Bool
forall (t :: (* -> *) -> * -> *) a.
(ErrorContextT t, ErrorContextM (t Identity)) =>
t Identity a -> Bool
isCompilerError TrackedErrors a
y' Bool -> Bool -> Bool
|| TrackedErrors a -> a
forall a. TrackedErrors a -> a
getCompilerSuccess TrackedErrors a
y' a -> a -> Bool
forall a. Eq a => a -> a -> Bool
== a
x
then TrackedErrors () -> IO (TrackedErrors ())
forall (m :: * -> *) a. Monad m => a -> m a
return (TrackedErrors () -> IO (TrackedErrors ()))
-> TrackedErrors () -> IO (TrackedErrors ())
forall a b. (a -> b) -> a -> b
$ TrackedErrors a
y' TrackedErrors a -> TrackedErrors () -> TrackedErrors ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> () -> TrackedErrors ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
else TrackedErrors () -> IO (TrackedErrors ())
forall (m :: * -> *) a. Monad m => a -> m a
return (TrackedErrors () -> IO (TrackedErrors ()))
-> TrackedErrors () -> IO (TrackedErrors ())
forall a b. (a -> b) -> a -> b
$ String -> TrackedErrors ()
forall (m :: * -> *) a. ErrorContextM m => String -> m a
compilerErrorM (String -> TrackedErrors ()) -> String -> TrackedErrors ()
forall a b. (a -> b) -> a -> b
$ String
"Expected value " String -> String -> String
forall a. [a] -> [a] -> [a]
++ a -> String
forall a. Show a => a -> String
show a
x String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" but got value " String -> String -> String
forall a. [a] -> [a] -> [a]
++ a -> String
forall a. Show a => a -> String
show (TrackedErrors a -> a
forall a. TrackedErrors a -> a
getCompilerSuccess TrackedErrors a
y')
checkError :: (Eq a, Show a) => String -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkError :: String -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkError String
e TrackedErrorsIO a
y = do
TrackedErrors a
y' <- TrackedErrorsIO a -> IO (TrackedErrors a)
forall (m :: * -> *) a.
Monad m =>
TrackedErrorsT m a -> m (TrackedErrors a)
toTrackedErrors TrackedErrorsIO a
y
if Bool -> Bool
not (TrackedErrors a -> Bool
forall (t :: (* -> *) -> * -> *) a.
(ErrorContextT t, ErrorContextM (t Identity)) =>
t Identity a -> Bool
isCompilerError TrackedErrors a
y')
then TrackedErrors () -> IO (TrackedErrors ())
forall (m :: * -> *) a. Monad m => a -> m a
return (TrackedErrors () -> IO (TrackedErrors ()))
-> TrackedErrors () -> IO (TrackedErrors ())
forall a b. (a -> b) -> a -> b
$ String -> TrackedErrors ()
forall (m :: * -> *) a. ErrorContextM m => String -> m a
compilerErrorM (String -> TrackedErrors ()) -> String -> TrackedErrors ()
forall a b. (a -> b) -> a -> b
$ String
"Expected error \"" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
e String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"\" but got value " String -> String -> String
forall a. [a] -> [a] -> [a]
++ a -> String
forall a. Show a => a -> String
show (TrackedErrors a -> a
forall a. TrackedErrors a -> a
getCompilerSuccess TrackedErrors a
y')
else if CompilerMessage -> String
forall a. Show a => a -> String
show (TrackedErrors a -> CompilerMessage
forall a. TrackedErrors a -> CompilerMessage
getCompilerError TrackedErrors a
y') String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== String
e
then TrackedErrors () -> IO (TrackedErrors ())
forall (m :: * -> *) a. Monad m => a -> m a
return (TrackedErrors () -> IO (TrackedErrors ()))
-> TrackedErrors () -> IO (TrackedErrors ())
forall a b. (a -> b) -> a -> b
$ () -> TrackedErrors ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
else TrackedErrors () -> IO (TrackedErrors ())
forall (m :: * -> *) a. Monad m => a -> m a
return (TrackedErrors () -> IO (TrackedErrors ()))
-> TrackedErrors () -> IO (TrackedErrors ())
forall a b. (a -> b) -> a -> b
$ String -> TrackedErrors ()
forall (m :: * -> *) a. ErrorContextM m => String -> m a
compilerErrorM (String -> TrackedErrors ()) -> String -> TrackedErrors ()
forall a b. (a -> b) -> a -> b
$ String
"Expected error \"" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
e String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"\" but got error \"" String -> String -> String
forall a. [a] -> [a] -> [a]
++ CompilerMessage -> String
forall a. Show a => a -> String
show (TrackedErrors a -> CompilerMessage
forall a. TrackedErrors a -> CompilerMessage
getCompilerError TrackedErrors a
y') String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"\""
checkSuccessAndWarnings :: (Eq a, Show a) => String -> a -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkSuccessAndWarnings :: String -> a -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkSuccessAndWarnings String
w a
x TrackedErrorsIO a
y = do
TrackedErrors a
y' <- TrackedErrorsIO a -> IO (TrackedErrors a)
forall (m :: * -> *) a.
Monad m =>
TrackedErrorsT m a -> m (TrackedErrors a)
toTrackedErrors TrackedErrorsIO a
y
TrackedErrors ()
outcome <- a -> TrackedErrorsIO a -> IO (TrackedErrors ())
forall a.
(Eq a, Show a) =>
a -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkSuccess a
x TrackedErrorsIO a
y
if CompilerMessage -> String
forall a. Show a => a -> String
show (TrackedErrors a -> CompilerMessage
forall a. TrackedErrors a -> CompilerMessage
getCompilerWarnings TrackedErrors a
y') String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== String
w
then TrackedErrors () -> IO (TrackedErrors ())
forall (m :: * -> *) a. Monad m => a -> m a
return (TrackedErrors () -> IO (TrackedErrors ()))
-> TrackedErrors () -> IO (TrackedErrors ())
forall a b. (a -> b) -> a -> b
$ TrackedErrors ()
outcome TrackedErrors () -> TrackedErrors () -> TrackedErrors ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> () -> TrackedErrors ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
else TrackedErrors () -> IO (TrackedErrors ())
forall (m :: * -> *) a. Monad m => a -> m a
return (TrackedErrors () -> IO (TrackedErrors ()))
-> TrackedErrors () -> IO (TrackedErrors ())
forall a b. (a -> b) -> a -> b
$ String -> TrackedErrors ()
forall (m :: * -> *) a. ErrorContextM m => String -> m a
compilerErrorM (String -> TrackedErrors ()) -> String -> TrackedErrors ()
forall a b. (a -> b) -> a -> b
$ String
"Expected warnings " String -> String -> String
forall a. [a] -> [a] -> [a]
++ String -> String
forall a. Show a => a -> String
show String
w String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" but got warnings \"" String -> String -> String
forall a. [a] -> [a] -> [a]
++ CompilerMessage -> String
forall a. Show a => a -> String
show (TrackedErrors a -> CompilerMessage
forall a. TrackedErrors a -> CompilerMessage
getCompilerWarnings TrackedErrors a
y') String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"\""
checkErrorAndWarnings :: (Eq a, Show a) => String -> String -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkErrorAndWarnings :: String -> String -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkErrorAndWarnings String
w String
e TrackedErrorsIO a
y = do
TrackedErrors a
y' <- TrackedErrorsIO a -> IO (TrackedErrors a)
forall (m :: * -> *) a.
Monad m =>
TrackedErrorsT m a -> m (TrackedErrors a)
toTrackedErrors TrackedErrorsIO a
y
TrackedErrors ()
outcome <- String -> TrackedErrorsIO a -> IO (TrackedErrors ())
forall a.
(Eq a, Show a) =>
String -> TrackedErrorsIO a -> IO (TrackedErrors ())
checkError String
e TrackedErrorsIO a
y
if CompilerMessage -> String
forall a. Show a => a -> String
show (TrackedErrors a -> CompilerMessage
forall a. TrackedErrors a -> CompilerMessage
getCompilerWarnings TrackedErrors a
y') String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== String
w
then TrackedErrors () -> IO (TrackedErrors ())
forall (m :: * -> *) a. Monad m => a -> m a
return (TrackedErrors () -> IO (TrackedErrors ()))
-> TrackedErrors () -> IO (TrackedErrors ())
forall a b. (a -> b) -> a -> b
$ TrackedErrors ()
outcome TrackedErrors () -> TrackedErrors () -> TrackedErrors ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> () -> TrackedErrors ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
else TrackedErrors () -> IO (TrackedErrors ())
forall (m :: * -> *) a. Monad m => a -> m a
return (TrackedErrors () -> IO (TrackedErrors ()))
-> TrackedErrors () -> IO (TrackedErrors ())
forall a b. (a -> b) -> a -> b
$ String -> TrackedErrors ()
forall (m :: * -> *) a. ErrorContextM m => String -> m a
compilerErrorM (String -> TrackedErrors ()) -> String -> TrackedErrors ()
forall a b. (a -> b) -> a -> b
$ String
"Expected warnings " String -> String -> String
forall a. [a] -> [a] -> [a]
++ String -> String
forall a. Show a => a -> String
show String
w String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" but got warnings \"" String -> String -> String
forall a. [a] -> [a] -> [a]
++ CompilerMessage -> String
forall a. Show a => a -> String
show (TrackedErrors a -> CompilerMessage
forall a. TrackedErrors a -> CompilerMessage
getCompilerWarnings TrackedErrors a
y') String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"\""