{-# LANGUAGE FunctionalDependencies #-} module Test.MockCat.Definition (FileOperation(..), Finder(..), program, findValue) where import Data.Text import Prelude hiding (readFile, writeFile) class Monad m => FileOperation m where readFile :: FilePath -> m Text writeFile :: FilePath -> Text -> m () program :: FileOperation m => FilePath -> FilePath -> m () program inputPath outputPath = do content <- readFile inputPath writeFile outputPath content class Monad m => Finder a b m | a -> b, b -> a where findIds :: m [a] findById :: a -> m b findValue :: Finder a b m => m [b] findValue = do ids <- findIds mapM findById ids