{-# LANGUAGE MultiParamTypeClasses #-}
module Data.Logic.Classes.Formula
    ( Formula(atomic, foldAtoms, mapAtoms)
    ) where

class Formula formula atom where
    atomic :: atom -> formula
    foldAtoms :: Formula formula atom => (r -> atom -> r) -> r -> formula -> r
    mapAtoms :: Formula formula atom => (atom -> formula) -> formula -> formula