{-# LANGUAGE FunctionalDependencies, MultiParamTypeClasses #-}
module Data.Logic.Classes.Skolem where

import Data.Logic.Classes.Variable (Variable)

-- |This class shows how to convert between atomic Skolem functions
-- and Ints.  We include a variable type as a parameter because we
-- create skolem functions to replace an existentially quantified
-- variable, and it can be helpful to retain a reference to the
-- variable.
class Variable v => Skolem f v | f -> v where
    toSkolem :: v -> f
    -- ^ Built a Skolem function from the given variable and number.
    -- The number is generally obtained from the skolem monad.
    isSkolem  :: f -> Bool