In Haskell, there is a type class called Extend.
The class is defined as the following
class Functor w => Extend w where
extended :: (w a -> b) -> w a -> w b
Every instance of the Extend class should have the following properties:
extended f . extended g = extended (f . extended g)
I can see its similarities to Functor. Particularly, Functor's property fmap f . fmap g == fmap (f . g) looks similar to Extend.
How would you interpret Extend? What is the significance of it? Does it make any computations easier? What abstractions are made when using Extend?