Isomorphism Lenses

Isomorphism families can be composed with other lenses using either (.) and id
from the Prelude or from Control.Category. However, if you compose them
with each other using (.) from the Prelude, they will be dumbed down to a
mere Lens.

Composition with this isomorphism is occasionally useful when your Lens,
Traversal or Iso has a constraint on an unused
argument to force that argument to agree with the
type of a used argument and avoid ScopedTypeVariables or other ugliness.

This isomorphism can be used to convert to or from an instance of Enum.

>>> LT^.from enum
0

>>> 97^.enum :: Char
'a'

Note: this is only an isomorphism from the numeric range actually used
and it is a bit of a pleasant fiction, since there are questionable
Enum instances for Double, and Float that exist solely for
[1.0 .. 4.0] sugar and the instances for those and Integer don't
cover all values in their range.