packages feed

uhc-light-1.1.7.0: src/UHC/Light/Compiler/Gam/Instantiate.hs

module UHC.Light.Compiler.Gam.Instantiate
( gamInst1Exists
, valGamInst1Exists
, tyKiGamInst1Exists
, gamInst1ExistsWithVarMp
, valGamInst1ExistsWithVarMp
, tyKiGamInst1ExistsWithVarMp )
where
import UHC.Light.Compiler.Base.Common
import UHC.Light.Compiler.Ty
import UHC.Light.Compiler.VarMp
import UHC.Light.Compiler.Ty.Trf.Instantiate
import UHC.Light.Compiler.Gam
import UHC.Light.Compiler.Gam.ValGam
import UHC.Light.Compiler.Gam.TyKiGam



{-# LINE 26 "src/ehc/Gam/Instantiate.chs" #-}
gamInst1Exists :: Ord k => (v -> Ty,v -> Ty -> v) -> UID -> Gam k v -> Gam k v
gamInst1Exists (extr,upd) u
  =  fst . gamMapThr (\(n,t) u -> let (u',ue) = mkNewLevUID u in ((n,upd t (tyInst1Exists ue (extr t))),u')) u

{-# LINE 32 "src/ehc/Gam/Instantiate.chs" #-}
gamInst1ExistsWithVarMp :: Ord key => (info -> Ty,Ty -> info -> info) -> VarMp -> UID -> Gam key info -> (Gam key info,VarMp)
gamInst1ExistsWithVarMp getset gamVarMp u g
  = (g',m)
  where (g',m,_)
          = gamDoTyWithVarMp
              getset
              (\_ (t,_) m u -> let (u',ue) = mkNewLevUID u
                               in  (tyInst1Exists ue t,m,u')
              )
              gamVarMp u g

{-# LINE 49 "src/ehc/Gam/Instantiate.chs" #-}
valGamInst1Exists :: UID -> ValGam -> ValGam
valGamInst1Exists = gamInst1Exists (vgiTy,(\vgi t -> vgi {vgiTy=t}))

{-# LINE 54 "src/ehc/Gam/Instantiate.chs" #-}
valGamInst1ExistsWithVarMp :: VarMp -> UID -> ValGam -> (ValGam,VarMp)
valGamInst1ExistsWithVarMp = gamInst1ExistsWithVarMp vgiGetSet

{-# LINE 63 "src/ehc/Gam/Instantiate.chs" #-}
tyKiGamInst1Exists :: UID -> TyKiGam -> TyKiGam
tyKiGamInst1Exists = gamInst1Exists (tkgiKi,(\i k -> i {tkgiKi=k}))

{-# LINE 68 "src/ehc/Gam/Instantiate.chs" #-}
tyKiGamInst1ExistsWithVarMp :: VarMp -> UID -> TyKiGam -> (TyKiGam,VarMp)
tyKiGamInst1ExistsWithVarMp = gamInst1ExistsWithVarMp tkgiGetSet