Type-oriented programming/Functors
A functor is a type operator equipped with a map
method
declared as follows:
type Functor[T] { func map[U](f Func[T,U]) Self[U] }
The map
method must satisfy some formal requirements that we ignore here for now. The important point is that map
takes
a function of type Func[T,U]
(where U
is
a type argument of the method) and returns an instance of type
Self[U]
, that is, the same functor possibly with a different
type argument. You’ve already met the Maybe
functor:
type Maybe[T] : Functor[T] { property val T func map[U](f Func[T,U]) Self[U] { return new Self[U] { val = self.val.isNil() ? nil : f(self.val) } } func description() String { return self.val.isNil() ? "none" : self.val.description() } }
In the next section, we’ll use Maybe
to explain
what a monad is and how a generic Monad
type
can be implemented.
NB: The pseudocode can be tried out using the Funcy app, which can be downloaded for free from
Apple’s App Store (iOS/macOS),
Google Play (Android) or Amazon Appstore. The code to be executed must be placed in a main {}
block.