4 ms·
> We may attribute normal object-oriented semantics to the above gif, concluding that “a cat is dancing.” However, we may also attribute functional semantics, c
by andrekandre 6y ago
> We may attribute normal object-oriented semantics to the above gif, concluding that “a cat is dancing.” However, we may also attribute functional semantics, concluding that “a cat has arms above its head on frame fᵢ.”
in that case, without adding impure statefulness, how does one differentiate between "a paused frame is being displayed" and "an intermediate frame of a playing video is being displayed"
--
then at the end, the example from elm looks great, but i see lots of impure state being generated (browser, model) or am i missing something?
- jbmilgrom 6y ago> in that case, without adding impure statefulness, how does one differentiate between "a paused frame is being displayed" and "an intermediate frame of a playing video is being displayed" A "paused" frame could be represented like Fi, Fi+1 ... Fi+N, etc; for every moment i..(i+N), F remains the same and is thus "paused." The thing that's tough to wrap your head around is our language is rooted in object-orientation however. "Pause" is less of a meaningful term when time is discretized. See also https://softwarefordays.com/post/fp-as-a-scientific-revolution/ https://softwarefordays.com/post/fp-as-a-scientific-revoluti...
- jbmilgrom 6y ago> then at the end, the example from elm looks great, but i see lots of impure state being generated (browser, model) or am i missing something? All functional programs (even if written in Haskel) have side effects - the CPU only has a certain amount of registers that can be used, for example, so any nontrivial program will be constantly overwriting them. That elm program however only exposes pure functions in user land, just like with a Haskel program
- andrekandre 6y agothanks for the reply i guess what i was thinking was, if there was a ui, with a play/pause icon, and playing the video should cause the play icon to switch to a pause icon (because video is now "playing" so we want to be able to click it and "pause" the video) how do we represent that in a purely functional way? since at any "timeless" instant, t1 vs t2 is just a frame1 vs frame2 issue at the language level (?), how in a purely functional world, would we determine that video is indeed playing and that icon should be swapped while playing vs not? does user-interactive systems imply that there must inherently be some impurity?
- usmannk 6y agoConsider pressing a "play" button to first start playing the video but then also remove itself from the UI and replace it with a "pause" button that when clicked does the inverse. The UI here is acting as a state store but the functions can then be designed as purely functional, acting only on their inputs.
- andrekandre 6y agoah, that makes more sense i think... yes, i guess that is one way of accomplishing it, thanks ^^
- usmannk 6y agoI don’t recommend this strategy in practice though. It’s brittle and not all application state can even be represented as UI (what about your login cookie?).
- jbmilgrom 6y agoIn this case, the play/pause button becomes part of the "video." So now the video includes a piece of state which has perhaps been toggled to "paused." And at that point F(i) = F(i+1)... = F(i+n), since nothing will have changed for n moments (until the user interacts again). Kinda hard though to fully get this in the abstract. I struggled with the same questions. All I can say is SICP, all of Rich Hickey's videos, redux, elm, resources listed on haskel.com all helped. Also putting it all together in writing here https://softwarefordays.com/post/functional-programming-and-identity-state-and-time/ https://softwarefordays.com/post/functional-programming-and-.... In this^ blog I've included an interactive user interface that can be seen as purely functional, even though it's a stateful ATM program. I'm actually hoping that this blog could help teach someone what took me 2 years to finally realize. I think it could be worthwhile given your questions - if you take a look, please let me know what you think!
- andrekandre 6y agoSICP has been on my list since i saw it on a post about alan kays recommend reading but never purchased a copy yet... thank you for posting a link there to it, ill hopefully get to it soon!
- lmm 6y ago> in that case, without adding impure statefulness, how does one differentiate between "a paused frame is being displayed" and "an intermediate frame of a playing video is being displayed" You have a paused "state" if that's relevant to you. But you can say "the video pauses at time t1" and "the video resumes at time t2", rather than restricting yourself to "the video is paused" or "the video is not paused".
- phkahler 6y ago>> But you can say "the video pauses at time t1" and "the video resumes at time t2", rather than restricting yourself to "the video is paused" or "the video is not paused". Well then there is something fundamentally different about the video between T1 and T2 vs after T2. That is state - paused or playing. Word games don't change that.
- lmm 6y agoThe video at T1.5 is paused, and the video at T2.5 is playing. Those are banal, ordinary facts; the difference between them shouldn't surprise us, any more than the fact that length of the string "hello" is 5 but the length of the string "goodbye" is 7. You only get confused if you imagine that there is somehow a single "state" of "whether the video is playing now" that somehow "changes", which is unfortunately what non-FP programmers tend to do.