[Haskell-cafe] What is your favourite Haskell "aha" moment?

Ionuț G. Stan ionut.g.stan at gmail.com
Wed Jul 11 14:28:35 UTC 2018


This is not necessarily related to Haskell, as I've had this A-HA moment 
while watching the 1984 SIPC lectures from MIT.

Anyway, at some point, Mr Sussman (or was it Mr Abelson?) used `+` as an 
argument to another function. I was bedazzled!

First of all, it was the syntactic novelty — `+` was not some rigid part 
of the syntax, it was just a name — secondly, it was not any name, it 
was the name of a *function*  that was sent to another function. It was 
probably my first encounter with higher-order functions.

If I remember correctly, the code was along the lines of:

foldl (+) 0 [1,2,3]


On 11/07/2018 15:10, Simon Peyton Jones via Haskell-Cafe wrote:
> Friends
> 
> In a few weeks I’m giving a talk to a bunch of genomics folk at the 
> Sanger Institute <https://www.sanger.ac.uk/> about Haskell.   They do 
> lots of programming, but they aren’t computer scientists.
> 
> I can tell them plenty about Haskell, but I’m ill-equipped to answer the 
> main question in their minds: /why should I even care about Haskell/?  
> I’m too much of a biased witness.
> 
> So I thought I’d ask you for help.  War stories perhaps – how using 
> Haskell worked (or didn’t) for you.  But rather than talk generalities, 
> I’d love to illustrate with copious examples of beautiful code.
> 
>   * Can you identify a few lines of Haskell that best characterise what
>     you think makes Haskell distinctively worth caring about?  
>     Something that gave you an “aha” moment, or that feeling of joy when
>     you truly make sense of something for the first time.
> 
> The challenge is, of course, that this audience will know no Haskell, so 
> muttering about Cartesian Closed Categories isn’t going to do it for 
> them.  I need examples that I can present in 5 minutes, without needing 
> a long setup.
> 
> To take a very basic example, consider Quicksort using list 
> comprehensions, compared with its equivalent in C.  It’s so short, so 
> obviously right, whereas doing the right thing with in-place update in C 
> notoriously prone to fencepost errors etc.  But it also makes much less 
> good use of memory, and is likely to run slower.  I think I can do that 
> in 5 minutes.
> 
> Another thing that I think comes over easily is the ability to abstract: 
> generalising sum and product to fold by abstracting out a functional 
> argument; generalising at the type level by polymorphism, including 
> polymorphism over higher-kinded type constructors.   Maybe 8 minutes.
> 
> But you will have more and better ideas, and (crucially) ideas that are 
> more credibly grounded in the day to day reality of writing programs 
> that get work done.
> 
> Pointers to your favourite blog posts would be another avenue.  (I love 
> the Haskell Weekly News.)
> 
> Finally, I know that some of you use Haskell specifically for genomics 
> work, and maybe some of your insights would be particularly relevant for 
> the Sanger audience.
> 
> Thank you!  Perhaps your responses on this thread (if any) may be 
> helpful to more than just me.
> 
> Simon
> 
> 
> 
> _______________________________________________
> Haskell-Cafe mailing list
> To (un)subscribe, modify options or view archives go to:
> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
> Only members subscribed via the mailman list are allowed to post.
> 


-- 
Ionuț G. Stan  |  http://igstan.ro  |  http://bucharestfp.ro


More information about the Haskell-Cafe mailing list