<story><title>The Story of Haskell at IMVU</title><url>https://chadaustin.me/2016/06/the-story-of-haskell-at-imvu/</url></story><parent_chain><item><author>ayberkt</author><text>It makes me sad how people think imperative programming is a &amp;quot;natural&amp;quot; way to think. I have known lots of people who resist using functional languages for serious projects, marginalizing the &amp;quot;functional&amp;quot; way of thinking as though thinking in terms of &amp;quot;labeled boxes with data in them&amp;quot; (Von Neumann architecture) is some sort of more normal way to think.&lt;p&gt;Before computers people modeled the real world using a Haskell-like pseudocode called &amp;quot;mathematics&amp;quot;.</text></item></parent_chain><comment><author>chadaustin</author><text>I find both mental models useful.  For example, &amp;quot;accumulate all of the monoids in this collection&amp;quot; (&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;hackage.haskell.org&amp;#x2F;package&amp;#x2F;base-4.9.0.0&amp;#x2F;docs&amp;#x2F;Data-Foldable.html#v:msum&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;hackage.haskell.org&amp;#x2F;package&amp;#x2F;base-4.9.0.0&amp;#x2F;docs&amp;#x2F;Data-F...&lt;/a&gt;) makes total sense as a functional operation.  You have a collection and some pure operations you want to apply to combine it all into one thing.&lt;p&gt;But then, sometimes you just want to iterate across a list of directories, read some files, and put some results in lists.  Tail-recursion here feels dumb.  Like, dammit, I&amp;#x27;m the human and you&amp;#x27;re the computer, I know you can turn a sequence of instructions into a tail recursive loop for me, so don&amp;#x27;t make me think.&lt;p&gt;Haskell, due to its effectful &amp;#x2F; monadic vs. pure syntax distinction isn&amp;#x27;t terribly great here.  Ideally I&amp;#x27;d write all of my code in an &amp;quot;imperative style&amp;quot; all the time, but a row-typed effect inference system would determine which functions were pure, or in IO, or async, or in ST, or threw exceptions, etc.  Koka [1] is an interesting language that explores some of these ideas.&lt;p&gt;[1] &lt;a href=&quot;http:&amp;#x2F;&amp;#x2F;research.microsoft.com&amp;#x2F;en-us&amp;#x2F;projects&amp;#x2F;koka&amp;#x2F;&quot; rel=&quot;nofollow&quot;&gt;http:&amp;#x2F;&amp;#x2F;research.microsoft.com&amp;#x2F;en-us&amp;#x2F;projects&amp;#x2F;koka&amp;#x2F;&lt;/a&gt;</text></comment>
<story><title>The Story of Haskell at IMVU</title><url>https://chadaustin.me/2016/06/the-story-of-haskell-at-imvu/</url></story><parent_chain><item><author>ayberkt</author><text>It makes me sad how people think imperative programming is a &amp;quot;natural&amp;quot; way to think. I have known lots of people who resist using functional languages for serious projects, marginalizing the &amp;quot;functional&amp;quot; way of thinking as though thinking in terms of &amp;quot;labeled boxes with data in them&amp;quot; (Von Neumann architecture) is some sort of more normal way to think.&lt;p&gt;Before computers people modeled the real world using a Haskell-like pseudocode called &amp;quot;mathematics&amp;quot;.</text></item></parent_chain><comment><author>technomancy</author><text>If you view it in terms of psychological development, understanding concrete imperative steps happens before children are capable of understanding abstract concepts like mathematics. The works of Seymour Papert describe how these findings relate to education.&lt;p&gt;That said, people who connect this to software in a professional context are doing a disservice since hopefully software professionals have progressed in their intellectual development beyond their teens and are capable of abstract mathematical thought.</text></comment>