Filenames should match module names
Used GADTs to get something like a subtype
in progress