Abstract: | We present a type and effect system for tracing and preventing sharing and mutation in imperative languages. That is, on one hand, the type system "traces" sharing possibly introduced by the evaluation of an expression, so that uniqueness and immutability properties can be easily detected. On the other hand, sharing and mutation can be "prevented" by "type qualifiers" which forbid some actions. Sharing is directly represented at the syntactic level as a relation among free variables, thanks to the fact that in the underlying calculus memory is encoded in terms. |