0 | module Monocle.Traversal
2 | import Control.Applicative.Const
3 | import Control.Monad.Identity
8 | import Monocle.Setter
18 | record Traversal s t a b where
20 | mapA : {0 f : _} -> Applicative f => (a -> f b) -> s -> f t
21 | fold_ : Fold s t a b
22 | set_ : Setter s t a b
27 | 0 Traversal' : (s,a : Type) -> Type
28 | Traversal' s a = Traversal s s a a
36 | interface ToTraversal (0 o : Type -> Type -> Type -> Type -> Type) where
37 | toTraversal : o s t a b -> Traversal s t a b
39 | public export %inline
40 | ToTraversal Traversal where toTraversal = id
46 | public export %inline
47 | ToFold Traversal where toFold = fold_
49 | public export %inline
50 | ToSetter Traversal where
57 | public export %inline
58 | (~>) : Traversal s t a b -> Traversal a b c d -> Traversal s t c d
59 | T t1 f1 s1 ~> T t2 f2 s2 = T (t1 . t2) (f1 ~> f2) (s1 ~> s2)
63 | modifyA : ToTraversal l => Applicative f => l s t a b -> (a -> f b) -> (s -> f t)
64 | modifyA lns fun = mapA (toTraversal lns) fun
71 | public export %inline
72 | traverse_ : Traversable f => Traversal (f a) (f b) a b
73 | traverse_ = T traverse (F foldMap) (S map)
76 | public export %inline
77 | list_ : Traversal (List a) (List b) a b
81 | public export %inline
82 | snoclist_ : Traversal (SnocList a) (SnocList b) a b
83 | snoclist_ = traverse_
86 | public export %inline
87 | list1_ : Traversal (List1 a) (List1 b) a b
91 | public export %inline
92 | vect_ : Traversal (Vect n a) (Vect n b) a b