----------------------------------------------------------------------------- -- | -- Module : Transform.Rules.SYB.TP -- Copyright : (c) 2010 University of Minho -- License : BSD3 -- -- Maintainer : hpacheco@di.uminho.pt -- Stability : experimental -- Portability : non-portable -- -- Pointless Rewrite: -- automatic transformation system for point-free programs -- -- Specialization rules for type-preserving strategy combinators. -- ----------------------------------------------------------------------------- module Transform.Rules.SYB.TP where import Data.Type import Data.Eval import Transform.Rewriting hiding (gmapQ) import Control.Monad nop_applyT :: Rule nop_applyT _ (APPLY _ NOP) = success "nop-applyT" ID nop_applyT _ _ = mzero seq_applyT :: Rule seq_applyT _ (APPLY t (SEQ f g)) = success "seq-applyT" (COMP t (APPLY t f) (APPLY t g)) seq_applyT _ _ = mzero gmapT_applyT :: Rule gmapT_applyT _ (APPLY a (ALL f)) = success "gmapT-applyT" (allT a f) gmapT_applyT _ _ = mzero everywhere_applyT :: Rule everywhere_applyT _ (APPLY a (EVERYWHERE f)) = success "everywhere-applyT" (everywhereT a f) everywhere_applyT _ (APPLY a (EVERYWHERE' f)) = success "everywhere-applyT" (everywhereT' a f) everywhere_applyT _ _ = mzero mkT_applyT :: Rule mkT_applyT _ (APPLY a (MKT b f)) = success "mkT-applyT" (mkT a b f) mkT_applyT _ _ = mzero extT_applyT :: Rule extT_applyT _ (APPLY a (EXTT f t g)) = success "extT-applyT" (extT a f t g) extT_applyT _ _ = mzero gmapT_everywhere :: Rule gmapT_everywhere _ (ALL (EVERYWHERE f)) = success "gmapT-everywhere" (EVERYWHERE f) gmapT_everywhere _ (ALL (EVERYWHERE' f)) = success "gmapT-everywhere" (EVERYWHERE' f) gmapT_everywhere _ _ = mzero