Pure functions in D

Fawzi Mohamed fmohamed at mac.com
Fri Oct 3 03:17:01 PDT 2008


On 2008-10-03 01:37:40 +0200, bearophile <bearophileHUGS at lycos.com> said:

>> renoX:
>>> Sure, D should have monads as soon as Haskell programmers are able to
>>> explain this concept to 'normal' programmers (and no cheating such as
>>> the classical handwaving, this is a way to wrap side effects..)
>>> So probably never then.
> 
> You can also read this, it's quite easy:
> http://www.reddit.com/r/programming/comments/64th1/monads_in_python_in_production_code_you_can_and/c02u9mb

It 
> 
> also shows how they have already solved the problem of exceptions in 
> languages with pure functions, with the Maybe monad :-)
> 
> As I've said in the past, functional programming doesn't work alone, it 
> works in an ecology of features. So adding a single thing isn't enough. 
> For example you may need a compiler able of tail call elimination (GCC 
> is able to do this sometimes), have a short lambda syntax (like the C# 
> one: x => x*2 ), have more type inferencing (a stronger type system), 
> closures, simple ways to manage immutability, pure functions, plus 
> other smaller things.
> 
> Among the smaller things I'd like there's a generic len() function 
> similar to the Python one and the one I've put in my libs. It's able to 
> call the length attribute if present, and to count items in a lazy 
> iterable too.
> You can use it this way:
> auto b = sorted(a, &len!(BaseType1!(typeof(a))));
> That works, and sorts the items of the a iterable according to the 
> length of its items. BaseType1 is a template that returns the type of 
> the items at the first level that the given type contains/yields.
> That shows the type system isn't strong enough yet for higher order 
> functional programming, because len is a function template, and you 
> have to specialize it manually to find its pointer/delegate. In a 
> language with a more powerful type system you may use:
> auto b = sorted(a, @len)
> 
> Bye,
> bearophile

Functional programming doesn't necessarily need a stronger type system, 
it might also have a weaker one, don't forget lisp & co, you just move 
things to the runtime...

Fawzi




More information about the Digitalmars-d mailing list