<story><title>Reflecting on Haskell in 2015</title><url>http://www.stephendiehl.com/posts/haskell_2016.html</url></story><parent_chain><item><author>PopsiclePete</author><text>I&amp;#x27;ve tried Haskell 4 times. No joke. I have no problem with currying, higher-order functions, foldl, etc., but Monads. Get. Me. Every. Time.&lt;p&gt;My brain just refuses to fully &amp;quot;grok&amp;quot; them. I still don&amp;#x27;t see why they&amp;#x27;re so awesome. I know I use them day-to-day - LINQ, the &amp;quot;List&amp;quot; abstraction (supposedly also a monad??) but I just don&amp;#x27;t see why it&amp;#x27;s important to understand them on this whole new fundamentally different level.&lt;p&gt;It&amp;#x27;s like - loops. I use loops every day. But if someone were to say - &amp;quot;Hey, did you know that loops are just the Andifuncsplursx abstraction applied on Crazofors?? This is why Crazofors in Haskell are so awesome&amp;quot; I still wouldn&amp;#x27;t &amp;quot;get&amp;quot; Crazofors or why I should care enough to attempt to &amp;quot;get&amp;quot; them.&lt;p&gt;I&amp;#x27;ve just given up at this point.</text></item><item><author>baldfat</author><text>For learning functional programming I find Racket to be the best for teaching functional programming. I think I took 4 tries at teaching myself Haskell and then learning Racket really helped me to get over the learning curve of Haskell though i still consider myself a beginner.</text></item><item><author>dcre</author><text>I really enjoyed this. Just wanted to comment on the author&amp;#x27;s brief comments on Elm.&lt;p&gt;&amp;gt; As of yet, there is no rich polymorphism or higher-kinded types. As such a whole family of the usual functional constructions (monoids, functors, applicatives, monads) are inexpressible.&lt;p&gt;I completely understand that this make Elm quite limited compared to Haskell as the author uses it, but these limitations are precisely what makes Elm accessible to newcomers. I think it&amp;#x27;s a great way to get people into Haskell syntax like partial application and into the functional way of thinking in general.&lt;p&gt;I have learned Haskell very gradually over the past 6 years, and I still find advanced Haskell with all the language extensions very daunting to get into.</text></item></parent_chain><comment><author>vans</author><text>Like Erik Meijer said in his course : there is nothing special or magic about monads. They don&amp;#x27;t deserve all the fuzz arround them. If you don&amp;#x27;t get why monads are so awesome, maybe that&amp;#x27;s a proof that you understood them. Because there is nothing special !!&lt;p&gt;A monad is just a type with 2 functions defined. Like an interface with two methods in OO langages. The 2 functions have to respect some laws but you can imagine whatever implementation for the 2 functions as long as the laws are observed (et type signature of course).&lt;p&gt;You could invent a total different implementation for the list monad, for the maybe monad, etc (if you respect the laws). There is no hidden ultra powerfull meaning which implies only one implementation.&lt;p&gt;The best paper on monads i ever read is an ascii art one, by Graham Hutton :
&lt;a href=&quot;http:&amp;#x2F;&amp;#x2F;www.cs.nott.ac.uk&amp;#x2F;~pszgmh&amp;#x2F;monads&quot; rel=&quot;nofollow&quot;&gt;http:&amp;#x2F;&amp;#x2F;www.cs.nott.ac.uk&amp;#x2F;~pszgmh&amp;#x2F;monads&lt;/a&gt;</text></comment>
<story><title>Reflecting on Haskell in 2015</title><url>http://www.stephendiehl.com/posts/haskell_2016.html</url></story><parent_chain><item><author>PopsiclePete</author><text>I&amp;#x27;ve tried Haskell 4 times. No joke. I have no problem with currying, higher-order functions, foldl, etc., but Monads. Get. Me. Every. Time.&lt;p&gt;My brain just refuses to fully &amp;quot;grok&amp;quot; them. I still don&amp;#x27;t see why they&amp;#x27;re so awesome. I know I use them day-to-day - LINQ, the &amp;quot;List&amp;quot; abstraction (supposedly also a monad??) but I just don&amp;#x27;t see why it&amp;#x27;s important to understand them on this whole new fundamentally different level.&lt;p&gt;It&amp;#x27;s like - loops. I use loops every day. But if someone were to say - &amp;quot;Hey, did you know that loops are just the Andifuncsplursx abstraction applied on Crazofors?? This is why Crazofors in Haskell are so awesome&amp;quot; I still wouldn&amp;#x27;t &amp;quot;get&amp;quot; Crazofors or why I should care enough to attempt to &amp;quot;get&amp;quot; them.&lt;p&gt;I&amp;#x27;ve just given up at this point.</text></item><item><author>baldfat</author><text>For learning functional programming I find Racket to be the best for teaching functional programming. I think I took 4 tries at teaching myself Haskell and then learning Racket really helped me to get over the learning curve of Haskell though i still consider myself a beginner.</text></item><item><author>dcre</author><text>I really enjoyed this. Just wanted to comment on the author&amp;#x27;s brief comments on Elm.&lt;p&gt;&amp;gt; As of yet, there is no rich polymorphism or higher-kinded types. As such a whole family of the usual functional constructions (monoids, functors, applicatives, monads) are inexpressible.&lt;p&gt;I completely understand that this make Elm quite limited compared to Haskell as the author uses it, but these limitations are precisely what makes Elm accessible to newcomers. I think it&amp;#x27;s a great way to get people into Haskell syntax like partial application and into the functional way of thinking in general.&lt;p&gt;I have learned Haskell very gradually over the past 6 years, and I still find advanced Haskell with all the language extensions very daunting to get into.</text></item></parent_chain><comment><author>thinkpad20</author><text>In my opinion, the only way to understand monads is to use them. They&amp;#x27;ll be a little weird at first, but the type system will guarantee you&amp;#x27;re using them in the right way. The thing is that you don&amp;#x27;t really need to understand how a given monad works under the hood; you just need to know how it&amp;#x27;s going to act when you use it. For example, I couldn&amp;#x27;t write the State monad instance right now, not without quite a bit of puzzling anyway. But I use the State monad all the time, because I know how it&amp;#x27;s going to act:&lt;p&gt;&lt;pre&gt;&lt;code&gt;    addToState :: Int -&amp;gt; State Int ()
    addToState number = do
      currentState &amp;lt;- get
      put $ number + currentState
&lt;/code&gt;&lt;/pre&gt;
How is this working exactly? Well who cares. I know that once this function is called, my state will have been incremented by the given amount.</text></comment>