Ticket: #20
Eliminate . as an operator
In early Haskell, . was used as function composition. In later versions of Haskell, it also became used as a name qualifier.
These two uses do not fit well together, leading to special lexical rules (P11 of the report). As a test, before reading the report, can you lex the following: "f.g", "F.g", "F . g", "f..", "F..", and "F.". I couldn't. (See QualifiedIdentifiers for a related problem.)
Proposed syntaxes for RankNTypes and ExistentialQuantification also use . as a special symbol.
Proposal
- Add
.
to reservedop in the lexical syntax - move qualified identifiers (
qvarid
,qconid
etc.) from the lexical syntax to the context-free syntax
(Note: .
also appears in the syntax as a decimal point in floats).
Pros
- Much much simpler. Not impossible to remember.
- Paves the way for using
.
as the selection operator in improved record or module systems
Cons
-
We lose . as composition. Mostly this doesn't matter as $ is probably more common in reality anyway (a highly controversial view, unsupported by evidence!). Perhaps use
o
as infix composition instead if it is really important. Note thato
is three characters - it would be nicer to use plaino
infix, but that would require another special lexical rule. Others alternatives for composition include Unicode symbols such as centred-dot ·, a bullet point •, an unfilled bullet point, the ring operator (U+2218), the degree sign °, the masculine ordinal indicator º, stroked circle ø, and so on. All of these resemble the mathematical symbol, and some of them are available in the Latin-1 subset. -
Breaks quite a lot of code