The IsList class and its methods are intended to be used in
conjunction with the OverloadedLists extension. The Item type
function returns the type of items of the structure l. The fromList
function constructs the structure l from the given list of Item l.
The fromListN function takes the input list's length as a hint. Its
behaviour should be equivalent to fromList. The hint can be used for
more efficient construction of the structure l compared to
fromList. If the given hint is not equal to the input list's length the
behaviour of fromListN is not specified.

The instances of the IsList class should satisfy the following
property:

fromList . toList = id

In the following, we give several example instances of the IsList type
class:

Further GHC improvements/extensions that may benefit OverloadedLists

Defaulting

Currently, the IsList class is not accompanied with defaulting rules.
Although feasible, not much thought has gone into how to specify the meaning
of the default declarations like: default ([a])

Literal Lists

The current implementation of the OverloadedLists extension can be
improved by handling the lists that are only populated with literals in a
special way. More specifically, the compiler could allocate such lists
statically using a compact representation and allow IsList instances
to take advantage of the compact representation. Equipped with this capability
the OverloadedLists extension will be in a good position to subsume the
OverloadedStrings extension (currently, as a special case, string
literals benefit from statically allocated compact representation).