module Test.MergeTree (tests) where
import Control.Monad (when)
import Data.Char (toUpper)
import Base.CompilerError
import Base.TrackedErrors
import Base.MergeTree
import Base.Mergeable
tests :: [IO (TrackedErrors ())]
tests :: [IO (TrackedErrors ())]
tests = [
forall b a.
(Eq b, Show b) =>
b -> (a -> b) -> a -> IO (TrackedErrors ())
checkMatch (forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny forall a b. (a -> b) -> a -> b
$ forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap forall a. a -> MergeTree a
mergeLeaf [Int
2,Int
4,Int
6]) (forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (forall a. Num a => a -> a -> a
*Int
2))
(forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny forall a b. (a -> b) -> a -> b
$ forall a b. (a -> b) -> [a] -> [b]
map forall a. a -> MergeTree a
mergeLeaf [Int
1..Int
3] :: MergeTree Int),
forall b a.
(Eq b, Show b) =>
b -> (a -> b) -> a -> IO (TrackedErrors ())
checkMatch (forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll forall a b. (a -> b) -> a -> b
$ forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap forall a. a -> MergeTree a
mergeLeaf [Int
2,Int
4,Int
6]) (forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (forall a. Num a => a -> a -> a
*Int
2))
(forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll forall a b. (a -> b) -> a -> b
$ forall a b. (a -> b) -> [a] -> [b]
map forall a. a -> MergeTree a
mergeLeaf [Int
1..Int
3] :: MergeTree Int),
forall b a.
(Eq b, Show b) =>
b -> (a -> b) -> a -> IO (TrackedErrors ())
checkMatch (forall a. a -> MergeTree a
mergeLeaf Int
1) forall a. a -> a
id (forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny [forall a. a -> MergeTree a
mergeLeaf Int
1,forall a. Bounded a => a
minBound] :: MergeTree Int),
forall b a.
(Eq b, Show b) =>
b -> (a -> b) -> a -> IO (TrackedErrors ())
checkMatch (forall a. a -> MergeTree a
mergeLeaf Int
1) forall a. a -> a
id (forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a. a -> MergeTree a
mergeLeaf Int
1,forall a. Bounded a => a
maxBound] :: MergeTree Int),
forall a. (Eq a, Show a) => a -> a -> a -> IO (TrackedErrors ())
checkMatch2 (forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny [forall a. a -> MergeTree a
mergeLeaf Int
1,forall a. a -> MergeTree a
mergeLeaf Int
2,forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a. a -> MergeTree a
mergeLeaf Int
3,forall a. a -> MergeTree a
mergeLeaf Int
4]])
(forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny [forall a. a -> MergeTree a
mergeLeaf Int
1,forall a. a -> MergeTree a
mergeLeaf Int
2,forall a. a -> MergeTree a
mergeLeaf Int
3,forall a. a -> MergeTree a
mergeLeaf Int
4])
(forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny [forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny [forall a. a -> MergeTree a
mergeLeaf Int
1],forall a. a -> MergeTree a
mergeLeaf Int
2,forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a. a -> MergeTree a
mergeLeaf Int
3,forall a. a -> MergeTree a
mergeLeaf Int
4]] :: MergeTree Int),
forall a. (Eq a, Show a) => a -> a -> a -> IO (TrackedErrors ())
checkMatch2 (forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a. a -> MergeTree a
mergeLeaf Int
1,forall a. a -> MergeTree a
mergeLeaf Int
2,forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny [forall a. a -> MergeTree a
mergeLeaf Int
3,forall a. a -> MergeTree a
mergeLeaf Int
4]])
(forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a. a -> MergeTree a
mergeLeaf Int
1,forall a. a -> MergeTree a
mergeLeaf Int
2,forall a. a -> MergeTree a
mergeLeaf Int
3,forall a. a -> MergeTree a
mergeLeaf Int
4])
(forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a. a -> MergeTree a
mergeLeaf Int
1],forall a. a -> MergeTree a
mergeLeaf Int
2,forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny [forall a. a -> MergeTree a
mergeLeaf Int
3,forall a. a -> MergeTree a
mergeLeaf Int
4]] :: MergeTree Int),
forall b a.
(Eq b, Show b) =>
b -> (a -> b) -> a -> IO (TrackedErrors ())
checkMatch (forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny [forall a. a -> MergeTree a
mergeLeaf String
"abd",forall a. a -> MergeTree a
mergeLeaf String
"abe"],forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny [forall a. a -> MergeTree a
mergeLeaf String
"acd",forall a. a -> MergeTree a
mergeLeaf String
"ace"]]) forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence
[forall a. a -> MergeTree a
mergeLeaf Char
'a',forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a. a -> MergeTree a
mergeLeaf Char
'b',forall a. a -> MergeTree a
mergeLeaf Char
'c'],forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny [forall a. a -> MergeTree a
mergeLeaf Char
'd',forall a. a -> MergeTree a
mergeLeaf Char
'e']],
forall b a.
(Eq b, Show b) =>
b -> (a -> b) -> a -> IO (TrackedErrors ())
checkMatch (forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a. a -> MergeTree a
mergeLeaf Char
'a',forall a. a -> MergeTree a
mergeLeaf Char
'A'],
forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny [forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a. a -> MergeTree a
mergeLeaf Char
'b',forall a. a -> MergeTree a
mergeLeaf Char
'B'],
forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a. a -> MergeTree a
mergeLeaf Char
'c',forall a. a -> MergeTree a
mergeLeaf Char
'C']]])
(\MergeTree Char
x -> do
Char
x' <- MergeTree Char
x
forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall (m :: * -> *) a. Monad m => a -> m a
return Char
x',forall (m :: * -> *) a. Monad m => a -> m a
return (Char -> Char
toUpper Char
x')])
(forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a. a -> MergeTree a
mergeLeaf Char
'a',forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny [forall a. a -> MergeTree a
mergeLeaf Char
'b',forall a. a -> MergeTree a
mergeLeaf Char
'c']]),
forall b a.
(Eq b, Show b) =>
b -> (a -> b) -> a -> IO (TrackedErrors ())
checkMatch [forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny [forall a. a -> MergeTree a
mergeLeaf Char
'a',forall a. a -> MergeTree a
mergeLeaf Char
'b'],
forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny [forall a. a -> MergeTree a
mergeLeaf Char
'c',
forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a. a -> MergeTree a
mergeLeaf Char
'd',forall a. a -> MergeTree a
mergeLeaf Char
'e']],
forall a. a -> MergeTree a
mergeLeaf Char
'f']]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence
(forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny [forall a. a -> MergeTree a
mergeLeaf String
"a",forall a. a -> MergeTree a
mergeLeaf String
"b"],
forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny [forall a. a -> MergeTree a
mergeLeaf String
"c",
forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a. a -> MergeTree a
mergeLeaf String
"d",forall a. a -> MergeTree a
mergeLeaf String
"e"]],
forall a. a -> MergeTree a
mergeLeaf String
"f"]),
forall b a.
(Eq b, Show b) =>
b -> (a -> b) -> a -> IO (TrackedErrors ())
checkMatch (forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny [forall a. a -> MergeTree a
mergeLeaf String
"a",forall a. a -> MergeTree a
mergeLeaf String
"b"],
forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny [forall a. a -> MergeTree a
mergeLeaf String
"c",
forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a. a -> MergeTree a
mergeLeaf String
"d",forall a. a -> MergeTree a
mergeLeaf String
"e"]],
forall a. a -> MergeTree a
mergeLeaf String
"f"])
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence
[forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny [forall a. a -> MergeTree a
mergeLeaf Char
'a',forall a. a -> MergeTree a
mergeLeaf Char
'b'],
forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny [forall a. a -> MergeTree a
mergeLeaf Char
'c',
forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a. a -> MergeTree a
mergeLeaf Char
'd',forall a. a -> MergeTree a
mergeLeaf Char
'e']],
forall a. a -> MergeTree a
mergeLeaf Char
'f']],
forall b a.
(Eq b, Show b) =>
b -> (a -> b) -> a -> IO (TrackedErrors ())
checkMatch (forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny [forall a. a -> MergeTree a
mergeLeaf Char
'A',forall a. a -> MergeTree a
mergeLeaf Char
'B'],
forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny [forall a. a -> MergeTree a
mergeLeaf Char
'C',
forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a. a -> MergeTree a
mergeLeaf Char
'D',forall a. a -> MergeTree a
mergeLeaf Char
'E']],
forall a. a -> MergeTree a
mergeLeaf Char
'F'])
(Char -> Char
toUpper forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>)
(forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny [forall a. a -> MergeTree a
mergeLeaf Char
'a',forall a. a -> MergeTree a
mergeLeaf Char
'b'],
forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny [forall a. a -> MergeTree a
mergeLeaf Char
'c',
forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a. a -> MergeTree a
mergeLeaf Char
'd',forall a. a -> MergeTree a
mergeLeaf Char
'e']],
forall a. a -> MergeTree a
mergeLeaf Char
'f']),
forall b a.
(Eq b, Show b) =>
b -> (a -> b) -> a -> IO (TrackedErrors ())
checkMatch (forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny [forall a. a -> MergeTree a
mergeLeaf Char
'A',forall a. a -> MergeTree a
mergeLeaf Char
'B'],
forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny [forall a. a -> MergeTree a
mergeLeaf Char
'C',
forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a. a -> MergeTree a
mergeLeaf Char
'D',forall a. a -> MergeTree a
mergeLeaf Char
'E']],
forall a. a -> MergeTree a
mergeLeaf Char
'F'])
((forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny [forall a. a -> MergeTree a
mergeLeaf (forall a b. (a -> b) -> a -> b
$Char
'a'),forall a. a -> MergeTree a
mergeLeaf (forall a b. (a -> b) -> a -> b
$Char
'b')],
forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny [forall a. a -> MergeTree a
mergeLeaf (forall a b. (a -> b) -> a -> b
$Char
'c'),
forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a. a -> MergeTree a
mergeLeaf (forall a b. (a -> b) -> a -> b
$Char
'd'),forall a. a -> MergeTree a
mergeLeaf (forall a b. (a -> b) -> a -> b
$Char
'e')]],
forall a. a -> MergeTree a
mergeLeaf (forall a b. (a -> b) -> a -> b
$Char
'f')]) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*>)
(forall a. a -> MergeTree a
mergeLeaf Char -> Char
toUpper),
forall b a.
(Eq b, Show b) =>
b -> (a -> b) -> a -> IO (TrackedErrors ())
checkMatch Bool
True
(forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry forall a b. (a -> b) -> a -> b
$ forall a b c.
(PreserveMerge a, PreserveMerge b) =>
([c] -> c) -> ([c] -> c) -> (T a -> T b -> c) -> a -> b -> c
pairMergeTree forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll forall a. Eq a => a -> a -> Bool
(==))
(forall a. Bounded a => a
minBound :: MergeTree (),forall a. Bounded a => a
minBound :: MergeTree ()),
forall b a.
(Eq b, Show b) =>
b -> (a -> b) -> a -> IO (TrackedErrors ())
checkMatch Bool
True
(forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry forall a b. (a -> b) -> a -> b
$ forall a b c.
(PreserveMerge a, PreserveMerge b) =>
([c] -> c) -> ([c] -> c) -> (T a -> T b -> c) -> a -> b -> c
pairMergeTree forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll forall a. Eq a => a -> a -> Bool
(==))
(forall a. Bounded a => a
maxBound :: MergeTree (),forall a. Bounded a => a
maxBound :: MergeTree ()),
forall b a.
(Eq b, Show b) =>
b -> (a -> b) -> a -> IO (TrackedErrors ())
checkMatch Bool
True
(forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry forall a b. (a -> b) -> a -> b
$ forall a b c.
(PreserveMerge a, PreserveMerge b) =>
([c] -> c) -> ([c] -> c) -> (T a -> T b -> c) -> a -> b -> c
pairMergeTree forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll forall a. Eq a => a -> a -> Bool
(==))
(forall a. Bounded a => a
minBound :: MergeTree (),forall a. Bounded a => a
maxBound :: MergeTree ()),
forall b a.
(Eq b, Show b) =>
b -> (a -> b) -> a -> IO (TrackedErrors ())
checkMatch Bool
False
(forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry forall a b. (a -> b) -> a -> b
$ forall a b c.
(PreserveMerge a, PreserveMerge b) =>
([c] -> c) -> ([c] -> c) -> (T a -> T b -> c) -> a -> b -> c
pairMergeTree forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll forall a. Eq a => a -> a -> Bool
(==))
(forall a. Bounded a => a
maxBound :: MergeTree (),forall a. Bounded a => a
minBound :: MergeTree ()),
forall b a.
(Eq b, Show b) =>
b -> (a -> b) -> a -> IO (TrackedErrors ())
checkMatch Bool
True
(forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry forall a b. (a -> b) -> a -> b
$ forall a b c.
(PreserveMerge a, PreserveMerge b) =>
([c] -> c) -> ([c] -> c) -> (T a -> T b -> c) -> a -> b -> c
pairMergeTree forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll forall a. Eq a => a -> a -> Bool
(==))
(forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a. a -> MergeTree a
mergeLeaf Char
'a',forall a. a -> MergeTree a
mergeLeaf Char
'b'],
forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny [forall a. a -> MergeTree a
mergeLeaf Char
'a',forall a. a -> MergeTree a
mergeLeaf Char
'b',forall a. a -> MergeTree a
mergeLeaf Char
'c']),
forall b a.
(Eq b, Show b) =>
b -> (a -> b) -> a -> IO (TrackedErrors ())
checkMatch Bool
True
(forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry forall a b. (a -> b) -> a -> b
$ forall a b c.
(PreserveMerge a, PreserveMerge b) =>
([c] -> c) -> ([c] -> c) -> (T a -> T b -> c) -> a -> b -> c
pairMergeTree forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll forall a. Eq a => a -> a -> Bool
(==))
(forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a. a -> MergeTree a
mergeLeaf Char
'a',forall a. a -> MergeTree a
mergeLeaf Char
'b',forall a. a -> MergeTree a
mergeLeaf Char
'c'],
forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny [forall a. a -> MergeTree a
mergeLeaf Char
'a',forall a. a -> MergeTree a
mergeLeaf Char
'b']),
forall b a.
(Eq b, Show b) =>
b -> (a -> b) -> a -> IO (TrackedErrors ())
checkMatch Bool
False
(forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry forall a b. (a -> b) -> a -> b
$ forall a b c.
(PreserveMerge a, PreserveMerge b) =>
([c] -> c) -> ([c] -> c) -> (T a -> T b -> c) -> a -> b -> c
pairMergeTree forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll forall a. Eq a => a -> a -> Bool
(==))
(forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny [forall a. a -> MergeTree a
mergeLeaf Char
'a',forall a. a -> MergeTree a
mergeLeaf Char
'b'],
forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a. a -> MergeTree a
mergeLeaf Char
'a',forall a. a -> MergeTree a
mergeLeaf Char
'b',forall a. a -> MergeTree a
mergeLeaf Char
'c']),
forall b a.
(Eq b, Show b) =>
b -> (a -> b) -> a -> IO (TrackedErrors ())
checkMatch Bool
False
(forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry forall a b. (a -> b) -> a -> b
$ forall a b c.
(PreserveMerge a, PreserveMerge b) =>
([c] -> c) -> ([c] -> c) -> (T a -> T b -> c) -> a -> b -> c
pairMergeTree forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll forall a. Eq a => a -> a -> Bool
(==))
(forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny [forall a. a -> MergeTree a
mergeLeaf Char
'a',forall a. a -> MergeTree a
mergeLeaf Char
'b',forall a. a -> MergeTree a
mergeLeaf Char
'c'],
forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a. a -> MergeTree a
mergeLeaf Char
'a',forall a. a -> MergeTree a
mergeLeaf Char
'b']),
forall b a.
(Eq b, Show b) =>
b -> (a -> b) -> a -> IO (TrackedErrors ())
checkMatch Bool
True
(forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry forall a b. (a -> b) -> a -> b
$ forall a b c.
(PreserveMerge a, PreserveMerge b) =>
([c] -> c) -> ([c] -> c) -> (T a -> T b -> c) -> a -> b -> c
pairMergeTree forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll forall a. Eq a => a -> a -> Bool
(==))
(forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny [forall a. a -> MergeTree a
mergeLeaf Char
'a',forall a. a -> MergeTree a
mergeLeaf Char
'b'],
forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny [forall a. a -> MergeTree a
mergeLeaf Char
'a',forall a. a -> MergeTree a
mergeLeaf Char
'b']),
forall b a.
(Eq b, Show b) =>
b -> (a -> b) -> a -> IO (TrackedErrors ())
checkMatch Bool
True
(forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry forall a b. (a -> b) -> a -> b
$ forall a b c.
(PreserveMerge a, PreserveMerge b) =>
([c] -> c) -> ([c] -> c) -> (T a -> T b -> c) -> a -> b -> c
pairMergeTree forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll forall a. Eq a => a -> a -> Bool
(==))
(forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a. a -> MergeTree a
mergeLeaf Char
'a',forall a. a -> MergeTree a
mergeLeaf Char
'b'],
forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a. a -> MergeTree a
mergeLeaf Char
'a',forall a. a -> MergeTree a
mergeLeaf Char
'b']),
forall b a.
(Eq b, Show b) =>
b -> (a -> b) -> a -> IO (TrackedErrors ())
checkMatch Bool
True
(forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry forall a b. (a -> b) -> a -> b
$ forall a b c.
(PreserveMerge a, PreserveMerge b) =>
([c] -> c) -> ([c] -> c) -> (T a -> T b -> c) -> a -> b -> c
pairMergeTree forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll forall a. Eq a => a -> a -> Bool
(==))
(forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a. a -> MergeTree a
mergeLeaf Char
'a',forall a. a -> MergeTree a
mergeLeaf Char
'b'],
forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny [forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a. a -> MergeTree a
mergeLeaf Char
'a',forall a. a -> MergeTree a
mergeLeaf Char
'b'],forall a. a -> MergeTree a
mergeLeaf Char
'c']),
forall b a.
(Eq b, Show b) =>
b -> (a -> b) -> a -> IO (TrackedErrors ())
checkMatch Bool
True
(forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry forall a b. (a -> b) -> a -> b
$ forall a b c.
(PreserveMerge a, PreserveMerge b) =>
([c] -> c) -> ([c] -> c) -> (T a -> T b -> c) -> a -> b -> c
pairMergeTree forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll forall a. Eq a => a -> a -> Bool
(==))
(forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny [forall a. a -> MergeTree a
mergeLeaf Char
'a',forall a. a -> MergeTree a
mergeLeaf Char
'b'],forall a. a -> MergeTree a
mergeLeaf Char
'c'],
forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny [forall a. a -> MergeTree a
mergeLeaf Char
'a',forall a. a -> MergeTree a
mergeLeaf Char
'b']),
forall b a.
(Eq b, Show b) =>
b -> (a -> b) -> a -> IO (TrackedErrors ())
checkMatch Bool
True
(forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry forall a b. (a -> b) -> a -> b
$ forall a b c.
(PreserveMerge a, PreserveMerge b) =>
([c] -> c) -> ([c] -> c) -> (T a -> T b -> c) -> a -> b -> c
pairMergeTree forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll forall a. Eq a => a -> a -> Bool
(==))
(forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny [forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a. a -> MergeTree a
mergeLeaf Char
'a',forall a. a -> MergeTree a
mergeLeaf Char
'b'],forall a. a -> MergeTree a
mergeLeaf Char
'c'],
forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny [forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a. a -> MergeTree a
mergeLeaf Char
'a',forall a. a -> MergeTree a
mergeLeaf Char
'b'],forall a. a -> MergeTree a
mergeLeaf Char
'c']),
forall b a.
(Eq b, Show b) =>
b -> (a -> b) -> a -> IO (TrackedErrors ())
checkMatch Bool
True
(forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry forall a b. (a -> b) -> a -> b
$ forall a b c.
(PreserveMerge a, PreserveMerge b) =>
([c] -> c) -> ([c] -> c) -> (T a -> T b -> c) -> a -> b -> c
pairMergeTree forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll forall a. Eq a => a -> a -> Bool
(==))
(forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny [forall a. a -> MergeTree a
mergeLeaf Char
'a',forall a. a -> MergeTree a
mergeLeaf Char
'b'],forall a. a -> MergeTree a
mergeLeaf Char
'c'],
forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny [forall a. a -> MergeTree a
mergeLeaf Char
'a',forall a. a -> MergeTree a
mergeLeaf Char
'b'],forall a. a -> MergeTree a
mergeLeaf Char
'c']),
forall b a.
(Eq b, Show b) =>
b -> (a -> b) -> a -> IO (TrackedErrors ())
checkMatch Bool
False
(forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry forall a b. (a -> b) -> a -> b
$ forall a b c.
(PreserveMerge a, PreserveMerge b) =>
([c] -> c) -> ([c] -> c) -> (T a -> T b -> c) -> a -> b -> c
pairMergeTree forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll forall a. Eq a => a -> a -> Bool
(==))
(forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAny [forall a. a -> MergeTree a
mergeLeaf Char
'a',forall a. a -> MergeTree a
mergeLeaf Char
'b'],
forall a (f :: * -> *). (Mergeable a, Foldable f) => f a -> a
mergeAll [forall a. a -> MergeTree a
mergeLeaf Char
'a',forall a. a -> MergeTree a
mergeLeaf Char
'b'])
]
oddError :: Int -> TrackedErrors Int
oddError :: Int -> TrackedErrors Int
oddError Int
x = do
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (forall a. Integral a => a -> Bool
odd Int
x) forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *) a. ErrorContextM m => String -> m a
compilerErrorM forall a b. (a -> b) -> a -> b
$ forall a. Show a => a -> String
show Int
x forall a. [a] -> [a] -> [a]
++ String
" is odd"
forall (m :: * -> *) a. Monad m => a -> m a
return Int
x
oddError2 :: Int -> TrackedErrors [Int]
oddError2 :: Int -> TrackedErrors [Int]
oddError2 = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (forall a. a -> [a] -> [a]
:[]) forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> TrackedErrors Int
oddError
checkMatch :: (Eq b, Show b) => b -> (a -> b) -> a -> IO (TrackedErrors ())
checkMatch :: forall b a.
(Eq b, Show b) =>
b -> (a -> b) -> a -> IO (TrackedErrors ())
checkMatch b
x a -> b
f a
y = let y' :: b
y' = a -> b
f a
y in
forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ if b
x forall a. Eq a => a -> a -> Bool
/= b
y'
then forall (m :: * -> *) a. ErrorContextM m => String -> m a
compilerErrorM forall a b. (a -> b) -> a -> b
$ String
"Expected " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> String
show b
x forall a. [a] -> [a] -> [a]
++ String
" but got " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> String
show b
y'
else forall (m :: * -> *) a. Monad m => a -> m a
return ()
checkMatch2 :: (Eq a, Show a) => a -> a -> a -> IO (TrackedErrors ())
checkMatch2 :: forall a. (Eq a, Show a) => a -> a -> a -> IO (TrackedErrors ())
checkMatch2 a
x a
y a
z = forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ do
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (a
x forall a. Eq a => a -> a -> Bool
/= a
z) forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *) a. ErrorContextM m => String -> m a
compilerErrorM forall a b. (a -> b) -> a -> b
$ String
"Expected " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> String
show a
x forall a. [a] -> [a] -> [a]
++ String
" but got " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> String
show a
z
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (a
y forall a. Eq a => a -> a -> Bool
== a
z) forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *) a. ErrorContextM m => String -> m a
compilerErrorM forall a b. (a -> b) -> a -> b
$ String
"Expected something besides " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> String
show a
y
checkSuccess :: (Eq b, Show b) => b -> (a -> TrackedErrors b) -> a -> IO (TrackedErrors ())
checkSuccess :: forall b a.
(Eq b, Show b) =>
b -> (a -> TrackedErrors b) -> a -> IO (TrackedErrors ())
checkSuccess b
x a -> TrackedErrors b
f a
y = let y' :: TrackedErrors b
y' = a -> TrackedErrors b
f a
y in
forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ if forall (t :: (* -> *) -> * -> *) a.
(ErrorContextT t, ErrorContextM (t Identity)) =>
t Identity a -> Bool
isCompilerError TrackedErrors b
y' Bool -> Bool -> Bool
|| forall a. TrackedErrors a -> a
getCompilerSuccess TrackedErrors b
y' forall a. Eq a => a -> a -> Bool
== b
x
then TrackedErrors b
y' forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> forall (m :: * -> *) a. Monad m => a -> m a
return ()
else forall (m :: * -> *) a. ErrorContextM m => String -> m a
compilerErrorM forall a b. (a -> b) -> a -> b
$ String
"Expected value " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> String
show b
x forall a. [a] -> [a] -> [a]
++ String
" but got value " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> String
show (forall a. TrackedErrors a -> a
getCompilerSuccess TrackedErrors b
y')
checkError :: Show b => String -> (a -> TrackedErrors b) -> a -> IO (TrackedErrors ())
checkError :: forall b a.
Show b =>
String -> (a -> TrackedErrors b) -> a -> IO (TrackedErrors ())
checkError String
e a -> TrackedErrors b
f a
y = let y' :: TrackedErrors b
y' = a -> TrackedErrors b
f a
y in
forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ if Bool -> Bool
not (forall (t :: (* -> *) -> * -> *) a.
(ErrorContextT t, ErrorContextM (t Identity)) =>
t Identity a -> Bool
isCompilerError TrackedErrors b
y')
then forall (m :: * -> *) a. ErrorContextM m => String -> m a
compilerErrorM forall a b. (a -> b) -> a -> b
$ String
"Expected error \"" forall a. [a] -> [a] -> [a]
++ String
e forall a. [a] -> [a] -> [a]
++ String
"\" but got value " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> String
show (forall a. TrackedErrors a -> a
getCompilerSuccess TrackedErrors b
y')
else if forall a. Show a => a -> String
show (forall a. TrackedErrors a -> CompilerMessage
getCompilerError TrackedErrors b
y') forall a. Eq a => a -> a -> Bool
== String
e
then forall (m :: * -> *) a. Monad m => a -> m a
return ()
else forall (m :: * -> *) a. ErrorContextM m => String -> m a
compilerErrorM forall a b. (a -> b) -> a -> b
$ String
"Expected error \"" forall a. [a] -> [a] -> [a]
++ String
e forall a. [a] -> [a] -> [a]
++ String
"\" but got error \"" forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> String
show (forall a. TrackedErrors a -> CompilerMessage
getCompilerError TrackedErrors b
y') forall a. [a] -> [a] -> [a]
++ String
"\""