<div dir="ltr">I'm more on the beginner side,<div>but reading up on the difference between print and putStrLn, and pure and return.</div><div>Also, understanding the Maybe Monad. </div><div>Finally, reading through some probability randomness examples of rolling dice (for the chapter on State Monad) and seeing how mathematical they look (ie they are similar to how I would reason about them just knowing statistics).</div><div>Oh yeah..and folds. Fold all the things.</div><div>- Krystal</div></div><div class="gmail_extra"><br><div class="gmail_quote">On 11 July 2018 at 06:46, Vanessa McHale <span dir="ltr"><<a href="mailto:vanessa.mchale@iohk.io" target="_blank">vanessa.mchale@iohk.io</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div text="#000000" bgcolor="#FFFFFF">
<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="m_-3565511884788950344hljs m_-3565511884788950344rust"><p>cdf :: (Num a) => [a] -> [a]
cdf = <span class="m_-3565511884788950344hljs-built_in">drop</span> <span class="m_-3565511884788950344hljs-number">2</span> . (scanl (+) <span class="m_-3565511884788950344hljs-number">0</span>) . ((:) <span class="m_-3565511884788950344hljs-number">0</span>)
</p></code></pre>
#2: enumerate all strings on an alphabet (this uses laziness!)<br>
<pre><code class="m_-3565511884788950344haskell m_-3565511884788950344hljs"><p><span class="m_-3565511884788950344hljs-title">allStrings</span> :: [a] -> [[a]]
<span class="m_-3565511884788950344hljs-title">allStrings</span> = sequence <=< (inits . repeat)
</p></code></pre>
<h1><code class="m_-3565511884788950344hljs m_-3565511884788950344rust"></code></h1>
#3: enumerate the Fibonacci numbers (this one uses laziness too)<br>
<pre><code class="m_-3565511884788950344haskell m_-3565511884788950344hljs"><p><span class="m_-3565511884788950344hljs-title">fibonacci</span> :: (<span class="m_-3565511884788950344hljs-type">Integral</span> a) => [a]
<span class="m_-3565511884788950344hljs-title">fibonacci</span> = <span class="m_-3565511884788950344hljs-number">1</span> : <span class="m_-3565511884788950344hljs-number">1</span> : zipWith (+) fibonacci (tail fibonacci)
</p></code></pre>
<div class="m_-3565511884788950344moz-cite-prefix">#4: Return all subsets of a list<br>
<pre><code class="m_-3565511884788950344haskell m_-3565511884788950344hljs"><p><span class="m_-3565511884788950344hljs-title">allSubsets</span> :: [a] -> [[a]]
<span class="m_-3565511884788950344hljs-title">allSubsets</span> = filterM (pure [<span class="m_-3565511884788950344hljs-type">True</span>, <span class="m_-3565511884788950344hljs-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="m_-3565511884788950344moz-txt-link-freetext" href="http://blog.vmchale.com/article/haskell-aphorisms" target="_blank">http://blog.vmchale.com/<wbr>article/haskell-aphorisms</a><br>
<a class="m_-3565511884788950344moz-txt-link-freetext" href="http://blog.vmchale.com/article/sum" target="_blank">http://blog.vmchale.com/<wbr>article/sum</a><span class=""><br>
<br>
On 07/11/2018 07:10 AM, Simon Peyton Jones via Haskell-Cafe wrote:<br>
</span></div><span class="">
<blockquote type="cite">
<div class="m_-3565511884788950344WordSection1">
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif">Friends<u></u><u></u></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/" target="_blank">Sanger
Institute</a> about Haskell. They do lots of
programming, but they aren’t computer scientists.<u></u><u></u></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>
<u></u><u></u></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. <u></u><u></u></span></p>
<ul style="margin-top:0cm" type="disc">
<li class="m_-3565511884788950344MsoListParagraph" style="margin-left:0cm"><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.<u></u><u></u></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.<u></u><u></u></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.<u></u><u></u></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.<u></u><u></u></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.<u></u><u></u></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.)<u></u><u></u></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.<u></u><u></u></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.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif">Simon<u></u><u></u></span></p>
</div>
<br>
<fieldset class="m_-3565511884788950344mimeAttachmentHeader"></fieldset>
<br>
<pre>______________________________<wbr>_________________
Haskell-Cafe mailing list
To (un)subscribe, modify options or view archives go to:
<a class="m_-3565511884788950344moz-txt-link-freetext" href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" target="_blank">http://mail.haskell.org/cgi-<wbr>bin/mailman/listinfo/haskell-<wbr>cafe</a>
Only members subscribed via the mailman list are allowed to post.</pre>
</blockquote>
</span></div>
<br>______________________________<wbr>_________________<br>
Haskell-Cafe mailing list<br>
To (un)subscribe, modify options or view archives go to:<br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-<wbr>bin/mailman/listinfo/haskell-<wbr>cafe</a><br>
Only members subscribed via the mailman list are allowed to post.<br></blockquote></div><br></div>