{-# LANGUAGE FunctionalDependencies #-}

-- | Calculation function types.
module Byg.Types.Functions
  ( IsFunctionIO(..)
  ) where

import Byg.Types.Token (Token)

import Type.Reflection (Typeable)

class (Show f, Show a, Typeable a, Show b, Typeable b) => IsFunctionIO f a b | f -> a b where
  evalFunctionIO :: f -> a -> IO b
  functionIOReads :: f -> a -> [FilePath]
  functionIOWritesAny :: f -> Bool
  functionIOWrites :: f -> Token a -> Token [FilePath]
