<story><title>Why Elm? [pdf]</title><url>http://www.oreilly.com/web-platform/free/files/why-elm.pdf</url></story><parent_chain><item><author>mistersys</author><text>I&amp;#x27;ve tried to use Elm and The Elm Architecture on a project before, but I gave up.&lt;p&gt;The Elm Architecture makes it very easy to create small type safe components, but it forces parent components to manage the state + structure all children components. This makes it hard to use a component and to separate concerns.&lt;p&gt;In order to create a list of stateful children, you must:&lt;p&gt;1. Add a list of the child states to the component state, event if the parent component doesn&amp;#x27;t care about the child&amp;#x27;s state.&lt;p&gt;2. Handle adding + removing child state&amp;#x27;s manually&lt;p&gt;3. Map all scoped child state updates through your reducer, adding a constructor to your action type&lt;p&gt;4. Finally, map each of the child state&amp;#x27;s to the component&amp;#x27;s view.&lt;p&gt;You end up big types and match expressions that just manipulate lists. I have yet to see a FRP library that allows you to just use a component without introducing boilerplate.</text></item></parent_chain><comment><author>rtfeldman</author><text>&amp;gt; In order to create a list of stateful children, you must:&lt;p&gt;This is trivially debunked: here is a 4,000 LoC open-source Elm SPA with small, type-safe reusable views that have state and don&amp;#x27;t do all this. :P&lt;p&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;dev.to&amp;#x2F;rtfeldman&amp;#x2F;tour-of-an-open-source-elm-spa&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;dev.to&amp;#x2F;rtfeldman&amp;#x2F;tour-of-an-open-source-elm-spa&lt;/a&gt;&lt;p&gt;Plenty of counterexamples in there.&lt;p&gt;Here&amp;#x27;s one. &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;rtfeldman&amp;#x2F;elm-spa-example&amp;#x2F;blob&amp;#x2F;master&amp;#x2F;src&amp;#x2F;Views&amp;#x2F;User&amp;#x2F;Follow.elm&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;rtfeldman&amp;#x2F;elm-spa-example&amp;#x2F;blob&amp;#x2F;master&amp;#x2F;src...&lt;/a&gt;&lt;p&gt;Here&amp;#x27;s another. &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;rtfeldman&amp;#x2F;elm-spa-example&amp;#x2F;blob&amp;#x2F;master&amp;#x2F;src&amp;#x2F;Views&amp;#x2F;Errors.elm&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;rtfeldman&amp;#x2F;elm-spa-example&amp;#x2F;blob&amp;#x2F;master&amp;#x2F;src...&lt;/a&gt;&lt;p&gt;Here&amp;#x27;s yet another. &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;rtfeldman&amp;#x2F;elm-spa-example&amp;#x2F;blob&amp;#x2F;master&amp;#x2F;src&amp;#x2F;Views&amp;#x2F;Article.elm&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;rtfeldman&amp;#x2F;elm-spa-example&amp;#x2F;blob&amp;#x2F;master&amp;#x2F;src...&lt;/a&gt;</text></comment>
<story><title>Why Elm? [pdf]</title><url>http://www.oreilly.com/web-platform/free/files/why-elm.pdf</url></story><parent_chain><item><author>mistersys</author><text>I&amp;#x27;ve tried to use Elm and The Elm Architecture on a project before, but I gave up.&lt;p&gt;The Elm Architecture makes it very easy to create small type safe components, but it forces parent components to manage the state + structure all children components. This makes it hard to use a component and to separate concerns.&lt;p&gt;In order to create a list of stateful children, you must:&lt;p&gt;1. Add a list of the child states to the component state, event if the parent component doesn&amp;#x27;t care about the child&amp;#x27;s state.&lt;p&gt;2. Handle adding + removing child state&amp;#x27;s manually&lt;p&gt;3. Map all scoped child state updates through your reducer, adding a constructor to your action type&lt;p&gt;4. Finally, map each of the child state&amp;#x27;s to the component&amp;#x27;s view.&lt;p&gt;You end up big types and match expressions that just manipulate lists. I have yet to see a FRP library that allows you to just use a component without introducing boilerplate.</text></item></parent_chain><comment><author>boubiyeah</author><text>Yeah.&lt;p&gt;My top 3 complaints:&lt;p&gt;1) The crazy boilerplate, the Elm architecture forces you to store all your app state in a single atom. In my experience, this doesn&amp;#x27;t scale well and is bloody annoying (see, even the redux author say you should never store everything in the single atom&amp;#x2F;store); Also, when should state be cleaned up? When the component is shown again, but then you have stale state in the meantime; or when the component is removed? before or after it&amp;#x27;s being transitioned out? (you don&amp;#x27;t want to see a flash of empty data)&lt;p&gt;2) The snail pace at which Elm evolves. I will have delivered 3 or 4 apps for my clients by the time the single Elm maintainer added 5% of the WEB API as native Elm modules. By the time he&amp;#x27;s done, new WEB APIs will have to be covered. It&amp;#x27;s never going to end. That means, a complex Elm app always has javascript. In that case, I&amp;#x27;d rather just use typescript and nothing else.&lt;p&gt;3) The religious focus on purity. The elm maintainer is an haskell user, and it shows. Can you believe that to read the current time or generate a random number, you must be within a component&amp;#x27;s update function, ask for one or the other and you will get your result later, asynchronously? I know some people love that their entire program are fully pure in a mathematical sense, but this always struck me as having way more cons than pros.&lt;p&gt;Also, there is always &amp;quot;just one way to do this or that, all the other ways are disapproved by the Elm creator&amp;quot; The environment&amp;#x2F;community is so closed! If the Elm maintainer did anticipate your very specific need (low chance, he can&amp;#x27;t do everything by himself), the answer is: &amp;quot;always use that, you should never use this other thing, it&amp;#x27;s very dirty&amp;quot;, if not, &amp;quot;just use this JS hack instead&amp;quot;. This is good for beginners seeking very strong guidance, not good for power users trying to deliver stuff fast.&lt;p&gt;You can tell Elm is still a beta product; it has lots of cool stuff, but even more rough edges.&lt;p&gt;Otherwise the language is kinda nice and simple (some would say too simple, I don&amp;#x27;t know If I agree; maybe) and is great for teaching FP to first timers.</text></comment>