{-# LANGUAGE FunctionalDependencies, MultiParamTypeClasses #-} module Data.Logic.Classes.Formula ( Formula(atomic, foldAtoms, mapAtoms) ) where class Formula formula atom | formula -> atom where atomic :: atom -> formula foldAtoms :: Formula formula atom => (r -> atom -> r) -> r -> formula -> r mapAtoms :: Formula formula atom => (atom -> formula) -> formula -> formula