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

Takenobu Tani takenobu.hs at gmail.com
Sat Jul 14 10:05:25 UTC 2018

Hi simon,

I feel a lot of aha in Haskell.
However, the most basic characterise I think are the following.

  * Algebraic data type (*Extremely wonderful*)
  * Pattern matches
  * Higher-order function
  * Partial application
  * Polymorphic type
  * Recursion and Lazy pattern

I show its features in the code below.

Simple code example 1:

    -- Algebraic data type
    data DNA = A | C | G | T
               deriving Show

    -- Using algebraic data type with list
    dna1 :: [DNA]
    dna1 = [A,A,T,C,C,G,C,T,A,G]

    -- Pattern matches
    abbrev :: DNA -> String
    abbrev A = "adenine"
    abbrev C = "cytosine"
    abbrev G = "guanine"
    abbrev T = "thymine"

    -- Higher-order function and Partial application
    abbrevDNAs = map abbrev

    -- Interactive example
    ghci> abbrevDNAs [A,A,C,G,A,T]

Simple code example 2:

    -- Algebraic data type
    data RNA = A | C | G | U
               deriving Show

    data Amino = Ala | Arg | Asn | Asp | Cys | Gln | Glu |
                 Gly | His | Ile | Leu | Lys | Met | Phe |
                 Pro | Ser | Thr | Trp | Tyr | Val | Error
                 deriving Show

    -- Pattern matches
    rna2amino :: [RNA] -> Amino
    rna2amino [A,A,A] = Lys
    rna2amino [A,A,G] = Lys
    rna2amino [G,A,A] = Glu
    rna2amino [A,U,G] = Met
    rna2amino [C,A,U] = His
    rna2amino _       = Error

    -- Higher-order function
    convert :: [RNA] -> [Amino]
    convert xss = map rna2amino $ splitN 3 xss

    -- Polymorphic type, Recursion and Lazy pattern
    splitN :: Int -> [a] -> [[a]]
    splitN _ [] = []
    splitN n xs = let (as,bs) = splitAt n xs
                  in as : splitN n bs

    -- Interactive example
    ghci> convert [A,A,A,G,A,A,A,U,G,C,A,U]

Of course, I am not familiar with genom :)


2018-07-11 21:10 GMT+09:00 Simon Peyton Jones via Haskell-Cafe <
haskell-cafe at haskell.org>:

> 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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20180714/ebe6f0bb/attachment.html>

More information about the Haskell-Cafe mailing list