-\end{code}
-
-\begin{code}
-unifyUnboxedTupleTy :: Arity -> TcType -> TcM s [TcType]
-unifyUnboxedTupleTy arity ty@(TyVarTy tyvar)
- = tcGetTyVar tyvar `thenNF_Tc` \ maybe_ty ->
- case maybe_ty of
- Just ty' -> unifyUnboxedTupleTy arity ty'
- other -> unify_unboxed_tuple_ty_help arity ty
-
-unifyUnboxedTupleTy arity ty
- = case splitTyConApp_maybe ty of
- Just (tycon, arg_tys) | isUnboxedTupleTyCon tycon
- && tyConArity tycon == arity
- -> returnTc arg_tys
- other -> unify_tuple_ty_help arity ty
-
-unify_unboxed_tuple_ty_help arity ty
- = mapNF_Tc (\ _ -> newTyVarTy_OpenKind) [1..arity] `thenNF_Tc` \ arg_tys ->
- unifyTauTy ty (mkUnboxedTupleTy arity arg_tys) `thenTc_`
- returnTc arg_tys
-\end{code}
-
-Make sure a kind is of the form (Type b) for some boxity b.
-
-\begin{code}
-unifyTypeKind :: TcKind -> TcM s ()
-unifyTypeKind kind@(TyVarTy kv)
- = tcGetTyVar kv `thenNF_Tc` \ maybe_kind ->
- case maybe_kind of
- Just kind' -> unifyTypeKind kind'
- Nothing -> unify_type_kind_help kind
-
-unifyTypeKind kind
- = case splitTyConApp_maybe kind of
- Just (tycon, [_]) | tycon == typeCon -> returnTc ()
- other -> unify_type_kind_help kind
-
-unify_type_kind_help kind
- = newOpenTypeKind `thenNF_Tc` \ expected_kind ->
- unifyKind expected_kind kind