Simple functional dependencies
Using GADTs for "methods"