Re:Hash Codes, Non-Determinism, and Other Eldritch Horrors
by phlip9 on Thursday November 10, 2022 @07:04PM
(#33555541)
Languages with first class effects, like koka[1], require you to declare up-front what side effects (sample randomness, do I/O, abort, etc...) your function might cause.
Then from another outer function, you can't call the effectful function unless the outer function also declares those same side-effects (or you provide handlers for them).
This way you can easily isolate non-determinism and I/O to the top-level part of your program, while keeping the interior business logic pure.
The "first-class effects" part is what lets you easily compose effects and inject custom handlers. Ideally in a way that's more ergonomic than juggling with Monad type system Jenga.
I'm sure there are languages which do this, I seem to recall seeing it in Mercury