HaRe-0.6: tools/base/TI/NameMapsDecorate.hs
module NameMapsDecorate where
import NameMaps
import TiDecorate
import TiTypes
import TiKinds
--import NameMapsBase(bothtype,bothval)
import HsIdent(mapHsIdent2)
import HsDeclMaps(mapFunDeps)
import MapDeclM
import MapDeclMBaseStruct()
import MUtils
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 (TiPat i) where
accNames f (Pat p) = accNames f p
accNames f (TiPApp p1 p2) = accNames f p1 . accNames f p2
accNames f (TiPSpec i _ ts) = accNames f i . accNames f ts
accNames f (TiPTyped p t) = accNames f p . accNames f t
instance AccNames i t => AccNames i (Typing x t) where
accNames f (x:>:t) = accNames f t -- hmm, x?
instance AccNames i (Scheme i) where
accNames f (Forall _ _ qt) = accNames f qt
instance AccNames i t => AccNames i (Qual i t) where
accNames f (ps:=>t) = accNames f ps . accNames f t
--------------------------------------------------------------------------------
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 (TiPat i1) i2 (TiPat i2) where
mapNames2 c f (Pat p) = Pat (mapNames2 c f p)
mapNames2 c f (TiPApp p1 p2) = TiPApp (mapNames2 c f p1) (mapNames2 c f p2)
mapNames2 c f (TiPSpec i sc ts) =
TiPSpec (bothval mapHsIdent2 f i) (mapNames2 c f sc) (mapNames2 c f ts)
mapNames2 c f (TiPTyped p t) = TiPTyped (mapNames2 c f p) (mapNames2 c f t)
instance MapNames i1 (Scheme i1) i2 (Scheme i2) where
mapNames2 c f (Forall as vs qt) =
Forall (mktvs f as) (mktvs f vs) (mapNames2 c f qt)
mtvs (vf,_) = map (vf (Def Local,ClassOrTypeNames))
mktvs (vf,_) = map (emap (vf (Def Local,ClassOrTypeNames)))
mts c f = map mt
where mt (i:>:t) = bothval mapHsIdent2 f i:>:mapNames2 c f t
instance MapNames i1 (TypeInfo i1) i2 (TypeInfo i2) where
mapNames2 c f ti =
case ti of
Data -> Data
Newtype -> Newtype
Class ps vs fdeps as ->
Class (m ps) (mktvs f vs) ({-mapFunDeps tvarf-} fdeps) (mts c f as)
Synonym vs t -> Synonym (mtvs f vs) (m t)
Tyvar -> Tyvar
where
m x = mapNames2 c f x
tvarf = fst f usetype
instance MapNames i1 t1 i2 t2
=> MapNames i1 (Qual i1 t1) i2 (Qual i2 t2) where
mapNames2 c f (ps:=>t) = m ps:=>m t
where m x = mapNames2 c f x
{-
instance MapNames i1 Kind i2 Kind where
mapNames2 c f k = k
mapNames f k = k
-}
--------------------------------------------------------------------------------
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