"Co-lift" is not possible for functors generally. Comonads have a method extract :: Comonad w => w a -> a, which is somewhat related.

Distributing and gathering are both really distributing. The first example distributes [] over f while the second example distributes f over []. Neither are possible for functors generally, but Applicative and Data.Traversable are strong enough to provide sequenceA :: (Traversable t, Applicative f) => t (f a) -> f (t a). The problem is that the Applicative and Traversable laws alone are not enough to guarantee that this is well behaved.

What you actually need is a stronger notion that f (g a) is an "f-structure" containing "g-structures" all of the same shape. If they aren't, the inner structures won't be distributed properly and some of the odd shaped bits might get cut off. For example, try to transpose a list of lists (iow, distribute [] over []) and you'll see that all of the inner lists must be the same length for your transposition to be well behaved. Conor McBride covers this in a very interesting way in this StackOverflow answer: http://stackoverflow.com/a/13100857/2225384

On Wed, Mar 2, 2016 at 2:50 PM Joel Neely <joel.neely@gmail.com> wrote:
IIUC, one would describe fmap as "lifting" a function g into a functor f, in the sense of 

Functor f => (g a b) -> g a -> g b

Is there an inverse concept (? co-lift ?) that describes

Functor f => (g a -> g b) -> a -> b

Similarly is there standard terminology for "distributing" and "gathering" in the sense of

Functor f => f [a] -> [f a]

and

Functor f => [f a] -> f [a]

respectively?

References much appreciated!
-jn-

--
Beauty of style and harmony and grace and good rhythm depend on simplicity. - Plato
_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners