|
|
|
|
|
These are features which we might want to consider for removal or replacement with something better/cleaner.
|
|
|
|
|
|
- [eliminate tab stops](tabs) in layout
|
|
|
- [n + k patterns](remove-n-plus-k)
|
|
|
- k patterns, that is, numeric literals
|
|
|
|
|
|
- For removal: Overloaded numeric patterns mean there is hidden computation going on during LHS matching.
|
|
|
Nine times out of ten, what is really wanted is [Natural numbers](natural), not Integers (and definitely
|
|
|
never Floats!). This language feature also makes the implementation of code-transformation tools more tricky
|
|
|
and less regular.
|
|
|
- Against removal: Everyone uses them. Lots of legacy code. Expressing recursion over numbers is more verbose
|
|
|
without these patterns.
|
|
|
- (JL). Recommend making these monomophic. Either (a) always Integer (or Natural if it gets added), or (b) subject to monomorhism restriction and defaulting.
|
|
|
- [NegativeSyntax](negative-syntax)
|
|
|
- \~ patterns
|
|
|
|
|
|
- For removal: can be simulated with 'where' or 'let' clauses
|
|
|
- Against removal:
|
|
|
|
|
|
- fine control of strictness can require careful placement of these and let/where would obscure what is happening and get very verbose with nested \~ patterns.
|
|
|
- are used in several safe programing idioms that would not be workroundable.
|
|
|
- class contexts on data definitions
|
|
|
|
|
|
- For removal: they add no extra useful expressivity that is not already present in the function signatures which use the datatype.
|
|
|
- [Defaulting](defaulting)
|
|
|
- record syntax (see also [ExistingRecords](existing-records))
|
|
|
- [CompositionAsDot](composition-as-dot)
|
|
|
- the Prelude (or at least, seriously [trim it to the minimum possible](prelude))
|
|
|
- The [MonomorphismRestriction](monomorphism-restriction)
|
|
|
- classes (no really, there are people who advocate this!)
|
|
|
|
|
|
- (JL) This would so fundamentally change the nature of Haskell as to make it a different language. It is surely out of scope for what we plan to accomplish.
|
|
|
- Helium has no classes, yet is recognisably very Haskell-like.
|
|
|
- A concrete proposal would be to replace classes with named dictionaries that can be constructed and passed
|
|
|
around explicitly. See [ NamedInstances](http://www.informatik.uni-bonn.de/~ralf/hw2001/4.html). However this would rule out GADT based class implementations such as jhc's.
|
|
|
- The array indexing operator, `!`. See [ArrayIndexing](array-indexing).
|
|
|
- [String gaps](remove-string-gaps) |
|
|
\ No newline at end of file |
|
|
- n + k patterns |