packages feed

mockcat-0.4.0.0: test/Test/MockCat/Definition.hs

{-# 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