# Interfaces.Correlative

zipWith3 : Correlative f => (a -> b -> c -> d) -> f a -> f b -> f c -> f d

  Combine three containers elementwise using some function.

zipWith : Correlative f => (a -> b -> c) -> f a -> f b -> f c

  Combine two containers elementwise using some function.

zip3 : Correlative f => f a -> f b -> f c -> f (a, b, c)

  Combine three containers elementwise into a container of tuples.

zip : Correlative f => f a -> f b -> f (a, b)

  Combine two containers elementwise into a container of pairs.

unzip3 : Functor t => t (a, b, c) -> (t a, t b, t c)

  Convert a container of tuples into a tuple of containers.

unzip : Functor t => t (a, b) -> (t a, t b)

  Convert a container of pairs into a pair of containers.

interface Correlative

  A Correlative functor is a functor where, given `(xs, ys : Correlative f)`,
  certain elements from xs and ys can be paired with one another due to some
  intrinsic property of `f`. Elements that cannot be paired are discarded.

  (</>) : Correlative f => f (a -> b) -> f a -> f b
    Fixity
      Left associative, precedence 3
(</) : Correlative f => f a -> f b -> f a
  Fixity
    Left associative, precedence 3
(/>) : Correlative f => f a -> f b -> f b
  Fixity
    Left associative, precedence 3