Been swamped lately, but just took a look and left a comment! My only concern is mixing two type patterns and coupling our type system to python's type system. However I think a type hierarchy in the host language can make certain things much easier. For example, what if we wanted to get the precision of a decimal data type? The answer depends on your type representation union/tagged union/OO. The PR starts mixing the two since we have some limitations imposed by rust. I encourage sticking to one modeling, and support whichever you choose / think is best.