10 | module Data.Functor.Indexed
15 | export infixr 4 <|$>
19 | interface (Functor f) => IndFunctor i f | f where
20 | imap : (i -> x -> y) -> f x -> f y
23 | (<|$>) : (IndFunctor i f) => (i -> x -> y) -> f x -> f y
27 | IndFunctor k (Pair k) where
28 | imap f (i, x) = (i, f i x)
31 | IndFunctor () Maybe where
35 | IndFunctor Nat List where
36 | imap f = inner 0 where
37 | inner : Nat -> List x -> List y
39 | inner i (a::as) = f i a::inner (i+1) as
42 | IndFunctor (Fin k) (Vect k) where
44 | imap f (x :: xs) = f FZ x :: imap (f . FS) xs