module Lens.Family.Identical where import Control.Applicative import Control.Applicative.Backwards (Backwards(..)) import Data.Functor.Identity (Identity(..)) import Data.Functor.Compose (Compose(..)) -- It would really be much better if comonads was in tranformers class Applicative f => Identical f where extract :: f a -> a instance Identical Identity where extract (Identity x) = x instance Identical f => Identical (Backwards f) where extract (Backwards x) = extract x instance (Identical f, Identical g) => Identical (Compose f g) where extract (Compose x) = extract (extract x)