static A persistentObject(S name, Class makeDefaultObject) { ret persistentObject(name, (O) makeDefaultObject); } // makeDefaultObject: (func -> A) or Class static A persistentObject(S name, O makeDefaultObject) { IVar var = persistentVar(name); if (!var.has()) var.set((A) (makeDefaultObject instanceof Class ? nu((Class) makeDefaultObject) : callF(makeDefaultObject))); ret var!; }