exception types for haskell
rename
completion algorithm