HaRe-0.6: tools/hs2stratego/TiProp2Stratego2.hs
{-+
Knot-tying definitions for the type decorated base+property syntax to
Stratego translation.
-}
module TiProp2Stratego2 where
import TiPropDecorate(TiDecl(..),TiExp(..),
TiAssertion(..),OTiAssertion(..),TiPredicate(..))
import PropSyntax(prop,mapHsIdent)
import BaseStruct2Stratego2
import PropStruct2Stratego2
import Prop2Stratego2(transType,transContext,transTlhs,transQType)
import TiBase2Stratego2
import qualified Base2Stratego2 as B
import StrategoDecl
import TiClasses(fromDefs)
import Parentheses -- needed for pattern matching. Grr!!
transDecs ds = transDecs' (fromDefs ds)
transDecs' ds = concatMap transDec ds
transDec (Dec d) =
prop (transD transId transExp transPat transLocalDecs transType transContext transTlhs)
((:[]) . transPD transId transOAssertion transPredicate)
d
transExp e =
case e of
Exp e -> transE transId transExp transPat transLocalDecs transType transContext e
TiSpec i _ _ -> transEId (mapHsIdent transId i)
TiTyped e _ -> transExp e
transOAssertion (OA is ds a) = transAssertion a -- !!!
transAssertion (PA a) =
transPA transId transExp transQType transAssertion transPredicate
a
transPredicate (PP p) =
transPP transId transExp B.transPat transQType transAssertion transPredicate
p
transLocalDecs ds = concatMap transLocalDec (fromDefs ds)
transLocalDec d = [def|Def (P def)<-transDec d]
-- silently ignores unimplemented things!!!