| Safe Haskell | Safe |
|---|---|
| Language | Haskell2010 |
Lens.Micro.Classes
Documentation
class Each s t a b | s -> a, t -> b, s b -> t, t a -> s where Source
Minimal complete definition
Nothing
Methods
each :: Traversal s t a b Source
each tries to be a universal Traversal – it behaves like traverse in most situations, but also adds support for e.g. tuples with same-typed values:
>>>(1,2) & each %~ succ(2,3)
>>>["x", "y", "z"] ^. each"xyz"
However, note that each doesn't work on every instance of Traversable. If you have a Traversable which isn't supported by each, you can use traverse instead. Personally, I like using each instead of traverse whenever possible – it's shorter and more descriptive.
You can use each with these things:
each::Traversal[a] [b] a beach::Traversal(Maybea) (Maybeb) a beach::Traversal(a,a) (b,b) a beach::Traversal(a,a,a) (b,b,b) a beach::Traversal(a,a,a,a) (b,b,b,b) a beach::Traversal(a,a,a,a,a) (b,b,b,b,b) a beach:: (RealFloata,RealFloatb) =>Traversal(Complexa) (Complexb) a b
Instances
| Each [a] [b] a b Source | |
| Each (Complex a) (Complex b) a b Source | |
| Each (Maybe a) (Maybe b) a b Source | |
| ((~) * a b, (~) * q r) => Each (a, b) (q, r) a q Source | |
| ((~) * a b, (~) * a c, (~) * q r, (~) * q s) => Each (a, b, c) (q, r, s) a q Source | |
| ((~) * a b, (~) * a c, (~) * a d, (~) * q r, (~) * q s, (~) * q t) => Each (a, b, c, d) (q, r, s, t) a q Source | |
| ((~) * a b, (~) * a c, (~) * a d, (~) * a e, (~) * q r, (~) * q s, (~) * q t, (~) * q u) => Each (a, b, c, d, e) (q, r, s, t, u) a q Source |
class Field1 s t a b | s -> a, t -> b, s b -> t, t a -> s where Source
Minimal complete definition
Nothing
Methods
Gives access to the 1st field of a tuple (up to 5-tuples).
Getting the 1st component:
>>>(1,2,3,4,5) ^. _11
Setting the 1st component:
>>>(1,2,3) & _1 .~ 10(10,2,3)
Note that this lens is lazy, and can set fields even of undefined:
>>>set _1 10 undefined :: (Int, Int)(10,*** Exception: Prelude.undefined
This is done to avoid violating a lens law stating that you can get back what you put:
>>>view _1 . set _1 10 $ (undefined :: (Int, Int))10
The implementation (for 2-tuples) is:
_1f t = (,)<$>f (fstt)<*>pure(sndt)
or, alternatively,
_1f ~(a,b) = (\a' -> (a',b))<$>f a
(where ~ means a lazy pattern).
class Field2 s t a b | s -> a, t -> b, s b -> t, t a -> s where Source
Minimal complete definition
Nothing
class Field3 s t a b | s -> a, t -> b, s b -> t, t a -> s where Source
Minimal complete definition
Nothing