System functions vs effects =========================== SLUL will have system functions indirected via arenas (so that they can be overridden/proxied, and this can be used to implement capabilities / sandboxing). Indirected function are somewhat related to effect types. This could be added as an optional feature: With the "arena" keyword for arenas: func .new(arena) -> arena Thing effect Alloc, Fail func arena Thing.do_any_stuff() func arena Thing.do_io() effect IO, Fail With sigills for arenas: func .new@() -> Thing@ effect Alloc, Fail func Thing.do_any_stuff@() func Thing.do_io@() effect IO, Fail With effect specifications(!) for arenas: func .new() -> Thing effect Alloc, Fail func Thing.do_any_stuff() effect Any func Thing.do_io@() effect IO, Fail - How to track whether the return value is an arena or not? Problem: How to track this for variables, or when there multiple arena parameters? (Does the latter make any sense?)