Sittampalam, Ganesh ganesh.sittampalam at credit-suisse.com
Thu Aug 13 10:15:14 EDT 2009

```What would preOrder foldr/foldl mean? What about preOrder (reverse . map) and preOrder (map . reverse) ?

Another option would be for map to take a "strategy" as a parameter, sort of like Control.Parallel.Strategies.

Peter Verswyvelen wrote:
> Well, in DDC I believe the order is left to right.
>
> But you guys are right, many orders exist.
>
> On the other hand, a language might offer primitives to convert
> pure-to-effectfull functions no, in which you indicate the order you
> want.
>
> e.g. preOrder map
>
> No?
>
> no? :-)
>
> On Thu, Aug 13, 2009 at 11:06 AM, Heinrich
> Apfelmus<apfelmus at quantentunnel.de> wrote:
>> Russell O'Connor wrote:
>>> Peter Verswyvelen wrote:
>>>
>>>> I kind of agree with the DDC authors here; in Haskell as soon as a
>>>> function has a side effect, and you want to pass that function to a
>>>> pure higher order function, you're stuck, you need to pick the
>>>> monadic version of the higher order function, if it exists. So
>>>> Haskell doesn't really solve the modularity problem, you need two
>>>> versions of each higher order function really,
>>>
>>> Actually you need five versions: The pure version, the pre-order
>>> traversal, the post-order traversal, the in-order traversal, and the
>>> reverse in-order traversal.  And that is just looking at syntax.  If
>>> you care about your semantics you could potentially have more (or
>>> less).
>>
>> Exactly! There is no unique choice for the order of effects when
>> lifting a pure function to an effectful one.
>>
>> For instance, here two different versions of an effectful  map :
>>
>>   mapM f []     = return []
>>   mapM f (x:xs) = do
>>       y  <- f x
>>       ys <- mapM f xs
>>       return (y:ys)
>>
>>   mapM2 f []     = return []
>>   mapM2 f (x:xs) = do
>>       ys <- mapM2 f xs
>>       y  <- f x
>>       return (y:ys)
>>
>> Which one will the DCC compiler chose, given
>>
>>   map f []     = []
>>   map f (x:xs) = f x : map f xs
>>
>> ? Whenever I write a pure higher order function, I'd also have to
>> document the order of effects.
>>
>>
>> Regards,
>> apfelmus
>>
>> --
>> http://apfelmus.nfshost.com
>>
>> _______________________________________________
>>
> _______________________________________________