module Optics.Review
(
Review
, unto
, review
, A_Review
)
where
import Data.Profunctor.Indexed
import Optics.Internal.Bi
import Optics.Internal.Optic
type Review t b = Optic' A_Review NoIx t b
review :: Is k A_Review => Optic' k is t b -> b -> t
review :: forall (k :: OpticKind) (is :: IxList) (t :: OpticKind)
(b :: OpticKind).
Is k A_Review =>
Optic' k is t b -> b -> t
review Optic' k is t b
o = forall (i :: OpticKind) (a :: OpticKind) (b :: OpticKind).
Tagged i a b -> b
unTagged forall (b :: OpticKind) (c :: OpticKind) (a :: OpticKind).
Coercible b c =>
(b -> c) -> (a -> b) -> a -> c
#. forall (p :: OpticKind -> OpticKind -> OpticKind -> OpticKind)
(k :: OpticKind) (is :: IxList) (s :: OpticKind) (t :: OpticKind)
(a :: OpticKind) (b :: OpticKind) (i :: OpticKind).
Profunctor p =>
Optic k is s t a b -> Optic_ k p i (Curry is i) s t a b
getOptic (forall (destKind :: OpticKind) (srcKind :: OpticKind)
(is :: IxList) (s :: OpticKind) (t :: OpticKind) (a :: OpticKind)
(b :: OpticKind).
Is srcKind destKind =>
Optic srcKind is s t a b -> Optic destKind is s t a b
castOptic @A_Review Optic' k is t b
o) forall (a :: OpticKind) (b :: OpticKind) (c :: OpticKind).
Coercible a b =>
(b -> c) -> (a -> b) -> a -> c
.# forall (i :: OpticKind) (a :: OpticKind) (b :: OpticKind).
b -> Tagged i a b
Tagged
{-# INLINE review #-}
unto :: (b -> t) -> Review t b
unto :: forall (b :: OpticKind) (t :: OpticKind). (b -> t) -> Review t b
unto b -> t
f = forall (k :: OpticKind) (is :: IxList) (s :: OpticKind)
(t :: OpticKind) (a :: OpticKind) (b :: OpticKind).
(forall (p :: OpticKind -> OpticKind -> OpticKind -> OpticKind)
(i :: OpticKind).
Profunctor p =>
Optic_ k p i (Curry is i) s t a b)
-> Optic k is s t a b
Optic (forall (p :: OpticKind -> OpticKind -> OpticKind -> OpticKind)
(i :: OpticKind) (a :: OpticKind) (c :: OpticKind)
(b :: OpticKind).
(Profunctor p, Bifunctor p) =>
p i a c -> p i b c
lphantom forall (b :: OpticKind) (c :: OpticKind) (a :: OpticKind).
(b -> c) -> (a -> b) -> a -> c
. forall (p :: OpticKind -> OpticKind -> OpticKind -> OpticKind)
(c :: OpticKind) (d :: OpticKind) (i :: OpticKind)
(b :: OpticKind).
Profunctor p =>
(c -> d) -> p i b c -> p i b d
rmap b -> t
f)
{-# INLINE unto #-}