`HASHKEY`

signatureThe `HASHKEY`

signature defines a hashable key type which is
totally ordered. Note that anything ascribing to `HASHKEY`

implicitly ascribes to both
`ORDKEY`

and
`EQKEY`

as well.

```
type t
val equal : t * t → bool
val compare : t * t → order
val hash : t → int
val toString : t → string
```

`type`

**t**- The abstract key type.

`val`

**equal**: t * t → bool- Determine whether or not the argument pair is considered equal. This operation is reflexive, symmetric, and transitive.
`val`

**compare**: t * t → order- Return one of
`LESS`

,`EQUAL`

, or`GREATER`

as appropriate for the argument pair. This operation is transitive. The comparison must be consistent, that is`compare (x, y) = EQUAL`

if and only if`equal (x, y)`

, and`compare (x, y) = LESS`

if and only if`compare (y, x) = GREATER`

. `val`

**hash**: t → int- Hash the argument into an integer.
`val`

**toString**: t → string- Return a string representation.