ii :: (Generic a, GIso (Rep a) b) => Iso a b
ii = iso aToRep repToA where
    aToRep a = apply gIso (from a)
    repToA r = to (unapply gIso r)

----------------------------------------------------------------------------------------------------
-- "Goedel numbers" for ADTs
ii :: (Generic a, GIso (Rep a) b) => Iso a b
ii = iso aToRep repToA where
    aToRep a = apply gIso (from a)
    repToA r = to (unapply gIso r)

----------------------------------------------------------------------------------------------------
-- "Goedel numbers" for ADTs
ii = iso aToRep repToA where
    aToRep a = apply gIso (from a)
    repToA r = to (unapply gIso r)

----------------------------------------------------------------------------------------------------
-- "Goedel numbers" for ADTs