How many HOFs in Phobos?

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Tue Feb 1 13:30:49 PST 2011


On 2/1/11 2:58 PM, Daniel Gibson wrote:
> Am 01.02.2011 21:53, schrieb Jonathan M Davis:
>> On Tuesday 01 February 2011 12:27:32 bearophile wrote:
>>> Walter:
>>>> It's exponentially bad performance makes it short, not useful.
>>>
>>> A program with high complexity is not a problem if you run it only on few
>>> very short examples. There is a place to care for performance (like when
>>> you design a function for Phobos) and there are places where you care for
>>> other things.
>>>
>>> I suggest top stop focusing only on a fault of a program that was not
>>> designed for performance (and if you want to start looking at the numerous
>>> good things present in Haskell. Haskell language and its implementation
>>> contains tens of good ideas).
>>
>> The issue is that if you want something in Phobos, it _does_ need to be designed
>> with performance in mind. Anything which isn't efficient needs to have a very good
>> reason for its existence which balances out its lack of efficiency. If the Haskell
>> implementation isn't performant enough, then it doesn't cut it for Phobos, even
>> if it's a good fit for Haskell.
>>
>> - Jonathan M Davis
>
> Well, he didn't want the slow Levenshtein implementation in Phobos (if I
> understood correctly), but more higher order functions like fold*. These are not
> inherently slow and are most probably useful to implement fast functions as well ;)

The fact that foldl and foldr are only one letter apart is a design 
mistake. They have very different behavior, yet many functional 
programmers consider them largely interchangeable and are genuinely 
surprised when they hear the relative tradeoffs.

std.algorithm.reduce implements foldl, as it should. Simulating foldr on 
bidirectional ranges is as easy as reduce(retro(range)). Defining 
Haskell-style foldr on forward ranges would be difficult because it 
needs lazy evaluation through and through, and is at danger because 
people may use it naively.

For more info see the best answer at 
http://stackoverflow.com/questions/3429634/haskell-foldl-vs-foldr-question.


Andrei


More information about the Digitalmars-d mailing list