I have a type
WrappedApplicative defined in
Data.Monoid.Bonus which is part of the grapefruit-data package. I introduced it because I wanted to make use of the fact that for every applicative functor a and every monoid m, a m is again a monoid.
Data.Monoid.Bonus defines an instance
(Applicative a, Monoid m) => Monoid (WrappedApplicative a m).
WrappedApplicative is just application of a
* -> * type to a
* type. So it seems much better to define a “composition” type which “composes” a unary type with a nullary type. Such a “composition” would be an instance of
Monoid if an applicative functor is composed with a monoid. Thereby I could get rid of
WrappedMonad is also type application. Maybe the above ideas could also be used to remove
WrappedMonad. Maybe this would lead us to libraries which don’t introduce all kinds of wrapper types.
What do you think?
-- Wolfgang Jeltsch 18:23, 4 December 2007 (UTC)