module Test.Torch.Types where
import Control.Monad.Trans (MonadIO)
class Test t where
run :: (MonadIO io) => t -> io Result
class Failure f where
describe :: f -> FailReason
data Result where
Pass :: Result
Fail :: (Failure f) => f -> Result
type FailReason = String
data SomeTest where
SomeTest :: (Test t) => t -> SomeTest
type Tests = [SomeTest]
data SomeFailure where
SomeFailure :: (Failure f) => f -> SomeFailure
type Failures = [SomeFailure]
data Report = Report { planed,passed,failed :: Int, failures :: Failures }
data Hook = Hook { hook_Pass :: IO ()
, hook_Fail :: SomeFailure -> IO ()
, hook_Pre :: Tests -> IO ()
, hook_Post :: Report -> IO ()
}