initialTyConEnv :: M.Map TyConName F.SemanticSig
initialTyConEnv = M.fromList [(U.s2n "->",
                               F.TypeSem arrowLam ([F.KType, F.KType] `F.kArrs` F.KType))
                             , (U.s2n "Dist", F.TypeSem distLam (F.KType `F.KArr` F.KType))
                             , (U.s2n "Real", F.TypeSem (F.TV $ U.s2n "Real") F.KType)
                             , (U.s2n "Int", F.TypeSem (F.TV $ U.s2n "Int") F.KType) 
                             ]
  where
    arrowLam = F.TLam $ U.bind (alpha, U.embed F.KType) $
               F.TLam $ U.bind (beta, U.embed F.KType) $
               F.TArr (F.TV alpha) (F.TV beta)
    distLam = F.TLam $ U.bind (alpha, U.embed F.KType) $ F.TDist (F.TV alpha)
    alpha = U.s2n "α"
    beta = U.s2n "β"


initialTyConEnv :: M.Map TyConName F.SemanticSig
initialTyConEnv = M.fromList [(U.s2n "->",
                               F.TypeSem arrowLam ([F.KType, F.KType] `F.kArrs` F.KType))
                             , (U.s2n "Dist", F.TypeSem distLam (F.KType `F.KArr` F.KType))
                             , (U.s2n "Real", F.TypeSem (F.TV $ U.s2n "Real") F.KType)
                             , (U.s2n "Int", F.TypeSem (F.TV $ U.s2n "Int") F.KType) 
                             ]
  where
    arrowLam = F.TLam $ U.bind (alpha, U.embed F.KType) $
               F.TLam $ U.bind (beta, U.embed F.KType) $
               F.TArr (F.TV alpha) (F.TV beta)
    distLam = F.TLam $ U.bind (alpha, U.embed F.KType) $ F.TDist (F.TV alpha)
    alpha = U.s2n "α"
    beta = U.s2n "β"
initialTyConEnv = M.fromList [(U.s2n "->",
                               F.TypeSem arrowLam ([F.KType, F.KType] `F.kArrs` F.KType))
                             , (U.s2n "Dist", F.TypeSem distLam (F.KType `F.KArr` F.KType))
                             , (U.s2n "Real", F.TypeSem (F.TV $ U.s2n "Real") F.KType)
                             , (U.s2n "Int", F.TypeSem (F.TV $ U.s2n "Int") F.KType) 
                             ]
  where
    arrowLam = F.TLam $ U.bind (alpha, U.embed F.KType) $
               F.TLam $ U.bind (beta, U.embed F.KType) $
               F.TArr (F.TV alpha) (F.TV beta)
    distLam = F.TLam $ U.bind (alpha, U.embed F.KType) $ F.TDist (F.TV alpha)
    alpha = U.s2n "α"
    beta = U.s2n "β"