The Third Bit: An E-Bike for the Mind

Speaking of which, do any of my programming language friends know of a type system that captures "how it's used" as opposed to "what values it's allowed to have" in the way that Sajaniemi's variable roles do? Borrow checking in Rust is kind of somewhat adjacent, but not really the same thing - any others?

@gvwilson In functional programming you can abstract over patterns like that. For example, the `foldMap` function traverses a structure and collects all the elements according to some given mapping function and the monoid structure on the result, like how you'd use a gatherer variable in imperative languages.

Another thing that comes to mind are effect systems. The Writer effect is much lik a gatherer variable, for example. If you can define custom effects, you can separate uses of mutation.