0 | module Control.Lens.At
2 | import Control.Lens.Optic
3 | import Control.Lens.Indexed
4 | import Control.Lens.Iso
5 | import Control.Lens.Lens
6 | import Control.Lens.Optional
7 | import Control.Lens.Traversal
8 | import Control.Lens.Setter
17 | interface Ixed i v a | a where
19 | ix : i -> Optional' a v
23 | iix : Ixed i v a => i -> IndexedOptional' i a v
24 | iix i = constIndex i (ix i)
28 | [Function] Eq e => Ixed e a (e -> a) where
29 | ix k = optional' (Just . ($
k)) (\f,x,k' => if k == k' then x else f k')
38 | interface Ixed i v a => Ixed' i i' v a | a where
40 | ix' : i' -> Lens' a v
44 | iix' : Ixed' i i' v a => i' -> IndexedLens' i' a v
45 | iix' i = constIndex i (ix' i)
49 | [Function'] Eq e => Ixed' e e a (e -> a) using Function where
50 | ix' k = lens ($
k) (\f,x,k' => if k == k' then x else f k')
61 | interface Ixed i v a => At i v a | a where
66 | at : i -> Lens' a (Maybe v)
71 | iat : At i v a => i -> IndexedLens' i a (Maybe v)
72 | iat i = constIndex i (at i)
77 | sans : At i v a => i -> a -> a
78 | sans k = at k .~ Nothing
82 | add : At i v a => i -> v -> a -> a