a reimplementation of the paper as is
Removing Syntactic type class