*type_out* defines the data type of the register when it is read.
*type_out* defines the data type of the register when it is read. update* and *reset* define the update and reset values respectively.
Rule: if r is using an inferred width, then don't enforce a width.
Rule: if r is using an inferred width, then don't enforce a width. If it is using a user inferred width, set the the width
XXX Can't specify return type. There is a conflict. It is either (Node) => (Int) or Int depending which execution path you believe.