You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: drafts/casual.md
+2-2Lines changed: 2 additions & 2 deletions
Original file line number
Diff line number
Diff line change
@@ -111,11 +111,11 @@ Just kidding. It's 2018. Who's writing a terminal apps? Luckily creating web app
111
111
112
112
## Functional Reactive Programming
113
113
114
-
Funnily enough, the popular way to create web apps in 2018 is based on the work of early Haskellers Conal Elliot and Paul Hudak. They came up with a way of declaratively describing interactive animations *with only pure functions, no monads required*. ReactJS, VueJS, CycleJS, etc are based on this "reactive" paradigm, where you declaratively describe what's on the page, as opposed to imperitively adding and removing characters to the screen one-by-one. Of course, there's code somewhere in your computer that's adding and removing characters from the screen, but we don't have to worry about that - it's below our level of abstraction.
114
+
Funnily enough, the popular way to create web apps in 2018 is based on the work of early Haskellers Conal Elliott and Paul Hudak. They came up with a way of declaratively describing interactive animations *with only pure functions, no monads required*. ReactJS, VueJS, CycleJS, etc are based on this "reactive" paradigm, where you declaratively describe what's on the page, as opposed to imperitively adding and removing characters to the screen one-by-one. Of course, there's code somewhere in your computer that's adding and removing characters from the screen, but we don't have to worry about that - it's below our level of abstraction.
115
115
116
116
TODO how does FRP accomplish this?
117
117
118
-
This doesn't just apply to user interfaces. Conal Elliot argues in [Can functional programming be liberated from the von Neumann paradigm?](http://conal.net/blog/posts/can-functional-programming-be-liberated-from-the-von-neumann-paradigm) that we can perform that same trick for any IO-based software interface.
118
+
This doesn't just apply to user interfaces. Conal Elliott argues in [Can functional programming be liberated from the von Neumann paradigm?](http://conal.net/blog/posts/can-functional-programming-be-liberated-from-the-von-neumann-paradigm) that we can perform that same trick for any IO-based software interface.
Copy file name to clipboardExpand all lines: episodes/33.md
+6-6Lines changed: 6 additions & 6 deletions
Original file line number
Diff line number
Diff line change
@@ -29,7 +29,7 @@ In order to accomplish this vision, I believe there are three large categories o
29
29
2. Create a better **programming experience** for the complex abstractions we create to avoid IO.
30
30
3. Reimagine **version control** for a world where software looks very different than it does today, with many, many more forks, at many more levels than just one-deep off of master.
31
31
32
-
My recent work was on ridding ourselves of the IO Monad from user interfaces, which is building on Conal Elliot's FRP work. [My paper and talk](http://futureofcoding.org/papers/comprehensible-frp) at REBLS last month argues that Elm Architecture makes software take longer to understand (which is untenable if we want people to be able to modify the software they use *in the course of using it*) as compared to the higher-order and cyclic streams of Conal's original FRP.
32
+
My recent work was on ridding ourselves of the IO Monad from user interfaces, which is building on Conal Elliott's FRP work. [My paper and talk](http://futureofcoding.org/papers/comprehensible-frp) at REBLS last month argues that Elm Architecture makes software take longer to understand (which is untenable if we want people to be able to modify the software they use *in the course of using it*) as compared to the higher-order and cyclic streams of Conal's original FRP.
33
33
34
34
My future work will be improving the programming experience of "original FRP", potentially with a Haskell-inspired structured editor. I will also extend Conal's FRP work to also [removing the IO Monad from the "backend"](https://github.com/stevekrouse/futureofcoding.org/issues/85).
35
35
@@ -142,7 +142,7 @@ _Transcript sponsored by [repl.it](https://repl.it/)_
142
142
<h4>Thesis</h4>
143
143
<div class="block">
144
144
<div class="time">00:14:29</div>
145
-
Alright. So, now my thesis. My current angle on this whole mission is most influenced by Jonathan Edwards, Out of the Tarpit, Conal Elliot, Bret Victor, and Paul Chiusano. There are many, many, many hundreds of others who have influenced my thinking here, but I don't want to list them all. Those are the people that really come top of mind when I think about where my thoughts come from, particularly not only on the inspiration for the mission itself, but for how to achieve it.
145
+
Alright. So, now my thesis. My current angle on this whole mission is most influenced by Jonathan Edwards, Out of the Tarpit, Conal Elliott, Bret Victor, and Paul Chiusano. There are many, many, many hundreds of others who have influenced my thinking here, but I don't want to list them all. Those are the people that really come top of mind when I think about where my thoughts come from, particularly not only on the inspiration for the mission itself, but for how to achieve it.
146
146
</div>
147
147
<div class="block">
148
148
<div class="time">00:15:05</div>
@@ -170,11 +170,11 @@ _Transcript sponsored by [repl.it](https://repl.it/)_
170
170
</div>
171
171
<div class="block">
172
172
<div class="time">00:19:43</div>
173
-
So in other words, basically what I'm getting at is we need to, point five, rid ourselves of the IO monad and replace it with better abstractions for whole systems. So, now Conal Elliot has a really, really wonderful post, Will Functional Programming Ever be Liberated From the von Neumann Architecture? In this point, he makes a really, really wonderful distinction. So, monads themselves are this very benign type class thing with laws. They're kind of mathematical and categorical. They're great, and they're not that hard to understand. The thing that's kind of hard to understand, I think, is the IO monad. And I think part of why it's hard to understand is that Haskell people aren't honest about what it is. The IO monad is imperative code embedded within Haskell. That's what it is. You get to write code with side effects within your Haskell program. And it's a reasonable compromise given the world we live in today, because you want to have the benefits of Haskell, but then you also need your code to have some side effects.
173
+
So in other words, basically what I'm getting at is we need to, point five, rid ourselves of the IO monad and replace it with better abstractions for whole systems. So, now Conal Elliott has a really, really wonderful post, Will Functional Programming Ever be Liberated From the von Neumann Architecture? In this point, he makes a really, really wonderful distinction. So, monads themselves are this very benign type class thing with laws. They're kind of mathematical and categorical. They're great, and they're not that hard to understand. The thing that's kind of hard to understand, I think, is the IO monad. And I think part of why it's hard to understand is that Haskell people aren't honest about what it is. The IO monad is imperative code embedded within Haskell. That's what it is. You get to write code with side effects within your Haskell program. And it's a reasonable compromise given the world we live in today, because you want to have the benefits of Haskell, but then you also need your code to have some side effects.
174
174
</div>
175
175
<div class="block">
176
176
<div class="time">00:20:24</div>
177
-
But Conal Elliot shows us how we can do better than the IO monad, and he showed how with FRP. Functional reactive programming, he argues, and I would agree, is a way to do side effect-y things. Basically, you have a user interface on the screen, that a user can interact with, and it can be dynamic, and update, and whatnot, so there are all these side effect-y things happening, your computer doing stuff, yet the interface, to the programmer, at the Haskell level, or at the FRP level, has no IO. You describe the view as a pure function of state. It's beautiful. It's a beautiful system.
177
+
But Conal Elliott shows us how we can do better than the IO monad, and he showed how with FRP. Functional reactive programming, he argues, and I would agree, is a way to do side effect-y things. Basically, you have a user interface on the screen, that a user can interact with, and it can be dynamic, and update, and whatnot, so there are all these side effect-y things happening, your computer doing stuff, yet the interface, to the programmer, at the Haskell level, or at the FRP level, has no IO. You describe the view as a pure function of state. It's beautiful. It's a beautiful system.
178
178
</div>
179
179
<div class="block">
180
180
<div class="time">00:21:03</div>
@@ -309,7 +309,7 @@ _Transcript sponsored by [repl.it](https://repl.it/)_
309
309
<h4> Higher order and cyclic streams</h4>
310
310
<div class="block">
311
311
<div class="time">00:46:48</div>
312
-
So, what's the alternative?, you ask. Thanks for asking. So I think the alternative is to go back to the original conception of FRP that Conal Elliot came up with, with Paul Hudak, in the '90s. And in order for us to do this we need higher order and cyclic streams. So the justification of why we need higher order and cyclical streams in order to escape the hell of the Elm Architecture, that's a complicated point that I haven't even fully convinced myself of but just assume it to be the case. So we need high order and cyclical streams. And those really aren't around in very many places.
312
+
So, what's the alternative?, you ask. Thanks for asking. So I think the alternative is to go back to the original conception of FRP that Conal Elliott came up with, with Paul Hudak, in the '90s. And in order for us to do this we need higher order and cyclic streams. So the justification of why we need higher order and cyclical streams in order to escape the hell of the Elm Architecture, that's a complicated point that I haven't even fully convinced myself of but just assume it to be the case. So we need high order and cyclical streams. And those really aren't around in very many places.
313
313
</div>
314
314
<h4>Fluid Haskell Chimera</h4>
315
315
<div class="block">
@@ -327,7 +327,7 @@ _Transcript sponsored by [repl.it](https://repl.it/)_
327
327
<h3>Turbine</h3>
328
328
<div class="block">
329
329
<div class="time">00:49:58</div>
330
-
Okay, so that's Explicitly Comprehensible FRP, in a way too short amount of time. So go on the Internet if you want to know more. So, as I was saying, Haskell was just a pain but luckily in the last few days I found this library called Turbine. So actually I'd seen it a couple months ago but I passed it over for some dumb reason. But luckily a few days ago I popped on Twitter to waste time and I was thwarted, my time was used very productively, because right at the top of my Twitter feed was Conal Elliot praising an essay written by the Framework creator, Simon Friis Vindum, of Turbine. And so I read it and revisited it and I was like, "Holy crap, this is exactly what I'm looking for." And so I played with it for a few hours and it was great. Really it's similar to Reflex, there's a few things I like about it less but it wins by a mile, simply for the reason that I was able to install it in two seconds. I still need help setting up typescript but I was able to install it without typescript for two seconds, or very quickly, and then on every key stroke it'll reload the page, like instantly. It's so quick to compile and run it. So, for that reason alone, it warns me about syntax errors, it warns me about silly errors. It's just so much, so much better.
330
+
Okay, so that's Explicitly Comprehensible FRP, in a way too short amount of time. So go on the Internet if you want to know more. So, as I was saying, Haskell was just a pain but luckily in the last few days I found this library called Turbine. So actually I'd seen it a couple months ago but I passed it over for some dumb reason. But luckily a few days ago I popped on Twitter to waste time and I was thwarted, my time was used very productively, because right at the top of my Twitter feed was Conal Elliott praising an essay written by the Framework creator, Simon Friis Vindum, of Turbine. And so I read it and revisited it and I was like, "Holy crap, this is exactly what I'm looking for." And so I played with it for a few hours and it was great. Really it's similar to Reflex, there's a few things I like about it less but it wins by a mile, simply for the reason that I was able to install it in two seconds. I still need help setting up typescript but I was able to install it without typescript for two seconds, or very quickly, and then on every key stroke it'll reload the page, like instantly. It's so quick to compile and run it. So, for that reason alone, it warns me about syntax errors, it warns me about silly errors. It's just so much, so much better.
Copy file name to clipboardExpand all lines: links.md
+3-3Lines changed: 3 additions & 3 deletions
Original file line number
Diff line number
Diff line change
@@ -501,20 +501,20 @@ title: Link Research
501
501
* haskell programming as a graph
502
502
* I don't usually find graphs compelling. I prefer blocks/structured editor approaches which leave the text closer to prose sentences for better reading. I'm not a computer so I don't like reading trees.
* the dream: combine usability and composability (so like IFFT but at the right level of abstraction)
506
506
* UNIX pipes with input and output text makes it easy to compose
507
507
* I've already seen this video, I'm now realizing, he shows how to drag outputs into inputs in a GUI
508
508
509
-
*[Conal Elliot - Fran - Composing Reactive Animations](http://conal.net/fran/tutorial.htm)
509
+
*[Conal Elliott - Fran - Composing Reactive Animations](http://conal.net/fran/tutorial.htm)
510
510
* Holy shit! This is like Reactive WoofJS (or the Elm game engine) but was made in 1998 in Haskell! He makes quick work of my "inital value problem": simply give a function all the arugments it needs, starting value, and rate of increase
511
511
* Let me send this over to my friends at McMaster University to see if they've thought about making an Elm version...
512
512
513
513
*[Conal Elliott - The Essence and Origins of Functional Reactive Programming](https://www.youtube.com/watch?v=j3Q32brCUAI)
514
514
* seperate design spec from implementation
515
515
* FRP is about continuous time in the same way vector graphics are about continuous space
* "The purpose of abstraction is not to be vauge but to create a new semantic level in which one can be absolutely precise." - Dijkstra
519
519
* Peter Landin reccomends that "denotive" to replace ill-defined "functional" and "declarative". A langauge is only "denotive" if each expression only depends on sub-expressions
520
520
* before you think about implementation... what are the main types, main operations, what do the types mean?
Copy file name to clipboardExpand all lines: notes/bret-victor/learnable-programming.md
+2-2Lines changed: 2 additions & 2 deletions
Original file line number
Diff line number
Diff line change
@@ -141,7 +141,7 @@ This is also key. CycleJS devtools diagram.
141
141
142
142
> The environment can represent time at multiple granularities, such as frames or event responses, to enable exploration across these meaningful chunks of execution.
143
143
144
-
Again, this sounds to me like add-ons that the community could build given a really solid underlying structure. A structure that Conal Elliot would build. Perfect abstractions.
144
+
Again, this sounds to me like add-ons that the community could build given a really solid underlying structure. A structure that Conal Elliott would build. Perfect abstractions.
145
145
146
146
### FRP Scratch
147
147
@@ -328,7 +328,7 @@ I can't put a finger on why, but this feels like a powerful insight. But then ag
328
328
329
329
#### Sequencing and monads
330
330
331
-
Despite all my FP and Haskell experience, I never felt very comforatable with monads. This is probably related to the fact that I only used Haskell in the university setting. However, potentially monads aren't needed for sequencing side-effect-y code. That's what FRP is supposed to be for, right? This section of the essay, unsurprisingly, is making me want to do my Conal Elliot FRP deep dive sooner rather than later.
331
+
Despite all my FP and Haskell experience, I never felt very comforatable with monads. This is probably related to the fact that I only used Haskell in the university setting. However, potentially monads aren't needed for sequencing side-effect-y code. That's what FRP is supposed to be for, right? This section of the essay, unsurprisingly, is making me want to do my Conal Elliott FRP deep dive sooner rather than later.
Copy file name to clipboardExpand all lines: reflections/13.md
+1-1Lines changed: 1 addition & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -74,7 +74,7 @@ Eventually, however, I'll have to deal with other key problems, such as collabor
74
74
75
75
#### Anti IO-monad & Cannonical
76
76
77
-
I've had some strange thoughts here, mostly inspired by Conal Elliot. I don't have much to say about them yet, but you can read [here](http://futureofcoding.org/log#my-growing-anti-io-monad-obsession) and [here](http://futureofcoding.org/log#2-anti-io-monad).
77
+
I've had some strange thoughts here, mostly inspired by Conal Elliott. I don't have much to say about them yet, but you can read [here](http://futureofcoding.org/log#my-growing-anti-io-monad-obsession) and [here](http://futureofcoding.org/log#2-anti-io-monad).
0 commit comments