module Data.Accessor.Basic (
T, fromSetGet, fromLens, fromWrapper,
self, null, result,
set, (^=), compose,
get, (^.),
modify, (^:),
(.>), (<.),
($%),
merge,
) where
import qualified Data.Accessor.Private as A
import Data.Accessor.Private (T(..), )
import Prelude hiding (null)
fromSetGet :: (a -> r -> r) -> (r -> a) -> T r a
fromSetGet :: (a -> r -> r) -> (r -> a) -> T r a
fromSetGet setF :: a -> r -> r
setF getF :: r -> a
getF =
(r -> (a, a -> r)) -> T r a
forall r a. (r -> (a, a -> r)) -> T r a
Cons ((r -> (a, a -> r)) -> T r a) -> (r -> (a, a -> r)) -> T r a
forall a b. (a -> b) -> a -> b
$ \r :: r
r -> (r -> a
getF r
r, (a -> r -> r) -> r -> a -> r
forall a b c. (a -> b -> c) -> b -> a -> c
flip a -> r -> r
setF r
r)
fromLens :: (r -> (a, a -> r)) -> T r a
fromLens :: (r -> (a, a -> r)) -> T r a
fromLens = (r -> (a, a -> r)) -> T r a
forall r a. (r -> (a, a -> r)) -> T r a
Cons
fromWrapper :: (b -> a) -> (a -> b) -> T a b
fromWrapper :: (b -> a) -> (a -> b) -> T a b
fromWrapper wrap :: b -> a
wrap unwrap :: a -> b
unwrap =
(b -> a -> a) -> (a -> b) -> T a b
forall a r. (a -> r -> r) -> (r -> a) -> T r a
fromSetGet (a -> a -> a
forall a b. a -> b -> a
const (a -> a -> a) -> (b -> a) -> b -> a -> a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. b -> a
wrap) a -> b
unwrap
self :: T r r
self :: T r r
self = T r r
forall r. T r r
A.self
null :: T r ()
null :: T r ()
null = (() -> r -> r) -> (r -> ()) -> T r ()
forall a r. (a -> r -> r) -> (r -> a) -> T r a
fromSetGet ((r -> () -> r) -> () -> r -> r
forall a b c. (a -> b -> c) -> b -> a -> c
flip r -> () -> r
forall a b. a -> b -> a
const) (() -> r -> ()
forall a b. a -> b -> a
const ())
result :: Eq a => a -> T (a -> b) b
result :: a -> T (a -> b) b
result ai :: a
ai =
(b -> (a -> b) -> a -> b) -> ((a -> b) -> b) -> T (a -> b) b
forall a r. (a -> r -> r) -> (r -> a) -> T r a
fromSetGet (\r :: b
r f :: a -> b
f a :: a
a -> if a
aa -> a -> Bool
forall a. Eq a => a -> a -> Bool
==a
ai then b
r else a -> b
f a
a) ((a -> b) -> a -> b
forall a b. (a -> b) -> a -> b
$a
ai)
set :: T r a -> a -> r -> r
set :: T r a -> a -> r -> r
set f :: T r a
f a :: a
a r :: r
r = (a, a -> r) -> a -> r
forall a b. (a, b) -> b
snd (T r a -> r -> (a, a -> r)
forall r a. T r a -> r -> (a, a -> r)
decons T r a
f r
r) a
a
infixr 5 ^=, ^:
(^=) :: T r a -> a -> (r -> r)
^= :: T r a -> a -> r -> r
(^=) = T r a -> a -> r -> r
forall r a. T r a -> a -> r -> r
set
compose :: [r -> r] -> r -> r
compose :: [r -> r] -> r -> r
compose = (r -> [r -> r] -> r) -> [r -> r] -> r -> r
forall a b c. (a -> b -> c) -> b -> a -> c
flip ((r -> (r -> r) -> r) -> r -> [r -> r] -> r
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl (((r -> r) -> r -> r) -> r -> (r -> r) -> r
forall a b c. (a -> b -> c) -> b -> a -> c
flip (r -> r) -> r -> r
forall a. a -> a
id))
get :: T r a -> r -> a
get :: T r a -> r -> a
get f :: T r a
f = (a, a -> r) -> a
forall a b. (a, b) -> a
fst ((a, a -> r) -> a) -> (r -> (a, a -> r)) -> r -> a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. T r a -> r -> (a, a -> r)
forall r a. T r a -> r -> (a, a -> r)
decons T r a
f
infixl 8 ^.
(^.) :: r -> T r a -> a
^. :: r -> T r a -> a
(^.) = (T r a -> r -> a) -> r -> T r a -> a
forall a b c. (a -> b -> c) -> b -> a -> c
flip T r a -> r -> a
forall r a. T r a -> r -> a
get
modify :: T r a -> (a -> a) -> (r -> r)
modify :: T r a -> (a -> a) -> r -> r
modify f :: T r a
f g :: a -> a
g rOld :: r
rOld =
let (a :: a
a,rSetA :: a -> r
rSetA) = T r a -> r -> (a, a -> r)
forall r a. T r a -> r -> (a, a -> r)
decons T r a
f r
rOld
in a -> r
rSetA (a -> a
g a
a)
(^:) :: T r a -> (a -> a) -> (r -> r)
^: :: T r a -> (a -> a) -> r -> r
(^:) = T r a -> (a -> a) -> r -> r
forall r a. T r a -> (a -> a) -> r -> r
modify
infixl 0 $%
($%) :: a -> (a -> b) -> b
$% :: a -> (a -> b) -> b
($%) = ((a -> b) -> a -> b) -> a -> (a -> b) -> b
forall a b c. (a -> b -> c) -> b -> a -> c
flip (a -> b) -> a -> b
forall a b. (a -> b) -> a -> b
($)
infixl 9 .>
(.>) :: T a b -> T b c -> T a c
.> :: T a b -> T b c -> T a c
(.>) = T a b -> T b c -> T a c
forall a b c. T a b -> T b c -> T a c
A.compose
infixr 9 <.
(<.) :: T b c -> T a b -> T a c
<. :: T b c -> T a b -> T a c
(<.) = (T a b -> T b c -> T a c) -> T b c -> T a b -> T a c
forall a b c. (a -> b -> c) -> b -> a -> c
flip T a b -> T b c -> T a c
forall a b c. T a b -> T b c -> T a c
A.compose
merge :: T a b -> T a c -> T a (b,c)
merge :: T a b -> T a c -> T a (b, c)
merge accB :: T a b
accB accC :: T a c
accC =
((b, c) -> a -> a) -> (a -> (b, c)) -> T a (b, c)
forall a r. (a -> r -> r) -> (r -> a) -> T r a
fromSetGet
(\(b :: b
b,c :: c
c) -> T a b -> b -> a -> a
forall r a. T r a -> a -> r -> r
set T a b
accB b
b (a -> a) -> (a -> a) -> a -> a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. T a c -> c -> a -> a
forall r a. T r a -> a -> r -> r
set T a c
accC c
c)
(\a :: a
a -> (T a b -> a -> b
forall r a. T r a -> r -> a
get T a b
accB a
a, T a c -> a -> c
forall r a. T r a -> r -> a
get T a c
accC a
a))