- differentiate between mutable and constant bindings - consider using GADTs - refactor source code to better modularization