New blog post: An effect notation based on with-clauses

https://blog.yoshuawuyts.com/a-with-based-effect-notation

This is my third attempt at defining a notation for a full-fledged effect system in Rust. It's taken some influence from Flix, Koka, and Effekt. As well as including a little sprinkling of Python, Swift, and Scala.

With some luck people will hate this design less than the last time I had a go at this.

An effect notation based on with-clauses and blocks

@yosh For a while I've been thinking of what I'd like this to look like for integer overflow behavior, and have settled on something like

fn foo(x: i32) -> i32 where i32: wrapping { }

@ekuber @yosh if I write a function taking multiple i32s it should also be possible to write per-arg behavior no ? Not all i32s are created equal, though for the vast majority of functions they likely would share the same so having a default through the type would be a good default
@poliorcetics @yosh for per arg behavior you can just accept `Wrapping<i32>` already.
@ekuber @yosh I know but your example seems to indicate you want a different way to specify it ?
@poliorcetics @yosh right. We already have the granular version, I want a "scope global" option.
@poliorcetics @yosh this would also let you change the behavior of functions being called unless they also override the default behavior, so it'd be transitive. This would also make it easier to write a function that always has a specific math behavior, regardless of what the cargotoml says.