module Coverage ( evaluate, domain, num, values, new_cov, fun, Coverages , Coverage ) where class Coverages cov where new_cov :: [a] -> ( a -> b ) -> (cov a b) evaluate :: (Eq a, Eq b) => cov a b -> a -> Maybe b domain :: cov a b -> [a] num :: cov a b-> Int values :: cov a b -> [b] fun :: (cov a b) -> ( a -> b ) data Coverage a b = Coverage ((a -> b), [a] ) instance Coverages Coverage where new_cov a f = (Coverage ( f , a )) evaluate f o | (( elem o (domain f) ) == True ) = Just ((fun f) o) | otherwise = Nothing domain (Coverage (f, a ) ) = a num f = length (domain f) values f = map (fun f) (domain f) fun (Coverage (f,_) ) = f