-- | Definitions for working with manifolds of functions, a.k.a. function spaces. module Goal.Geometry.Map ( Map ((>.>),(>$>)) ) where --- Imports --- -- Goal -- import Goal.Geometry.Manifold import Goal.Geometry.Vector -- Charts on Maps -- -- | A 'Manifold' is a 'Map' if it is a binary type-function of two `Manifold's, and can transforms 'Point's on the first 'Manifold' into 'Point's on the second 'Manifold'. class (Manifold x, Manifold y, Manifold (f y x)) => Map c f y x where -- | 'Map' application restricted. (>.>) :: c # f y x -> c #* x -> c # y -- | 'Map' vector application. May sometimes have a more efficient implementation -- than simply mapping (>.>). (>$>) :: c # f y x -> [c #* x] -> [c # y]