I would like to set up an abstraction where I would like to only allow the sub datatypes of Foo to be passed in parts of my application. All of these really are
Foo