module Kind: `sig`

.. `end`

`as_arrow k`

transforms the kind `k`

to an `n`

-ary arrow kind. This
is permitted for every kind `k`

. A non-arrow kind is viewed as an
arrow kind of arity 0.

`type `

kind =

`|` |
`KTerm` |

`|` |
`KType` |

`|` |
`KPerm` |

`|` |
`KArrow of ``kind * kind` |

val karrow : `('a * kind) list -> kind -> kind`

val as_arrow : `kind -> kind list * kind`

`as_arrow k`

transforms the kind `k`

to an `n`

-ary arrow kind. This
is permitted for every kind `k`

. A non-arrow kind is viewed as an
arrow kind of arity 0.

val arity : `kind -> int`

`arity k`

is the arity of `k`

, viewed as an arrow kind.

val print : `kind -> string`

`print`

and `print_kind`

convert a kind to a textual representation.

val print_kind : `kind -> PPrint.document`

val equal : `kind -> kind -> bool`

`equal`

tests the equality of two kinds.