Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

A coroutine is a computation that can `yield`, suspending itself and passing control back up to the caller. It can then be resumed at the caller's leisure.

An function with an effect (in this sense) is a function which can ask a handler to `perform` some effect for it. This suspends the function and passes control to whichever handler is in scope for that call, allowing that handler to resume the function at its leisure.

I suspect that you're misunderstanding what is meant by effect, because despite buzz about them and backend support for them in OCaml 5, they aren't yet implemented with syntax and type-level support in any mainstream languages I'm aware of.



> An function with an effect (in this sense) is a function which can ask a handler to `perform` some effect for it.

Why does it need to ask a "handler" to do something, why can't it just call a function that does the "action" for it?


By making effects explicit, you reap the benefit of being able to write non-effectful code.

Depending on what your language tracked as an effect, you could make your business-logic always terminate, or perform no allocations, if you had effects for Mutation/GeneralRecursion/Allocation.

But no, I certainly don't understand the function->handler control flow here. It has to be handler->function, otherwise you've got two handlers!


a function will return to it's call site (or diverge), a handler doesn't necessarily have to resume from where it was invoked. There is also (sort of) dynamic scoping, where you don't have to thread the handlers through calls.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: