Comment by gf000
Haskell has green threads. Plus nowadays Java also has virtual threads.
Haskell has green threads. Plus nowadays Java also has virtual threads.
Pure actions can be run in parallel with https://hackage-content.haskell.org/package/parallel/docs/Co...
Impure actions use the IO monad like always in Haskell: https://hackage.haskell.org/package/base-4.21.0.0/docs/Contr... (or the higher-level async library)
I suppose an extreme version of the function coloring argument could be that all types are colors.
In a sense, kinda? The function colour problem is that you can't call an async API from a non-async caller without modifying the entire call chain (or blocking the full thread). In async/await languages the conflict comes from changing the return types; the syntax is orthogonal.
Maybe in practice some properties of code are better off being whole-program than represented as types, even if they're less modular or harder to check.
Also thanks for the reference, I haven't touched Haskell in ages; I'm more of an F# and OCaml guy.
And I bet those green threads still need an IO type of some sort to encode anything non-pure, plus usually do-syntax. Comparing merely concurrent computations to I/O-async is just weird. In fact, I suspect that even those green threads already have a "colourful" type, although I can't check right now.