# Difference between revisions of "Nitpicks"

From HaskellWiki

(→Syntax-related nitpicks) |
(→Syntax-related nitpicks) |
||

Line 16: | Line 16: | ||

* Re-naming <code>data</code>, <code>newtype</code>, and <code>type</code> to <code>type</code>, <code>newtype</code>, and <code>alias</code>, respectively. See https://mail.haskell.org/pipermail/haskell-cafe/2015-August/120724.html . |
* Re-naming <code>data</code>, <code>newtype</code>, and <code>type</code> to <code>type</code>, <code>newtype</code>, and <code>alias</code>, respectively. See https://mail.haskell.org/pipermail/haskell-cafe/2015-August/120724.html . |
||

* Replace the special if-then-else syntax with a standard prelude function. See https://wiki.haskell.org/If-then-else . |
* Replace the special if-then-else syntax with a standard prelude function. See https://wiki.haskell.org/If-then-else . |
||

− | * Introduce a newtype/data with the |
+ | * Introduce a newtype/data with the symbol <hask>::=</hask> instead of <hask>=</hask>, as this is confusing with the equal sign. See https://mail.haskell.org/pipermail/haskell-cafe/2015-August/120724.html |

− | * A type should be introduced with the |
+ | * A type should be introduced with the symbol <hask>:</hask> instead of <hask>::</hask> as in many other languages and mathematical papers. Conversely <hask>::</hask> should be used as the cons operator. |

* The kind for inhabited types <hask>*</hask> is not an operator. See https://ghc.haskell.org/trac/ghc/wiki/DependentHaskell/Phase1#ishardtoparse |
* The kind for inhabited types <hask>*</hask> is not an operator. See https://ghc.haskell.org/trac/ghc/wiki/DependentHaskell/Phase1#ishardtoparse |
||

## Revision as of 14:02, 20 August 2015

This page is for people to record nitpicks about the Haskell language.

A "nitpick", in this case, is something that is annoying or could be improved, but is probably not important enough to justify the added complexity of tacking it on as an extension or breaking existing code.

In other words, if we could go back in time and fix it before it happened, we probably would, but now it would probably be too onerous.

Ideally, these nitpicks could help to inform future proposals or compatibility-breaking changes to the language. Even if they may be too onerous to change right now, it's possible that it would make sense to address them at some other time.

If the nitpick has been discussed at length, please post a link to the discussion.

- Re-naming
`data`

,`newtype`

, and`type`

to`type`

,`newtype`

, and`alias`

, respectively. See https://mail.haskell.org/pipermail/haskell-cafe/2015-August/120724.html . - Replace the special if-then-else syntax with a standard prelude function. See https://wiki.haskell.org/If-then-else .
- Introduce a newtype/data with the symbol
`::=`

instead of`=`

, as this is confusing with the equal sign. See https://mail.haskell.org/pipermail/haskell-cafe/2015-August/120724.html - A type should be introduced with the symbol
`:`

instead of`::`

as in many other languages and mathematical papers. Conversely`::`

should be used as the cons operator. - The kind for inhabited types
`*`

is not an operator. See https://ghc.haskell.org/trac/ghc/wiki/DependentHaskell/Phase1#ishardtoparse

- Re-naming
`fmap`

to`map`

. This has been discussed at length; see http://stackoverflow.com/questions/6824255/whats-the-point-of-map-in-haskell-when-there-is-fmap/6824333 and https://mail.haskell.org/pipermail/haskell-prime/2006-August/thread.html - Cutting up
`Num`

, which is a mess of various operations one may not want to all define on some type; for example`(+)`

makes sense for vectors in ℝ³ but`(*)`

doesn't.