{-# LANGUAGE RankNTypes #-} module Signet.Unstable.Type.Test where import qualified Control.Monad as Monad import qualified GHC.Stack as Stack data Test io tree = MkTest { forall (io :: * -> *) (tree :: * -> *). Test io tree -> forall void. HasCallStack => String -> io void assertFailure :: forall void. (Stack.HasCallStack) => String -> io void, forall (io :: * -> *) (tree :: * -> *). Test io tree -> String -> tree () -> tree () describe :: String -> tree () -> tree (), forall (io :: * -> *) (tree :: * -> *). Test io tree -> String -> io () -> tree () it :: String -> io () -> tree () } assertEq :: (Stack.HasCallStack, Applicative io, Eq a, Show a) => Test io tree -> a -> a -> io () assertEq :: forall (io :: * -> *) a (tree :: * -> *). (HasCallStack, Applicative io, Eq a, Show a) => Test io tree -> a -> a -> io () assertEq Test io tree test a expected a actual = Bool -> io () -> io () forall (f :: * -> *). Applicative f => Bool -> f () -> f () Monad.when (a expected a -> a -> Bool forall a. Eq a => a -> a -> Bool /= a actual) (io () -> io ()) -> (String -> io ()) -> String -> io () forall b c a. (b -> c) -> (a -> b) -> a -> c . Test io tree -> forall void. HasCallStack => String -> io void forall (io :: * -> *) (tree :: * -> *). Test io tree -> forall void. HasCallStack => String -> io void assertFailure Test io tree test (String -> io ()) -> String -> io () forall a b. (a -> b) -> a -> b $ String "expected " String -> String -> String forall a. Semigroup a => a -> a -> a <> a -> String forall a. Show a => a -> String show a expected String -> String -> String forall a. Semigroup a => a -> a -> a <> String " but got " String -> String -> String forall a. Semigroup a => a -> a -> a <> a -> String forall a. Show a => a -> String show a actual