Re:Generate semi-dynamic UIs with Haskell
by lalaithion on Monday March 30, 2020 @11:23AM
(#22728722)
The second example can be rewritten as such:
inputWidget = let
changeAction = do
v <- onChange
return (Changed (unsafeTargetValue v))
focusAction = do
_ <- onFocus
return Focused
in input [changeAction, focusAction]
and likewise for the third: inputWidget st = let
focusAction = do
_ <- onFocus
return (st {focusCount = st.focusCount+1})
changeAction = do
v <- onChange
return (st {s = unsafeTargetValue v})
in input [focusAction, changeAction]
(I didn't compile this, so hopefully there's no major mistakes here)Believe it or not, many Haskell programmers prefer brevity when it comes to programs like this. They're honestly not that unreadable once you learn the meaning of a few infix operators.
I prefer the approach described here: http://www.haskellforall.com/2015/09/how-to-make-your-haskel...
Re:Generate semi-dynamic UIs with Haskell
by chrissoundz on Monday March 30, 2020 @10:47AM
(#22728418)
It's not clear to me what you're trying to show? Are you saying the later examples look more complex?
Re:Generate semi-dynamic UIs with Haskell
by whateveracct on Monday March 30, 2020 @10:53AM
(#22728484)
My guess: The latter examples look unfamiliar (looks like Haskell) while the first example looks familiar to the general eye (looks like any PL)
The things being compared don't even have the same purpose so idt comparing them even makes sense /shrug
Of course they do. Of course they are.
The simplest code change turns the code in to a monadic/functor soup.
Re:Generate semi-dynamic UIs with Haskell
by agentultra on Monday March 30, 2020 @11:09AM
(#22728608)
... and if you program in Haskell that's exactly what you want. Programming with these abstractions is common and well supported in Haskell.
Re:Generate semi-dynamic UIs with Haskell
by whateveracct on Monday March 30, 2020 @11:14AM
(#22728643)
Given what the examples are doing (describing inputs) I don't see how you solve it ergonomically without higher kinded types, which in turn leads to functors etc.
[1] https://github.com/ajnsit/concur-documentation/blob/master/R...