<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html;
      charset=windows-1252">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <p>Vanessa, I added your blog to my bookmarks :)</p>
    <p>Thanks<br>
    </p>
    <br>
    <div class="moz-cite-prefix">11.07.2018 16:46, Vanessa McHale wrote:<br>
    </div>
    <blockquote type="cite"
      cite="mid:e684e2b1-0eb2-bae3-bbd8-9f57987e2698@iohk.io">
      <meta http-equiv="Content-Type" content="text/html;
        charset=windows-1252">
      <p>I have several short examples that I quite like:<br>
        <br>
        #1: changes a probability density function into a cumulative
        density function</p>
      <pre><code class="hljs rust"><p>cdf :: (Num a) => [a] -> [a]
cdf = <span class="hljs-built_in">drop</span> <span class="hljs-number">2</span> . (scanl (+) <span class="hljs-number">0</span>) . ((:) <span class="hljs-number">0</span>)

</p></code></pre>
      #2: enumerate all strings on an alphabet (this uses laziness!)<br>
      <pre><code class="haskell hljs"><p><span class="hljs-title">allStrings</span> :: [a] -> [[a]]
<span class="hljs-title">allStrings</span> = sequence <=< (inits . repeat)
</p></code></pre>
      <h1><code class="hljs rust"></code></h1>
      #3: enumerate the Fibonacci numbers (this one uses laziness too)<br>
      <pre><code class="haskell hljs"><p><span class="hljs-title">fibonacci</span> :: (<span class="hljs-type">Integral</span> a) => [a]
<span class="hljs-title">fibonacci</span> = <span class="hljs-number">1</span> : <span class="hljs-number">1</span> : zipWith (+) fibonacci (tail fibonacci)

</p></code></pre>
      <div class="moz-cite-prefix">#4: Return all subsets of a list<br>
        <pre><code class="haskell hljs"><p><span class="hljs-title">allSubsets</span> :: [a] -> [[a]]
<span class="hljs-title">allSubsets</span> = filterM (pure [<span class="hljs-type">True</span>, <span class="hljs-type">False</span>])</p></code></pre>
        <br>
        I also have two blog posts I wrote that contain lots of short
        examples. The first contains lots of short-but-interesting
        programs and the second contains examples of how expressive
        Haskell is (by doing the same thing multiple times):<br>
        <br>
        <a class="moz-txt-link-freetext"
          href="http://blog.vmchale.com/article/haskell-aphorisms"
          moz-do-not-send="true">http://blog.vmchale.com/article/haskell-aphorisms</a><br>
        <a class="moz-txt-link-freetext"
          href="http://blog.vmchale.com/article/sum"
          moz-do-not-send="true">http://blog.vmchale.com/article/sum</a><br>
        <br>
        On 07/11/2018 07:10 AM, Simon Peyton Jones via Haskell-Cafe
        wrote:<br>
      </div>
      <blockquote type="cite"
cite="mid:AM0PR83MB03082E77516AA35BC5955792AD5A0@AM0PR83MB0308.EURPRD83.prod.outlook.com">
        <meta http-equiv="Content-Type" content="text/html;
          charset=windows-1252">
        <meta name="Generator" content="Microsoft Word 15 (filtered
          medium)">
        <style><!--
/* Font Definitions */
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin-top:6.0pt;
        margin-right:0cm;
        margin-bottom:6.0pt;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:6.0pt;
        margin-right:0cm;
        margin-bottom:6.0pt;
        margin-left:36.0pt;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;}
p.Code, li.Code, div.Code
        {mso-style-name:Code;
        margin-top:0cm;
        margin-right:0cm;
        margin-bottom:0cm;
        margin-left:36.0pt;
        margin-bottom:.0001pt;
        font-size:9.0pt;
        font-family:"Courier New";}
span.EmailStyle18
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;
        font-weight:normal;
        font-style:normal;
        text-decoration:none none;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
.MsoPapDefault
        {mso-style-type:export-only;
        margin-top:6.0pt;
        margin-right:0cm;
        margin-bottom:6.0pt;
        margin-left:0cm;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:439761096;
        mso-list-type:hybrid;
        mso-list-template-ids:376759908 134807553 134807555 134807557 134807553 134807555 134807557 134807553 134807555 134807557;}
@list l0:level1
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Symbol;}
@list l0:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:"Courier New";}
@list l0:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Wingdings;}
@list l0:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Symbol;}
@list l0:level5
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:"Courier New";}
@list l0:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Wingdings;}
@list l0:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Symbol;}
@list l0:level8
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:"Courier New";}
@list l0:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Wingdings;}
ol
        {margin-bottom:0cm;}
ul
        {margin-bottom:0cm;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
        <div class="WordSection1">
          <p class="MsoNormal"><span
              style="font-family:"Calibri",sans-serif">Friends<o:p></o:p></span></p>
          <p class="MsoNormal"><span
              style="font-family:"Calibri",sans-serif">In a
              few weeks I’m giving a talk to a bunch of genomics folk at
              the <a href="https://www.sanger.ac.uk/"
                moz-do-not-send="true">Sanger Institute</a> about
              Haskell.   They do lots of programming, but they aren’t
              computer scientists.<o:p></o:p></span></p>
          <p class="MsoNormal"><span
              style="font-family:"Calibri",sans-serif">I can
              tell them plenty about Haskell, but I’m ill-equipped to
              answer the main question in their minds: <i>why should I
                even care about Haskell</i>?  I’m too much of a biased
              witness.<br>
              <br>
              <o:p></o:p></span></p>
          <p class="MsoNormal"><span
              style="font-family:"Calibri",sans-serif">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. <o:p></o:p></span></p>
          <ul style="margin-top:0cm" type="disc">
            <li class="MsoListParagraph"
              style="margin-left:0cm;mso-list:l0 level1 lfo1"><span
                style="font-family:"Calibri",sans-serif">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.<o:p></o:p></span></li>
          </ul>
          <p class="MsoNormal"><span
              style="font-family:"Calibri",sans-serif">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.<o:p></o:p></span></p>
          <p class="MsoNormal"><span
              style="font-family:"Calibri",sans-serif">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.<o:p></o:p></span></p>
          <p class="MsoNormal"><span
              style="font-family:"Calibri",sans-serif">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.<o:p></o:p></span></p>
          <p class="MsoNormal"><span
              style="font-family:"Calibri",sans-serif">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.<o:p></o:p></span></p>
          <p class="MsoNormal"><span
              style="font-family:"Calibri",sans-serif">Pointers
              to your favourite blog posts would be another avenue.  (I
              love the Haskell Weekly News.)<o:p></o:p></span></p>
          <p class="MsoNormal"><span
              style="font-family:"Calibri",sans-serif">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.<o:p></o:p></span></p>
          <p class="MsoNormal"><span
              style="font-family:"Calibri",sans-serif">Thank
              you!  Perhaps your responses on this thread (if any) may
              be helpful to more than just me.<o:p></o:p></span></p>
          <p class="MsoNormal"><span
              style="font-family:"Calibri",sans-serif">Simon<o:p></o:p></span></p>
        </div>
        <!--'"--><br>
        <fieldset class="mimeAttachmentHeader"></fieldset>
        <br>
        <pre wrap="">_______________________________________________
Haskell-Cafe mailing list
To (un)subscribe, modify options or view archives go to:
<a class="moz-txt-link-freetext" href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" moz-do-not-send="true">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a>
Only members subscribed via the mailman list are allowed to post.</pre>
      </blockquote>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
Haskell-Cafe mailing list
To (un)subscribe, modify options or view archives go to:
<a class="moz-txt-link-freetext" href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a>
Only members subscribed via the mailman list are allowed to post.</pre>
    </blockquote>
    <br>
  </body>
</html>