0 | module Control.Lens.Review
2 | import Data.Profunctor
3 | import Data.Profunctor.Costrong
4 | import Control.Lens.Optic
5 | import Control.Lens.Prism
6 | import Control.Lens.Getter
17 | record IsReview p where
18 | constructor MkIsReview
19 | runIsReview : (Bifunctor p, Costrong p, Choice p)
22 | reviewToPrism : IsReview p => IsPrism p
23 | reviewToPrism @{MkIsReview _} = MkIsPrism %search
31 | 0 Review : (s,a : Type) -> Type
32 | Review = Simple (Optic IsReview)
40 | lphantom : (Bifunctor p, Profunctor p) => p b c -> p a c
41 | lphantom = mapFst absurd . lmap {a=Void} absurd
46 | unto : (a -> s) -> Review s a
47 | unto f @{MkIsReview _} = lphantom . rmap f
51 | un : Getter s a -> Review a s
59 | reviews : Review s a -> (e -> a) -> (e -> s)
60 | reviews l = runCoforget . l . MkCoforget
65 | review : Review s a -> a -> s
66 | review l = reviews l id
75 | (^$) : Review s a -> a -> s
80 | re : Review s a -> Getter a s