Refinement types for haskell