Support a abstract, opaque, and recursive types