Return type is HKT<G, B>, which expresses the fact that what we return is using exactly the same type constructor represented by the brand G
HKT<G, B>
G
@override HKT<G, B> map<B>(B Function(A a) f) => ap(pure(f));