{-# LANGUAGE AllowAmbiguousTypes #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} module Data.Lens.Barlow where import Control.Lens (Optic) import Data.Lens.Barlow.Construction ( ConstructBarlow(..) ) import Data.Lens.Barlow.Parser (Parse) barlow :: forall path {p} {f} {s} {t} {a} {b}. (ConstructBarlow (Parse path) p f s t a b) => Optic p f s t a b barlow :: forall (path :: Symbol) {p :: * -> * -> *} {f :: * -> *} {s} {t} {a} {b}. ConstructBarlow (Parse path) p f s t a b => Optic p f s t a b barlow = forall (path :: [Tag]) (p :: * -> * -> *) (f :: * -> *) s t a b. ConstructBarlow path p f s t a b => Optic p f s t a b constructBarlow @(Parse path) bw :: forall path {p} {f} {s} {t} {a} {b}. (ConstructBarlow (Parse path) p f s t a b) => Optic p f s t a b bw :: forall (path :: Symbol) {p :: * -> * -> *} {f :: * -> *} {s} {t} {a} {b}. ConstructBarlow (Parse path) p f s t a b => Optic p f s t a b bw = forall (path :: Symbol) {p :: * -> * -> *} {f :: * -> *} {s} {t} {a} {b}. ConstructBarlow (Parse path) p f s t a b => Optic p f s t a b barlow @path