module-management-0.20.2: testdata/split-expected/Data/Logic/Classes/Atom.hs
{-# LANGUAGE FunctionalDependencies, MultiParamTypeClasses, TypeFamilies #-}
-- | Substitution and finding variables are two basic operations on
-- formulas that contain terms and variables. If a formula type
-- supports quantifiers we can also find free variables, otherwise all
-- variables are considered free.
module Data.Logic.Classes.Atom
( Atom(..)
-- , Formula(..)
) where
import Control.Applicative.Error (Failing)
import qualified Data.Map as Map
import qualified Data.Set as Set
{-
class Formula formula term v | formula -> term v where
substitute :: Map.Map v term -> formula -> formula
allVariables :: formula -> Set.Set v
freeVariables :: formula -> Set.Set v
unify :: Map.Map v term -> formula -> formula -> Failing (Map.Map v term)
match :: Map.Map v term -> formula -> formula -> Failing (Map.Map v term)
-- ^ Very similar to unify, not quite sure if there is a difference
foldTerms :: (term -> r -> r) -> r -> formula -> r
isRename :: formula -> formula -> Bool
getSubst :: Map.Map v term -> formula -> Map.Map v term
-}
class Atom atom term v | atom -> term v where
substitute :: Map.Map v term -> atom -> atom
allVariables :: atom -> Set.Set v
freeVariables :: atom -> Set.Set v
unify :: Map.Map v term -> atom -> atom -> Failing (Map.Map v term)
match :: Map.Map v term -> atom -> atom -> Failing (Map.Map v term)
-- ^ Very similar to unify, not quite sure if there is a difference
foldTerms :: (term -> r -> r) -> r -> atom -> r
isRename :: atom -> atom -> Bool
getSubst :: Map.Map v term -> atom -> Map.Map v term