module SubstituteBaseStruct where import Substitute import Recursive import HasBaseStruct import BaseSyntax substE = substE' rec substE' rec s e0 = case mapEI id (subst s) id (esubst s) id id e0 of HsId (HsVar x) -> s x HsInfixApp e1 (HsVar x) e2 -> s x `hsApp` e1 `hsApp` e2 HsLeftSection e (HsVar x) -> s x `hsApp` e HsRightSection (HsVar x) e -> error "SubstituteBaseStruct.subst HsRightSection" e -> rec e instance MapExp e ds => MapExp e (DI i e p ds t c tp) where mapExp = mapExpD instance MapExp e ds => MapExp e (EI i e p ds t c) where mapExp = mapExpE mapExpD f = mapDI id f id (mapExp f) id id id mapExpE f = mapEI id f id (mapExp f) id id instance MapExp e ds => MapExp e (HsMatchI i e p ds) where mapExp f = mapMatchI id f id (mapExp f) instance MapExp e ds => MapExp e (HsModuleI m i ds) where mapExp = mapDecls . mapExp