{-# LANGUAGE FunctionalDependencies #-} module Types where import Data.ByteString (ByteString) data Image = Image deriving (Show) class (SourceState a, Show f) => IsFunction f a b | f -> a b where runF :: f -> a -> b class (SourceState a, Show f) => IsFunctionIO f a b | f -> a b where runFIO :: f -> a -> IO b class SourceState a where stateOfSource :: a -> IO ByteString