Safe Haskell | None |
---|---|
Language | Haskell2010 |
- _Many :: IsMany t xs a => Iso' (Many xs) (t xs a)
- _Many' :: IsMany Tagged xs a => Iso' (Many xs) a
- class HasItem a b s t | s a b -> t, t a b -> s where
- class HasItem' a s where
- class HasItemL l a b s t | s l -> a, t l -> b, s l b -> t, t l a -> s where
- class HasItemL' l a s | s l -> a where
- class HasItemTag l a b s t | s l -> a, t l -> b, s l b -> t, t l a -> s where
- class HasItemTag' l a s where
- class HasItemN n a b s t | s n -> a, t n -> b, s n b -> t, t n a -> s where
- class HasItemN' n a s | s n -> a where
- class HasProject as bs ss ts a b s t | a -> as, b -> bs, s -> ss, t -> ts, b as -> a, s as -> a, t as -> a, a bs -> b, s bs -> b, t bs -> b, a ss -> s, b ss -> s, t ss -> s, a ts -> t, b ts -> t, s ts -> t, s a b -> t, t a b -> s where
- class HasProject' as ss a s | a -> as, s -> ss, s as -> a, a ss -> s where
- class HasProjectL ls as bs ss ts a b s t | a -> as, b -> bs, s -> ss, t -> ts, b as -> a, s as -> a, t as -> a, a bs -> b, s bs -> b, t bs -> b, a ss -> s, b ss -> s, t ss -> s, a ts -> t, b ts -> t, s ts -> t, s ls -> as, t ls -> bs, s ls b -> t, t ls a -> s where
- class HasProjectL' ls as ss a s | a -> as, s -> ss, s as -> a, a ss -> s, s ls -> as where
- class HasProjectN ns as bs ss ts a b s t | a -> as, b -> bs, s -> ss, t -> ts, b as -> a, s as -> a, t as -> a, a bs -> b, s bs -> b, t bs -> b, a ss -> s, b ss -> s, t ss -> s, a ts -> t, b ts -> t, s ts -> t, s ns -> as, t ns -> bs, s ns b -> t, t ns a -> s where
- class HasProjectN' ns as ss a s | a -> as, s -> ss, s as -> a, a ss -> s, s ns -> as where
Isomorphism
Single field
Lens for a single field
class HasItem' a s where Source #
fetch
(view
item
) and replace'
(set
item'
) in Lens'
form.
let x = (5 :: Int)./
False./
'X'./
Just 'O'./
nil
x^.
item'
@Int `shouldBe` 5 (x&
item'
@Int .~ 6) `shouldBe` (6 :: Int)./
False./
'X'./
Just 'O'./
nil
class HasItemL l a b s t | s l -> a, t l -> b, s l b -> t, t l a -> s where Source #
class HasItemL' l a s | s l -> a where Source #
fetchL
(view
itemL
) and replaceL
(set
itemL
) in Lens'
form.
let x = (5 :: Int)./
Tagged @Foo False./
Tagged @Bar 'X'./
nil
x^.
itemL'
@Foo Proxy `shouldBe` Tagged @Foo False (x&
itemL'
@Foo Proxy.~
Tagged @Foo True) `shouldBe` (5 :: Int)./
Tagged @Foo True./
Tagged @Bar 'X'./
nil
(UniqueLabelMember * k l xs, (~) * x (KindAtLabel * k l xs)) => HasItemL' k l x (Many xs) Source # | |
class HasItemTag l a b s t | s l -> a, t l -> b, s l b -> t, t l a -> s where Source #
Variation of itemL
that automatically tags and untags the field.
class HasItemTag' l a s where Source #
Variation of itemL'
that automatically tags and untags the field.
A default implementation using generics is not provided as it make GHC think that l
must be type Symbol
when l
can actually be any kind.
Create instances of HasItemTag'
using Data.Generics.Product.Fields as follows:
instance HasField' l Foo a => HasItemTag' l a Foo where
itemTag' = field
l
@
(UniqueLabelMember * k l xs, (~) * (Tagged k l x) (KindAtLabel * k l xs)) => HasItemTag' k l x (Many xs) Source # | |
class HasItemN n a b s t | s n -> a, t n -> b, s n b -> t, t n a -> s where Source #
Polymorphic version of itemN'
Multiple fields
Lens for multiple fields
class HasProject as bs ss ts a b s t | a -> as, b -> bs, s -> ss, t -> ts, b as -> a, s as -> a, t as -> a, a bs -> b, s bs -> b, t bs -> b, a ss -> s, b ss -> s, t ss -> s, a ts -> t, b ts -> t, s ts -> t, s a b -> t, t a b -> s where Source #
Polymorphic version of project'
class HasProject' as ss a s | a -> as, s -> ss, s as -> a, a ss -> s where Source #
select
(view
project
) and amend
(set
project
) in Lens'
form.
project
=lens
select
amend
let x = (5 :: Int)./
False./
'X'./
Just 'O'./
nil
x^.
(project'
@'[Int, Maybe Char]) `shouldBe` (5 :: Int)./
Just 'O'./
nil
(x&
(project'
@'[Int, Maybe Char]).~
((6 :: Int)./
JustP
./
nil
)) `shouldBe` (6 :: Int)./
False./
'X'./
Just 'P'./
nil
class HasProjectL ls as bs ss ts a b s t | a -> as, b -> bs, s -> ss, t -> ts, b as -> a, s as -> a, t as -> a, a bs -> b, s bs -> b, t bs -> b, a ss -> s, b ss -> s, t ss -> s, a ts -> t, b ts -> t, s ts -> t, s ls -> as, t ls -> bs, s ls b -> t, t ls a -> s where Source #
Polymorphic version of projectL'
let x = False./
Tagged @"Hi" (5 :: Int)./
Tagged @Foo False./
Tagged @Bar 'X'./
Tagged @"Bye" 'O'./
nil
(x&
(projectL
@'["Hi", "Bye"] Proxy).~
(True./
Tagged @"Changed" False./
nil
)) `shouldBe` False./
True./
Tagged @Foo False./
Tagged @Bar 'X'./
Tagged @"Changed" False./
nil
(Select smaller larger, Amend smaller smaller' larger, (~) [Type] smaller (KindsAtLabels Type k1 ls larger), IsDistinct k1 ls, UniqueLabels Type k1 ls larger, (~) [Type] larger' (Replaces Type smaller smaller' larger)) => HasProjectL [Type] [k1] ls smaller smaller' larger larger' (Many smaller) (Many smaller') (Many larger) (Many larger') Source # | |
class HasProjectL' ls as ss a s | a -> as, s -> ss, s as -> a, a ss -> s, s ls -> as where Source #
selectL
(view
projectL
) and amendL
(set
projectL
) in Lens'
form.
let x = False./
Tagged @"Hi" (5 :: Int)./
Tagged @Foo False./
Tagged @Bar 'X'./
Tagged @"Bye" 'O'./
nil
x^.
(projectL'
@'[Foo, Bar] Proxy) `shouldBe` Tagged @Foo False./
Tagged @Bar 'X'./
nil (x&
(projectL'
@'["Hi", "Bye"] Proxy).~
(Tagged @"Hi" (6 :: Int)./
Tagged @"Bye" 'P'./
nil)) 'shouldBe
False./
Tagged @"Hi" (6 :: Int)./
Tagged @Foo False./
Tagged @Bar 'X'./
Tagged @"Bye" 'P'./
nil
(Select smaller larger, Amend' smaller larger, (~) [Type] smaller (KindsAtLabels Type k1 ls larger), IsDistinct k1 ls, UniqueLabels Type k1 ls larger) => HasProjectL' [Type] [k1] ls smaller larger (Many smaller) (Many larger) Source # | |
class HasProjectN ns as bs ss ts a b s t | a -> as, b -> bs, s -> ss, t -> ts, b as -> a, s as -> a, t as -> a, a bs -> b, s bs -> b, t bs -> b, a ss -> s, b ss -> s, t ss -> s, a ts -> t, b ts -> t, s ts -> t, s ns -> as, t ns -> bs, s ns b -> t, t ns a -> s where Source #
Polymorphic version of projectN'
class HasProjectN' ns as ss a s | a -> as, s -> ss, s as -> a, a ss -> s, s ns -> as where Source #
selectN
(view
projectN
) and amendN
(set
projectN
) in Lens'
form.
projectN
=lens
selectN
amendN
let x = (5 :: Int)./
False./
'X'./
Just 'O'./
(6 :: Int)./
Just 'A'./
nil
x^.
(projectN
@'[5, 4, 0] Proxy) `shouldBe` Just 'A'./
(6 :: Int)./
(5 ::Int)./
nil
(x&
(projectN
@'[5, 4, 0] Proxy).~
(Just 'B'./
(8 :: Int)./
(4 ::Int)./
nil)) `shouldBe` (4 :: Int)./
False./
'X'./
Just 'O'./
(8 :: Int)./
Just 'B'./
nil