Copyright | (C) 2012-16 Edward Kmett |
---|---|
License | BSD-style (see the file LICENSE) |
Maintainer | Edward Kmett <ekmett@gmail.com> |
Stability | experimental |
Portability | non-portable |
Safe Haskell | Trustworthy |
Language | Haskell98 |
- class Ixed m => At m where
- sans :: At m => Index m -> m -> m
- iat :: At m => Index m -> IndexedLens' (Index m) m (Maybe (IxValue m))
- type family Index (s :: *) :: *
- type family IxValue (m :: *) :: *
- class Ixed m where
- ixAt :: At m => Index m -> Traversal' m (IxValue m)
- iix :: Ixed m => Index m -> IndexedTraversal' (Index m) m (IxValue m)
- class Contains m where
- icontains :: Contains m => Index m -> IndexedLens' (Index m) m Bool
At
At
provides a Lens
that can be used to read,
write or delete the value associated with a key in a Map
-like
container on an ad hoc basis.
An instance of At
should satisfy:
ix
k ≡at
k.
traverse
iat :: At m => Index m -> IndexedLens' (Index m) m (Maybe (IxValue m)) #
An indexed version of at
.
>>>
Map.fromList [(1,"world")] ^@. iat 1
(1,Just "world")
>>>
iat 1 %@~ (\i x -> if odd i then Just "hello" else Nothing) $ Map.empty
fromList [(1,"hello")]
>>>
iat 2 %@~ (\i x -> if odd i then Just "hello" else Nothing) $ Map.empty
fromList []
Ixed
type family Index (s :: *) :: * #
type Index ByteString # | |
type Index ByteString # | |
type Index IntSet # | |
type Index Text # | |
type Index Text # | |
type Index [a] # | |
type Index (Maybe a) # | |
type Index (Identity a) # | |
type Index (NonEmpty a) # | |
type Index (Complex a) # | |
type Index (IntMap a) # | |
type Index (Tree a) # | |
type Index (Seq a) # | |
type Index (Set a) # | |
type Index (HashSet a) # | |
type Index (Vector a) # | |
type Index (Vector a) # | |
type Index (Vector a) # | |
type Index (Vector a) # | |
type Index (e -> a) # | |
type Index (a, b) # | |
type Index (UArray i e) # | |
type Index (Array i e) # | |
type Index (Map k a) # | |
type Index (HashMap k a) # | |
type Index (a, b, c) # | |
type Index (a, b, c, d) # | |
type Index (a, b, c, d, e) # | |
type Index (a, b, c, d, e, f) # | |
type Index (a, b, c, d, e, f, g) # | |
type Index (a, b, c, d, e, f, g, h) # | |
type Index (a, b, c, d, e, f, g, h, i) # | |
type family IxValue (m :: *) :: * #
type IxValue ByteString # | |
type IxValue ByteString # | |
type IxValue IntSet # | |
type IxValue Text # | |
type IxValue Text # | |
type IxValue [a] # | |
type IxValue (Maybe a) # | |
type IxValue (Identity a) # | |
type IxValue (NonEmpty a) # | |
type IxValue (IntMap a) # | |
type IxValue (Tree a) # | |
type IxValue (Seq a) # | |
type IxValue (Set k) # | |
type IxValue (HashSet k) # | |
type IxValue (Vector a) # | |
type IxValue (Vector a) # | |
type IxValue (Vector a) # | |
type IxValue (Vector a) # | |
type IxValue (e -> a) # | |
type IxValue (a, a2) # | |
type IxValue (UArray i e) # | |
type IxValue (Array i e) # | |
type IxValue (Map k a) # | |
type IxValue (HashMap k a) # | |
type IxValue (a, a2, a3) # | |
type IxValue (a, a2, a3, a4) # | |
type IxValue (a, a2, a3, a4, a5) # | |
type IxValue (a, a2, a3, a4, a5, a6) # | |
type IxValue (a, a2, a3, a4, a5, a6, a7) # | |
type IxValue (a, a2, a3, a4, a5, a6, a7, a8) # | |
type IxValue (a, a2, a3, a4, a5, a6, a7, a8, a9) # | |
Provides a simple Traversal
lets you traverse
the value at a given
key in a Map
or element at an ordinal position in a list or Seq
.
ix :: Index m -> Traversal' m (IxValue m) #
NB: Setting the value of this Traversal
will only set the value in
at
if it is already present.
If you want to be able to insert missing values, you want at
.
>>>
Seq.fromList [a,b,c,d] & ix 2 %~ f
fromList [a,b,f c,d]
>>>
Seq.fromList [a,b,c,d] & ix 2 .~ e
fromList [a,b,e,d]
>>>
Seq.fromList [a,b,c,d] ^? ix 2
Just c
>>>
Seq.fromList [] ^? ix 2
Nothing
ix :: (Applicative f, At m) => Index m -> LensLike' f m (IxValue m) #
NB: Setting the value of this Traversal
will only set the value in
at
if it is already present.
If you want to be able to insert missing values, you want at
.
>>>
Seq.fromList [a,b,c,d] & ix 2 %~ f
fromList [a,b,f c,d]
>>>
Seq.fromList [a,b,c,d] & ix 2 .~ e
fromList [a,b,e,d]
>>>
Seq.fromList [a,b,c,d] ^? ix 2
Just c
>>>
Seq.fromList [] ^? ix 2
Nothing
Ixed ByteString # | |
Ixed ByteString # | |
Ixed IntSet # | |
Ixed Text # | |
Ixed Text # | |
Ixed [a] # | |
Ixed (Maybe a) # | |
Ixed (Identity a) # | |
Ixed (NonEmpty a) # | |
Ixed (IntMap a) # | |
Ixed (Tree a) # | |
Ixed (Seq a) # | |
Ord k => Ixed (Set k) # | |
(Eq k, Hashable k) => Ixed (HashSet k) # | |
Ixed (Vector a) # | |
Storable a => Ixed (Vector a) # | |
Unbox a => Ixed (Vector a) # | |
Prim a => Ixed (Vector a) # | |
Eq e => Ixed (e -> a) # | |
(~) * a a2 => Ixed (a, a2) # | |
(IArray UArray e, Ix i) => Ixed (UArray i e) # | arr |
Ix i => Ixed (Array i e) # | arr |
Ord k => Ixed (Map k a) # | |
(Eq k, Hashable k) => Ixed (HashMap k a) # | |
((~) * a a2, (~) * a a3) => Ixed (a, a2, a3) # | |
((~) * a a2, (~) * a a3, (~) * a a4) => Ixed (a, a2, a3, a4) # | |
((~) * a a2, (~) * a a3, (~) * a a4, (~) * a a5) => Ixed (a, a2, a3, a4, a5) # | |
((~) * a a2, (~) * a a3, (~) * a a4, (~) * a a5, (~) * a a6) => Ixed (a, a2, a3, a4, a5, a6) # | |
((~) * a a2, (~) * a a3, (~) * a a4, (~) * a a5, (~) * a a6, (~) * a a7) => Ixed (a, a2, a3, a4, a5, a6, a7) # | |
((~) * a a2, (~) * a a3, (~) * a a4, (~) * a a5, (~) * a a6, (~) * a a7, (~) * a a8) => Ixed (a, a2, a3, a4, a5, a6, a7, a8) # | |
((~) * a a2, (~) * a a3, (~) * a a4, (~) * a a5, (~) * a a6, (~) * a a7, (~) * a a8, (~) * a a9) => Ixed (a, a2, a3, a4, a5, a6, a7, a8, a9) # | |
iix :: Ixed m => Index m -> IndexedTraversal' (Index m) m (IxValue m) #
An indexed version of ix
.
>>>
Seq.fromList [a,b,c,d] & iix 2 %@~ f'
fromList [a,b,f' 2 c,d]
>>>
Seq.fromList [a,b,c,d] & iix 2 .@~ h
fromList [a,b,h 2,d]
>>>
Seq.fromList [a,b,c,d] ^@? iix 2
Just (2,c)
>>>
Seq.fromList [] ^@? iix 2
Nothing
Contains
This class provides a simple Lens
that lets you view (and modify)
information about whether or not a container contains a given Index
.
icontains :: Contains m => Index m -> IndexedLens' (Index m) m Bool #
An indexed version of contains
.
>>>
IntSet.fromList [1,2,3,4] ^@. icontains 3
(3,True)
>>>
IntSet.fromList [1,2,3,4] ^@. icontains 5
(5,False)
>>>
IntSet.fromList [1,2,3,4] & icontains 3 %@~ \i x -> if odd i then not x else x
fromList [1,2,4]
>>>
IntSet.fromList [1,2,3,4] & icontains 3 %@~ \i x -> if even i then not x else x
fromList [1,2,3,4]