-- | Equations.

module Test.QuickSpec.Equation where

import Test.QuickSpec.Term
import Test.QuickSpec.Signature hiding (vars)
import Test.QuickSpec.Utils.Typed
import Data.Monoid
import Data.List

data Equation = Term :=: Term deriving (Eq, Ord)

showEquation :: Sig -> Equation -> String
showEquation sig (t :=: u) =
  show (f t) ++ " == " ++ show (f u)
  where f = disambiguate sig (vars t ++ vars u)

instance Show Equation where
  show = showEquation mempty

equations :: [[Tagged Term]] -> [Equation]
equations = sort . concatMap (toEquations . map erase)
  where toEquations (x:xs) = [y :=: x | y <- xs]