module Hix.Zip where

zipApply :: (a -> b) -> [a] -> [(a, b)]
zipApply :: forall a b. (a -> b) -> [a] -> [(a, b)]
zipApply a -> b
f = (a -> (a, b)) -> [a] -> [(a, b)]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap \ a
a -> (a
a, a -> b
f a
a)

zipApplyA ::
  Traversable t =>
  Applicative m =>
  (a -> m b) ->
  t a ->
  m (t (a, b))
zipApplyA :: forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Applicative m) =>
(a -> m b) -> t a -> m (t (a, b))
zipApplyA a -> m b
f = (a -> m (a, b)) -> t a -> m (t (a, b))
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> t a -> f (t b)
traverse \ a
a -> (a
a,) (b -> (a, b)) -> m b -> m (a, b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> m b
f a
a

zipApplyL :: (a -> b) -> [a] -> [(b, a)]
zipApplyL :: forall a b. (a -> b) -> [a] -> [(b, a)]
zipApplyL a -> b
f = (a -> (b, a)) -> [a] -> [(b, a)]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap \ a
a -> (a -> b
f a
a, a
a)