Sockeye: Start implementing port checks
[barrelfish] / tools / sockeye / SockeyeChecks.hs
1 module SockeyeChecks where
2
3 import Control.Monad.Writer
4
5 type Checks f = Writer [f]
6
7 newtype CheckFailure f = CheckFailure [f]
8
9 instance (Show f) => Show (CheckFailure f) where
10     show (CheckFailure fs) = unlines $ "":(map show fs)
11
12 failure :: f -> Checks f ()
13 failure f = tell [f]
14
15 runChecks :: Checks f a -> Either (CheckFailure f) a
16 runChecks checks = do
17     let
18         (a, fs) = runWriter checks
19     case fs of
20         [] -> return a
21         _  -> Left $ CheckFailure fs