liftedMonoid :: ∀ 'f 'm. applicative.t f → monoid.t m → monoid.t (f m);
implicit liftedMonoid (module applicative.c);
'liftedMonoid (module 'app) (module 'mon) = 〈
'id = app.return mon.id;
'op = map2 @(module app) mon.op;
〉;
More re-usable and no silly newtype wrapper.
Oh, and by the way: to use the above to write an instance for (→), if Global Script had a monoid type class (which it doesn't need):
instance module monoid.c ('α → 'β) | module monoid.c β =
liftedMonoid (instance module monoid.c β)
;