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

Nicolas Trangez nicolas at incubaid.com
Sat Nov 30 01:11:02 UTC 2013


I'm without a doubt overlooking something, but couldn't this be (otoh)

    fmap' :: Functor f => (a -> b) -> f a -> f b
    fmap' f = fmap (strictify f)
      where
        strictify s = (($!) id) . s

Nicolas
On Nov 30, 2013 12:11 AM, "Edward Kmett" <ekmett at gmail.com> wrote:

> Figure out how to write one using either of those APIs, and I'll be quite
> impressed. =)
>
> I personally use this quite often when working in a monad, in lieu of
> `return $!` games.
>
> The argument for implementing a version of it in terms of Monad and not
> some new class off to the side of the class hierarchy that Monad doesn't
> subclass is that, frankly, if such a thing existed, I'd still have to use
> this combinator anyways when working with a transformer stack, etc. and
> would derive little benefit.
>
> -Edward
>
>
> On Fri, Nov 29, 2013 at 12:03 PM, Carter Schonwald <
> carter.schonwald at gmail.com> wrote:
>
>> could someone explain to me why this <$!> would be for monads rather
>> being more generally also for functors or applicatives?
>>
>>
>> On Fri, Nov 29, 2013 at 10:35 AM, Johan Tibell <johan.tibell at gmail.com>wrote:
>>
>>> I'm trying to figure out whether this is a property of the functor
>>> itself. I guess it is, but at the same time it seems somewhat orthogonal
>>> whether to `seq` some value`.
>>>
>>>
>>> On Fri, Nov 29, 2013 at 3:50 PM, Twan van Laarhoven <twanvl at gmail.com>wrote:
>>>
>>>> On 29/11/13 12:23, Johan Tibell wrote:
>>>>
>>>>> On Fri, Nov 29, 2013 at 1:19 PM, Twan van Laarhoven <twanvl at gmail.com
>>>>> <mailto:twanvl at gmail.com>> wrote:
>>>>>
>>>>>     I don't like that this function is implemented for Monads, I think
>>>>> that it
>>>>>     makes sense for some other functors as well. Though to do this
>>>>> 'properly' we
>>>>>     would probably end up with another typeclass "StrictFunctor" or
>>>>> something,
>>>>>     and that is perhaps too much unnecessary complexity.
>>>>>
>>>>>
>>>>> Do you have an example of such a functor?
>>>>>
>>>>> -- Johan
>>>>>
>>>>
>>>> The first thing that came to mind was ZipList. Perhaps a more realistic
>>>> example would be parsing combinator or FRP libraries that are applicative
>>>> but not monadic.
>>>>
>>>>
>>>> Twan
>>>>
>>>
>>>
>>> _______________________________________________
>>> Libraries mailing list
>>> Libraries at haskell.org
>>> http://www.haskell.org/mailman/listinfo/libraries
>>>
>>>
>>
>> _______________________________________________
>> Libraries mailing list
>> Libraries at haskell.org
>> http://www.haskell.org/mailman/listinfo/libraries
>>
>>
>
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://www.haskell.org/mailman/listinfo/libraries
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/libraries/attachments/20131130/7fe2d2b7/attachment.html>


More information about the Libraries mailing list