I simply love it how every single Haskell framework I've seen that has "ease of development" and "it's easy" and similar immediately devolves from this (from Concur's docs [1]):<p><pre><code> hello = do
button [onClick] [text "Say Hello"]
text "Hello Sailor!"
</code></pre>
into this:<p><pre><code> inputWidget = input [(Changed <<< unsafeTargetValue) <$> onChange, Focused <$ onFocus]
</code></pre>
or this:<p><pre><code> inputWidget st = input [st {focusCount = st.focusCount+1} <$ onFocus
, ((\s -> st {currentText = s}) <<< unsafeTargetValue) <$> onChange]
</code></pre>
for even the slightest modifications (which are not even complex in this case)<p><pre><code> These instances, allow a natural handling of
return values using <$>, <*>, <$, monadic
do-notation, etc
</code></pre>
Right...<p>[1] <a href="https://github.com/ajnsit/concur-documentation/blob/master/README.md" rel="nofollow">https://github.com/ajnsit/concur-documentation/blob/master/R...</a>