packages feed

module-management-0.20.2: testdata/split-expected/Data/Logic/Classes/Literal/Literal.hs

{-# LANGUAGE FlexibleInstances, FunctionalDependencies, MultiParamTypeClasses, RankNTypes, ScopedTypeVariables, UndecidableInstances #-}
{-# OPTIONS -Wwarn #-}
module Data.Logic.Classes.Literal.Literal
    ( Literal(foldLiteral)
    ) where

import Data.Logic.Classes.Constants (Constants)
import Data.Logic.Classes.Formula (Formula)
import Data.Logic.Classes.Negate (Negatable)
import Data.Logic.Classes.Pretty (HasFixity)

-- |Literals are the building blocks of the clause and implicative normal
-- |forms.  They support negation and must include True and False elements.
class (Negatable lit, Constants lit, HasFixity atom, Formula lit atom, Ord lit) => Literal lit atom | lit -> atom where
    foldLiteral :: (lit -> r) -> (Bool -> r) -> (atom -> r) -> lit -> r