[Haskell-cafe] "mapping" an Enumerator

John Millikin jmillikin at gmail.com
Wed Dec 21 19:35:55 CET 2011


The presence of (Step b m r) is an artifact of Haskell's type system.
It can be removed through use of language extensions and 'forall' to
give a more aesthetically pleasing signature, but there should be no
behavioral difference.

On Wed, Dec 21, 2011 at 03:26, Michael Snoyman <michael at snoyman.com> wrote:
> On Wed, Dec 21, 2011 at 12:59 PM, Kannan Goundan <kannan at cakoose.com> wrote:
>> Michael Snoyman wrote:
>>
>>> On Wed, Dec 21, 2011 at 12:35 PM, Kannan Goundan <kannan at cakoose.com>
>>> wrote:
>>>> I'm using the Data.Enumerator library.  I'm trying to write a "map"
>>>> function that converts an Enumerator of one type to another. Something
>>>> like:
>>>>
>>>>   mapEnum :: Monad m =>
>>>>          (a -> b) ->
>>>>          Enumerator a m r ->
>>>>          Enumerator b m r
>>>>
>>>> Any hints?
>>>>
>>>> (My exact use case is that I have a ByteString enumerator and I need to
>>>> pass it to something that requires a Blaze.Builder enumerator.)
>>>>
>>>>
>>>> _______________________________________________ Haskell-Cafe mailing
>>>> list
>>>> Haskell-Cafe at haskell.org
>>>> http://www.haskell.org/mailman/listinfo/haskell-cafe
>>>
>>> You can use the Data.Enumerator.List.map function to create an
>>> Enumeratee, and then the Data.Enumerator.$= operators to join them
>>> together. Something like:
>>>
>>> mapEnum f enum = enum $= EL.map f
>>
>> I tried something like that but the resulting type isn't quite what I'm
>> looking for.
>>
>>   mapEnum :: Monad m =>
>>         (a -> b) ->
>>         Enumerator a m (Step b m r) ->
>>         Enumerator a m r
>>
>> (BTW, Michael, my exact use case is that I have ByteString enumerators,
>> but your HTTP-Enumerator library wants Blaze.Builder enumerators :-)
>>
>>
>> _______________________________________________
>> Haskell-Cafe mailing list
>> Haskell-Cafe at haskell.org
>> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
> Huh, I'm stumped ;). John: is this possible in enumerator?
>
> In general though: do you need precisely that type signature? Most of
> the time, Enumerators have polymorphic return types. It might be a
> problem from http-enumerator requiring (), but I *think* we can work
> around that.
>
> Michael



More information about the Haskell-Cafe mailing list