@@ -1,3 +1,4 @@
1+{-# LANGUAGE TupleSections #-}
12{-# LANGUAGE GADTs #-}
23{-# LANGUAGE NoMonomorphismRestriction #-}
34{-# LANGUAGE Rank2Types #-}
@@ -26,6 +27,8 @@ import GHC.Generics ((:*:)(..), (:+:)(..), Generic(..), M1(..), K1(..)
2627import Data.Coerce
2728import Data.Generics.Internal.GenericN (Rec (..))
2829
30+import qualified Data.Generics.Internal.VL.Iso as VL
31+
2932type Iso s t a b
3033 = forall p. (Profunctor p) => p a b -> p s t
3134
@@ -74,6 +77,10 @@ iso :: (s -> a) -> (b -> t) -> Iso s t a b
7477iso = dimap
7578{-# INLINE iso #-}
7679
80+iso2isovl :: Iso s t a b -> VL.Iso s t a b
81+iso2isovl _iso = withIso _iso VL.iso
82+{-# INLINE iso2isovl #-}
83+
7784withIso :: Iso s t a b -> ((s -> a) -> (b -> t) -> r) -> r
7885withIso ai k = case ai (Exchange id id) of
7986 Exchange sa bt -> k sa bt