| KindTypeFunction k1 k2 => "("+++kindToString k1+++")=>"+++kindToString k2
| KindUnliftedType => "#"
| KindUnboxedTuple => "(#)"
- | KindArgType => "?"
+ | KindArgType => "??"
| KindOpenType => "?"
end.
Instance KindToString : ToString Kind := { toString := kindToString }.
destruct v2; try (right; intro q; inversion q; fail) ; left ; auto.
Defined.
+(* splits a kind into a list of arguments and a result *)
+Fixpoint splitKind (k:Kind) : ((list Kind) * Kind) :=
+ match k with
+ | a ⇛ b => let (args,res) := splitKind b in ((a::args),res)
+ | _ => (nil, k)
+ end.
+