module TPDB.Mirror where import TPDB.Data import TPDB.Convert import Control.Monad ( forM, guard ) -- | if input is SRS, reverse lhs and rhs of each rule mirror :: TRS Identifier s -> Maybe ( TRS Identifier s ) mirror trs = do us <- forM (rules trs) $ \ u -> do ( left_spine, left_base ) <- spine $ lhs u ( right_spine, right_base ) <- spine $ rhs u guard $ left_base == right_base return $ u { lhs = unspine left_base $ reverse left_spine , rhs = unspine right_base $ reverse right_spine } return $ trs { rules = us }