This would introduce inconsistency with the fact that async
and throws
are keywords for denoting effects and already have their own set of "rules". Both are parts of their type signatures, (Int) -> String
and (Int) async -> String
are different (even though they have a certain subtyping relationships), while (Int) mutates -> String
does not make sense as a standalone type signature. Effectful read-only properties were introduced in SE-0310, allowing get async
and get throws
in property declarations. In the light of that, what would get mutates
even mean?
Additionally, throws
has counterparts in throw
and rethrows
. async
has await
and potentially reasync
, as discussed in future directions of the corresponding proposal. I don't think mutate
and remutates
make sense even at a conceptual level. In this sense, taking
, borrowing
, and mutating
are not function/property effect modifiers.