Trying a new API

Typefamilies aren't injective, so I have to use associated data types
instead.