It seems like you're doing a really good job cleaning up the puppet code base :) while enabling having values as types, like Integer[1,0x10]
specifying an integer between 1 and 16. It looks like you're starting to add dependent types to puppet (thumbs up!).
In its core I want to use Puppet as a declarative specification system. Type systems are also declarative specifications and to me it seems a lot of the work you're doing on types means tooling like puppet lint and Geppetto will get stronger and catch more errors ahead of time.
It's worth considering more than values that represent primitives, regexes or hashes, imo. Since puppet is a configuration management tool and not a general programming language, I think it would be nice to have types that can specify security properties or protocols (finite state machines) that interact with resources or things that facilitate coordination between nodes initialising such as monotonic counters with auto-creating 'requires'-relationships to other nodes running.