-- |
-- Convert bijections to and from lens isomorphisms in "Control.Lens.Iso".
{-# LANGUAGE RankNTypes, TypeOperators #-}
module Data.Invertible.Lens
  ( toIso
  , unIso
  ) where

import Data.Invertible.Bijection
import qualified Control.Lens.Iso as L

-- |Convert an isomorphism to a lens.
toIso :: a <-> b -> L.Iso' a b
toIso (f :<->: g) = L.iso f g

-- |Convert a lens to an isomorphism.
unIso :: L.AnIso' a b -> a <-> b
unIso l = L.withIso l (:<->:)