{-# LANGUAGE MultiParamTypeClasses #-} module Language.REST.RewriteRule where import qualified Data.HashSet as S -- | A class for datatypes that can be used as rewrite rules class RewriteRule m rule term where -- | @apply term rule@ returns the set of resulting terms that can be generated -- from @term@ using @rule@. Multiple terms are possible if the rule applies to -- multiple subterms. The result is embedded in a computation context @m@; -- this enables support for SMT-based conditional rewriting, for example. apply :: term -> rule -> m (S.HashSet term)