comp.lang.ada
 help / color / mirror / Atom feed
From: Hadrien Grasland <hadrien.grasland@gmail.com>
Subject: Re: Haskell, anyone?
Date: Thu, 19 Nov 2015 00:56:18 -0800 (PST)
Date: 2015-11-19T00:56:18-08:00	[thread overview]
Message-ID: <36a48f94-41ee-491a-8312-d6e7732bf482@googlegroups.com> (raw)
In-Reply-To: <n2j09a$pg2$1@loke.gir.dk>

Le jeudi 19 novembre 2015 00:06:20 UTC+1, Randy Brukardt a écrit :
> ...
> >This does not mean that there isn't a benefit to the functional ways. But I 
> >don't
> > think that we can handwave away their additional complexity with a simple 
> > "it
> > depends on what you're used to". Functional constructs are, indeed, less 
> > intuitive,
> >and according to Occam's principle such extra learning complexity deserves 
> >a
> >good motivation (which I believe most functional programming fans will be
> >happy giving anyway).
> 
> I agree. In addition, this is an Ada forum, and it would be nice to get back 
> to conversation about Ada.
> 
> So, let me say that it certainly possible to program in a functional style 
> using Ada.
> 
> It's always been possible to construct pure functions (those with no 
> side-effects) in Ada, and it's likely that Ada 2018 will have a way to 
> declare and enforce that.
> 
> One can use the advanced data structures in Ada.Containers to program using 
> lists, maps, trees, and so on without messing with the ugly details 
> (including storage management). It would be easy to use these structures as 
> a basis for even higher level operations if one really wanted to hide 
> iterators and the like. (You can already use the call-back form of iteration 
> to avoid any visible imperative code, if you wanted to do that.)
> 
> As Hadrien said, it's useful to have FP techniques available when they work 
> well, but one really doesn't want to be fenced into any single programming 
> paradyme. Basic imperative programming alone, or ADTs alone, or OOP alone, 
> or FP alone, or whatever alone, is almost never the best way to get things 
> done. Some problems map naturally into one style or another, and its crazy 
> to be fenced into some other style for such problems.
> 
>                                     Randy.

Actually, speaking of functional programming Ada, I'm curious : would there be an elegant way to produce a higher-order function equivalent in Ada ?

Ada sure has the very powerful ability to declare functions within functions, and it also has function pointers. But due to the way accessibility rules work, my understanding is that this would not be enough to implement things like partial application or containers of functions, because once we leave the scope of a function, it instantly ceases to exist.

This would leave us to using ad-hoc functor objects which are declared at global scope and whose state is filled up as needed, as in the C++98 era, which is certainly not what I would call an elegant solution.

Or have I missed some important language feature which could be used to this end, like a way to serialize a function and its state to a stream ?


  reply	other threads:[~2015-11-19  8:56 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-15 20:42 Haskell, anyone? mockturtle
2015-11-15 20:51 ` Paul Rubin
2015-11-15 20:53 ` Nasser M. Abbasi
2015-11-15 21:50 ` Mark Carroll
2015-11-15 22:11 ` mockturtle
2015-11-15 22:48   ` Nasser M. Abbasi
2015-11-15 23:05     ` Mark Carroll
2015-11-16  4:11       ` Paul Rubin
2015-11-16  5:17         ` Nasser M. Abbasi
2015-11-16  5:48           ` Paul Rubin
2015-11-16  5:59             ` Nasser M. Abbasi
2015-11-16  6:47               ` Paul Rubin
2015-11-16  8:45           ` Simon Wright
2015-11-16 14:38             ` Brian Drummond
2015-11-15 23:19     ` Jeffrey R. Carter
2015-11-16  9:36       ` J-P. Rosen
2015-11-16 18:14         ` Jeffrey R. Carter
2015-11-16  3:59   ` Paul Rubin
2015-11-16  8:33   ` Dmitry A. Kazakov
2015-11-16  9:33     ` mockturtle
2015-11-16  9:45       ` Paul Rubin
2015-11-16 10:25 ` Hadrien Grasland
2015-11-16 11:19   ` Simon Wright
2015-11-16 11:25     ` Hadrien Grasland
2015-11-16 13:59   ` G.B.
2015-11-16 20:24   ` Jeffrey R. Carter
2015-11-16 23:23   ` Paul Rubin
2015-11-17  8:26     ` Dmitry A. Kazakov
2015-11-17  9:10       ` Mark Carroll
2015-11-17 20:09         ` Dmitry A. Kazakov
2015-11-17 10:49     ` Hadrien Grasland
2015-11-17 12:01       ` G.B.
2015-11-17 16:43         ` Hadrien Grasland
2015-11-17 18:04           ` Paul Rubin
2015-11-17 21:42             ` Hadrien Grasland
2015-11-18  4:36               ` Paul Rubin
2015-11-18  8:48                 ` Hadrien Grasland
2015-11-18  9:23                   ` Paul Rubin
2015-11-18 10:44                     ` Hadrien Grasland
2015-11-18 11:02                       ` Dmitry A. Kazakov
2015-11-18 12:41                         ` G.B.
2015-11-18 23:06                       ` Randy Brukardt
2015-11-19  8:56                         ` Hadrien Grasland [this message]
2015-11-19  9:19                           ` Hadrien Grasland
2015-11-19 21:27                           ` Randy Brukardt
2015-11-24 12:03                           ` Jacob Sparre Andersen
2015-11-19  7:22                       ` Paul Rubin
2015-11-19  9:39                         ` Hadrien Grasland
2015-11-17 13:01       ` Thomas Løcke
2015-11-17 16:45         ` Hadrien Grasland
2015-11-18  0:11       ` Paul Rubin
2015-11-18  9:44         ` Hadrien Grasland
2015-12-06 12:59   ` David Thompson
2015-12-07  7:25     ` Hadrien Grasland
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox