type user = abstract type t = { ?reason: string option; user: user; }