Following the type of convert you have
convert f fig = \(x,y) -> f (fig (x,y))
= { Lambda parameter }
convert f fig (x,y) = f (fig (x,y))
= { point wise }
convert f fig (x,y) = (f . fig) (x,y)
= { $ operator }
convert f fig (x,y) = f . fig $ (x,y)
= { (x,y) is a tuple parameter }
convert f fig pos = f . fig $ pos
All those definitions for convert are equivalent and do the trick.
Moreover, if you define a Figure data type:
data Figure a = Figure (Pos -> a)
the convert definition is:
convert f (Figure g) = Figure (\pos -> f . g $ pos)
and corresponds to fmap function of the Functor class for the Figure data type, making a Figure an instance of Functor:
instance Functor Figure where
fmap = convert
Cheers
Francisco