module Development.Bake.Type(
Host, Port,
Candidate(..), Oven(..), TestInfo(..), defaultOven,
threads, threadsAll, before, beforeClear, run, require,
State(..), Patch(..), Test(..), concrete,
Author
) where
type Author = String
type Host = String
type Port = Int
data Candidate state patch = Candidate state [patch]
data Oven state patch test = Oven
{ovenUpdateState :: Maybe (Candidate state patch) -> IO state
,ovenRunTest :: Candidate state patch -> Maybe test -> TestInfo test
,ovenPatchReject :: patch -> Maybe test -> IO ()
,ovenPatchExtra :: patch -> IO String
,ovenDefaultServer :: (Host, Port)
}
defaultOven :: Oven state patch test
defaultOven = Oven
(error "defaultOven.ovenUpdateState") (error "defaultOven.ovenRunTest")
(\_ _ -> return ()) (\_ -> return "") ("",0)
data TestInfo test = TestInfo
{testThreads :: Maybe Int
,testAction :: IO [test]
,testBefore :: [test]
,testBeforeAuto :: Bool
,testRequire :: [String]
}
require :: String -> TestInfo test -> TestInfo test
require x t = t{testRequire=x:testRequire t}
threads :: Int -> TestInfo test -> TestInfo test
threads j t = t{testThreads=Just j}
threadsAll :: TestInfo test -> TestInfo test
threadsAll t = t{testThreads=Nothing}
before :: [test] -> TestInfo test -> TestInfo test
before xs t = t{testBefore=testBefore t++xs}
beforeClear :: TestInfo test -> TestInfo test
beforeClear t = t{testBefore=[], testBeforeAuto=False}
run :: IO [test] -> TestInfo test
run act = TestInfo (Just 1) act [] True []
newtype State = State String
newtype Patch = Patch String
newtype Test = Test String
concrete :: (Show state, Read state, Show patch, Read patch, Show test, Read test)
=> Oven state patch test -> Oven State Patch Test
concrete = undefined