What changes would we want to make to Haskell, but we can’t for fear of breaking backwards compatibility? They should instead be made to the Next Haskell.
Better names for
main :: IO (); main = ... involves duplication. This needs to be got rid of, but I can’t think of a good way right now.
Reduce special syntax: no special syntax for list types or list literals, maybe not even for tuple types or tuple literals!
(->) should not be a reserved identifier.
Either do notation or comprehensions, not both.
if. The only version of
case should be a “lambda case”. Any arguments can be passed to it using the normal means of function application.
It should be possible to “eta-reduce
case branches”. That is, I should be able to write
case \Just -> foo Nothing -> bar
case \Just x -> foo x Nothing -> bar
Either arguments should be taken on the left hand side of a function, or the function type constructor should be reversed.
No unary function
- for negation.
:: should be swapped
No partial record fields
x `f` y should desugar to
f y x
Warnings that should be errors
Missing record fields
Get rid of
otherwise. It’s far too cute.