Proposal: Add a strict version of <$> for monads

Johan Tibell johan.tibell at
Fri Nov 29 12:07:58 UTC 2013

Hi all,

I propose we add a strict version of <$> to base:

    -- | A strict version of 'Data.Functor.<$>' for monads.
    (<$!>) :: Monad m => (a -> b) -> m a -> m b
    f <$!> m = do
        a <- m
        return $! f a
    {-# INLINE (<$!>) #-}

    infixl 4 <$!>

It works on Monads instead of Functors as required by us inspecting the

This version is highly convenient if you want to work with
functors/applicatives in e.g. parser and avoid spurious thunks at the same
time. I realized that it was needed while fixing large space usage (but not
space-leak) issues in cassava.

I believe Edward Kmett discovered the need for it independently as well.

Deadline: 3 weeks

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the Libraries mailing list