0 | module Control.Applicative.Indexed
2 | import Control.Functor.Indexed
5 | infixl 3 <<*>>
, <<*
, *>>
8 | interface IndexedFunctor z z f => IndexedApplicative z f | f where
10 | pure : {0 i : z} -> (x : a) -> f a i i
13 | ap : {0 i,j,k : z} -> f (a -> b) i j -> f a j k -> f b i k
16 | (<<*>>) : IndexedApplicative z f => f (a -> b) i j -> f a j k -> f b i k
20 | (<<*) : IndexedApplicative z f => f a i j -> f b j k -> f a i k
21 | x <<* y = map const x <<*>> y
24 | (*>>) : IndexedApplicative z f => f a i j -> f b j k -> f b i k
25 | x *>> y = map (const id) x <<*>> y
29 | when : IndexedApplicative z f => Bool -> Lazy (f () i i) -> f () i i
31 | when False y = pure ()
36 | unless : IndexedApplicative z f => Bool -> Lazy (f () i i) -> f () i i
42 | traverse_ : (Foldable t, IndexedApplicative z f) => (a -> f b i i) -> t a -> f () i i
43 | traverse_ f = foldr ((*>>) . f) (pure ())
47 | sequence_ : (Foldable t, IndexedApplicative z f) => t (f a i i) -> f () i i
48 | sequence_ = foldr (*>>) (pure ())
52 | for_ : (Foldable t, IndexedApplicative z f) => t a -> (a -> f b i i) -> f () i i
53 | for_ = flip traverse_