Post

I've been off-and-on smitten by this idea, which I associate mostly with lisp enthusiasts (affectionate), that if you just had the right affordances around abstractions and DSLs programming would be magic after writing Haskell professionally for a few years I'm depressed, systems are too wide

I mean not magic, but the right affordances can create magic. TBH I think the experience of writing Lisp or SmallTalk is the closest thing to vibecoding that isn't vibecoding?

Haskell isn't like this, Haskell has this rigorous, mathematical, "really consciously do a lot of design thinking up front" kind of culture, and Lisp, SmallTalk, and other "weird" languages like FORTH and APL, are the TOTAL OPPOSITE of that!

eh, I think Haskell admits programming-by-discovery more than that but part of the dream of affordances-and-DSLs is the whole "write your whole program in the REPL" tale that I've heard about re: lisp, and Haskell is not that. (I've dabbled in common lisp and scheme and never found it, though)

So it's not actually make-your-program-in-the-REPL. It's that you write code, reload what you edited, and then interactively test in the REPL. You can build up confidence in your program piece by piece, as you build it (although this can hurt you by disincentivizing formal unit/integration) tests.

In both Lisp and Smalltalk you can have an exception, inspect the environment in the moment the exception occurred, interactively inspect everything, WRITE THE CODE THAT MAKES IT SO THAT CAN'T HAPPEN ANYMORE, patch the running system, and continue execution.

...but the flipside is that this kind of incredible capability to introspect, observe, and modify the program as it is running necessarily affects robustness. The system can enter invalid states because of hotpatch that got misapplied. Again, trading rigor for velocity. Very vibecoding-like.

Haskell has some of this, it does have a repl, but the expectation is that that's a test environment for running experiments during development. You are not going to have a repl on a live program that is currently in active use.

(Erlang is much more in the Lisp vein here: its console is very much designed for debugging and, if necessary, MODIFYING a running system, and it has hot reloading. This is because Erlang is designed by a phone company and is therefore used in systems that straight-up cannot be allowed to go down.)

0 reposts8 likes

No replies yet.