:: Unif r => MutabilityR r -> TypeSig r -> TCEnv r -> TCEnv r
--------------------------------------------------------------------------------
initClassMethEnv m (TS _ (BGen nm bs) _) γ = tcEnvAdd eThis γ'
  where
    γ'    = γ { tce_bounds = envAdds bts (tce_bounds γ)
              , tce_mut    = Just m
              }
    bts   = [(s,t) | BTV s _ (Just t) <- bs]
    tThis = adjMut $ TRef (Gen nm (map btVar bs)) fTop
    eThis = SI thisSym Local RdOnly tThis

    adjMut (TRef (Gen n (_:ps)) r) = TRef (Gen n (m:ps)) r
    adjMut t                       = t


--------------------------------------------------------------------------------
initModuleEnv :: (Uni
initClassMethEnv :: Unif r => MutabilityR r -> TypeSig r -> TCEnv r -> TCEnv r
initClassMethEnv m (TS _ (BGen nm bs) _) γ = tcEnvAdd eThis γ'
  where
    γ'    = γ { tce_bounds = envAdds bts (tce_bounds γ)
              , tce_mut    = Just m
              }
    bts   = [(s,t) | BTV s _ (Just t) <- bs]
    tThis = adjMut $ TRef (Gen nm (map btVar bs)) fTop
    eThis = SI thisSym Local RdOnly tThis

    adjMut (TRef (Gen n (_:ps)) r) = TRef (Gen n (m:ps)) r
    adjMut t                       = t


--------------------------------------------------------------------------------
initClassMethEnv m (TS _ (BGen nm bs) _) γ = tcEnvAdd eThis γ'
  where
    γ'    = γ { tce_bounds = envAdds bts (tce_bounds γ)
              , tce_mut    = Just m
              }
    bts   = [(s,t) | BTV s _ (Just t) <- bs]
    tThis = adjMut $ TRef (Gen nm (map btVar bs)) fTop
    eThis = SI thisSym Local RdOnly tThis

    adjMut (TRef (Gen n (_:ps)) r) = TRef (Gen n (m:ps)) r
    adjMut t                       = t


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