`Origin` is the main motivation for the feature, eventually we might have something like
struct Origin[mut = False, _mlir_origin : xxx, //]: pass
# Origin[] will replace ImmutOrigin
# Origin[...] means parametric Origin
# Origin[mut = True] will replace MutOrigin
Besides, since we already allow assigning value to inferred parameters, it feels like a natural extension to that as well.