HaRe-0.6: tools/property/TI/NameMapsPropDecorate.hs
module NameMapsPropDecorate where
import NameMaps
import TiPropDecorate
--import PropSyntax(AssertionI,PredicateI)
import NameMapsDecorate(mts)
import TiTypes
--import TiKinds
import NameMapsProp()
--import NameMapsPropStruct(bothtype,bothval)
import HsIdent(mapHsIdent2)
import MapDeclM
--import MapDeclMBaseStruct()
import MapDeclMPropStruct()
import MUtils
import AccList
instance AccNames i (TiDecls i) where
accNames f (Decs ds (ks,ts)) = accNames f ds . accNames f ts -- hmm, ks?
instance AccNames i (TiDecl i) where
accNames f (Dec d) = accNames f d
instance AccNames i (TiExp i) where
accNames f (Exp e) = accNames f e
accNames f (TiSpec i _ ts) = accNames f i . accNames f ts
accNames f (TiTyped e t) = a e . a t
where a x = accNames f x
instance AccNames i (TiAssertion i) where accNames = accNamesRec
instance AccNames i (TiPredicate i) where accNames = accNamesRec
instance AccNames i (OTiAssertion i) where
accNames f (OA is ds pa) = accList f is . accNames f ds . accNames f pa
--------------------------------------------------------------------------------
instance MapNames i1 (TiDecls i1) i2 (TiDecls i2) where
mapNames2 c f (Decs ds (ks,ts)) = Decs (m ds) (mks ks,mts c f ts)
where
m x = mapNames2 c f x
mks = map mk
mk (i:>:(k,ti)) = bothtype mapHsIdent2 f i:>:(k,m ti)
instance MapNames i1 (TiDecl i1) i2 (TiDecl i2) where
mapNames2 c f (Dec d) = Dec (mapNames2 c f d)
instance MapNames i1 (TiExp i1) i2 (TiExp i2) where
mapNames2 c f (Exp e) = Exp (mapNames2 c f e)
mapNames2 c f (TiSpec i sc ts)= TiSpec (bothval mapHsIdent2 f i) (m sc) (m ts)
where m x = mapNames2 c f x
mapNames2 c f (TiTyped e t) = TiTyped (m e) (m t)
where m x = mapNames2 c f x
instance MapNames i1 (TiAssertion i1) i2 (TiAssertion i2) where
mapNames2 = mapNames2Rec
instance MapNames i1 (TiPredicate i1) i2 (TiPredicate i2) where
mapNames2 = mapNames2Rec
instance MapNames i1 (OTiAssertion i1) i2 (OTiAssertion i2) where
mapNames2 c f@(vf,cf) (OA is ds pa) = OA is' ds' (m pa)
where
is' = map (vf (defval Pattern)) is
ds' = [(vf (defval Local) i:>:m' t,m e)|(i:>:t,e)<-ds]
m x = mapNames2 c f x
m' x = mapNames2 Local f x
--------------------------------------------------------------------------------
instance MapDeclM (TiDecls i) (TiDecls i) where
mapDeclM f (Decs ds dt) = flip Decs dt # mapDeclM f ds
instance MapDeclM (TiDecl i) (TiDecls i) where mapDeclM = std_mapDeclM
instance MapDeclM (TiExp i) (TiDecls i) where
mapDeclM f (Exp e) = Exp # mapDeclM f e
mapDeclM f (TiTyped e t) = flip TiTyped t # mapDeclM f e
mapDeclM f e@(TiSpec{}) = return e
instance MapDeclM (TiAssertion i) (TiDecls i) where mapDeclM = std_mapDeclM
instance MapDeclM (TiPredicate i) (TiDecls i) where mapDeclM = std_mapDeclM
instance MapDeclM (OTiAssertion i) (TiDecls i) where
mapDeclM f (OA is ds pa) = OA is ds # mapDeclM f pa