+Open Scope string_scope.
+Fixpoint kindToString (k:Kind) : string :=
+ match k with
+ | KindStar => "*"
+ | KindArrow KindStar k2 => "*=>"+++kindToString k2
+ | KindArrow k1 k2 => "("+++kindToString k1+++")=>"+++kindToString k2
+ | KindUnliftedType => "#"
+ | KindUnboxedTuple => "(#)"
+ | KindArgType => "??"
+ | KindOpenType => "?"
+ end.
+Instance KindToString : ToString Kind := { toString := kindToString }.
+
+Notation "'★'" := KindStar.
+Notation "a ⇛ b" := (KindArrow a b).
+
+Fixpoint kindToLatex (k:Kind) : Latex :=
+ match k with
+ | ★ => latex "\star"
+ | ★ ⇛ k2 => (latex "\star\Rightarrow ")+=+kindToLatex k2
+ | k1 ⇛ k2 => (latex "(")+=+kindToLatex k1+=+(latex ")\Rightarrow ")+=+kindToLatex k2
+ | KindUnliftedType => latex "\text{\tt{\#}}"
+ | KindUnboxedTuple => latex "\text{\tt{(\#)}}"
+ | KindArgType => latex "\text{\tt{??}}"
+ | KindOpenType => latex "\text{\tt{?}}"
+ end.
+Instance KindToLatex : ToLatex Kind := { toLatex := kindToLatex }.