[Haskell] dependent types, type class contexts