rEnv :: Unif r => TypeSigQ AK r -> TCEnv r -> TCEnv r
--------------------------------------------------------------------------------
initClassCtorEnv (TS _ (BGen nm bs) _) γ = tcEnvAdd eThis γ'
  where
    γ'    = γ { tce_mut    = Just tUQ
              , tce_this   = Just tThis
              , tce_bounds = envAdds bts (tce_bounds γ)
              }
    bts   = [(s,t) | BTV s _ (Just t) <- bs]
    tThis = adjUQ (TRef (Gen nm (map btVar bs)) fTop)
    eThis = SI thisSym Local RdOnly tThis
    adjUQ (TRef (Gen n (_:ps)) r) = TRef (Gen n (tUQ:ps)) r
    adjUQ t                       = t


--------------------------------------------------------------------------------
initClassMethEnv
initClassCtorEnv :: Unif r => TypeSigQ AK r -> TCEnv r -> TCEnv r
initClassCtorEnv (TS _ (BGen nm bs) _) γ = tcEnvAdd eThis γ'
  where
    γ'    = γ { tce_mut    = Just tUQ
              , tce_this   = Just tThis
              , tce_bounds = envAdds bts (tce_bounds γ)
              }
    bts   = [(s,t) | BTV s _ (Just t) <- bs]
    tThis = adjUQ (TRef (Gen nm (map btVar bs)) fTop)
    eThis = SI thisSym Local RdOnly tThis
    adjUQ (TRef (Gen n (_:ps)) r) = TRef (Gen n (tUQ:ps)) r
    adjUQ t                       = t


--------------------------------------------------------------------------------
initClassCtorEnv (TS _ (BGen nm bs) _) γ = tcEnvAdd eThis γ'
  where
    γ'    = γ { tce_mut    = Just tUQ
              , tce_this   = Just tThis
              , tce_bounds = envAdds bts (tce_bounds γ)
              }
    bts   = [(s,t) | BTV s _ (Just t) <- bs]
    tThis = adjUQ (TRef (Gen nm (map btVar bs)) fTop)
    eThis = SI thisSym Local RdOnly tThis
    adjUQ (TRef (Gen n (_:ps)) r) = TRef (Gen n (tUQ:ps)) r
    adjUQ t                       = t


--------------------------------------------------------------------------------