class Countable, for countable types
class AtLeastOneCountable, for countable types that have at least one value
class InfiniteCountable, for infinite countable types
class Searchable, for types that can be searched over. This turns out to include some infinite types, see http://math.andrej.com/2007/09/28/seemingly-impossible-functional-programs/.
class Finite, for finite types
class Empty, for empty types
data Nothing, an empty type
Some orphan instances:
(Searchable a,Eq b) => Eq (a -> b)
(Finite t) => Foldable ((->) t)
(Finite a) => Traversable ((->) a)
(Show a,Finite a,Show b) => Show (a -> b)