Improve user’s guide around deriving
[ghc.git] / docs / users_guide / glasgow_exts.rst
1 .. index::
2    single: language, GHC extensions
3
4 As with all known Haskell systems, GHC implements some extensions to the
5 standard Haskell language. They can all be enabled or disabled by command line
6 flags or language pragmas. By default GHC understands the most recent Haskell
7 version it supports, plus a handful of extensions.
8
9 Some of the Glasgow extensions serve to give you access to the
10 underlying facilities with which we implement Haskell. Thus, you can get
11 at the Raw Iron, if you are willing to write some non-portable code at a
12 more primitive level. You need not be “stuck” on performance because of
13 the implementation costs of Haskell's "high-level" features—you can
14 always code "under" them. In an extreme case, you can write all your
15 time-critical code in C, and then just glue it together with Haskell!
16
17 Before you get too carried away working at the lowest level (e.g.,
18 sloshing ``MutableByteArray#``\ s around your program), you may wish to
19 check if there are libraries that provide a "Haskellised veneer" over
20 the features you want. The separate
21 `libraries documentation <../libraries/index.html>`__ describes all the
22 libraries that come with GHC.
23
24 .. _options-language:
25
26 Language options
27 ================
28
29 .. index::
30    single: language; option
31    single: options; language
32    single: extensions; options controlling
33
34 The language option flags control what variation of the language are
35 permitted.
36
37 Language options can be controlled in two ways:
38
39 -  Every language option can switched on by a command-line flag
40    "``-X...``" (e.g. ``-XTemplateHaskell``), and switched off by the
41    flag "``-XNo...``"; (e.g. ``-XNoTemplateHaskell``).
42
43 -  Language options recognised by Cabal can also be enabled using the
44    ``LANGUAGE`` pragma, thus ``{-# LANGUAGE TemplateHaskell #-}`` (see
45    :ref:`language-pragma`).
46
47
48 Although not recommended, the deprecated :ghc-flag:`-fglasgow-exts` flag enables
49 a large swath of the extensions supported by GHC at once.
50
51 .. ghc-flag:: -fglasgow-exts
52     :shortdesc: Deprecated. Enable most language extensions;
53         see :ref:`options-language` for exactly which ones.
54     :type: dynamic
55     :reverse: -fno-glasgow-exts
56     :category:
57
58     The flag ``-fglasgow-exts`` is equivalent to enabling the following extensions:
59
60     .. include:: what_glasgow_exts_does.rst
61
62     Enabling these options is the *only* effect of ``-fglasgow-exts``. We are trying
63     to move away from this portmanteau flag, and towards enabling features
64     individually.
65
66 .. _primitives:
67
68 Unboxed types and primitive operations
69 ======================================
70
71 GHC is built on a raft of primitive data types and operations;
72 "primitive" in the sense that they cannot be defined in Haskell itself.
73 While you really can use this stuff to write fast code, we generally
74 find it a lot less painful, and more satisfying in the long run, to use
75 higher-level language features and libraries. With any luck, the code
76 you write will be optimised to the efficient unboxed version in any
77 case. And if it isn't, we'd like to know about it.
78
79 All these primitive data types and operations are exported by the
80 library ``GHC.Prim``, for which there is
81 :ghc-prim-ref:`detailed online documentation <GHC.Prim.>`. (This
82 documentation is generated from the file ``compiler/prelude/primops.txt.pp``.)
83
84 If you want to mention any of the primitive data types or operations in
85 your program, you must first import ``GHC.Prim`` to bring them into
86 scope. Many of them have names ending in ``#``, and to mention such names
87 you need the :ghc-flag:`-XMagicHash` extension (:ref:`magic-hash`).
88
89 The primops make extensive use of `unboxed types <#glasgow-unboxed>`__
90 and `unboxed tuples <#unboxed-tuples>`__, which we briefly summarise
91 here.
92
93 .. _glasgow-unboxed:
94
95 Unboxed types
96 -------------
97
98 Most types in GHC are boxed, which means that values of that type are
99 represented by a pointer to a heap object. The representation of a
100 Haskell ``Int``, for example, is a two-word heap object. An unboxed
101 type, however, is represented by the value itself, no pointers or heap
102 allocation are involved.
103
104 Unboxed types correspond to the “raw machine” types you would use in C:
105 ``Int#`` (long int), ``Double#`` (double), ``Addr#`` (void \*), etc. The
106 *primitive operations* (PrimOps) on these types are what you might
107 expect; e.g., ``(+#)`` is addition on ``Int#``\ s, and is the
108 machine-addition that we all know and love—usually one instruction.
109
110 Primitive (unboxed) types cannot be defined in Haskell, and are
111 therefore built into the language and compiler. Primitive types are
112 always unlifted; that is, a value of a primitive type cannot be bottom.
113 (Note: a "boxed" type means that a value is represented by a pointer to a heap
114 object; a "lifted" type means that terms of that type may be bottom. See
115 the next paragraph for an example.)
116 We use the convention (but it is only a convention) that primitive
117 types, values, and operations have a ``#`` suffix (see
118 :ref:`magic-hash`). For some primitive types we have special syntax for
119 literals, also described in the `same section <#magic-hash>`__.
120
121 Primitive values are often represented by a simple bit-pattern, such as
122 ``Int#``, ``Float#``, ``Double#``. But this is not necessarily the case:
123 a primitive value might be represented by a pointer to a heap-allocated
124 object. Examples include ``Array#``, the type of primitive arrays. Thus,
125 ``Array#`` is an unlifted, boxed type. A
126 primitive array is heap-allocated because it is too big a value to fit
127 in a register, and would be too expensive to copy around; in a sense, it
128 is accidental that it is represented by a pointer. If a pointer
129 represents a primitive value, then it really does point to that value:
130 no unevaluated thunks, no indirections. Nothing can be at the other end
131 of the pointer than the primitive value. A numerically-intensive program
132 using unboxed types can go a *lot* faster than its “standard”
133 counterpart—we saw a threefold speedup on one example.
134
135 Unboxed type kinds
136 ------------------
137
138 Because unboxed types are represented without the use of pointers, we
139 cannot store them in use a polymorphic datatype at an unboxed type.
140 For example, the ``Just`` node
141 of ``Just 42#`` would have to be different from the ``Just`` node of
142 ``Just 42``; the former stores an integer directly, while the latter
143 stores a pointer. GHC currently does not support this variety of ``Just``
144 nodes (nor for any other datatype). Accordingly, the *kind* of an unboxed
145 type is different from the kind of a boxed type.
146
147 The Haskell Report describes that ``*`` is the kind of ordinary datatypes,
148 such as ``Int``. Furthermore, type constructors can have kinds with arrows;
149 for example, ``Maybe`` has kind ``* -> *``. Unboxed types have a kind that
150 specifies their runtime representation. For example, the type ``Int#`` has
151 kind ``TYPE 'IntRep`` and ``Double#`` has kind ``TYPE 'DoubleRep``. These
152 kinds say that the runtime representation of an ``Int#`` is a machine integer,
153 and the runtime representation of a ``Double#`` is a machine double-precision
154 floating point. In contrast, the kind ``*`` is actually just a synonym
155 for ``TYPE 'PtrRepLifted``. More details of the ``TYPE`` mechanisms appear in
156 the `section on runtime representation polymorphism <#runtime-rep>`__.
157
158 Given that ``Int#``'s kind is not ``*``, it then it follows that
159 ``Maybe Int#`` is disallowed. Similarly, because type variables tend
160 to be of kind ``*`` (for example, in ``(.) :: (b -> c) -> (a -> b) -> a -> c``,
161 all the type variables have kind ``*``), polymorphism tends not to work
162 over primitive types. Stepping back, this makes some sense, because
163 a polymorphic function needs to manipulate the pointers to its data,
164 and most primitive types are unboxed.
165
166 There are some restrictions on the use of primitive types:
167
168 -  You cannot define a newtype whose representation type (the argument
169    type of the data constructor) is an unboxed type. Thus, this is
170    illegal:
171
172    ::
173
174          newtype A = MkA Int#
175
176 -  You cannot bind a variable with an unboxed type in a *top-level*
177    binding.
178
179 -  You cannot bind a variable with an unboxed type in a *recursive*
180    binding.
181
182 -  You may bind unboxed variables in a (non-recursive, non-top-level)
183    pattern binding, but you must make any such pattern-match strict.
184    (Failing to do so emits a warning :ghc-flag:`-Wunbanged-strict-patterns`.)
185    For example, rather than:
186
187    ::
188
189          data Foo = Foo Int Int#
190
191          f x = let (Foo a b, w) = ..rhs.. in ..body..
192
193    you must write:
194
195    ::
196
197          data Foo = Foo Int Int#
198
199          f x = let !(Foo a b, w) = ..rhs.. in ..body..
200
201    since ``b`` has type ``Int#``.
202
203 .. _unboxed-tuples:
204
205 Unboxed tuples
206 --------------
207
208 .. ghc-flag:: -XUnboxedTuples
209     :shortdesc: Enable :ref:`unboxed tuples <unboxed-tuples>`.
210     :type: dynamic
211     :reverse: -XNoUnboxedTuples
212     :category:
213
214     :since: 6.8.1
215
216     Enable the use of unboxed tuple syntax.
217
218 Unboxed tuples aren't really exported by ``GHC.Exts``; they are a
219 syntactic extension enabled by the language flag :ghc-flag:`-XUnboxedTuples`. An
220 unboxed tuple looks like this: ::
221
222     (# e_1, ..., e_n #)
223
224 where ``e_1..e_n`` are expressions of any type (primitive or
225 non-primitive). The type of an unboxed tuple looks the same.
226
227 Note that when unboxed tuples are enabled, ``(#`` is a single lexeme, so
228 for example when using operators like ``#`` and ``#-`` you need to write
229 ``( # )`` and ``( #- )`` rather than ``(#)`` and ``(#-)``.
230
231 Unboxed tuples are used for functions that need to return multiple
232 values, but they avoid the heap allocation normally associated with
233 using fully-fledged tuples. When an unboxed tuple is returned, the
234 components are put directly into registers or on the stack; the unboxed
235 tuple itself does not have a composite representation. Many of the
236 primitive operations listed in ``primops.txt.pp`` return unboxed tuples.
237 In particular, the ``IO`` and ``ST`` monads use unboxed tuples to avoid
238 unnecessary allocation during sequences of operations.
239
240 There are some restrictions on the use of unboxed tuples:
241
242 -  The typical use of unboxed tuples is simply to return multiple
243    values, binding those multiple results with a ``case`` expression,
244    thus:
245
246    ::
247
248          f x y = (# x+1, y-1 #)
249          g x = case f x x of { (# a, b #) -> a + b }
250
251    You can have an unboxed tuple in a pattern binding, thus
252
253    ::
254
255          f x = let (# p,q #) = h x in ..body..
256
257    If the types of ``p`` and ``q`` are not unboxed, the resulting
258    binding is lazy like any other Haskell pattern binding. The above
259    example desugars like this:
260
261    ::
262
263          f x = let t = case h x of { (# p,q #) -> (p,q) }
264                    p = fst t
265                    q = snd t
266                in ..body..
267
268    Indeed, the bindings can even be recursive.
269
270 .. _unboxed-sums:
271
272 Unboxed sums
273 ------------
274
275 .. ghc-flag:: -XUnboxedSums
276     :shortdesc: Enable :ref: `unboxed sums <unboxed-sums>`.
277     :type: dynamic
278     :reverse: -XNoUnboxedSums
279     :category:
280
281     :since: 8.2.1
282
283     Enable the use of unboxed sum syntax.
284
285 `-XUnboxedSums` enables new syntax for anonymous, unboxed sum types. The syntax
286 for an unboxed sum type with N alternatives is ::
287
288     (# t_1 | t_2 | ... | t_N #)
289
290 where `t_1` ... `t_N` are types (which can be unlifted, including unboxed tuple
291 and sums).
292
293 Unboxed tuples can be used for multi-arity alternatives. For example: ::
294
295     (# (# Int, String #) | Bool #)
296
297 Term level syntax is similar. Leading and preceding bars (`|`) indicate which
298 alternative it is. Here is two terms of the type shown above: ::
299
300     (# (# 1, "foo" #) | #) -- first alternative
301
302     (# | True #) -- second alternative
303
304 Pattern syntax reflects the term syntax: ::
305
306     case x of
307       (# (# i, str #) | #) -> ...
308       (# | bool #) -> ...
309
310 Unboxed sums are "unboxed" in the sense that, instead of allocating sums in the
311 heap and representing values as pointers, unboxed sums are represented as their
312 components, just like unboxed tuples. These "components" depend on alternatives
313 of a sum type. Code generator tries to generate as compact layout as possible.
314 In the best case, size of an unboxed sum is size of its biggest alternative +
315 one word (for tag). The algorithm for generating memory layout for a sum type
316 works like this:
317
318 - All types are classified as one of these classes: 32bit word, 64bit word,
319   32bit float, 64bit float, pointer.
320
321 - For each alternative of the sum type, a layout that consists of these fields
322   is generated. For example, if an alternative has `Int`, `Float#` and `String`
323   fields, the layout will have an 32bit word, 32bit float and pointer fields.
324
325 - Layout fields are then overlapped so that the final layout will be as compact
326   as possible. E.g. say two alternatives have these fields: ::
327
328     Word32, String, Float#
329     Float#, Float#, Maybe Int
330
331   Final layout will be something like ::
332
333     Int32, Float32, Float32, Word32, Pointer
334
335   First `Int32` is for the tag. It has two `Float32` fields because floating
336   point types can't overlap with other types, because of limitations of the code
337   generator that we're hoping to overcome in the future, and second alternative
338   needs two `Float32` fields. `Word32` field is for the `Word32` in the first
339   alternative. `Pointer` field is shared between `String` and `Maybe Int` values
340   of the alternatives.
341
342   In the case of enumeration types (like `Bool`), the unboxed sum layout only
343   has an `Int32` field (i.e. the whole thing is represented by an integer).
344
345 In the example above, a value of this type is thus represented as 5 values. As
346 an another example, this is the layout for unboxed version of `Maybe a` type: ::
347
348     Int32, Pointer
349
350 The `Pointer` field is not used when tag says that it's `Nothing`. Otherwise
351 `Pointer` points to the value in `Just`.
352
353 .. _syntax-extns:
354
355 Syntactic extensions
356 ====================
357
358 .. _unicode-syntax:
359
360 Unicode syntax
361 --------------
362
363 .. ghc-flag:: -XUnicodeSyntax
364     :shortdesc: Enable :ref:`unicode syntax <unicode-syntax>`.
365     :type: dynamic
366     :reverse: -XNoUnicodeSyntax
367     :category:
368
369     :since: 6.8.1
370
371     Enable the use of Unicode characters in place of their equivalent ASCII
372     sequences.
373
374 The language extension :ghc-flag:`-XUnicodeSyntax` enables
375 Unicode characters to be used to stand for certain ASCII character
376 sequences. The following alternatives are provided:
377
378 +--------------+---------------+-------------+-----------------------------------------+
379 | ASCII        | Unicode       | Code point  | Name                                    |
380 |              | alternative   |             |                                         |
381 +==============+===============+=============+=========================================+
382 | ``::``       | ∷             | 0x2237      | PROPORTION                              |
383 +--------------+---------------+-------------+-----------------------------------------+
384 | ``=>``       | ⇒             | 0x21D2      | RIGHTWARDS DOUBLE ARROW                 |
385 +--------------+---------------+-------------+-----------------------------------------+
386 | ``->``       | →             | 0x2192      | RIGHTWARDS ARROW                        |
387 +--------------+---------------+-------------+-----------------------------------------+
388 | ``<-``       | ←             | 0x2190      | LEFTWARDS ARROW                         |
389 +--------------+---------------+-------------+-----------------------------------------+
390 | ``>-``       | ⤚             | 0x291a      | RIGHTWARDS ARROW-TAIL                   |
391 +--------------+---------------+-------------+-----------------------------------------+
392 | ``-<``       | ⤙             | 0x2919      | LEFTWARDS ARROW-TAIL                    |
393 +--------------+---------------+-------------+-----------------------------------------+
394 | ``>>-``      | ⤜             | 0x291C      | RIGHTWARDS DOUBLE ARROW-TAIL            |
395 +--------------+---------------+-------------+-----------------------------------------+
396 | ``-<<``      | ⤛             | 0x291B      | LEFTWARDS DOUBLE ARROW-TAIL             |
397 +--------------+---------------+-------------+-----------------------------------------+
398 | ``*``        | ★             | 0x2605      | BLACK STAR                              |
399 +--------------+---------------+-------------+-----------------------------------------+
400 | ``forall``   | ∀             | 0x2200      | FOR ALL                                 |
401 +--------------+---------------+-------------+-----------------------------------------+
402 | ``(|``       | ⦇             | 0x2987      | Z NOTATION LEFT IMAGE BRACKET           |
403 +--------------+---------------+-------------+-----------------------------------------+
404 | ``|)``       | ⦈             | 0x2988      | Z NOTATION RIGHT IMAGE BRACKET          |
405 +--------------+---------------+-------------+-----------------------------------------+
406 | ``[|``       | ⟦             | 0x27E6      | MATHEMATICAL LEFT WHITE SQUARE BRACKET  |
407 +--------------+---------------+-------------+-----------------------------------------+
408 | ``|]``       | ⟧             | 0x27E7      | MATHEMATICAL RIGHT WHITE SQUARE BRACKET |
409 +--------------+---------------+-------------+-----------------------------------------+
410
411 .. _magic-hash:
412
413 The magic hash
414 --------------
415
416 .. ghc-flag:: -XMagicHash
417     :shortdesc: Allow ``#`` as a :ref:`postfix modifier on identifiers <magic-hash>`.
418     :type: dynamic
419     :reverse: -XNoMagicHash
420     :category:
421
422     :since: 6.8.1
423
424     Enable the use of the hash character (``#``) as an identifier suffix.
425
426 The language extension :ghc-flag:`-XMagicHash` allows ``#`` as a postfix modifier
427 to identifiers. Thus, ``x#`` is a valid variable, and ``T#`` is a valid type
428 constructor or data constructor.
429
430 The hash sign does not change semantics at all. We tend to use variable
431 names ending in "#" for unboxed values or types (e.g. ``Int#``), but
432 there is no requirement to do so; they are just plain ordinary
433 variables. Nor does the :ghc-flag:`-XMagicHash` extension bring anything into
434 scope. For example, to bring ``Int#`` into scope you must import
435 ``GHC.Prim`` (see :ref:`primitives`); the :ghc-flag:`-XMagicHash` extension then
436 allows you to *refer* to the ``Int#`` that is now in scope. Note that
437 with this option, the meaning of ``x#y = 0`` is changed: it defines a
438 function ``x#`` taking a single argument ``y``; to define the operator
439 ``#``, put a space: ``x # y = 0``.
440
441 The :ghc-flag:`-XMagicHash` also enables some new forms of literals (see
442 :ref:`glasgow-unboxed`):
443
444 -  ``'x'#`` has type ``Char#``
445
446 -  ``"foo"#`` has type ``Addr#``
447
448 -  ``3#`` has type ``Int#``. In general, any Haskell integer lexeme
449    followed by a ``#`` is an ``Int#`` literal, e.g. ``-0x3A#`` as well as
450    ``32#``.
451
452 -  ``3##`` has type ``Word#``. In general, any non-negative Haskell
453    integer lexeme followed by ``##`` is a ``Word#``.
454
455 -  ``3.2#`` has type ``Float#``.
456
457 -  ``3.2##`` has type ``Double#``
458
459 .. _negative-literals:
460
461 Negative literals
462 -----------------
463
464 .. ghc-flag:: -XNegativeLiterals
465     :shortdesc: Enable support for :ref:`negative literals <negative-literals>`.
466     :type: dynamic
467     :reverse: -XNoNegativeLiterals
468     :category:
469
470     :since: 7.8.1
471
472     Enable the use of un-parenthesized negative numeric literals.
473
474 The literal ``-123`` is, according to Haskell98 and Haskell 2010,
475 desugared as ``negate (fromInteger 123)``. The language extension
476 :ghc-flag:`-XNegativeLiterals` means that it is instead desugared as
477 ``fromInteger (-123)``.
478
479 This can make a difference when the positive and negative range of a
480 numeric data type don't match up. For example, in 8-bit arithmetic -128
481 is representable, but +128 is not. So ``negate (fromInteger 128)`` will
482 elicit an unexpected integer-literal-overflow message.
483
484 .. _num-decimals:
485
486 Fractional looking integer literals
487 -----------------------------------
488
489 .. ghc-flag:: -XNumDecimals
490     :shortdesc: Enable support for 'fractional' integer literals.
491     :type: dynamic
492     :reverse: -XNoNumDecimals
493     :category:
494
495     :since: 7.8.1
496
497     Allow the use of floating-point literal syntax for integral types.
498
499 Haskell 2010 and Haskell 98 define floating literals with the syntax
500 ``1.2e6``. These literals have the type ``Fractional a => a``.
501
502 The language extension :ghc-flag:`-XNumDecimals` allows you to also use the
503 floating literal syntax for instances of ``Integral``, and have values
504 like ``(1.2e6 :: Num a => a)``
505
506 .. _binary-literals:
507
508 Binary integer literals
509 -----------------------
510
511 .. ghc-flag:: -XBinaryLiterals
512     :shortdesc: Enable support for :ref:`binary literals <binary-literals>`.
513     :type: dynamic
514     :reverse: -XNoBinaryLiterals
515     :category:
516
517     :since: 7.10.1
518
519     Allow the use of binary notation in integer literals.
520
521 Haskell 2010 and Haskell 98 allows for integer literals to be given in
522 decimal, octal (prefixed by ``0o`` or ``0O``), or hexadecimal notation
523 (prefixed by ``0x`` or ``0X``).
524
525 The language extension :ghc-flag:`-XBinaryLiterals` adds support for expressing
526 integer literals in binary notation with the prefix ``0b`` or ``0B``. For
527 instance, the binary integer literal ``0b11001001`` will be desugared into
528 ``fromInteger 201`` when :ghc-flag:`-XBinaryLiterals` is enabled.
529
530 .. _pattern-guards:
531
532 Pattern guards
533 --------------
534
535 .. ghc-flag:: -XNoPatternGuards
536     :shortdesc: Disable :ref:`pattern guards <pattern-guards>`.
537         Implied by :ghc-flag:`-XHaskell98`.
538     :type: dynamic
539     :reverse: -XPatternGuards
540     :category:
541
542     :implied by: :ghc-flag:`-XHaskell98`
543     :since: 6.8.1
544
545 Disable `pattern guards
546 <http://www.haskell.org/onlinereport/haskell2010/haskellch3.html#x8-460003.13>`__.
547
548 .. _view-patterns:
549
550 View patterns
551 -------------
552
553 .. ghc-flag:: -XViewPatterns
554     :shortdesc: Enable :ref:`view patterns <view-patterns>`.
555     :type: dynamic
556     :reverse: -XNoViewPatterns
557     :category:
558
559     :since: 6.10.1
560
561     Allow use of view pattern syntax.
562
563 View patterns are enabled by the flag :ghc-flag:`-XViewPatterns`. More
564 information and examples of view patterns can be found on the
565 :ghc-wiki:`Wiki page <ViewPatterns>`.
566
567 View patterns are somewhat like pattern guards that can be nested inside
568 of other patterns. They are a convenient way of pattern-matching against
569 values of abstract types. For example, in a programming language
570 implementation, we might represent the syntax of the types of the
571 language as follows: ::
572
573     type Typ
574
575     data TypView = Unit
576                  | Arrow Typ Typ
577
578     view :: Typ -> TypView
579
580     -- additional operations for constructing Typ's ...
581
582 The representation of Typ is held abstract, permitting implementations
583 to use a fancy representation (e.g., hash-consing to manage sharing).
584 Without view patterns, using this signature is a little inconvenient: ::
585
586     size :: Typ -> Integer
587     size t = case view t of
588       Unit -> 1
589       Arrow t1 t2 -> size t1 + size t2
590
591 It is necessary to iterate the case, rather than using an equational
592 function definition. And the situation is even worse when the matching
593 against ``t`` is buried deep inside another pattern.
594
595 View patterns permit calling the view function inside the pattern and
596 matching against the result: ::
597
598     size (view -> Unit) = 1
599     size (view -> Arrow t1 t2) = size t1 + size t2
600
601 That is, we add a new form of pattern, written ⟨expression⟩ ``->``
602 ⟨pattern⟩ that means "apply the expression to whatever we're trying to
603 match against, and then match the result of that application against the
604 pattern". The expression can be any Haskell expression of function type,
605 and view patterns can be used wherever patterns are used.
606
607 The semantics of a pattern ``(`` ⟨exp⟩ ``->`` ⟨pat⟩ ``)`` are as
608 follows:
609
610 -  Scoping:
611    The variables bound by the view pattern are the variables bound by
612    ⟨pat⟩.
613
614    Any variables in ⟨exp⟩ are bound occurrences, but variables bound "to
615    the left" in a pattern are in scope. This feature permits, for
616    example, one argument to a function to be used in the view of another
617    argument. For example, the function ``clunky`` from
618    :ref:`pattern-guards` can be written using view patterns as follows: ::
619
620        clunky env (lookup env -> Just val1) (lookup env -> Just val2) = val1 + val2
621        ...other equations for clunky...
622
623    More precisely, the scoping rules are:
624
625    -  In a single pattern, variables bound by patterns to the left of a
626       view pattern expression are in scope. For example: ::
627
628           example :: Maybe ((String -> Integer,Integer), String) -> Bool
629           example Just ((f,_), f -> 4) = True
630
631       Additionally, in function definitions, variables bound by matching
632       earlier curried arguments may be used in view pattern expressions
633       in later arguments: ::
634
635           example :: (String -> Integer) -> String -> Bool
636           example f (f -> 4) = True
637
638       That is, the scoping is the same as it would be if the curried
639       arguments were collected into a tuple.
640
641    -  In mutually recursive bindings, such as ``let``, ``where``, or the
642       top level, view patterns in one declaration may not mention
643       variables bound by other declarations. That is, each declaration
644       must be self-contained. For example, the following program is not
645       allowed: ::
646
647           let {(x -> y) = e1 ;
648                (y -> x) = e2 } in x
649
650    (For some amplification on this design choice see :ghc-ticket:`4061`.
651
652 -  Typing: If ⟨exp⟩ has type ⟨T1⟩ ``->`` ⟨T2⟩ and ⟨pat⟩ matches a ⟨T2⟩,
653    then the whole view pattern matches a ⟨T1⟩.
654
655 -  Matching: To the equations in Section 3.17.3 of the `Haskell 98
656    Report <http://www.haskell.org/onlinereport/>`__, add the following: ::
657
658        case v of { (e -> p) -> e1 ; _ -> e2 }
659         =
660        case (e v) of { p -> e1 ; _ -> e2 }
661
662    That is, to match a variable ⟨v⟩ against a pattern ``(`` ⟨exp⟩ ``->``
663    ⟨pat⟩ ``)``, evaluate ``(`` ⟨exp⟩ ⟨v⟩ ``)`` and match the result
664    against ⟨pat⟩.
665
666 -  Efficiency: When the same view function is applied in multiple
667    branches of a function definition or a case expression (e.g., in
668    ``size`` above), GHC makes an attempt to collect these applications
669    into a single nested case expression, so that the view function is
670    only applied once. Pattern compilation in GHC follows the matrix
671    algorithm described in Chapter 4 of `The Implementation of Functional
672    Programming
673    Languages <http://research.microsoft.com/~simonpj/Papers/slpj-book-1987/>`__.
674    When the top rows of the first column of a matrix are all view
675    patterns with the "same" expression, these patterns are transformed
676    into a single nested case. This includes, for example, adjacent view
677    patterns that line up in a tuple, as in
678
679    ::
680
681        f ((view -> A, p1), p2) = e1
682        f ((view -> B, p3), p4) = e2
683
684    The current notion of when two view pattern expressions are "the
685    same" is very restricted: it is not even full syntactic equality.
686    However, it does include variables, literals, applications, and
687    tuples; e.g., two instances of ``view ("hi", "there")`` will be
688    collected. However, the current implementation does not compare up to
689    alpha-equivalence, so two instances of ``(x, view x -> y)`` will not
690    be coalesced.
691
692 .. _n-k-patterns:
693
694 n+k patterns
695 ------------
696
697 .. ghc-flag:: -XNPlusKPatterns
698     :shortdesc: Enable support for ``n+k`` patterns.
699         Implied by :ghc-flag:`-XHaskell98`.
700     :type: dynamic
701     :reverse: -XNoNPlusKPatterns
702     :category:
703
704     :implied by: :ghc-flag:`-XHaskell98`
705     :since: 6.12.1
706
707     Enable use of ``n+k`` patterns.
708
709 .. _recursive-do-notation:
710
711 The recursive do-notation
712 -------------------------
713
714 .. ghc-flag:: -XRecursiveDo
715     :shortdesc: Enable :ref:`recursive do (mdo) notation <recursive-do-notation>`.
716     :type: dynamic
717     :reverse: -XNoRecursiveDo
718     :category:
719
720     :since: 6.8.1
721
722     Allow the use of recursive ``do`` notation.
723
724 The do-notation of Haskell 98 does not allow *recursive bindings*, that
725 is, the variables bound in a do-expression are visible only in the
726 textually following code block. Compare this to a let-expression, where
727 bound variables are visible in the entire binding group.
728
729 It turns out that such recursive bindings do indeed make sense for a
730 variety of monads, but not all. In particular, recursion in this sense
731 requires a fixed-point operator for the underlying monad, captured by
732 the ``mfix`` method of the ``MonadFix`` class, defined in
733 ``Control.Monad.Fix`` as follows: ::
734
735     class Monad m => MonadFix m where
736        mfix :: (a -> m a) -> m a
737
738 Haskell's ``Maybe``, ``[]`` (list), ``ST`` (both strict and lazy
739 versions), ``IO``, and many other monads have ``MonadFix`` instances. On
740 the negative side, the continuation monad, with the signature
741 ``(a -> r) -> r``, does not.
742
743 For monads that do belong to the ``MonadFix`` class, GHC provides an
744 extended version of the do-notation that allows recursive bindings. The
745 :ghc-flag:`-XRecursiveDo` (language pragma: ``RecursiveDo``) provides the
746 necessary syntactic support, introducing the keywords ``mdo`` and
747 ``rec`` for higher and lower levels of the notation respectively. Unlike
748 bindings in a ``do`` expression, those introduced by ``mdo`` and ``rec``
749 are recursively defined, much like in an ordinary let-expression. Due to
750 the new keyword ``mdo``, we also call this notation the *mdo-notation*.
751
752 Here is a simple (albeit contrived) example:
753
754 ::
755
756     {-# LANGUAGE RecursiveDo #-}
757     justOnes = mdo { xs <- Just (1:xs)
758                    ; return (map negate xs) }
759
760 or equivalently
761
762 ::
763
764     {-# LANGUAGE RecursiveDo #-}
765     justOnes = do { rec { xs <- Just (1:xs) }
766                   ; return (map negate xs) }
767
768 As you can guess ``justOnes`` will evaluate to ``Just [-1,-1,-1,...``.
769
770 GHC's implementation the mdo-notation closely follows the original
771 translation as described in the paper `A recursive do for
772 Haskell <http://leventerkok.github.io/papers/recdo.pdf>`__, which
773 in turn is based on the work `Value Recursion in Monadic
774 Computations <http://leventerkok.github.io/papers/erkok-thesis.pdf>`__.
775 Furthermore, GHC extends the syntax described in the former paper with a
776 lower level syntax flagged by the ``rec`` keyword, as we describe next.
777
778 Recursive binding groups
779 ~~~~~~~~~~~~~~~~~~~~~~~~
780
781 The flag :ghc-flag:`-XRecursiveDo` also introduces a new keyword ``rec``, which
782 wraps a mutually-recursive group of monadic statements inside a ``do``
783 expression, producing a single statement. Similar to a ``let`` statement
784 inside a ``do``, variables bound in the ``rec`` are visible throughout
785 the ``rec`` group, and below it. For example, compare
786
787 ::
788
789         do { a <- getChar            do { a <- getChar
790            ; let { r1 = f a r2          ; rec { r1 <- f a r2
791            ;     ; r2 = g r1 }          ;     ; r2 <- g r1 }
792            ; return (r1 ++ r2) }        ; return (r1 ++ r2) }
793
794 In both cases, ``r1`` and ``r2`` are available both throughout the
795 ``let`` or ``rec`` block, and in the statements that follow it. The
796 difference is that ``let`` is non-monadic, while ``rec`` is monadic. (In
797 Haskell ``let`` is really ``letrec``, of course.)
798
799 The semantics of ``rec`` is fairly straightforward. Whenever GHC finds a
800 ``rec`` group, it will compute its set of bound variables, and will
801 introduce an appropriate call to the underlying monadic value-recursion
802 operator ``mfix``, belonging to the ``MonadFix`` class. Here is an
803 example:
804
805 ::
806
807     rec { b <- f a c     ===>    (b,c) <- mfix (\ ~(b,c) -> do { b <- f a c
808         ; c <- f b a }                                         ; c <- f b a
809                                                                ; return (b,c) })
810
811 As usual, the meta-variables ``b``, ``c`` etc., can be arbitrary
812 patterns. In general, the statement ``rec ss`` is desugared to the
813 statement
814
815 ::
816
817     vs <- mfix (\ ~vs -> do { ss; return vs })
818
819 where ``vs`` is a tuple of the variables bound by ``ss``.
820
821 Note in particular that the translation for a ``rec`` block only
822 involves wrapping a call to ``mfix``: it performs no other analysis on
823 the bindings. The latter is the task for the ``mdo`` notation, which is
824 described next.
825
826 The ``mdo`` notation
827 ~~~~~~~~~~~~~~~~~~~~
828
829 A ``rec``-block tells the compiler where precisely the recursive knot
830 should be tied. It turns out that the placement of the recursive knots
831 can be rather delicate: in particular, we would like the knots to be
832 wrapped around as minimal groups as possible. This process is known as
833 *segmentation*, and is described in detail in Section 3.2 of `A
834 recursive do for
835 Haskell <http://leventerkok.github.io/papers/recdo.pdf>`__.
836 Segmentation improves polymorphism and reduces the size of the recursive
837 knot. Most importantly, it avoids unnecessary interference caused by a
838 fundamental issue with the so-called *right-shrinking* axiom for monadic
839 recursion. In brief, most monads of interest (IO, strict state, etc.) do
840 *not* have recursion operators that satisfy this axiom, and thus not
841 performing segmentation can cause unnecessary interference, changing the
842 termination behavior of the resulting translation. (Details can be found
843 in Sections 3.1 and 7.2.2 of `Value Recursion in Monadic
844 Computations <http://leventerkok.github.io/papers/erkok-thesis.pdf>`__.)
845
846 The ``mdo`` notation removes the burden of placing explicit ``rec``
847 blocks in the code. Unlike an ordinary ``do`` expression, in which
848 variables bound by statements are only in scope for later statements,
849 variables bound in an ``mdo`` expression are in scope for all statements
850 of the expression. The compiler then automatically identifies minimal
851 mutually recursively dependent segments of statements, treating them as
852 if the user had wrapped a ``rec`` qualifier around them.
853
854 The definition is syntactic:
855
856 -  A generator ⟨g⟩ *depends* on a textually following generator ⟨g'⟩, if
857
858    -  ⟨g'⟩ defines a variable that is used by ⟨g⟩, or
859
860    -  ⟨g'⟩ textually appears between ⟨g⟩ and ⟨g''⟩, where ⟨g⟩ depends on
861       ⟨g''⟩.
862
863 -  A *segment* of a given ``mdo``-expression is a minimal sequence of
864    generators such that no generator of the sequence depends on an
865    outside generator. As a special case, although it is not a generator,
866    the final expression in an ``mdo``-expression is considered to form a
867    segment by itself.
868
869 Segments in this sense are related to *strongly-connected components*
870 analysis, with the exception that bindings in a segment cannot be
871 reordered and must be contiguous.
872
873 Here is an example ``mdo``-expression, and its translation to ``rec``
874 blocks:
875
876 ::
877
878     mdo { a <- getChar      ===> do { a <- getChar
879         ; b <- f a c                ; rec { b <- f a c
880         ; c <- f b a                ;     ; c <- f b a }
881         ; z <- h a b                ; z <- h a b
882         ; d <- g d e                ; rec { d <- g d e
883         ; e <- g a z                ;     ; e <- g a z }
884         ; putChar c }               ; putChar c }
885
886 Note that a given ``mdo`` expression can cause the creation of multiple
887 ``rec`` blocks. If there are no recursive dependencies, ``mdo`` will
888 introduce no ``rec`` blocks. In this latter case an ``mdo`` expression
889 is precisely the same as a ``do`` expression, as one would expect.
890
891 In summary, given an ``mdo`` expression, GHC first performs
892 segmentation, introducing ``rec`` blocks to wrap over minimal recursive
893 groups. Then, each resulting ``rec`` is desugared, using a call to
894 ``Control.Monad.Fix.mfix`` as described in the previous section. The
895 original ``mdo``-expression typechecks exactly when the desugared
896 version would do so.
897
898 Here are some other important points in using the recursive-do notation:
899
900 -  It is enabled with the flag :ghc-flag:`-XRecursiveDo`, or the
901    ``LANGUAGE RecursiveDo`` pragma. (The same flag enables both
902    ``mdo``-notation, and the use of ``rec`` blocks inside ``do``
903    expressions.)
904
905 -  ``rec`` blocks can also be used inside ``mdo``-expressions, which
906    will be treated as a single statement. However, it is good style to
907    either use ``mdo`` or ``rec`` blocks in a single expression.
908
909 -  If recursive bindings are required for a monad, then that monad must
910    be declared an instance of the ``MonadFix`` class.
911
912 -  The following instances of ``MonadFix`` are automatically provided:
913    List, Maybe, IO. Furthermore, the ``Control.Monad.ST`` and
914    ``Control.Monad.ST.Lazy`` modules provide the instances of the
915    ``MonadFix`` class for Haskell's internal state monad (strict and
916    lazy, respectively).
917
918 -  Like ``let`` and ``where`` bindings, name shadowing is not allowed
919    within an ``mdo``-expression or a ``rec``-block; that is, all the
920    names bound in a single ``rec`` must be distinct. (GHC will complain
921    if this is not the case.)
922
923 .. _applicative-do:
924
925 Applicative do-notation
926 -----------------------
927
928 .. index::
929    single: Applicative do-notation
930    single: do-notation; Applicative
931
932 .. ghc-flag:: -XApplicativeDo
933     :shortdesc: Enable :ref:`Applicative do-notation desugaring <applicative-do>`
934     :type: dynamic
935     :reverse: -XNoApplicativeDo
936     :category:
937
938     :since: 8.0.1
939
940     Allow use of ``Applicative`` ``do`` notation.
941
942 The language option :ghc-flag:`-XApplicativeDo` enables an alternative translation for
943 the do-notation, which uses the operators ``<$>``, ``<*>``, along with ``join``
944 as far as possible. There are two main reasons for wanting to do this:
945
946 -  We can use do-notation with types that are an instance of ``Applicative`` and
947    ``Functor``, but not ``Monad``
948 -  In some monads, using the applicative operators is more efficient than monadic
949    bind. For example, it may enable more parallelism.
950
951 Applicative do-notation desugaring preserves the original semantics, provided
952 that the ``Applicative`` instance satisfies ``<*> = ap`` and ``pure = return``
953 (these are true of all the common monadic types). Thus, you can normally turn on
954 :ghc-flag:`-XApplicativeDo` without fear of breaking your program. There is one pitfall
955 to watch out for; see :ref:`applicative-do-pitfall`.
956
957 There are no syntactic changes with :ghc-flag:`-XApplicativeDo`. The only way it shows
958 up at the source level is that you can have a ``do`` expression that doesn't
959 require a ``Monad`` constraint. For example, in GHCi: ::
960
961     Prelude> :set -XApplicativeDo
962     Prelude> :t \m -> do { x <- m; return (not x) }
963     \m -> do { x <- m; return (not x) }
964       :: Functor f => f Bool -> f Bool
965
966 This example only requires ``Functor``, because it is translated into ``(\x ->
967 not x) <$> m``. A more complex example requires ``Applicative``, ::
968
969     Prelude> :t \m -> do { x <- m 'a'; y <- m 'b'; return (x || y) }
970     \m -> do { x <- m 'a'; y <- m 'b'; return (x || y) }
971       :: Applicative f => (Char -> f Bool) -> f Bool
972
973 Here GHC has translated the expression into ::
974
975     (\x y -> x || y) <$> m 'a' <*> m 'b'
976
977 It is possible to see the actual translation by using :ghc-flag:`-ddump-ds`, but be
978 warned, the output is quite verbose.
979
980 Note that if the expression can't be translated into uses of ``<$>``, ``<*>``
981 only, then it will incur a ``Monad`` constraint as usual. This happens when
982 there is a dependency on a value produced by an earlier statement in the
983 ``do``-block: ::
984
985     Prelude> :t \m -> do { x <- m True; y <- m x; return (x || y) }
986     \m -> do { x <- m True; y <- m x; return (x || y) }
987       :: Monad m => (Bool -> m Bool) -> m Bool
988
989 Here, ``m x`` depends on the value of ``x`` produced by the first statement, so
990 the expression cannot be translated using ``<*>``.
991
992 In general, the rule for when a ``do`` statement incurs a ``Monad`` constraint
993 is as follows. If the do-expression has the following form: ::
994
995     do p1 <- E1; ...; pn <- En; return E
996
997 where none of the variables defined by ``p1...pn`` are mentioned in ``E1...En``,
998 and ``p1...pn`` are all variables or lazy patterns,
999 then the expression will only require ``Applicative``. Otherwise, the expression
1000 will require ``Monad``. The block may return a pure expression ``E`` depending
1001 upon the results ``p1...pn`` with either ``return`` or ``pure``.
1002
1003 Note: the final statement must match one of these patterns exactly:
1004
1005 - ``return E``
1006 - ``return $ E``
1007 - ``pure E``
1008 - ``pure $ E``
1009
1010 otherwise GHC cannot recognise it as a ``return`` statement, and the
1011 transformation to use ``<$>`` that we saw above does not apply.  In
1012 particular, slight variations such as ``return . Just $ x`` or ``let x
1013 = e in return x`` would not be recognised.
1014
1015 If the final statement is not of one of these forms, GHC falls back to
1016 standard ``do`` desugaring, and the expression will require a
1017 ``Monad`` constraint.
1018
1019 When the statements of a ``do`` expression have dependencies between
1020 them, and ``ApplicativeDo`` cannot infer an ``Applicative`` type, it
1021 uses a heuristic algorithm to try to use ``<*>`` as much as possible.
1022 This algorithm usually finds the best solution, but in rare complex
1023 cases it might miss an opportunity.  There is an algorithm that finds
1024 the optimal solution, provided as an option:
1025
1026 .. ghc-flag:: -foptimal-applicative-do
1027     :shortdesc: Use a slower but better algorithm for ApplicativeDo
1028     :type: dynamic
1029     :reverse: -fno-optimal-applicative-do
1030     :category: optimization
1031
1032     :since: 8.0.1
1033
1034     Enables an alternative algorithm for choosing where to use ``<*>``
1035     in conjunction with the ``ApplicativeDo`` language extension.
1036     This algorithm always finds the optimal solution, but it is
1037     expensive: ``O(n^3)``, so this option can lead to long compile
1038     times when there are very large ``do`` expressions (over 100
1039     statements).  The default ``ApplicativeDo`` algorithm is ``O(n^2)``.
1040
1041
1042 .. _applicative-do-strict:
1043
1044 Strict patterns
1045 ~~~~~~~~~~~~~~~
1046
1047
1048 A strict pattern match in a bind statement prevents
1049 ``ApplicativeDo`` from transforming that statement to use
1050 ``Applicative``.  This is because the transformation would change the
1051 semantics by making the expression lazier.
1052
1053 For example, this code will require a ``Monad`` constraint::
1054
1055     > :t \m -> do { (x:xs) <- m; return x }
1056     \m -> do { (x:xs) <- m; return x } :: Monad m => m [b] -> m b
1057
1058 but making the pattern match lazy allows it to have a ``Functor`` constraint::
1059
1060     > :t \m -> do { ~(x:xs) <- m; return x }
1061     \m -> do { ~(x:xs) <- m; return x } :: Functor f => f [b] -> f b
1062
1063 A "strict pattern match" is any pattern match that can fail.  For
1064 example, ``()``, ``(x:xs)``, ``!z``, and ``C x`` are strict patterns,
1065 but ``x`` and ``~(1,2)`` are not.  For the purposes of
1066 ``ApplicativeDo``, a pattern match against a ``newtype`` constructor
1067 is considered strict.
1068
1069 When there's a strict pattern match in a sequence of statements,
1070 ``ApplicativeDo`` places a ``>>=`` between that statement and the one
1071 that follows it.  The sequence may be transformed to use ``<*>``
1072 elsewhere, but the strict pattern match and the following statement
1073 will always be connected with ``>>=``, to retain the same strictness
1074 semantics as the standard do-notation.  If you don't want this, simply
1075 put a ``~`` on the pattern match to make it lazy.
1076
1077 .. _applicative-do-pitfall:
1078
1079 Things to watch out for
1080 ~~~~~~~~~~~~~~~~~~~~~~~
1081
1082 Your code should just work as before when :ghc-flag:`-XApplicativeDo` is enabled,
1083 provided you use conventional ``Applicative`` instances. However, if you define
1084 a ``Functor`` or ``Applicative`` instance using do-notation, then it will likely
1085 get turned into an infinite loop by GHC. For example, if you do this: ::
1086
1087     instance Functor MyType where
1088         fmap f m = do x <- m; return (f x)
1089
1090 Then applicative desugaring will turn it into ::
1091
1092     instance Functor MyType where
1093         fmap f m = fmap (\x -> f x) m
1094
1095 And the program will loop at runtime. Similarly, an ``Applicative`` instance
1096 like this ::
1097
1098     instance Applicative MyType where
1099         pure = return
1100         x <*> y = do f <- x; a <- y; return (f a)
1101
1102 will result in an infinte loop when ``<*>`` is called.
1103
1104 Just as you wouldn't define a ``Monad`` instance using the do-notation, you
1105 shouldn't define ``Functor`` or ``Applicative`` instance using do-notation (when
1106 using ``ApplicativeDo``) either. The correct way to define these instances in
1107 terms of ``Monad`` is to use the ``Monad`` operations directly, e.g. ::
1108
1109     instance Functor MyType where
1110         fmap f m = m >>= return . f
1111
1112     instance Applicative MyType where
1113         pure = return
1114         (<*>) = ap
1115
1116
1117 .. _parallel-list-comprehensions:
1118
1119 Parallel List Comprehensions
1120 ----------------------------
1121
1122 .. index::
1123    single: list comprehensions; parallel
1124    single: parallel list comprehensions
1125
1126 .. ghc-flag:: -XParallelListComp
1127     :shortdesc: Enable :ref:`parallel list comprehensions
1128         <parallel-list-comprehensions>`.
1129         Implied by :ghc-flag:`-XParallelArrays`.
1130     :type: dynamic
1131     :reverse: -XNoParallelListComp
1132     :category:
1133
1134     :since: 6.8.1
1135
1136     Allow parallel list comprehension syntax.
1137
1138 Parallel list comprehensions are a natural extension to list
1139 comprehensions. List comprehensions can be thought of as a nice syntax
1140 for writing maps and filters. Parallel comprehensions extend this to
1141 include the ``zipWith`` family.
1142
1143 A parallel list comprehension has multiple independent branches of
1144 qualifier lists, each separated by a ``|`` symbol. For example, the
1145 following zips together two lists: ::
1146
1147        [ (x, y) | x <- xs | y <- ys ]
1148
1149 The behaviour of parallel list comprehensions follows that of zip, in
1150 that the resulting list will have the same length as the shortest
1151 branch.
1152
1153 We can define parallel list comprehensions by translation to regular
1154 comprehensions. Here's the basic idea:
1155
1156 Given a parallel comprehension of the form: ::
1157
1158        [ e | p1 <- e11, p2 <- e12, ...
1159            | q1 <- e21, q2 <- e22, ...
1160            ...
1161        ]
1162
1163 This will be translated to: ::
1164
1165        [ e | ((p1,p2), (q1,q2), ...) <- zipN [(p1,p2) | p1 <- e11, p2 <- e12, ...]
1166                                              [(q1,q2) | q1 <- e21, q2 <- e22, ...]
1167                                              ...
1168        ]
1169
1170 where ``zipN`` is the appropriate zip for the given number of branches.
1171
1172 .. _generalised-list-comprehensions:
1173
1174 Generalised (SQL-like) List Comprehensions
1175 ------------------------------------------
1176
1177 .. index::
1178    single: list comprehensions; generalised
1179    single: extended list comprehensions
1180    single: group
1181    single: SQL
1182
1183 .. ghc-flag:: -XTransformListComp
1184     :shortdesc: Enable :ref:`generalised list comprehensions
1185         <generalised-list-comprehensions>`.
1186     :type: dynamic
1187     :reverse: -XNoTransformListComp
1188     :category:
1189
1190     :since: 6.10.1
1191
1192     Allow use of generalised list (SQL-like) comprehension syntax. This
1193     introduces the ``group``, ``by``, and ``using`` keywords.
1194
1195 Generalised list comprehensions are a further enhancement to the list
1196 comprehension syntactic sugar to allow operations such as sorting and
1197 grouping which are familiar from SQL. They are fully described in the
1198 paper `Comprehensive comprehensions: comprehensions with "order by" and
1199 "group by" <https://www.microsoft.com/en-us/research/wp-content/uploads/2007/09/list-comp.pdf>`__,
1200 except that the syntax we use differs slightly from the paper.
1201
1202 The extension is enabled with the flag :ghc-flag:`-XTransformListComp`.
1203
1204 Here is an example:
1205
1206 ::
1207
1208     employees = [ ("Simon", "MS", 80)
1209                 , ("Erik", "MS", 100)
1210                 , ("Phil", "Ed", 40)
1211                 , ("Gordon", "Ed", 45)
1212                 , ("Paul", "Yale", 60) ]
1213
1214     output = [ (the dept, sum salary)
1215              | (name, dept, salary) <- employees
1216              , then group by dept using groupWith
1217              , then sortWith by (sum salary)
1218              , then take 5 ]
1219
1220 In this example, the list ``output`` would take on the value:
1221
1222 ::
1223
1224     [("Yale", 60), ("Ed", 85), ("MS", 180)]
1225
1226 There are three new keywords: ``group``, ``by``, and ``using``. (The
1227 functions ``sortWith`` and ``groupWith`` are not keywords; they are
1228 ordinary functions that are exported by ``GHC.Exts``.)
1229
1230 There are five new forms of comprehension qualifier, all introduced by
1231 the (existing) keyword ``then``:
1232
1233 -  ::
1234
1235        then f
1236
1237    This statement requires that
1238    f
1239    have the type
1240    forall a. [a] -> [a]
1241    . You can see an example of its use in the motivating example, as
1242    this form is used to apply
1243    take 5
1244    .
1245 -  ::
1246
1247        then f by e
1248
1249    This form is similar to the previous one, but allows you to create a
1250    function which will be passed as the first argument to f. As a
1251    consequence f must have the type
1252    ``forall a. (a -> t) -> [a] -> [a]``. As you can see from the type,
1253    this function lets f "project out" some information from the elements
1254    of the list it is transforming.
1255
1256    An example is shown in the opening example, where ``sortWith`` is
1257    supplied with a function that lets it find out the ``sum salary`` for
1258    any item in the list comprehension it transforms.
1259
1260 -  ::
1261
1262        then group by e using f
1263
1264    This is the most general of the grouping-type statements. In this
1265    form, f is required to have type
1266    ``forall a. (a -> t) -> [a] -> [[a]]``. As with the ``then f by e``
1267    case above, the first argument is a function supplied to f by the
1268    compiler which lets it compute e on every element of the list being
1269    transformed. However, unlike the non-grouping case, f additionally
1270    partitions the list into a number of sublists: this means that at
1271    every point after this statement, binders occurring before it in the
1272    comprehension refer to *lists* of possible values, not single values.
1273    To help understand this, let's look at an example:
1274
1275    ::
1276
1277        -- This works similarly to groupWith in GHC.Exts, but doesn't sort its input first
1278        groupRuns :: Eq b => (a -> b) -> [a] -> [[a]]
1279        groupRuns f = groupBy (\x y -> f x == f y)
1280
1281        output = [ (the x, y)
1282        | x <- ([1..3] ++ [1..2])
1283        , y <- [4..6]
1284        , then group by x using groupRuns ]
1285
1286    This results in the variable ``output`` taking on the value below:
1287
1288    ::
1289
1290        [(1, [4, 5, 6]), (2, [4, 5, 6]), (3, [4, 5, 6]), (1, [4, 5, 6]), (2, [4, 5, 6])]
1291
1292    Note that we have used the ``the`` function to change the type of x
1293    from a list to its original numeric type. The variable y, in
1294    contrast, is left unchanged from the list form introduced by the
1295    grouping.
1296
1297 -  ::
1298
1299        then group using f
1300
1301    With this form of the group statement, f is required to simply have
1302    the type ``forall a. [a] -> [[a]]``, which will be used to group up
1303    the comprehension so far directly. An example of this form is as
1304    follows:
1305
1306    ::
1307
1308        output = [ x
1309        | y <- [1..5]
1310        , x <- "hello"
1311        , then group using inits]
1312
1313    This will yield a list containing every prefix of the word "hello"
1314    written out 5 times:
1315
1316    ::
1317
1318        ["","h","he","hel","hell","hello","helloh","hellohe","hellohel","hellohell","hellohello","hellohelloh",...]
1319
1320 .. _monad-comprehensions:
1321
1322 Monad comprehensions
1323 --------------------
1324
1325 .. index::
1326    single: monad comprehensions
1327
1328 .. ghc-flag:: -XMonadComprehensions
1329     :shortdesc: Enable :ref:`monad comprehensions <monad-comprehensions>`.
1330     :type: dynamic
1331     :reverse: -XNoMonadComprehensions
1332     :category:
1333
1334     :since: 7.2.1
1335
1336     Enable list comprehension syntax for arbitrary monads.
1337
1338 Monad comprehensions generalise the list comprehension notation,
1339 including parallel comprehensions (:ref:`parallel-list-comprehensions`)
1340 and transform comprehensions (:ref:`generalised-list-comprehensions`) to
1341 work for any monad.
1342
1343 Monad comprehensions support:
1344
1345 -  Bindings: ::
1346
1347        [ x + y | x <- Just 1, y <- Just 2 ]
1348
1349    Bindings are translated with the ``(>>=)`` and ``return`` functions
1350    to the usual do-notation: ::
1351
1352        do x <- Just 1
1353           y <- Just 2
1354           return (x+y)
1355
1356 -  Guards: ::
1357
1358        [ x | x <- [1..10], x <= 5 ]
1359
1360    Guards are translated with the ``guard`` function, which requires a
1361    ``MonadPlus`` instance: ::
1362
1363        do x <- [1..10]
1364           guard (x <= 5)
1365           return x
1366
1367 -  Transform statements (as with :ghc-flag:`-XTransformListComp`): ::
1368
1369        [ x+y | x <- [1..10], y <- [1..x], then take 2 ]
1370
1371    This translates to: ::
1372
1373        do (x,y) <- take 2 (do x <- [1..10]
1374                               y <- [1..x]
1375                               return (x,y))
1376           return (x+y)
1377
1378 -  Group statements (as with :ghc-flag:`-XTransformListComp`):
1379
1380    ::
1381
1382        [ x | x <- [1,1,2,2,3], then group by x using GHC.Exts.groupWith ]
1383        [ x | x <- [1,1,2,2,3], then group using myGroup ]
1384
1385 -  Parallel statements (as with :ghc-flag:`-XParallelListComp`):
1386
1387    ::
1388
1389        [ (x+y) | x <- [1..10]
1390                | y <- [11..20]
1391                ]
1392
1393    Parallel statements are translated using the ``mzip`` function, which
1394    requires a ``MonadZip`` instance defined in
1395    :base-ref:`Control.Monad.Zip.`:
1396
1397    ::
1398
1399        do (x,y) <- mzip (do x <- [1..10]
1400                             return x)
1401                         (do y <- [11..20]
1402                             return y)
1403           return (x+y)
1404
1405 All these features are enabled by default if the :ghc-flag:`-XMonadComprehensions`
1406 extension is enabled. The types and more detailed examples on how to use
1407 comprehensions are explained in the previous chapters
1408 :ref:`generalised-list-comprehensions` and
1409 :ref:`parallel-list-comprehensions`. In general you just have to replace
1410 the type ``[a]`` with the type ``Monad m => m a`` for monad
1411 comprehensions.
1412
1413 .. note::
1414     Even though most of these examples are using the list monad, monad
1415     comprehensions work for any monad. The ``base`` package offers all
1416     necessary instances for lists, which make :ghc-flag:`-XMonadComprehensions`
1417     backward compatible to built-in, transform and parallel list
1418     comprehensions.
1419
1420 More formally, the desugaring is as follows. We write ``D[ e | Q]`` to
1421 mean the desugaring of the monad comprehension ``[ e | Q]``:
1422
1423 .. code-block:: none
1424
1425     Expressions: e
1426     Declarations: d
1427     Lists of qualifiers: Q,R,S
1428
1429     -- Basic forms
1430     D[ e | ]               = return e
1431     D[ e | p <- e, Q ]  = e >>= \p -> D[ e | Q ]
1432     D[ e | e, Q ]          = guard e >> \p -> D[ e | Q ]
1433     D[ e | let d, Q ]      = let d in D[ e | Q ]
1434
1435     -- Parallel comprehensions (iterate for multiple parallel branches)
1436     D[ e | (Q | R), S ]    = mzip D[ Qv | Q ] D[ Rv | R ] >>= \(Qv,Rv) -> D[ e | S ]
1437
1438     -- Transform comprehensions
1439     D[ e | Q then f, R ]                  = f D[ Qv | Q ] >>= \Qv -> D[ e | R ]
1440
1441     D[ e | Q then f by b, R ]             = f (\Qv -> b) D[ Qv | Q ] >>= \Qv -> D[ e | R ]
1442
1443     D[ e | Q then group using f, R ]      = f D[ Qv | Q ] >>= \ys ->
1444                                             case (fmap selQv1 ys, ..., fmap selQvn ys) of
1445                                              Qv -> D[ e | R ]
1446
1447     D[ e | Q then group by b using f, R ] = f (\Qv -> b) D[ Qv | Q ] >>= \ys ->
1448                                             case (fmap selQv1 ys, ..., fmap selQvn ys) of
1449                                                Qv -> D[ e | R ]
1450
1451     where  Qv is the tuple of variables bound by Q (and used subsequently)
1452            selQvi is a selector mapping Qv to the ith component of Qv
1453
1454     Operator     Standard binding       Expected type
1455     --------------------------------------------------------------------
1456     return       GHC.Base               t1 -> m t2
1457     (>>=)        GHC.Base               m1 t1 -> (t2 -> m2 t3) -> m3 t3
1458     (>>)         GHC.Base               m1 t1 -> m2 t2         -> m3 t3
1459     guard        Control.Monad          t1 -> m t2
1460     fmap         GHC.Base               forall a b. (a->b) -> n a -> n b
1461     mzip         Control.Monad.Zip      forall a b. m a -> m b -> m (a,b)
1462
1463 The comprehension should typecheck when its desugaring would typecheck,
1464 except that (as discussed in :ref:`generalised-list-comprehensions`) in the
1465 "then ``f``" and "then group using ``f``" clauses, when the "by ``b``" qualifier
1466 is omitted, argument ``f`` should have a polymorphic type. In particular, "then
1467 ``Data.List.sort``" and "then group using ``Data.List.group``" are
1468 insufficiently polymorphic.
1469
1470 Monad comprehensions support rebindable syntax
1471 (:ref:`rebindable-syntax`). Without rebindable syntax, the operators
1472 from the "standard binding" module are used; with rebindable syntax, the
1473 operators are looked up in the current lexical scope. For example,
1474 parallel comprehensions will be typechecked and desugared using whatever
1475 "``mzip``" is in scope.
1476
1477 The rebindable operators must have the "Expected type" given in the
1478 table above. These types are surprisingly general. For example, you can
1479 use a bind operator with the type
1480
1481 ::
1482
1483     (>>=) :: T x y a -> (a -> T y z b) -> T x z b
1484
1485 In the case of transform comprehensions, notice that the groups are
1486 parameterised over some arbitrary type ``n`` (provided it has an
1487 ``fmap``, as well as the comprehension being over an arbitrary monad.
1488
1489 .. _monadfail-desugaring:
1490
1491 New monadic failure desugaring mechanism
1492 ----------------------------------------
1493
1494 .. ghc-flag:: -XMonadFailDesugaring
1495     :shortdesc: Enable :ref:`monadfail desugaring <monadfail-desugaring>`.
1496     :type: dynamic
1497     :reverse: -XNoMonadFailDesugaring
1498     :category:
1499
1500     :since: 8.0.1
1501
1502     Use the ``MonadFail.fail`` instead of the legacy ``Monad.fail`` function
1503     when desugaring refutable patterns in ``do`` blocks.
1504
1505 The ``-XMonadFailDesugaring`` extension switches the desugaring of
1506 ``do``-blocks to use ``MonadFail.fail`` instead of ``Monad.fail``. This will
1507 eventually be the default behaviour in a future GHC release, under the
1508 `MonadFail Proposal (MFP)
1509 <https://prime.haskell.org/wiki/Libraries/Proposals/MonadFail>`__.
1510
1511 This extension is temporary, and will be deprecated in a future release. It is
1512 included so that library authors have a hard check for whether their code
1513 will work with future GHC versions.
1514
1515 .. _rebindable-syntax:
1516
1517 Rebindable syntax and the implicit Prelude import
1518 -------------------------------------------------
1519
1520 .. ghc-flag:: -XNoImplicitPrelude
1521     :shortdesc: Don't implicitly ``import Prelude``.
1522         Implied by :ghc-flag:`-XRebindableSyntax`.
1523     :type: dynamic
1524     :reverse: -XImplicitPrelude
1525     :category:
1526
1527     :since: 6.8.1
1528
1529     Don't import ``Prelude`` by default.
1530
1531 GHC normally imports ``Prelude.hi`` files for
1532 you. If you'd rather it didn't, then give it a ``-XNoImplicitPrelude``
1533 option. The idea is that you can then import a Prelude of your own. (But
1534 don't call it ``Prelude``; the Haskell module namespace is flat, and you
1535 must not conflict with any Prelude module.)
1536
1537 .. ghc-flag:: -XRebindableSyntax
1538     :shortdesc: Employ :ref:`rebindable syntax <rebindable-syntax>`.
1539         Implies :ghc-flag:`-XNoImplicitPrelude`.
1540     :type: dynamic
1541     :reverse: -XNoRebindableSyntax
1542     :category:
1543
1544     :implies: :ghc-flag:`-XNoImplicitPrelude`
1545     :since: 7.0.1
1546
1547     Enable rebinding of a variety of usually-built-in operations.
1548
1549 Suppose you are importing a Prelude of your own in order to define your
1550 own numeric class hierarchy. It completely defeats that purpose if the
1551 literal "1" means "``Prelude.fromInteger 1``", which is what the Haskell
1552 Report specifies. So the :ghc-flag:`-XRebindableSyntax` flag causes the
1553 following pieces of built-in syntax to refer to *whatever is in scope*,
1554 not the Prelude versions:
1555
1556 -  An integer literal ``368`` means "``fromInteger (368::Integer)``",
1557    rather than "``Prelude.fromInteger (368::Integer)``".
1558
1559 -  Fractional literals are handed in just the same way, except that the
1560    translation is ``fromRational (3.68::Rational)``.
1561
1562 -  The equality test in an overloaded numeric pattern uses whatever
1563    ``(==)`` is in scope.
1564
1565 -  The subtraction operation, and the greater-than-or-equal test, in
1566    ``n+k`` patterns use whatever ``(-)`` and ``(>=)`` are in scope.
1567
1568 -  Negation (e.g. "``- (f x)``") means "``negate (f x)``", both in
1569    numeric patterns, and expressions.
1570
1571 -  Conditionals (e.g. "``if`` e1 ``then`` e2 ``else`` e3") means
1572    "``ifThenElse`` e1 e2 e3". However ``case`` expressions are
1573    unaffected.
1574
1575 -  "Do" notation is translated using whatever functions ``(>>=)``,
1576    ``(>>)``, and ``fail``, are in scope (not the Prelude versions). List
1577    comprehensions, ``mdo`` (:ref:`recursive-do-notation`), and parallel
1578    array comprehensions, are unaffected.
1579
1580 -  Arrow notation (see :ref:`arrow-notation`) uses whatever ``arr``,
1581    ``(>>>)``, ``first``, ``app``, ``(|||)`` and ``loop`` functions are
1582    in scope. But unlike the other constructs, the types of these
1583    functions must match the Prelude types very closely. Details are in
1584    flux; if you want to use this, ask!
1585
1586 -  List notation, such as ``[x,y]`` or ``[m..n]`` can also be treated
1587    via rebindable syntax if you use `-XOverloadedLists`;
1588    see :ref:`overloaded-lists`.
1589
1590 -  An overloaded label "``#foo``" means "``fromLabel @"foo"``", rather than
1591    "``GHC.OverloadedLabels.fromLabel @"foo"``" (see :ref:`overloaded-labels`).
1592
1593 :ghc-flag:`-XRebindableSyntax` implies :ghc-flag:`-XNoImplicitPrelude`.
1594
1595 In all cases (apart from arrow notation), the static semantics should be
1596 that of the desugared form, even if that is a little unexpected. For
1597 example, the static semantics of the literal ``368`` is exactly that of
1598 ``fromInteger (368::Integer)``; it's fine for ``fromInteger`` to have
1599 any of the types: ::
1600
1601     fromInteger :: Integer -> Integer
1602     fromInteger :: forall a. Foo a => Integer -> a
1603     fromInteger :: Num a => a -> Integer
1604     fromInteger :: Integer -> Bool -> Bool
1605
1606 Be warned: this is an experimental facility, with fewer checks than
1607 usual. Use ``-dcore-lint`` to typecheck the desugared program. If Core
1608 Lint is happy you should be all right.
1609
1610 Things unaffected by :ghc-flag:`-XRebindableSyntax`
1611 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1612
1613 :ghc-flag:`-XRebindableSyntax` does not apply to any code generated from a
1614 ``deriving`` clause or declaration. To see why, consider the following code: ::
1615
1616     {-# LANGUAGE RebindableSyntax, OverloadedStrings #-}
1617     newtype Text = Text String
1618
1619     fromString :: String -> Text
1620     fromString = Text
1621
1622     data Foo = Foo deriving Show
1623
1624 This will generate code to the effect of: ::
1625
1626     instance Show Foo where
1627       showsPrec _ Foo = showString "Foo"
1628
1629 But because :ghc-flag:`-XRebindableSyntax` and :ghc-flag:`-XOverloadedStrings`
1630 are enabled, the ``"Foo"`` string literal would now be of type ``Text``, not
1631 ``String``, which ``showString`` doesn't accept! This causes the generated
1632 ``Show`` instance to fail to typecheck. It's hard to imagine any scenario where
1633 it would be desirable have :ghc-flag:`-XRebindableSyntax` behavior within
1634 derived code, so GHC simply ignores :ghc-flag:`-XRebindableSyntax` entirely
1635 when checking derived code.
1636
1637 .. _postfix-operators:
1638
1639 Postfix operators
1640 -----------------
1641
1642 .. ghc-flag:: -XPostfixOperators
1643     :shortdesc: Enable :ref:`postfix operators <postfix-operators>`.
1644     :type: dynamic
1645     :reverse: -XNoPostfixOperators
1646     :category:
1647
1648     :since: 7.10.1
1649
1650     Allow the use of post-fix operators
1651
1652 The :ghc-flag:`-XPostfixOperators` flag enables a small extension to the syntax
1653 of left operator sections, which allows you to define postfix operators.
1654 The extension is this: the left section ::
1655
1656       (e !)
1657
1658 is equivalent (from the point of view of both type checking and
1659 execution) to the expression ::
1660
1661       ((!) e)
1662
1663 (for any expression ``e`` and operator ``(!)``. The strict Haskell 98
1664 interpretation is that the section is equivalent to ::
1665
1666       (\y -> (!) e y)
1667
1668 That is, the operator must be a function of two arguments. GHC allows it
1669 to take only one argument, and that in turn allows you to write the
1670 function postfix.
1671
1672 The extension does not extend to the left-hand side of function
1673 definitions; you must define such a function in prefix form.
1674
1675 .. _tuple-sections:
1676
1677 Tuple sections
1678 --------------
1679
1680 .. ghc-flag:: -XTupleSections
1681     :shortdesc: Enable :ref:`tuple sections <tuple-sections>`.
1682     :type: dynamic
1683     :reverse: -XNoTupleSections
1684     :category:
1685
1686     :since: 6.12
1687
1688     Allow the use of tuple section syntax
1689
1690 The :ghc-flag:`-XTupleSections` flag enables partially applied
1691 tuple constructors. For example, the following program ::
1692
1693       (, True)
1694
1695 is considered to be an alternative notation for the more unwieldy
1696 alternative ::
1697
1698       \x -> (x, True)
1699
1700 You can omit any combination of arguments to the tuple, as in the
1701 following ::
1702
1703       (, "I", , , "Love", , 1337)
1704
1705 which translates to ::
1706
1707       \a b c d -> (a, "I", b, c, "Love", d, 1337)
1708
1709 If you have `unboxed tuples <#unboxed-tuples>`__ enabled, tuple sections
1710 will also be available for them, like so ::
1711
1712       (# , True #)
1713
1714 Because there is no unboxed unit tuple, the following expression ::
1715
1716       (# #)
1717
1718 continues to stand for the unboxed singleton tuple data constructor.
1719
1720 .. _lambda-case:
1721
1722 Lambda-case
1723 -----------
1724
1725 .. ghc-flag:: -XLambdaCase
1726     :shortdesc: Enable :ref:`lambda-case expressions <lambda-case>`.
1727     :type: dynamic
1728     :reverse: -XNoLambdaCase
1729     :category:
1730
1731     :since: 7.6.1
1732
1733     Allow the use of lambda-case syntax.
1734
1735 The :ghc-flag:`-XLambdaCase` flag enables expressions of the form ::
1736
1737       \case { p1 -> e1; ...; pN -> eN }
1738
1739 which is equivalent to ::
1740
1741       \freshName -> case freshName of { p1 -> e1; ...; pN -> eN }
1742
1743 Note that ``\case`` starts a layout, so you can write ::
1744
1745       \case
1746         p1 -> e1
1747         ...
1748         pN -> eN
1749
1750 .. _empty-case:
1751
1752 Empty case alternatives
1753 -----------------------
1754
1755 .. ghc-flag:: -XEmptyCase
1756     :shortdesc: Allow :ref:`empty case alternatives <empty-case>`.
1757     :type: dynamic
1758     :reverse: -XNoEmptyCase
1759     :category:
1760
1761     :since: 7.8.1
1762
1763     Allow empty case expressions.
1764
1765 The :ghc-flag:`-XEmptyCase` flag enables case expressions, or lambda-case
1766 expressions, that have no alternatives, thus: ::
1767
1768     case e of { }   -- No alternatives
1769
1770 or ::
1771
1772     \case { }       -- -XLambdaCase is also required
1773
1774 This can be useful when you know that the expression being scrutinised
1775 has no non-bottom values. For example:
1776
1777 ::
1778
1779       data Void
1780       f :: Void -> Int
1781       f x = case x of { }
1782
1783 With dependently-typed features it is more useful (see :ghc-ticket:`2431`). For
1784 example, consider these two candidate definitions of ``absurd``:
1785
1786 ::
1787
1788     data a :~: b where
1789       Refl :: a :~: a
1790
1791     absurd :: True :~: False -> a
1792     absurd x = error "absurd"    -- (A)
1793     absurd x = case x of {}      -- (B)
1794
1795 We much prefer (B). Why? Because GHC can figure out that
1796 ``(True :~: False)`` is an empty type. So (B) has no partiality and GHC
1797 is able to compile with :ghc-flag:`-Wincomplete-patterns` and
1798 :ghc-flag:`-Werror`. On the other hand (A) looks dangerous, and GHC doesn't
1799 check to make sure that, in fact, the function can never get called.
1800
1801 .. _multi-way-if:
1802
1803 Multi-way if-expressions
1804 ------------------------
1805
1806 .. ghc-flag:: -XMultiWayIf
1807     :shortdesc: Enable :ref:`multi-way if-expressions <multi-way-if>`.
1808     :type: dynamic
1809     :reverse: -XNoMultiWayIf
1810     :category:
1811
1812     :since: 7.6.1
1813
1814     Allow the use of multi-way-``if`` syntax.
1815
1816 With :ghc-flag:`-XMultiWayIf` flag GHC accepts conditional expressions with
1817 multiple branches: ::
1818
1819       if | guard1 -> expr1
1820          | ...
1821          | guardN -> exprN
1822
1823 which is roughly equivalent to ::
1824
1825       case () of
1826         _ | guard1 -> expr1
1827         ...
1828         _ | guardN -> exprN
1829
1830 Multi-way if expressions introduce a new layout context. So the example
1831 above is equivalent to: ::
1832
1833       if { | guard1 -> expr1
1834          ; | ...
1835          ; | guardN -> exprN
1836          }
1837
1838 The following behaves as expected: ::
1839
1840       if | guard1 -> if | guard2 -> expr2
1841                         | guard3 -> expr3
1842          | guard4 -> expr4
1843
1844 because layout translates it as ::
1845
1846       if { | guard1 -> if { | guard2 -> expr2
1847                           ; | guard3 -> expr3
1848                           }
1849          ; | guard4 -> expr4
1850          }
1851
1852 Layout with multi-way if works in the same way as other layout contexts,
1853 except that the semi-colons between guards in a multi-way if are
1854 optional. So it is not necessary to line up all the guards at the same
1855 column; this is consistent with the way guards work in function
1856 definitions and case expressions.
1857
1858 .. _local-fixity-declarations:
1859
1860 Local Fixity Declarations
1861 -------------------------
1862
1863 A careful reading of the Haskell 98 Report reveals that fixity
1864 declarations (``infix``, ``infixl``, and ``infixr``) are permitted to
1865 appear inside local bindings such those introduced by ``let`` and
1866 ``where``. However, the Haskell Report does not specify the semantics of
1867 such bindings very precisely.
1868
1869 In GHC, a fixity declaration may accompany a local binding: ::
1870
1871     let f = ...
1872         infixr 3 `f`
1873     in
1874         ...
1875
1876 and the fixity declaration applies wherever the binding is in scope. For
1877 example, in a ``let``, it applies in the right-hand sides of other
1878 ``let``-bindings and the body of the ``let``\ C. Or, in recursive ``do``
1879 expressions (:ref:`recursive-do-notation`), the local fixity
1880 declarations of a ``let`` statement scope over other statements in the
1881 group, just as the bound name does.
1882
1883 Moreover, a local fixity declaration *must* accompany a local binding
1884 of that name: it is not possible to revise the fixity of name bound
1885 elsewhere, as in ::
1886
1887     let infixr 9 $ in ...
1888
1889 Because local fixity declarations are technically Haskell 98, no flag is
1890 necessary to enable them.
1891
1892 .. _package-imports:
1893
1894 Import and export extensions
1895 ----------------------------
1896
1897 Hiding things the imported module doesn't export
1898 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1899
1900 Technically in Haskell 2010 this is illegal: ::
1901
1902     module A( f ) where
1903       f = True
1904
1905     module B where
1906       import A hiding( g )  -- A does not export g
1907       g = f
1908
1909 The ``import A hiding( g )`` in module ``B`` is technically an error
1910 (`Haskell Report,
1911 5.3.1 <http://www.haskell.org/onlinereport/haskell2010/haskellch5.html#x11-1020005.3.1>`__)
1912 because ``A`` does not export ``g``. However GHC allows it, in the
1913 interests of supporting backward compatibility; for example, a newer
1914 version of ``A`` might export ``g``, and you want ``B`` to work in
1915 either case.
1916
1917 The warning :ghc-flag:`-Wdodgy-imports`, which is off by default but included
1918 with :ghc-flag:`-W`, warns if you hide something that the imported module does
1919 not export.
1920
1921 .. _package-qualified-imports:
1922
1923 Package-qualified imports
1924 ~~~~~~~~~~~~~~~~~~~~~~~~~
1925
1926 .. ghc-flag:: -XPackageImports
1927     :shortdesc: Enable :ref:`package-qualified imports <package-imports>`.
1928     :type: dynamic
1929     :reverse: -XNoPackageImports
1930     :category:
1931
1932     :since: 6.10.1
1933
1934     Allow the use of package-qualified ``import`` syntax.
1935
1936 With the :ghc-flag:`-XPackageImports` flag, GHC allows import declarations to be
1937 qualified by the package name that the module is intended to be imported
1938 from. For example: ::
1939
1940     import "network" Network.Socket
1941
1942 would import the module ``Network.Socket`` from the package ``network``
1943 (any version). This may be used to disambiguate an import when the same
1944 module is available from multiple packages, or is present in both the
1945 current package being built and an external package.
1946
1947 The special package name ``this`` can be used to refer to the current
1948 package being built.
1949
1950 .. note::
1951    You probably don't need to use this feature, it was added mainly so that we
1952    can build backwards-compatible versions of packages when APIs change. It can
1953    lead to fragile dependencies in the common case: modules occasionally move
1954    from one package to another, rendering any package-qualified imports broken.
1955    See also :ref:`package-thinning-and-renaming` for an alternative way of
1956    disambiguating between module names.
1957
1958 .. _safe-imports-ext:
1959
1960 Safe imports
1961 ~~~~~~~~~~~~
1962
1963 .. ghc-flag:: -XSafe
1964     :shortdesc: Enable the :ref:`Safe Haskell <safe-haskell>` Safe mode.
1965     :type: dynamic
1966     :category:
1967     :noindex:
1968
1969     :since: 7.2.1
1970
1971     Declare the Safe Haskell state of the current module.
1972
1973 .. ghc-flag:: -XTrustworthy
1974     :shortdesc: Enable the :ref:`Safe Haskell <safe-haskell>` Trustworthy mode.
1975     :type: dynamic
1976     :category:
1977     :noindex:
1978
1979     :since: 7.2.1
1980
1981     Declare the Safe Haskell state of the current module.
1982
1983 .. ghc-flag:: -XUnsafe
1984     :shortdesc: Enable :ref:`Safe Haskell <safe-haskell>` Unsafe mode.
1985     :type: dynamic
1986     :category:
1987     :noindex:
1988
1989     :since: 7.4.1
1990
1991     Declare the Safe Haskell state of the current module.
1992
1993 With the :ghc-flag:`-XSafe`, :ghc-flag:`-XTrustworthy` and :ghc-flag:`-XUnsafe`
1994 language flags, GHC extends the import declaration syntax to take an optional
1995 ``safe`` keyword after the ``import`` keyword. This feature is part of the Safe
1996 Haskell GHC extension. For example: ::
1997
1998     import safe qualified Network.Socket as NS
1999
2000 would import the module ``Network.Socket`` with compilation only
2001 succeeding if ``Network.Socket`` can be safely imported. For a description of
2002 when a import is considered safe see :ref:`safe-haskell`.
2003
2004 .. _explicit-namespaces:
2005
2006 Explicit namespaces in import/export
2007 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2008
2009 .. ghc-flag:: -XExplicitNamespaces
2010     :shortdesc: Enable using the keyword ``type`` to specify the namespace of
2011         entries in imports and exports (:ref:`explicit-namespaces`).
2012         Implied by :ghc-flag:`-XTypeOperators` and :ghc-flag:`-XTypeFamilies`.
2013     :type: dynamic
2014     :reverse: -XNoExplicitNamespaces
2015     :category:
2016
2017     :since: 7.6.1
2018
2019     Enable use of explicit namespaces in module export lists.
2020
2021 In an import or export list, such as ::
2022
2023       module M( f, (++) ) where ...
2024         import N( f, (++) )
2025         ...
2026
2027 the entities ``f`` and ``(++)`` are *values*. However, with type
2028 operators (:ref:`type-operators`) it becomes possible to declare
2029 ``(++)`` as a *type constructor*. In that case, how would you export or
2030 import it?
2031
2032 The :ghc-flag:`-XExplicitNamespaces` extension allows you to prefix the name of
2033 a type constructor in an import or export list with "``type``" to
2034 disambiguate this case, thus: ::
2035
2036       module M( f, type (++) ) where ...
2037         import N( f, type (++) )
2038         ...
2039       module N( f, type (++) ) where
2040         data family a ++ b = L a | R b
2041
2042 The extension :ghc-flag:`-XExplicitNamespaces` is implied by
2043 :ghc-flag:`-XTypeOperators` and (for some reason) by :ghc-flag:`-XTypeFamilies`.
2044
2045 In addition, with :ghc-flag:`-XPatternSynonyms` you can prefix the name of a
2046 data constructor in an import or export list with the keyword
2047 ``pattern``, to allow the import or export of a data constructor without
2048 its parent type constructor (see :ref:`patsyn-impexp`).
2049
2050 .. _syntax-stolen:
2051
2052 Summary of stolen syntax
2053 ------------------------
2054
2055 Turning on an option that enables special syntax *might* cause working
2056 Haskell 98 code to fail to compile, perhaps because it uses a variable
2057 name which has become a reserved word. This section lists the syntax
2058 that is "stolen" by language extensions. We use notation and nonterminal
2059 names from the Haskell 98 lexical syntax (see the Haskell 98 Report). We
2060 only list syntax changes here that might affect existing working
2061 programs (i.e. "stolen" syntax). Many of these extensions will also
2062 enable new context-free syntax, but in all cases programs written to use
2063 the new syntax would not be compilable without the option enabled.
2064
2065 There are two classes of special syntax:
2066
2067 -  New reserved words and symbols: character sequences which are no
2068    longer available for use as identifiers in the program.
2069
2070 -  Other special syntax: sequences of characters that have a different
2071    meaning when this particular option is turned on.
2072
2073 The following syntax is stolen:
2074
2075 ``forall``
2076     .. index::
2077        single: forall
2078
2079     Stolen (in types) by: :ghc-flag:`-XExplicitForAll`, and hence by
2080     :ghc-flag:`-XScopedTypeVariables`, :ghc-flag:`-XLiberalTypeSynonyms`,
2081     :ghc-flag:`-XRankNTypes`, :ghc-flag:`-XExistentialQuantification`
2082
2083 ``mdo``
2084     .. index::
2085        single: mdo
2086
2087     Stolen by: :ghc-flag:`-XRecursiveDo`
2088
2089 ``foreign``
2090     .. index::
2091        single: foreign
2092
2093     Stolen by: :ghc-flag:`-XForeignFunctionInterface`
2094
2095 ``rec``, ``proc``, ``-<``, ``>-``, ``-<<``, ``>>-``, ``(|``, ``|)``
2096     .. index::
2097        single: proc
2098
2099     Stolen by: :ghc-flag:`-XArrows`
2100
2101 ``?varid``
2102     .. index::
2103        single: implicit parameters
2104
2105     Stolen by: :ghc-flag:`-XImplicitParams`
2106
2107 ``[|``, ``[e|``, ``[p|``, ``[d|``, ``[t|``, ``[||``, ``[e||``
2108     .. index::
2109        single: Quasi-quotes
2110
2111     Stolen by: :ghc-flag:`-XQuasiQuotes`. Moreover, this introduces an ambiguity
2112     with list comprehension syntax. See the
2113     :ref:`discussion on quasi-quoting <quasi-quotes-list-comprehension-ambiguity>`
2114     for details.
2115
2116 ``$(``, ``$$(``, ``$varid``, ``$$varid``
2117     .. index::
2118        single: Template Haskell
2119
2120     Stolen by: :ghc-flag:`-XTemplateHaskell`
2121
2122 ``[varid|``
2123     .. index::
2124        single: quasi-quotation
2125
2126     Stolen by: :ghc-flag:`-XQuasiQuotes`
2127
2128 ⟨varid⟩, ``#``\ ⟨char⟩, ``#``, ⟨string⟩, ``#``, ⟨integer⟩, ``#``, ⟨float⟩, ``#``, ⟨float⟩, ``##``
2129     Stolen by: :ghc-flag:`-XMagicHash`
2130
2131 ``(#``, ``#)``
2132     Stolen by: :ghc-flag:`-XUnboxedTuples`
2133
2134 ⟨varid⟩, ``!``, ⟨varid⟩
2135     Stolen by: :ghc-flag:`-XBangPatterns`
2136
2137 ``pattern``
2138     Stolen by: :ghc-flag:`-XPatternSynonyms`
2139
2140 .. _data-type-extensions:
2141
2142 Extensions to data types and type synonyms
2143 ==========================================
2144
2145 .. _nullary-types:
2146
2147 Data types with no constructors
2148 -------------------------------
2149
2150 .. ghc-flag:: -XEmptyDataDecls
2151     :shortdesc: Allow definition of empty ``data`` types.
2152     :type: dynamic
2153     :reverse: -XNoEmptyDataDecls
2154     :category:
2155
2156     :since: 6.8.1
2157
2158     Allow definition of empty ``data`` types.
2159
2160 With the :ghc-flag:`-XEmptyDataDecls` flag (or equivalent ``LANGUAGE`` pragma), GHC
2161 lets you declare a data type with no constructors. For example: ::
2162
2163       data S      -- S :: *
2164       data T a    -- T :: * -> *
2165
2166 Syntactically, the declaration lacks the "= constrs" part. The type can
2167 be parameterised over types of any kind, but if the kind is not ``*``
2168 then an explicit kind annotation must be used (see :ref:`kinding`).
2169
2170 Such data types have only one value, namely bottom. Nevertheless, they
2171 can be useful when defining "phantom types".
2172
2173 .. _datatype-contexts:
2174
2175 Data type contexts
2176 ------------------
2177
2178 .. ghc-flag:: -XDatatypeContexts
2179     :shortdesc: Allow contexts on ``data`` types.
2180     :type: dynamic
2181     :reverse: -XNoEmptyDataDecls
2182     :category:
2183
2184     :since: 7.0.1
2185
2186     Allow contexts on ``data`` types.
2187
2188 Haskell allows datatypes to be given contexts, e.g. ::
2189
2190     data Eq a => Set a = NilSet | ConsSet a (Set a)
2191
2192 give constructors with types: ::
2193
2194     NilSet :: Set a
2195     ConsSet :: Eq a => a -> Set a -> Set a
2196
2197 This is widely considered a misfeature, and is going to be removed from
2198 the language. In GHC, it is controlled by the deprecated extension
2199 ``DatatypeContexts``.
2200
2201 .. _infix-tycons:
2202
2203 Infix type constructors, classes, and type variables
2204 ----------------------------------------------------
2205
2206 GHC allows type constructors, classes, and type variables to be
2207 operators, and to be written infix, very much like expressions. More
2208 specifically:
2209
2210 -  A type constructor or class can be any non-reserved operator.
2211    Symbols used in types are always like capitalized identifiers; they
2212    are never variables. Note that this is different from the lexical
2213    syntax of data constructors, which are required to begin with a
2214    ``:``.
2215
2216 -  Data type and type-synonym declarations can be written infix,
2217    parenthesised if you want further arguments. E.g. ::
2218
2219          data a :*: b = Foo a b
2220          type a :+: b = Either a b
2221          class a :=: b where ...
2222
2223          data (a :**: b) x = Baz a b x
2224          type (a :++: b) y = Either (a,b) y
2225
2226 -  Types, and class constraints, can be written infix. For example ::
2227
2228          x :: Int :*: Bool
2229          f :: (a :=: b) => a -> b
2230
2231 -  Back-quotes work as for expressions, both for type constructors and
2232    type variables; e.g. ``Int `Either` Bool``, or ``Int `a` Bool``.
2233    Similarly, parentheses work the same; e.g. ``(:*:) Int Bool``.
2234
2235 -  Fixities may be declared for type constructors, or classes, just as
2236    for data constructors. However, one cannot distinguish between the
2237    two in a fixity declaration; a fixity declaration sets the fixity for
2238    a data constructor and the corresponding type constructor. For
2239    example: ::
2240
2241          infixl 7 T, :*:
2242
2243    sets the fixity for both type constructor ``T`` and data constructor
2244    ``T``, and similarly for ``:*:``. ``Int `a` Bool``.
2245
2246 -  Function arrow is ``infixr`` with fixity 0 (this might change; it's
2247    not clear what it should be).
2248
2249 .. _type-operators:
2250
2251 Type operators
2252 --------------
2253
2254 .. ghc-flag:: -XTypeOperators
2255     :shortdesc: Enable :ref:`type operators <type-operators>`.
2256         Implies :ghc-flag:`-XExplicitNamespaces`.
2257     :type: dynamic
2258     :reverse: -XNoTypeOperators
2259     :category:
2260
2261     :implies: :ghc-flag:`-XExplicitNamespaces`
2262     :since: 6.8.1
2263
2264     Allow the use and definition of types with operator names.
2265
2266 In types, an operator symbol like ``(+)`` is normally treated as a type
2267 *variable*, just like ``a``. Thus in Haskell 98 you can say
2268
2269 ::
2270
2271     type T (+) = ((+), (+))
2272     -- Just like: type T a = (a,a)
2273
2274     f :: T Int -> Int
2275     f (x,y)= x
2276
2277 As you can see, using operators in this way is not very useful, and
2278 Haskell 98 does not even allow you to write them infix.
2279
2280 The language :ghc-flag:`-XTypeOperators` changes this behaviour:
2281
2282 -  Operator symbols become type *constructors* rather than type
2283    *variables*.
2284
2285 -  Operator symbols in types can be written infix, both in definitions
2286    and uses. For example: ::
2287
2288        data a + b = Plus a b
2289        type Foo = Int + Bool
2290
2291 -  There is now some potential ambiguity in import and export lists; for
2292    example if you write ``import M( (+) )`` do you mean the *function*
2293    ``(+)`` or the *type constructor* ``(+)``? The default is the former,
2294    but with :ghc-flag:`-XExplicitNamespaces` (which is implied by
2295    :ghc-flag:`-XTypeOperators`) GHC allows you to specify the latter by
2296    preceding it with the keyword ``type``, thus: ::
2297
2298        import M( type (+) )
2299
2300    See :ref:`explicit-namespaces`.
2301
2302 -  The fixity of a type operator may be set using the usual fixity
2303    declarations but, as in :ref:`infix-tycons`, the function and type
2304    constructor share a single fixity.
2305
2306 .. _type-synonyms:
2307
2308 Liberalised type synonyms
2309 -------------------------
2310
2311 .. ghc-flag:: -XLiberalTypeSynonyms
2312     :shortdesc: Enable :ref:`liberalised type synonyms <type-synonyms>`.
2313     :type: dynamic
2314     :reverse: -XNoLiberalTypeSynonyms
2315     :category:
2316
2317     :implies: :ghc-flag:`-XExplicitForAll`
2318     :since: 6.8.1
2319
2320     Relax many of the Haskell 98 rules on type synonym definitions.
2321
2322 Type synonyms are like macros at the type level, but Haskell 98 imposes
2323 many rules on individual synonym declarations. With the
2324 :ghc-flag:`-XLiberalTypeSynonyms` extension, GHC does validity checking on types
2325 *only after expanding type synonyms*. That means that GHC can be very
2326 much more liberal about type synonyms than Haskell 98.
2327
2328 -  You can write a ``forall`` (including overloading) in a type synonym,
2329    thus: ::
2330
2331          type Discard a = forall b. Show b => a -> b -> (a, String)
2332
2333          f :: Discard a
2334          f x y = (x, show y)
2335
2336          g :: Discard Int -> (Int,String)    -- A rank-2 type
2337          g f = f 3 True
2338
2339 -  If you also use :ghc-flag:`-XUnboxedTuples`, you can write an unboxed tuple
2340    in a type synonym: ::
2341
2342          type Pr = (# Int, Int #)
2343
2344          h :: Int -> Pr
2345          h x = (# x, x #)
2346
2347 -  You can apply a type synonym to a forall type: ::
2348
2349          type Foo a = a -> a -> Bool
2350
2351          f :: Foo (forall b. b->b)
2352
2353    After expanding the synonym, ``f`` has the legal (in GHC) type: ::
2354
2355          f :: (forall b. b->b) -> (forall b. b->b) -> Bool
2356
2357 -  You can apply a type synonym to a partially applied type synonym: ::
2358
2359          type Generic i o = forall x. i x -> o x
2360          type Id x = x
2361
2362          foo :: Generic Id []
2363
2364    After expanding the synonym, ``foo`` has the legal (in GHC) type: ::
2365
2366          foo :: forall x. x -> [x]
2367
2368 GHC currently does kind checking before expanding synonyms (though even
2369 that could be changed).
2370
2371 After expanding type synonyms, GHC does validity checking on types,
2372 looking for the following malformedness which isn't detected simply by
2373 kind checking:
2374
2375 -  Type constructor applied to a type involving for-alls (if
2376    :ghc-flag:`-XImpredicativeTypes` is off)
2377
2378 -  Partially-applied type synonym.
2379
2380 So, for example, this will be rejected: ::
2381
2382       type Pr = forall a. a
2383
2384       h :: [Pr]
2385       h = ...
2386
2387 because GHC does not allow type constructors applied to for-all types.
2388
2389 .. _existential-quantification:
2390
2391 Existentially quantified data constructors
2392 ------------------------------------------
2393
2394 .. ghc-flag:: -XExistentialQuantification
2395     :shortdesc: Enable :ref:`liberalised type synonyms <type-synonyms>`.
2396     :type: dynamic
2397     :reverse: -XNoLiberalTypeSynonyms
2398     :category:
2399
2400     :implies: :ghc-flag:`-XExplicitForAll`
2401     :since: 6.8.1
2402
2403     Allow existentially quantified type variables in types.
2404
2405 The idea of using existential quantification in data type declarations
2406 was suggested by Perry, and implemented in Hope+ (Nigel Perry, *The
2407 Implementation of Practical Functional Programming Languages*, PhD
2408 Thesis, University of London, 1991). It was later formalised by Laufer
2409 and Odersky (*Polymorphic type inference and abstract data types*,
2410 TOPLAS, 16(5), pp. 1411-1430, 1994). It's been in Lennart Augustsson's
2411 ``hbc`` Haskell compiler for several years, and proved very useful.
2412 Here's the idea. Consider the declaration: ::
2413
2414       data Foo = forall a. MkFoo a (a -> Bool)
2415                | Nil
2416
2417 The data type ``Foo`` has two constructors with types: ::
2418
2419       MkFoo :: forall a. a -> (a -> Bool) -> Foo
2420       Nil   :: Foo
2421
2422 Notice that the type variable ``a`` in the type of ``MkFoo`` does not
2423 appear in the data type itself, which is plain ``Foo``. For example, the
2424 following expression is fine: ::
2425
2426       [MkFoo 3 even, MkFoo 'c' isUpper] :: [Foo]
2427
2428 Here, ``(MkFoo 3 even)`` packages an integer with a function ``even``
2429 that maps an integer to ``Bool``; and ``MkFoo 'c'
2430 isUpper`` packages a character with a compatible function. These two
2431 things are each of type ``Foo`` and can be put in a list.
2432
2433 What can we do with a value of type ``Foo``? In particular, what
2434 happens when we pattern-match on ``MkFoo``? ::
2435
2436       f (MkFoo val fn) = ???
2437
2438 Since all we know about ``val`` and ``fn`` is that they are compatible,
2439 the only (useful) thing we can do with them is to apply ``fn`` to
2440 ``val`` to get a boolean. For example: ::
2441
2442       f :: Foo -> Bool
2443       f (MkFoo val fn) = fn val
2444
2445 What this allows us to do is to package heterogeneous values together
2446 with a bunch of functions that manipulate them, and then treat that
2447 collection of packages in a uniform manner. You can express quite a bit
2448 of object-oriented-like programming this way.
2449
2450 .. _existential:
2451
2452 Why existential?
2453 ~~~~~~~~~~~~~~~~
2454
2455 What has this to do with *existential* quantification? Simply that
2456 ``MkFoo`` has the (nearly) isomorphic type ::
2457
2458       MkFoo :: (exists a . (a, a -> Bool)) -> Foo
2459
2460 But Haskell programmers can safely think of the ordinary *universally*
2461 quantified type given above, thereby avoiding adding a new existential
2462 quantification construct.
2463
2464 .. _existential-with-context:
2465
2466 Existentials and type classes
2467 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2468
2469 An easy extension is to allow arbitrary contexts before the constructor.
2470 For example: ::
2471
2472     data Baz = forall a. Eq a => Baz1 a a
2473              | forall b. Show b => Baz2 b (b -> b)
2474
2475 The two constructors have the types you'd expect: ::
2476
2477     Baz1 :: forall a. Eq a => a -> a -> Baz
2478     Baz2 :: forall b. Show b => b -> (b -> b) -> Baz
2479
2480 But when pattern matching on ``Baz1`` the matched values can be compared
2481 for equality, and when pattern matching on ``Baz2`` the first matched
2482 value can be converted to a string (as well as applying the function to
2483 it). So this program is legal: ::
2484
2485       f :: Baz -> String
2486       f (Baz1 p q) | p == q    = "Yes"
2487                    | otherwise = "No"
2488       f (Baz2 v fn)            = show (fn v)
2489
2490 Operationally, in a dictionary-passing implementation, the constructors
2491 ``Baz1`` and ``Baz2`` must store the dictionaries for ``Eq`` and
2492 ``Show`` respectively, and extract it on pattern matching.
2493
2494 .. _existential-records:
2495
2496 Record Constructors
2497 ~~~~~~~~~~~~~~~~~~~
2498
2499 GHC allows existentials to be used with records syntax as well. For
2500 example: ::
2501
2502     data Counter a = forall self. NewCounter
2503         { _this    :: self
2504         , _inc     :: self -> self
2505         , _display :: self -> IO ()
2506         , tag      :: a
2507         }
2508
2509 Here ``tag`` is a public field, with a well-typed selector function
2510 ``tag :: Counter a -> a``. The ``self`` type is hidden from the outside;
2511 any attempt to apply ``_this``, ``_inc`` or ``_display`` as functions
2512 will raise a compile-time error. In other words, *GHC defines a record
2513 selector function only for fields whose type does not mention the
2514 existentially-quantified variables*. (This example used an underscore in
2515 the fields for which record selectors will not be defined, but that is
2516 only programming style; GHC ignores them.)
2517
2518 To make use of these hidden fields, we need to create some helper
2519 functions: ::
2520
2521     inc :: Counter a -> Counter a
2522     inc (NewCounter x i d t) = NewCounter
2523         { _this = i x, _inc = i, _display = d, tag = t }
2524
2525     display :: Counter a -> IO ()
2526     display NewCounter{ _this = x, _display = d } = d x
2527
2528 Now we can define counters with different underlying implementations: ::
2529
2530     counterA :: Counter String
2531     counterA = NewCounter
2532         { _this = 0, _inc = (1+), _display = print, tag = "A" }
2533
2534     counterB :: Counter String
2535     counterB = NewCounter
2536         { _this = "", _inc = ('#':), _display = putStrLn, tag = "B" }
2537
2538     main = do
2539         display (inc counterA)         -- prints "1"
2540         display (inc (inc counterB))   -- prints "##"
2541
2542 Record update syntax is supported for existentials (and GADTs): ::
2543
2544     setTag :: Counter a -> a -> Counter a
2545     setTag obj t = obj{ tag = t }
2546
2547 The rule for record update is this:
2548
2549     the types of the updated fields may mention only the universally-quantified
2550     type variables of the data constructor. For GADTs, the field may mention
2551     only types that appear as a simple type-variable argument in the
2552     constructor's result type.
2553
2554 For example: ::
2555
2556     data T a b where { T1 { f1::a, f2::b, f3::(b,c) } :: T a b } -- c is existential
2557     upd1 t x = t { f1=x }   -- OK:   upd1 :: T a b -> a' -> T a' b
2558     upd2 t x = t { f3=x }   -- BAD   (f3's type mentions c, which is
2559                             --        existentially quantified)
2560
2561     data G a b where { G1 { g1::a, g2::c } :: G a [c] }
2562     upd3 g x = g { g1=x }   -- OK:   upd3 :: G a b -> c -> G c b
2563     upd4 g x = g { g2=x }   -- BAD (f2's type mentions c, which is not a simple
2564                             --      type-variable argument in G1's result type)
2565
2566 Restrictions
2567 ~~~~~~~~~~~~
2568
2569 There are several restrictions on the ways in which existentially-quantified
2570 constructors can be used.
2571
2572 -  When pattern matching, each pattern match introduces a new, distinct,
2573    type for each existential type variable. These types cannot be
2574    unified with any other type, nor can they escape from the scope of
2575    the pattern match. For example, these fragments are incorrect: ::
2576
2577        f1 (MkFoo a f) = a
2578
2579    Here, the type bound by ``MkFoo`` "escapes", because ``a`` is the
2580    result of ``f1``. One way to see why this is wrong is to ask what
2581    type ``f1`` has: ::
2582
2583          f1 :: Foo -> a             -- Weird!
2584
2585    What is this "``a``" in the result type? Clearly we don't mean this: ::
2586
2587          f1 :: forall a. Foo -> a   -- Wrong!
2588
2589    The original program is just plain wrong. Here's another sort of
2590    error ::
2591
2592          f2 (Baz1 a b) (Baz1 p q) = a==q
2593
2594    It's ok to say ``a==b`` or ``p==q``, but ``a==q`` is wrong because it
2595    equates the two distinct types arising from the two ``Baz1``
2596    constructors.
2597
2598 -  You can't pattern-match on an existentially quantified constructor in
2599    a ``let`` or ``where`` group of bindings. So this is illegal: ::
2600
2601          f3 x = a==b where { Baz1 a b = x }
2602
2603    Instead, use a ``case`` expression: ::
2604
2605          f3 x = case x of Baz1 a b -> a==b
2606
2607    In general, you can only pattern-match on an existentially-quantified
2608    constructor in a ``case`` expression or in the patterns of a function
2609    definition. The reason for this restriction is really an
2610    implementation one. Type-checking binding groups is already a
2611    nightmare without existentials complicating the picture. Also an
2612    existential pattern binding at the top level of a module doesn't make
2613    sense, because it's not clear how to prevent the
2614    existentially-quantified type "escaping". So for now, there's a
2615    simple-to-state restriction. We'll see how annoying it is.
2616
2617 -  You can't use existential quantification for ``newtype``
2618    declarations. So this is illegal: ::
2619
2620          newtype T = forall a. Ord a => MkT a
2621
2622    Reason: a value of type ``T`` must be represented as a pair of a
2623    dictionary for ``Ord t`` and a value of type ``t``. That contradicts
2624    the idea that ``newtype`` should have no concrete representation. You
2625    can get just the same efficiency and effect by using ``data`` instead
2626    of ``newtype``. If there is no overloading involved, then there is
2627    more of a case for allowing an existentially-quantified ``newtype``,
2628    because the ``data`` version does carry an implementation cost, but
2629    single-field existentially quantified constructors aren't much use.
2630    So the simple restriction (no existential stuff on ``newtype``)
2631    stands, unless there are convincing reasons to change it.
2632
2633 -  You can't use ``deriving`` to define instances of a data type with
2634    existentially quantified data constructors. Reason: in most cases it
2635    would not make sense. For example:; ::
2636
2637        data T = forall a. MkT [a] deriving( Eq )
2638
2639    To derive ``Eq`` in the standard way we would need to have equality
2640    between the single component of two ``MkT`` constructors: ::
2641
2642        instance Eq T where
2643          (MkT a) == (MkT b) = ???
2644
2645    But ``a`` and ``b`` have distinct types, and so can't be compared.
2646    It's just about possible to imagine examples in which the derived
2647    instance would make sense, but it seems altogether simpler simply to
2648    prohibit such declarations. Define your own instances!
2649
2650 .. _gadt-style:
2651
2652 Declaring data types with explicit constructor signatures
2653 ---------------------------------------------------------
2654
2655 .. ghc-flag:: -XGADTSyntax
2656     :shortdesc: Enable :ref:`generalised algebraic data type syntax <gadt-style>`.
2657     :type: dynamic
2658     :reverse: -XNoGADTSyntax
2659     :category:
2660
2661     :since: 7.2.1
2662
2663     Allow the use of GADT syntax in data type definitions (but not GADTs
2664     themselves; for this see :ghc-flag:`-XGADTs`)
2665
2666 When the ``GADTSyntax`` extension is enabled, GHC allows you to declare
2667 an algebraic data type by giving the type signatures of constructors
2668 explicitly. For example: ::
2669
2670       data Maybe a where
2671           Nothing :: Maybe a
2672           Just    :: a -> Maybe a
2673
2674 The form is called a "GADT-style declaration" because Generalised
2675 Algebraic Data Types, described in :ref:`gadt`, can only be declared
2676 using this form.
2677
2678 Notice that GADT-style syntax generalises existential types
2679 (:ref:`existential-quantification`). For example, these two declarations
2680 are equivalent: ::
2681
2682       data Foo = forall a. MkFoo a (a -> Bool)
2683       data Foo' where { MKFoo :: a -> (a->Bool) -> Foo' }
2684
2685 Any data type that can be declared in standard Haskell 98 syntax can
2686 also be declared using GADT-style syntax. The choice is largely
2687 stylistic, but GADT-style declarations differ in one important respect:
2688 they treat class constraints on the data constructors differently.
2689 Specifically, if the constructor is given a type-class context, that
2690 context is made available by pattern matching. For example: ::
2691
2692       data Set a where
2693         MkSet :: Eq a => [a] -> Set a
2694
2695       makeSet :: Eq a => [a] -> Set a
2696       makeSet xs = MkSet (nub xs)
2697
2698       insert :: a -> Set a -> Set a
2699       insert a (MkSet as) | a `elem` as = MkSet as
2700                           | otherwise   = MkSet (a:as)
2701
2702 A use of ``MkSet`` as a constructor (e.g. in the definition of
2703 ``makeSet``) gives rise to a ``(Eq a)`` constraint, as you would expect.
2704 The new feature is that pattern-matching on ``MkSet`` (as in the
2705 definition of ``insert``) makes *available* an ``(Eq a)`` context. In
2706 implementation terms, the ``MkSet`` constructor has a hidden field that
2707 stores the ``(Eq a)`` dictionary that is passed to ``MkSet``; so when
2708 pattern-matching that dictionary becomes available for the right-hand
2709 side of the match. In the example, the equality dictionary is used to
2710 satisfy the equality constraint generated by the call to ``elem``, so
2711 that the type of ``insert`` itself has no ``Eq`` constraint.
2712
2713 For example, one possible application is to reify dictionaries: ::
2714
2715        data NumInst a where
2716          MkNumInst :: Num a => NumInst a
2717
2718        intInst :: NumInst Int
2719        intInst = MkNumInst
2720
2721        plus :: NumInst a -> a -> a -> a
2722        plus MkNumInst p q = p + q
2723
2724 Here, a value of type ``NumInst a`` is equivalent to an explicit
2725 ``(Num a)`` dictionary.
2726
2727 All this applies to constructors declared using the syntax of
2728 :ref:`existential-with-context`. For example, the ``NumInst`` data type
2729 above could equivalently be declared like this: ::
2730
2731        data NumInst a
2732           = Num a => MkNumInst (NumInst a)
2733
2734 Notice that, unlike the situation when declaring an existential, there
2735 is no ``forall``, because the ``Num`` constrains the data type's
2736 universally quantified type variable ``a``. A constructor may have both
2737 universal and existential type variables: for example, the following two
2738 declarations are equivalent: ::
2739
2740        data T1 a
2741         = forall b. (Num a, Eq b) => MkT1 a b
2742        data T2 a where
2743         MkT2 :: (Num a, Eq b) => a -> b -> T2 a
2744
2745 All this behaviour contrasts with Haskell 98's peculiar treatment of
2746 contexts on a data type declaration (Section 4.2.1 of the Haskell 98
2747 Report). In Haskell 98 the definition ::
2748
2749       data Eq a => Set' a = MkSet' [a]
2750
2751 gives ``MkSet'`` the same type as ``MkSet`` above. But instead of
2752 *making available* an ``(Eq a)`` constraint, pattern-matching on
2753 ``MkSet'`` *requires* an ``(Eq a)`` constraint! GHC faithfully
2754 implements this behaviour, odd though it is. But for GADT-style
2755 declarations, GHC's behaviour is much more useful, as well as much more
2756 intuitive.
2757
2758 The rest of this section gives further details about GADT-style data
2759 type declarations.
2760
2761 -  The result type of each data constructor must begin with the type
2762    constructor being defined. If the result type of all constructors has
2763    the form ``T a1 ... an``, where ``a1 ... an`` are distinct type
2764    variables, then the data type is *ordinary*; otherwise is a
2765    *generalised* data type (:ref:`gadt`).
2766
2767 -  As with other type signatures, you can give a single signature for
2768    several data constructors. In this example we give a single signature
2769    for ``T1`` and ``T2``: ::
2770
2771          data T a where
2772            T1,T2 :: a -> T a
2773            T3 :: T a
2774
2775 -  The type signature of each constructor is independent, and is
2776    implicitly universally quantified as usual. In particular, the type
2777    variable(s) in the "``data T a where``" header have no scope, and
2778    different constructors may have different universally-quantified type
2779    variables: ::
2780
2781          data T a where        -- The 'a' has no scope
2782            T1,T2 :: b -> T b   -- Means forall b. b -> T b
2783            T3 :: T a           -- Means forall a. T a
2784
2785 -  A constructor signature may mention type class constraints, which can
2786    differ for different constructors. For example, this is fine: ::
2787
2788          data T a where
2789            T1 :: Eq b => b -> b -> T b
2790            T2 :: (Show c, Ix c) => c -> [c] -> T c
2791
2792    When pattern matching, these constraints are made available to
2793    discharge constraints in the body of the match. For example: ::
2794
2795          f :: T a -> String
2796          f (T1 x y) | x==y      = "yes"
2797                     | otherwise = "no"
2798          f (T2 a b)             = show a
2799
2800    Note that ``f`` is not overloaded; the ``Eq`` constraint arising from
2801    the use of ``==`` is discharged by the pattern match on ``T1`` and
2802    similarly the ``Show`` constraint arising from the use of ``show``.
2803
2804 -  Unlike a Haskell-98-style data type declaration, the type variable(s)
2805    in the "``data Set a where``" header have no scope. Indeed, one can
2806    write a kind signature instead: ::
2807
2808          data Set :: * -> * where ...
2809
2810    or even a mixture of the two: ::
2811
2812          data Bar a :: (* -> *) -> * where ...
2813
2814    The type variables (if given) may be explicitly kinded, so we could
2815    also write the header for ``Foo`` like this: ::
2816
2817          data Bar a (b :: * -> *) where ...
2818
2819 -  You can use strictness annotations, in the obvious places in the
2820    constructor type: ::
2821
2822          data Term a where
2823              Lit    :: !Int -> Term Int
2824              If     :: Term Bool -> !(Term a) -> !(Term a) -> Term a
2825              Pair   :: Term a -> Term b -> Term (a,b)
2826
2827 -  You can use a ``deriving`` clause on a GADT-style data type
2828    declaration. For example, these two declarations are equivalent ::
2829
2830          data Maybe1 a where {
2831              Nothing1 :: Maybe1 a ;
2832              Just1    :: a -> Maybe1 a
2833            } deriving( Eq, Ord )
2834
2835          data Maybe2 a = Nothing2 | Just2 a
2836               deriving( Eq, Ord )
2837
2838 -  The type signature may have quantified type variables that do not
2839    appear in the result type: ::
2840
2841          data Foo where
2842             MkFoo :: a -> (a->Bool) -> Foo
2843             Nil   :: Foo
2844
2845    Here the type variable ``a`` does not appear in the result type of
2846    either constructor. Although it is universally quantified in the type
2847    of the constructor, such a type variable is often called
2848    "existential". Indeed, the above declaration declares precisely the
2849    same type as the ``data Foo`` in :ref:`existential-quantification`.
2850
2851    The type may contain a class context too, of course: ::
2852
2853          data Showable where
2854            MkShowable :: Show a => a -> Showable
2855
2856 -  You can use record syntax on a GADT-style data type declaration: ::
2857
2858          data Person where
2859              Adult :: { name :: String, children :: [Person] } -> Person
2860              Child :: Show a => { name :: !String, funny :: a } -> Person
2861
2862    As usual, for every constructor that has a field ``f``, the type of
2863    field ``f`` must be the same (modulo alpha conversion). The ``Child``
2864    constructor above shows that the signature may have a context,
2865    existentially-quantified variables, and strictness annotations, just
2866    as in the non-record case. (NB: the "type" that follows the
2867    double-colon is not really a type, because of the record syntax and
2868    strictness annotations. A "type" of this form can appear only in a
2869    constructor signature.)
2870
2871 -  Record updates are allowed with GADT-style declarations, only fields
2872    that have the following property: the type of the field mentions no
2873    existential type variables.
2874
2875 -  As in the case of existentials declared using the Haskell-98-like
2876    record syntax (:ref:`existential-records`), record-selector functions
2877    are generated only for those fields that have well-typed selectors.
2878    Here is the example of that section, in GADT-style syntax: ::
2879
2880        data Counter a where
2881            NewCounter :: { _this    :: self
2882                          , _inc     :: self -> self
2883                          , _display :: self -> IO ()
2884                          , tag      :: a
2885                          } -> Counter a
2886
2887    As before, only one selector function is generated here, that for
2888    ``tag``. Nevertheless, you can still use all the field names in
2889    pattern matching and record construction.
2890
2891 -  In a GADT-style data type declaration there is no obvious way to
2892    specify that a data constructor should be infix, which makes a
2893    difference if you derive ``Show`` for the type. (Data constructors
2894    declared infix are displayed infix by the derived ``show``.) So GHC
2895    implements the following design: a data constructor declared in a
2896    GADT-style data type declaration is displayed infix by ``Show`` iff
2897    (a) it is an operator symbol, (b) it has two arguments, (c) it has a
2898    programmer-supplied fixity declaration. For example
2899
2900    ::
2901
2902           infix 6 (:--:)
2903           data T a where
2904             (:--:) :: Int -> Bool -> T Int
2905
2906 .. _gadt:
2907
2908 Generalised Algebraic Data Types (GADTs)
2909 ----------------------------------------
2910
2911 .. ghc-flag:: -XGADTs
2912     :shortdesc: Enable :ref:`generalised algebraic data types <gadt>`.
2913         Implies :ghc-flag:`-XGADTSyntax` and :ghc-flag:`-XMonoLocalBinds`.
2914     :type: dynamic
2915     :reverse: -XNoGADTs
2916     :category:
2917
2918     :implies: :ghc-flag:`-XMonoLocalBinds`, :ghc-flag:`-XGADTSyntax`
2919     :since: 6.8.1
2920
2921     Allow use of Generalised Algebraic Data Types (GADTs).
2922
2923 Generalised Algebraic Data Types generalise ordinary algebraic data
2924 types by allowing constructors to have richer return types. Here is an
2925 example: ::
2926
2927       data Term a where
2928           Lit    :: Int -> Term Int
2929           Succ   :: Term Int -> Term Int
2930           IsZero :: Term Int -> Term Bool
2931           If     :: Term Bool -> Term a -> Term a -> Term a
2932           Pair   :: Term a -> Term b -> Term (a,b)
2933
2934 Notice that the return type of the constructors is not always
2935 ``Term a``, as is the case with ordinary data types. This generality
2936 allows us to write a well-typed ``eval`` function for these ``Terms``: ::
2937
2938       eval :: Term a -> a
2939       eval (Lit i)      = i
2940       eval (Succ t)     = 1 + eval t
2941       eval (IsZero t)   = eval t == 0
2942       eval (If b e1 e2) = if eval b then eval e1 else eval e2
2943       eval (Pair e1 e2) = (eval e1, eval e2)
2944
2945 The key point about GADTs is that *pattern matching causes type
2946 refinement*. For example, in the right hand side of the equation ::
2947
2948       eval :: Term a -> a
2949       eval (Lit i) =  ...
2950
2951 the type ``a`` is refined to ``Int``. That's the whole point! A precise
2952 specification of the type rules is beyond what this user manual aspires
2953 to, but the design closely follows that described in the paper `Simple
2954 unification-based type inference for
2955 GADTs <http://research.microsoft.com/%7Esimonpj/papers/gadt/>`__, (ICFP
2956 2006). The general principle is this: *type refinement is only carried
2957 out based on user-supplied type annotations*. So if no type signature is
2958 supplied for ``eval``, no type refinement happens, and lots of obscure
2959 error messages will occur. However, the refinement is quite general. For
2960 example, if we had: ::
2961
2962       eval :: Term a -> a -> a
2963       eval (Lit i) j =  i+j
2964
2965 the pattern match causes the type ``a`` to be refined to ``Int``
2966 (because of the type of the constructor ``Lit``), and that refinement
2967 also applies to the type of ``j``, and the result type of the ``case``
2968 expression. Hence the addition ``i+j`` is legal.
2969
2970 These and many other examples are given in papers by Hongwei Xi, and Tim
2971 Sheard. There is a longer introduction `on the
2972 wiki <http://www.haskell.org/haskellwiki/GADT>`__, and Ralf Hinze's `Fun
2973 with phantom
2974 types <http://www.cs.ox.ac.uk/ralf.hinze/publications/With.pdf>`__ also
2975 has a number of examples. Note that papers may use different notation to
2976 that implemented in GHC.
2977
2978 The rest of this section outlines the extensions to GHC that support
2979 GADTs. The extension is enabled with :ghc-flag:`-XGADTs`. The :ghc-flag:`-XGADTs` flag
2980 also sets :ghc-flag:`-XGADTSyntax` and :ghc-flag:`-XMonoLocalBinds`.
2981
2982 -  A GADT can only be declared using GADT-style syntax
2983    (:ref:`gadt-style`); the old Haskell 98 syntax for data declarations
2984    always declares an ordinary data type. The result type of each
2985    constructor must begin with the type constructor being defined, but
2986    for a GADT the arguments to the type constructor can be arbitrary
2987    monotypes. For example, in the ``Term`` data type above, the type of
2988    each constructor must end with ``Term ty``, but the ``ty`` need not
2989    be a type variable (e.g. the ``Lit`` constructor).
2990
2991 -  It is permitted to declare an ordinary algebraic data type using
2992    GADT-style syntax. What makes a GADT into a GADT is not the syntax,
2993    but rather the presence of data constructors whose result type is not
2994    just ``T a b``.
2995
2996 -  You cannot use a ``deriving`` clause for a GADT; only for an ordinary
2997    data type.
2998
2999 -  As mentioned in :ref:`gadt-style`, record syntax is supported. For
3000    example:
3001
3002    ::
3003
3004          data Term a where
3005              Lit    :: { val  :: Int }      -> Term Int
3006              Succ   :: { num  :: Term Int } -> Term Int
3007              Pred   :: { num  :: Term Int } -> Term Int
3008              IsZero :: { arg  :: Term Int } -> Term Bool
3009              Pair   :: { arg1 :: Term a
3010                        , arg2 :: Term b
3011                        }                    -> Term (a,b)
3012              If     :: { cnd  :: Term Bool
3013                        , tru  :: Term a
3014                        , fls  :: Term a
3015                        }                    -> Term a
3016
3017    However, for GADTs there is the following additional constraint:
3018    every constructor that has a field ``f`` must have the same result
3019    type (modulo alpha conversion) Hence, in the above example, we cannot
3020    merge the ``num`` and ``arg`` fields above into a single name.
3021    Although their field types are both ``Term Int``, their selector
3022    functions actually have different types:
3023
3024    ::
3025
3026          num :: Term Int -> Term Int
3027          arg :: Term Bool -> Term Int
3028
3029 -  When pattern-matching against data constructors drawn from a GADT,
3030    for example in a ``case`` expression, the following rules apply:
3031
3032    -  The type of the scrutinee must be rigid.
3033
3034    -  The type of the entire ``case`` expression must be rigid.
3035
3036    -  The type of any free variable mentioned in any of the ``case``
3037       alternatives must be rigid.
3038
3039    A type is "rigid" if it is completely known to the compiler at its
3040    binding site. The easiest way to ensure that a variable a rigid type
3041    is to give it a type signature. For more precise details see `Simple
3042    unification-based type inference for
3043    GADTs <http://research.microsoft.com/%7Esimonpj/papers/gadt/>`__. The
3044    criteria implemented by GHC are given in the Appendix.
3045
3046 .. _record-system-extensions:
3047
3048 Extensions to the record system
3049 ===============================
3050
3051 .. _traditional-record-syntax:
3052
3053 Traditional record syntax
3054 -------------------------
3055
3056 .. ghc-flag:: -XNoTraditionalRecordSyntax
3057     :shortdesc: Disable support for traditional record syntax
3058         (as supported by Haskell 98) ``C {f = x}``
3059     :type: dynamic
3060     :reverse: -XTraditionalRecordSyntax
3061     :category:
3062
3063     :since: 7.4.1
3064
3065     Disallow use of record syntax.
3066
3067 Traditional record syntax, such as ``C {f = x}``, is enabled by default.
3068 To disable it, you can use the :ghc-flag:`-XNoTraditionalRecordSyntax` flag.
3069
3070 .. _disambiguate-fields:
3071
3072 Record field disambiguation
3073 ---------------------------
3074
3075 .. ghc-flag:: -XDisambiguateRecordFields
3076     :shortdesc: Enable :ref:`record field disambiguation <disambiguate-fields>`.
3077         Implied by :ghc-flag:`-XRecordWildCards`.
3078     :type: dynamic
3079     :reverse: -XNoDisambiguateRecordFields
3080     :category:
3081
3082     :since: 6.8.1
3083
3084     :since: 6.8.1
3085
3086     Allow the compiler to automatically choose between identically-named
3087     record selectors based on type (if the choice is unambiguous).
3088
3089 In record construction and record pattern matching it is entirely
3090 unambiguous which field is referred to, even if there are two different
3091 data types in scope with a common field name. For example:
3092
3093 ::
3094
3095     module M where
3096       data S = MkS { x :: Int, y :: Bool }
3097
3098     module Foo where
3099       import M
3100
3101       data T = MkT { x :: Int }
3102
3103       ok1 (MkS { x = n }) = n+1   -- Unambiguous
3104       ok2 n = MkT { x = n+1 }     -- Unambiguous
3105
3106       bad1 k = k { x = 3 }        -- Ambiguous
3107       bad2 k = x k                -- Ambiguous
3108
3109 Even though there are two ``x``'s in scope, it is clear that the ``x``
3110 in the pattern in the definition of ``ok1`` can only mean the field
3111 ``x`` from type ``S``. Similarly for the function ``ok2``. However, in
3112 the record update in ``bad1`` and the record selection in ``bad2`` it is
3113 not clear which of the two types is intended.
3114
3115 Haskell 98 regards all four as ambiguous, but with the
3116 :ghc-flag:`-XDisambiguateRecordFields` flag, GHC will accept the former two. The
3117 rules are precisely the same as those for instance declarations in
3118 Haskell 98, where the method names on the left-hand side of the method
3119 bindings in an instance declaration refer unambiguously to the method of
3120 that class (provided they are in scope at all), even if there are other
3121 variables in scope with the same name. This reduces the clutter of
3122 qualified names when you import two records from different modules that
3123 use the same field name.
3124
3125 Some details:
3126
3127 -  Field disambiguation can be combined with punning (see
3128    :ref:`record-puns`). For example: ::
3129
3130        module Foo where
3131          import M
3132          x=True
3133          ok3 (MkS { x }) = x+1   -- Uses both disambiguation and punning
3134
3135 -  With :ghc-flag:`-XDisambiguateRecordFields` you can use *unqualified* field
3136    names even if the corresponding selector is only in scope *qualified*
3137    For example, assuming the same module ``M`` as in our earlier
3138    example, this is legal: ::
3139
3140        module Foo where
3141          import qualified M    -- Note qualified
3142
3143          ok4 (M.MkS { x = n }) = n+1   -- Unambiguous
3144
3145    Since the constructor ``MkS`` is only in scope qualified, you must
3146    name it ``M.MkS``, but the field ``x`` does not need to be qualified
3147    even though ``M.x`` is in scope but ``x`` is not (In effect, it is
3148    qualified by the constructor).
3149
3150 .. _duplicate-record-fields:
3151
3152 Duplicate record fields
3153 -----------------------
3154
3155 .. ghc-flag:: -XDuplicateRecordFields
3156     :shortdesc: Allow definition of record types with identically-named fields.
3157     :type: dynamic
3158     :reverse: -XNoDuplicateRecordFields
3159     :category:
3160
3161     :implies: :ghc-flag:`-XDisambiguateRecordFields`
3162     :since: 8.0.1
3163
3164     Allow definition of record types with identically-named fields.
3165
3166 Going beyond :ghc-flag:`-XDisambiguateRecordFields` (see :ref:`disambiguate-fields`),
3167 the :ghc-flag:`-XDuplicateRecordFields` extension allows multiple datatypes to be
3168 declared using the same field names in a single module. For example, it allows
3169 this: ::
3170
3171     module M where
3172       data S = MkS { x :: Int }
3173       data T = MkT { x :: Bool }
3174
3175 Uses of fields that are always unambiguous because they mention the constructor,
3176 including construction and pattern-matching, may freely use duplicated field
3177 names. For example, the following are permitted (just as with
3178 :ghc-flag:`-XDisambiguateRecordFields`): ::
3179
3180     s = MkS { x = 3 }
3181
3182     f (MkT { x = b }) = b
3183
3184 Field names used as selector functions or in record updates must be unambiguous,
3185 either because there is only one such field in scope, or because a type
3186 signature is supplied, as described in the following sections.
3187
3188 Selector functions
3189 ~~~~~~~~~~~~~~~~~~
3190
3191 Fields may be used as selector functions only if they are unambiguous, so this
3192 is still not allowed if both ``S(x)`` and ``T(x)`` are in scope: ::
3193
3194     bad r = x r
3195
3196 An ambiguous selector may be disambiguated by the type being "pushed down" to
3197 the occurrence of the selector (see :ref:`higher-rank-type-inference` for more
3198 details on what "pushed down" means). For example, the following are permitted: ::
3199
3200     ok1 = x :: S -> Int
3201
3202     ok2 :: S -> Int
3203     ok2 = x
3204
3205     ok3 = k x -- assuming we already have k :: (S -> Int) -> _
3206
3207 In addition, the datatype that is meant may be given as a type signature on the
3208 argument to the selector: ::
3209
3210     ok4 s = x (s :: S)
3211
3212 However, we do not infer the type of the argument to determine the datatype, or
3213 have any way of deferring the choice to the constraint solver. Thus the
3214 following is ambiguous: ::
3215
3216     bad :: S -> Int
3217     bad s = x s
3218
3219 Even though a field label is duplicated in its defining module, it may be
3220 possible to use the selector unambiguously elsewhere. For example, another
3221 module could import ``S(x)`` but not ``T(x)``, and then use ``x`` unambiguously.
3222
3223 Record updates
3224 ~~~~~~~~~~~~~~
3225
3226 In a record update such as ``e { x = 1 }``, if there are multiple ``x`` fields
3227 in scope, then the type of the context must fix which record datatype is
3228 intended, or a type annotation must be supplied. Consider the following
3229 definitions: ::
3230
3231     data S = MkS { foo :: Int }
3232     data T = MkT { foo :: Int, bar :: Int }
3233     data U = MkU { bar :: Int, baz :: Int }
3234
3235 Without :ghc-flag:`-XDuplicateRecordFields`, an update mentioning ``foo`` will always be
3236 ambiguous if all these definitions were in scope. When the extension is enabled,
3237 there are several options for disambiguating updates:
3238
3239 - Check for types that have all the fields being updated. For example: ::
3240
3241       f x = x { foo = 3, bar = 2 }
3242
3243   Here ``f`` must be updating ``T`` because neither ``S`` nor ``U`` have both
3244   fields.
3245
3246 - Use the type being pushed in to the record update, as in the following: ::
3247
3248       g1 :: T -> T
3249       g1 x = x { foo = 3 }
3250
3251       g2 x = x { foo = 3 } :: T
3252
3253       g3 = k (x { foo = 3 }) -- assuming we already have k :: T -> _
3254
3255 - Use an explicit type signature on the record expression, as in: ::
3256
3257       h x = (x :: T) { foo = 3 }
3258
3259 The type of the expression being updated will not be inferred, and no
3260 constraint-solving will be performed, so the following will be rejected as
3261 ambiguous: ::
3262
3263     let x :: T
3264         x = blah
3265     in x { foo = 3 }
3266
3267     \x -> [x { foo = 3 },  blah :: T ]
3268
3269     \ (x :: T) -> x { foo = 3 }
3270
3271 Import and export of record fields
3272 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3273
3274 When :ghc-flag:`-XDuplicateRecordFields` is enabled, an ambiguous field must be exported
3275 as part of its datatype, rather than at the top level. For example, the
3276 following is legal: ::
3277
3278     module M (S(x), T(..)) where
3279       data S = MkS { x :: Int }
3280       data T = MkT { x :: Bool }
3281
3282 However, this would not be permitted, because ``x`` is ambiguous: ::
3283
3284     module M (x) where ...
3285
3286 Similar restrictions apply on import.
3287
3288 .. _record-puns:
3289
3290 Record puns
3291 -----------
3292
3293 .. ghc-flag:: -XNamedFieldPuns
3294     :shortdesc: Enable :ref:`record puns <record-puns>`.
3295     :type: dynamic
3296     :reverse: -XNoNamedFieldPuns
3297     :category:
3298
3299     :since: 6.10.1
3300
3301     Allow use of record puns.
3302
3303 Record puns are enabled by the flag :ghc-flag:`-XNamedFieldPuns`.
3304
3305 When using records, it is common to write a pattern that binds a
3306 variable with the same name as a record field, such as: ::
3307
3308     data C = C {a :: Int}
3309     f (C {a = a}) = a
3310
3311 Record punning permits the variable name to be elided, so one can simply
3312 write ::
3313
3314     f (C {a}) = a
3315
3316 to mean the same pattern as above. That is, in a record pattern, the
3317 pattern ``a`` expands into the pattern ``a = a`` for the same name
3318 ``a``.
3319
3320 Note that:
3321
3322 -  Record punning can also be used in an expression, writing, for
3323    example, ::
3324
3325        let a = 1 in C {a}
3326
3327    instead of ::
3328
3329        let a = 1 in C {a = a}
3330
3331    The expansion is purely syntactic, so the expanded right-hand side
3332    expression refers to the nearest enclosing variable that is spelled
3333    the same as the field name.
3334
3335 -  Puns and other patterns can be mixed in the same record: ::
3336
3337        data C = C {a :: Int, b :: Int}
3338        f (C {a, b = 4}) = a
3339
3340 -  Puns can be used wherever record patterns occur (e.g. in ``let``
3341    bindings or at the top-level).
3342
3343 -  A pun on a qualified field name is expanded by stripping off the
3344    module qualifier. For example: ::
3345
3346        f (C {M.a}) = a
3347
3348    means ::
3349
3350        f (M.C {M.a = a}) = a
3351
3352    (This is useful if the field selector ``a`` for constructor ``M.C``
3353    is only in scope in qualified form.)
3354
3355 .. _record-wildcards:
3356
3357 Record wildcards
3358 ----------------
3359
3360 .. ghc-flag:: -XRecordWildCards
3361     :shortdesc: Enable :ref:`record wildcards <record-wildcards>`.
3362         Implies :ghc-flag:`-XDisambiguateRecordFields`.
3363     :type: dynamic
3364     :reverse: -XNoRecordWildCards
3365     :category:
3366
3367     :implies: :ghc-flag:`-XDisambiguateRecordFields`.
3368     :since: 6.8.1
3369
3370     Allow the use of wildcards in record construction and pattern matching.
3371
3372 Record wildcards are enabled by the flag :ghc-flag:`-XRecordWildCards`. This
3373 flag implies :ghc-flag:`-XDisambiguateRecordFields`.
3374
3375 For records with many fields, it can be tiresome to write out each field
3376 individually in a record pattern, as in ::
3377
3378     data C = C {a :: Int, b :: Int, c :: Int, d :: Int}
3379     f (C {a = 1, b = b, c = c, d = d}) = b + c + d
3380
3381 Record wildcard syntax permits a "``..``" in a record pattern, where
3382 each elided field ``f`` is replaced by the pattern ``f = f``. For
3383 example, the above pattern can be written as ::
3384
3385     f (C {a = 1, ..}) = b + c + d
3386
3387 More details:
3388
3389 -  Record wildcards in patterns can be mixed with other patterns,
3390    including puns (:ref:`record-puns`); for example, in a pattern
3391    ``(C {a = 1, b, ..})``. Additionally, record wildcards can be used
3392    wherever record patterns occur, including in ``let`` bindings and at
3393    the top-level. For example, the top-level binding ::
3394
3395        C {a = 1, ..} = e
3396
3397    defines ``b``, ``c``, and ``d``.
3398
3399 -  Record wildcards can also be used in an expression, when constructing
3400    a record. For example, ::
3401
3402        let {a = 1; b = 2; c = 3; d = 4} in C {..}
3403
3404    in place of ::
3405
3406        let {a = 1; b = 2; c = 3; d = 4} in C {a=a, b=b, c=c, d=d}
3407
3408    The expansion is purely syntactic, so the record wildcard expression
3409    refers to the nearest enclosing variables that are spelled the same
3410    as the omitted field names.
3411
3412 -  Record wildcards may *not* be used in record *updates*. For example
3413    this is illegal: ::
3414
3415        f r = r { x = 3, .. }
3416
3417 -  For both pattern and expression wildcards, the "``..``" expands to
3418    the missing *in-scope* record fields. Specifically the expansion of
3419    "``C {..}``" includes ``f`` if and only if:
3420
3421    -  ``f`` is a record field of constructor ``C``.
3422
3423    -  The record field ``f`` is in scope somehow (either qualified or
3424       unqualified).
3425
3426    -  In the case of expressions (but not patterns), the variable ``f``
3427       is in scope unqualified, and is not imported or bound at top level.
3428       For example, ``f`` can be bound by an enclosing pattern match or
3429       let/where-binding.  (The motivation here is that it should be
3430       easy for the reader to figure out what the "``..``" expands to.)
3431
3432    These rules restrict record wildcards to the situations in which the
3433    user could have written the expanded version. For example ::
3434
3435        module M where
3436          data R = R { a,b,c :: Int }
3437        module X where
3438          import M( R(a,c) )
3439          f b = R { .. }
3440
3441    The ``R{..}`` expands to ``R{M.a=a}``, omitting ``b`` since the
3442    record field is not in scope, and omitting ``c`` since the variable
3443    ``c`` is not in scope (apart from the binding of the record selector
3444    ``c``, of course).
3445
3446 -  Record wildcards cannot be used (a) in a record update construct, and
3447    (b) for data constructors that are not declared with record fields.
3448    For example: ::
3449
3450        f x = x { v=True, .. }   -- Illegal (a)
3451
3452        data T = MkT Int Bool
3453        g = MkT { .. }           -- Illegal (b)
3454        h (MkT { .. }) = True    -- Illegal (b)
3455
3456
3457 .. _record-field-selector-polymorphism:
3458
3459 Record field selector polymorphism
3460 ----------------------------------
3461
3462 The module :base-ref:`GHC.Records.` defines the following: ::
3463
3464   class HasField (x :: k) r a | x r -> a where
3465     getField :: r -> a
3466
3467 A ``HasField x r a`` constraint represents the fact that ``x`` is a
3468 field of type ``a`` belonging to a record type ``r``.  The
3469 ``getField`` method gives the record selector function.
3470
3471 This allows definitions that are polymorphic over record types with a specified
3472 field.  For example, the following works with any record type that has a field
3473 ``name :: String``: ::
3474
3475   foo :: HasField "name" r String => r -> String
3476   foo r = reverse (getField @"name" r)
3477
3478 ``HasField`` is a magic built-in typeclass (similar to ``Coercible``, for
3479 example).  It is given special treatment by the constraint solver (see
3480 :ref:`solving-hasfield-constraints`).  Users may define their own instances of
3481 ``HasField`` also (see :ref:`virtual-record-fields`).
3482
3483 .. _solving-hasfield-constraints:
3484
3485 Solving HasField constraints
3486 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3487
3488 If the constraint solver encounters a constraint ``HasField x r a``
3489 where ``r`` is a concrete datatype with a field ``x`` in scope, it
3490 will automatically solve the constraint using the field selector as
3491 the dictionary, unifying ``a`` with the type of the field if
3492 necessary.  This happens irrespective of which extensions are enabled.
3493
3494 For example, if the following datatype is in scope ::
3495
3496   data Person = Person { name :: String }
3497
3498 the end result is rather like having an instance ::
3499
3500   instance HasField "name" Person String where
3501     getField = name
3502
3503 except that this instance is not actually generated anywhere, rather
3504 the constraint is solved directly by the constraint solver.
3505
3506 A field must be in scope for the corresponding ``HasField`` constraint
3507 to be solved.  This retains the existing representation hiding
3508 mechanism, whereby a module may choose not to export a field,
3509 preventing client modules from accessing or updating it directly.
3510
3511 Solving ``HasField`` constraints depends on the field selector functions that
3512 are generated for each datatype definition:
3513
3514 -  If a record field does not have a selector function because its type would allow
3515    an existential variable to escape, the corresponding ``HasField`` constraint
3516    will not be solved.  For example, ::
3517
3518      {-# LANGUAGE ExistentialQuantification #-}
3519      data Exists t = forall x . MkExists { unExists :: t x }
3520
3521    does not give rise to a selector ``unExists :: Exists t -> t x`` and we will not
3522    solve ``HasField "unExists" (Exists t) a`` automatically.
3523
3524 -  If a record field has a polymorphic type (and hence the selector function is
3525    higher-rank), the corresponding ``HasField`` constraint will not be solved,
3526    because doing so would violate the functional dependency on ``HasField`` and/or
3527    require impredicativity.  For example, ::
3528
3529      {-# LANGUAGE RankNTypes #-}
3530      data Higher = MkHigher { unHigher :: forall t . t -> t }
3531
3532    gives rise to a selector ``unHigher :: Higher -> (forall t . t -> t)`` but does
3533    not lead to solution of the constraint ``HasField "unHigher" Higher a``.
3534
3535 -  A record GADT may have a restricted type for a selector function, which may lead
3536    to additional unification when solving ``HasField`` constraints.  For example, ::
3537
3538      {-# LANGUAGE GADTs #-}
3539      data Gadt t where
3540        MkGadt :: { unGadt :: Maybe v } -> Gadt [v]
3541
3542    gives rise to a selector ``unGadt :: Gadt [v] -> Maybe v``, so the solver will reduce
3543    the constraint ``HasField "unGadt" (Gadt t) b`` by unifying ``t ~ [v]`` and
3544    ``b ~ Maybe v`` for some fresh metavariable ``v``, rather as if we had an instance ::
3545
3546      instance (t ~ [v], b ~ Maybe v) => HasField "unGadt" (Gadt t) b
3547
3548 -  If a record type has an old-fashioned datatype context, the ``HasField``
3549    constraint will be reduced to solving the constraints from the context.
3550    For example, ::
3551
3552      {-# LANGUAGE DatatypeContexts #-}
3553      data Eq a => Silly a = MkSilly { unSilly :: a }
3554
3555    gives rise to a selector ``unSilly :: Eq a => Silly a -> a``, so
3556    the solver will reduce the constraint ``HasField "unSilly" (Silly a) b`` to
3557    ``Eq a`` (and unify ``a`` with ``b``), rather as if we had an instance ::
3558
3559      instance (Eq a, a ~ b) => HasField "unSilly" (Silly a) b
3560
3561 .. _virtual-record-fields:
3562
3563 Virtual record fields
3564 ~~~~~~~~~~~~~~~~~~~~~
3565
3566 Users may define their own instances of ``HasField``, provided they do
3567 not conflict with the built-in constraint solving behaviour.  This
3568 allows "virtual" record fields to be defined for datatypes that do not
3569 otherwise have them.
3570
3571 For example, this instance would make the ``name`` field of ``Person``
3572 accessible using ``#fullname`` as well: ::
3573
3574   instance HasField "fullname" Person String where
3575     getField = name
3576
3577 More substantially, an anonymous records library could provide
3578 ``HasField`` instances for its anonymous records, and thus be
3579 compatible with the polymorphic record selectors introduced by this
3580 proposal.  For example, something like this makes it possible to use
3581 ``getField`` to access ``Record`` values with the appropriate
3582 string in the type-level list of fields: ::
3583
3584   data Record (xs :: [(k, Type)]) where
3585     Nil  :: Record '[]
3586     Cons :: Proxy x -> a -> Record xs -> Record ('(x, a) ': xs)
3587
3588   instance HasField x (Record ('(x, a) ': xs)) a where
3589     getField (Cons _ v _) = v
3590   instance HasField x (Record xs) a => HasField x (Record ('(y, b) ': xs)) a where
3591     getField (Cons _ _ r) = getField @x r
3592
3593   r :: Record '[ '("name", String) ]
3594   r = Cons Proxy "R" Nil)
3595
3596   x = getField @"name" r
3597
3598 Since representations such as this can support field labels with kinds other
3599 than ``Symbol``, the ``HasField`` class is poly-kinded (even though the built-in
3600 constraint solving works only at kind ``Symbol``).  In particular, this allows
3601 users to declare scoped field labels such as in the following example: ::
3602
3603   data PersonFields = Name
3604
3605   s :: Record '[ '(Name, String) ]
3606   s = Cons Proxy "S" Nil
3607
3608   y = getField @Name s
3609
3610 In order to avoid conflicting with the built-in constraint solving,
3611 the following user-defined ``HasField`` instances are prohibited (in
3612 addition to the usual rules, such as the prohibition on type
3613 families appearing in instance heads):
3614
3615 -  ``HasField _ r _`` where ``r`` is a variable;
3616
3617 -  ``HasField _ (T ...) _`` if ``T`` is a data family (because it
3618    might have fields introduced later, using data instance declarations);
3619
3620 -  ``HasField x (T ...) _`` if ``x`` is a variable and ``T`` has any
3621    fields at all (but this instance is permitted if ``T`` has no fields);
3622
3623 -  ``HasField "foo" (T ...) _`` if ``T`` has a field ``foo`` (but this
3624    instance is permitted if it does not).
3625
3626 If a field has a higher-rank or existential type, the corresponding ``HasField``
3627 constraint will not be solved automatically (as described above), but in the
3628 interests of simplicity we do not permit users to define their own instances
3629 either.  If a field is not in scope, the corresponding instance is still
3630 prohibited, to avoid conflicts in downstream modules.
3631
3632
3633 .. _deriving:
3634
3635 Extensions to the "deriving" mechanism
3636 ======================================
3637
3638 Haskell 98 allows the programmer to add a deriving clause to a data type
3639 declaration, to generate a standard instance declaration for specified class.
3640 GHC extends this mechanism along several axes:
3641
3642 * The derivation mechanism can be used separtely from the data type
3643   declaration, using the the `standalone deriving mechanism
3644   <#stand-alone-deriving>`__.
3645
3646 * In Haskell 98, the only derivable classes are ``Eq``,
3647   ``Ord``, ``Enum``, ``Ix``, ``Bounded``, ``Read``, and ``Show``. `Various
3648   langauge extensions <#deriving-extra>`__ extend this list.
3649
3650 * Besides the stock approach to deriving instances by generating all method
3651   definitions, GHC supports two additional deriving strategies, which can
3652   derive arbitrary classes:
3653
3654   * `Generalised newtype deriving <#newtype-deriving>`__ for newtypes and
3655   * `deriving any class <#derive-any-class>`__ using an empty instance
3656     declaration.
3657
3658   The user can optionally declare the desired `deriving strategy
3659   <#deriving-stragies>`__, especially if the compiler chooses the wrong
3660   one `by default <#default-deriving-strategy>`__.
3661
3662
3663 .. _deriving-inferred:
3664
3665 Inferred context for deriving clauses
3666 -------------------------------------
3667
3668 The Haskell Report is vague about exactly when a ``deriving`` clause is
3669 legal. For example: ::
3670
3671       data T0 f a = MkT0 a         deriving( Eq )
3672       data T1 f a = MkT1 (f a)     deriving( Eq )
3673       data T2 f a = MkT2 (f (f a)) deriving( Eq )
3674
3675 The natural generated ``Eq`` code would result in these instance
3676 declarations: ::
3677
3678       instance Eq a         => Eq (T0 f a) where ...
3679       instance Eq (f a)     => Eq (T1 f a) where ...
3680       instance Eq (f (f a)) => Eq (T2 f a) where ...
3681
3682 The first of these is obviously fine. The second is still fine, although
3683 less obviously. The third is not Haskell 98, and risks losing
3684 termination of instances.
3685
3686 GHC takes a conservative position: it accepts the first two, but not the
3687 third. The rule is this: each constraint in the inferred instance
3688 context must consist only of type variables, with no repetitions.
3689
3690 This rule is applied regardless of flags. If you want a more exotic
3691 context, you can write it yourself, using the `standalone deriving
3692 mechanism <#stand-alone-deriving>`__.
3693
3694 .. _stand-alone-deriving:
3695
3696 Stand-alone deriving declarations
3697 ---------------------------------
3698
3699 .. ghc-flag:: -XStandaloneDeriving
3700     :shortdesc: Enable :ref:`standalone deriving <stand-alone-deriving>`.
3701     :type: dynamic
3702     :reverse: -XNoStandaloneDeriving
3703     :category:
3704
3705     :since: 6.8.1
3706
3707     Allow the use of stand-alone ``deriving`` declarations.
3708
3709 GHC allows stand-alone ``deriving`` declarations, enabled by
3710 :ghc-flag:`-XStandaloneDeriving`: ::
3711
3712       data Foo a = Bar a | Baz String
3713
3714       deriving instance Eq a => Eq (Foo a)
3715
3716 The syntax is identical to that of an ordinary instance declaration
3717 apart from (a) the keyword ``deriving``, and (b) the absence of the
3718 ``where`` part.
3719
3720 However, standalone deriving differs from a ``deriving`` clause in a
3721 number of important ways:
3722
3723 -  The standalone deriving declaration does not need to be in the same
3724    module as the data type declaration. (But be aware of the dangers of
3725    orphan instances (:ref:`orphan-modules`).
3726
3727 -  You must supply an explicit context (in the example the context is
3728    ``(Eq a)``), exactly as you would in an ordinary instance
3729    declaration. (In contrast, in a ``deriving`` clause attached to a
3730    data type declaration, the context is inferred.)
3731
3732 -  Unlike a ``deriving`` declaration attached to a ``data`` declaration,
3733    the instance can be more specific than the data type (assuming you
3734    also use :ghc-flag:`-XFlexibleInstances`, :ref:`instance-rules`). Consider
3735    for example ::
3736
3737          data Foo a = Bar a | Baz String
3738
3739          deriving instance Eq a => Eq (Foo [a])
3740          deriving instance Eq a => Eq (Foo (Maybe a))
3741
3742    This will generate a derived instance for ``(Foo [a])`` and
3743    ``(Foo (Maybe a))``, but other types such as ``(Foo (Int,Bool))``
3744    will not be an instance of ``Eq``.
3745
3746 -  Unlike a ``deriving`` declaration attached to a ``data`` declaration,
3747    GHC does not restrict the form of the data type. Instead, GHC simply
3748    generates the appropriate boilerplate code for the specified class,
3749    and typechecks it. If there is a type error, it is your problem. (GHC
3750    will show you the offending code if it has a type error.)
3751
3752    The merit of this is that you can derive instances for GADTs and
3753    other exotic data types, providing only that the boilerplate code
3754    does indeed typecheck. For example: ::
3755
3756          data T a where
3757             T1 :: T Int
3758             T2 :: T Bool
3759
3760          deriving instance Show (T a)
3761
3762    In this example, you cannot say ``... deriving( Show )`` on the data
3763    type declaration for ``T``, because ``T`` is a GADT, but you *can*
3764    generate the instance declaration using stand-alone deriving.
3765
3766    The down-side is that, if the boilerplate code fails to typecheck,
3767    you will get an error message about that code, which you did not
3768    write. Whereas, with a ``deriving`` clause the side-conditions are
3769    necessarily more conservative, but any error message may be more
3770    comprehensible.
3771
3772 -  Under most circumstances, you cannot use standalone deriving to create an
3773    instance for a data type whose constructors are not all in scope. This is
3774    because the derived instance would generate code that uses the constructors
3775    behind the scenes, which would break abstraction.
3776
3777    The one exception to this rule is :ghc-flag:`-XDeriveAnyClass`, since
3778    deriving an instance via :ghc-flag:`-XDeriveAnyClass` simply generates
3779    an empty instance declaration, which does not require the use of any
3780    constructors. See the `deriving any class <#derive-any-class>`__ section
3781    for more details.
3782
3783 In other ways, however, a standalone deriving obeys the same rules as
3784 ordinary deriving:
3785
3786 -  A ``deriving instance`` declaration must obey the same rules
3787    concerning form and termination as ordinary instance declarations,
3788    controlled by the same flags; see :ref:`instance-decls`.
3789
3790 -  The stand-alone syntax is generalised for newtypes in exactly the
3791    same way that ordinary ``deriving`` clauses are generalised
3792    (:ref:`newtype-deriving`). For example: ::
3793
3794          newtype Foo a = MkFoo (State Int a)
3795
3796          deriving instance MonadState Int Foo
3797
3798    GHC always treats the *last* parameter of the instance (``Foo`` in
3799    this example) as the type whose instance is being derived.
3800
3801 .. _deriving-extra:
3802
3803 Deriving instances of extra classes (``Data``, etc.)
3804 ----------------------------------------------------
3805
3806 Haskell 98 allows the programmer to add "``deriving( Eq, Ord )``" to a
3807 data type declaration, to generate a standard instance declaration for
3808 classes specified in the ``deriving`` clause. In Haskell 98, the only
3809 classes that may appear in the ``deriving`` clause are the standard
3810 classes ``Eq``, ``Ord``, ``Enum``, ``Ix``, ``Bounded``, ``Read``, and
3811 ``Show``.
3812
3813 GHC extends this list with several more classes that may be
3814 automatically derived:
3815
3816 -  With :ghc-flag:`-XDeriveGeneric`, you can derive instances of the classes
3817    ``Generic`` and ``Generic1``, defined in ``GHC.Generics``. You can
3818    use these to define generic functions, as described in
3819    :ref:`generic-programming`.
3820
3821 -  With :ghc-flag:`-XDeriveFunctor`, you can derive instances of the class
3822    ``Functor``, defined in ``GHC.Base``.
3823
3824 -  With :ghc-flag:`-XDeriveDataTypeable`, you can derive instances of the class
3825    ``Data``, defined in ``Data.Data``.
3826
3827 -  With :ghc-flag:`-XDeriveFoldable`, you can derive instances of the class
3828    ``Foldable``, defined in ``Data.Foldable``.
3829
3830 -  With :ghc-flag:`-XDeriveTraversable`, you can derive instances of the class
3831    ``Traversable``, defined in ``Data.Traversable``. Since the
3832    ``Traversable`` instance dictates the instances of ``Functor`` and
3833    ``Foldable``, you'll probably want to derive them too, so
3834    :ghc-flag:`-XDeriveTraversable` implies :ghc-flag:`-XDeriveFunctor` and
3835    :ghc-flag:`-XDeriveFoldable`.
3836
3837 -  With :ghc-flag:`-XDeriveLift`, you can derive instances of the class ``Lift``,
3838    defined in the ``Language.Haskell.TH.Syntax`` module of the
3839    ``template-haskell`` package.
3840
3841 You can also use a standalone deriving declaration instead (see
3842 :ref:`stand-alone-deriving`).
3843
3844 In each case the appropriate class must be in scope before it can be
3845 mentioned in the ``deriving`` clause.
3846
3847 .. _deriving-functor:
3848
3849 Deriving ``Functor`` instances
3850 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3851
3852 .. ghc-flag:: -XDeriveFunctor
3853     :shortdesc: Enable :ref:`deriving for the Functor class <deriving-extra>`.
3854         Implied by :ghc-flag:`-XDeriveTraversable`.
3855     :type: dynamic
3856     :reverse: -XNoDeriveFunctor
3857     :category:
3858
3859     :since: 7.10.1
3860
3861     Allow automatic deriving of instances for the ``Functor`` typeclass.
3862
3863
3864 With :ghc-flag:`-XDeriveFunctor`, one can derive ``Functor`` instances for data types
3865 of kind ``* -> *``. For example, this declaration::
3866
3867     data Example a = Ex a Char (Example a) (Example Char)
3868       deriving Functor
3869
3870 would generate the following instance: ::
3871
3872     instance Functor Example where
3873       fmap f (Ex a1 a2 a3 a4) = Ex (f a1) a2 (fmap f a3) a4
3874
3875 The basic algorithm for :ghc-flag:`-XDeriveFunctor` walks the arguments of each
3876 constructor of a data type, applying a mapping function depending on the type
3877 of each argument. If a plain type variable is found that is syntactically
3878 equivalent to the last type parameter of the data type (``a`` in the above
3879 example), then we apply the function ``f`` directly to it. If a type is
3880 encountered that is not syntactically equivalent to the last type parameter
3881 *but does mention* the last type parameter somewhere in it, then a recursive
3882 call to ``fmap`` is made. If a type is found which doesn't mention the last
3883 type parameter at all, then it is left alone.
3884
3885 The second of those cases, in which a type is unequal to the type parameter but
3886 does contain the type parameter, can be surprisingly tricky. For example, the
3887 following example compiles::
3888
3889     newtype Right a = Right (Either Int a) deriving Functor
3890
3891 Modifying the code slightly, however, produces code which will not compile::
3892
3893     newtype Wrong a = Wrong (Either a Int) deriving Functor
3894
3895 The difference involves the placement of the last type parameter, ``a``. In the
3896 ``Right`` case, ``a`` occurs within the type ``Either Int a``, and moreover, it
3897 appears as the last type argument of ``Either``. In the ``Wrong`` case,
3898 however, ``a`` is not the last type argument to ``Either``; rather, ``Int`` is.
3899
3900 This distinction is important because of the way :ghc-flag:`-XDeriveFunctor` works. The
3901 derived ``Functor Right`` instance would be::
3902
3903     instance Functor Right where
3904       fmap f (Right a) = Right (fmap f a)
3905
3906 Given a value of type ``Right a``, GHC must produce a value of type
3907 ``Right b``. Since the argument to the ``Right`` constructor has type
3908 ``Either Int a``, the code recursively calls ``fmap`` on it to produce a value
3909 of type ``Either Int b``, which is used in turn to construct a final value of
3910 type ``Right b``.
3911
3912 The generated code for the ``Functor Wrong`` instance would look exactly the
3913 same, except with ``Wrong`` replacing every occurrence of ``Right``. The
3914 problem is now that ``fmap`` is being applied recursively to a value of type
3915 ``Either a Int``. This cannot possibly produce a value of type
3916 ``Either b Int``, as ``fmap`` can only change the last type parameter! This
3917 causes the generated code to be ill-typed.
3918
3919 As a general rule, if a data type has a derived ``Functor`` instance and its
3920 last type parameter occurs on the right-hand side of the data declaration, then
3921 either it must (1) occur bare (e.g., ``newtype Id a = a``), or (2) occur as the
3922 last argument of a type constructor (as in ``Right`` above).
3923
3924 There are two exceptions to this rule:
3925
3926 #. Tuple types. When a non-unit tuple is used on the right-hand side of a data
3927    declaration, :ghc-flag:`-XDeriveFunctor` treats it as a product of distinct types.
3928    In other words, the following code::
3929
3930        newtype Triple a = Triple (a, Int, [a]) deriving Functor
3931
3932    Would result in a generated ``Functor`` instance like so::
3933
3934        instance Functor Triple where
3935          fmap f (Triple a) =
3936            Triple (case a of
3937                         (a1, a2, a3) -> (f a1, a2, fmap f a3))
3938
3939    That is, :ghc-flag:`-XDeriveFunctor` pattern-matches its way into tuples and maps
3940    over each type that constitutes the tuple. The generated code is
3941    reminiscient of what would be generated from
3942    ``data Triple a = Triple a Int [a]``, except with extra machinery to handle
3943    the tuple.
3944
3945 #. Function types. The last type parameter can appear anywhere in a function
3946    type as long as it occurs in a *covariant* position. To illustrate what this
3947    means, consider the following three examples::
3948
3949        newtype CovFun1 a = CovFun1 (Int -> a) deriving Functor
3950        newtype CovFun2 a = CovFun2 ((a -> Int) -> a) deriving Functor
3951        newtype CovFun3 a = CovFun3 (((Int -> a) -> Int) -> a) deriving Functor
3952
3953    All three of these examples would compile without issue. On the other hand::
3954
3955        newtype ContraFun1 a = ContraFun1 (a -> Int) deriving Functor
3956        newtype ContraFun2 a = ContraFun2 ((Int -> a) -> Int) deriving Functor
3957        newtype ContraFun3 a = ContraFun3 (((a -> Int) -> a) -> Int) deriving Functor
3958
3959    While these examples look similar, none of them would successfully compile.
3960    This is because all occurrences of the last type parameter ``a`` occur in *contravariant* positions, not covariant ones.
3961
3962    Intuitively, a covariant type is *produced*, and a contravariant type is
3963    *consumed*. Most types in Haskell are covariant, but the function type is
3964    special in that the lefthand side of a function arrow reverses variance. If
3965    a function type ``a -> b`` appears in a covariant position (e.g.,
3966    ``CovFun1`` above), then ``a`` is in a contravariant position and ``b`` is
3967    in a covariant position. Similarly, if ``a -> b`` appears in a contravariant
3968    position (e.g., ``CovFun2`` above), then ``a`` is in ``a`` covariant
3969    position and ``b`` is in a contravariant position.
3970
3971    To see why a data type with a contravariant occurrence of its last type
3972    parameter cannot have a derived ``Functor`` instance, let's suppose that a
3973    ``Functor ContraFun1`` instance exists. The implementation would look
3974    something like this::
3975
3976        instance Functor ContraFun1 where
3977          fmap f (ContraFun g) = ContraFun (\x -> _)
3978
3979    We have ``f :: a -> b``, ``g :: a -> Int``, and ``x :: b``. Using these, we
3980    must somehow fill in the hole (denoted with an underscore) with a value of
3981    type ``Int``. What are our options?
3982
3983    We could try applying ``g`` to ``x``. This won't work though, as ``g``
3984    expects an argument of type ``a``, and ``x :: b``. Even worse, we can't turn
3985    ``x`` into something of type ``a``, since ``f`` also needs an argument of
3986    type ``a``! In short, there's no good way to make this work.
3987
3988    On the other hand, a derived ``Functor`` instances for the ``CovFun``\ s are
3989    within the realm of possibility::
3990
3991        instance Functor CovFun1 where
3992          fmap f (CovFun1 g) = CovFun1 (\x -> f (g x))
3993
3994        instance Functor CovFun2 where
3995          fmap f (CovFun2 g) = CovFun2 (\h -> f (g (\x -> h (f x))))
3996
3997        instance Functor CovFun3 where
3998          fmap f (CovFun3 g) = CovFun3 (\h -> f (g (\k -> h (\x -> f (k x)))))
3999
4000 There are some other scenarios in which a derived ``Functor`` instance will
4001 fail to compile:
4002
4003 #. A data type has no type parameters (e.g., ``data Nothing = Nothing``).
4004
4005 #. A data type's last type variable is used in a :ghc-flag:`-XDatatypeContexts`
4006    constraint (e.g., ``data Ord a => O a = O a``).
4007
4008 #. A data type's last type variable is used in an
4009    :ghc-flag:`-XExistentialQuantification` constraint, or is refined in a GADT. For
4010    example, ::
4011
4012        data T a b where
4013            T4 :: Ord b => b -> T a b
4014            T5 :: b -> T b b
4015            T6 :: T a (b,b)
4016
4017        deriving instance Functor (T a)
4018
4019    would not compile successfully due to the way in which ``b`` is constrained.
4020
4021 When the last type parameter has a phantom role (see :ref:`roles`), the derived
4022 ``Functor`` instance will not be produced using the usual algorithm. Instead,
4023 the entire value will be coerced. ::
4024
4025     data Phantom a = Z | S (Phantom a) deriving Functor
4026
4027 will produce the following instance: ::
4028
4029     instance Functor Phantom where
4030       fmap _ = coerce
4031
4032 When a type has no constructors, the derived ``Functor`` instance will
4033 simply force the (bottom) value of the argument using
4034 :ghc-flag:`-XEmptyCase`. ::
4035
4036     data V a deriving Functor
4037     type role V nominal
4038
4039 will produce
4040
4041     instance Functor V where
4042       fmap _ z = case z of
4043
4044 .. _deriving-foldable:
4045
4046 Deriving ``Foldable`` instances
4047 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4048
4049 .. ghc-flag:: -XDeriveFoldable
4050     :shortdesc: Enable :ref:`deriving for the Foldable class <deriving-extra>`.
4051         Implied by :ghc-flag:`-XDeriveTraversable`.
4052     :type: dynamic
4053     :reverse: -XNoDeriveFoldable
4054     :category:
4055
4056     :since: 7.10.1
4057
4058     Allow automatic deriving of instances for the ``Foldable`` typeclass.
4059
4060 With :ghc-flag:`-XDeriveFoldable`, one can derive ``Foldable`` instances for data types
4061 of kind ``* -> *``. For example, this declaration::
4062
4063     data Example a = Ex a Char (Example a) (Example Char)
4064       deriving Foldable
4065
4066 would generate the following instance::
4067
4068     instance Foldable Example where
4069       foldr f z (Ex a1 a2 a3 a4) = f a1 (foldr f z a3)
4070       foldMap f (Ex a1 a2 a3 a4) = mappend (f a1) (foldMap f a3)
4071
4072 The algorithm for :ghc-flag:`-XDeriveFoldable` is adapted from the
4073 :ghc-flag:`-XDeriveFunctor` algorithm, but it generates definitions for
4074 ``foldMap``, ``foldr``, and ``null`` instead of ``fmap``. In addition,
4075 :ghc-flag:`-XDeriveFoldable` filters out all constructor arguments on the RHS
4076 expression whose types do not mention the last type parameter, since those
4077 arguments do not need to be folded over.
4078
4079 When the type parameter has a phantom role (see :ref:`roles`),
4080 :ghc-flag:`-XDeriveFoldable` derives a trivial instance. For example, this
4081 declaration: ::
4082
4083     data Phantom a = Z | S (Phantom a)
4084
4085 will generate the following instance. ::
4086
4087     instance Foldable Phantom where
4088       foldMap _ _ = mempty
4089
4090 Similarly, when the type has no constructors, :ghc-flag:`-XDeriveFoldable` will
4091 derive a trivial instance: ::
4092
4093     data V a deriving Foldable
4094     type role V nominal
4095
4096 will generate the following. ::
4097
4098     instance Foldable V where
4099       foldMap _ _ = mempty
4100
4101 Here are the differences between the generated code for ``Functor`` and
4102 ``Foldable``:
4103
4104 #. When a bare type variable ``a`` is encountered, :ghc-flag:`-XDeriveFunctor`
4105 would generate ``f a`` for an ``fmap`` definition. :ghc-flag:`-XDeriveFoldable`
4106 would generate ``f a z`` for ``foldr``, ``f a`` for ``foldMap``, and ``False``
4107 for ``null``.
4108
4109 #. When a type that is not syntactically equivalent to ``a``, but which does
4110    contain ``a``, is encountered, :ghc-flag:`-XDeriveFunctor` recursively calls
4111    ``fmap`` on it. Similarly, :ghc-flag:`-XDeriveFoldable` would recursively call
4112    ``foldr`` and ``foldMap``. Depending on the context, ``null`` may recursively
4113    call ``null`` or ``all null``. For example, given ::
4114
4115        data F a = F (P a)
4116        data G a = G (P (a, Int))
4117        data H a = H (P (Q a))
4118
4119    ``Foldable`` deriving will produce ::
4120
4121        null (F x) = null x
4122        null (G x) = null x
4123        null (H x) = all null x
4124
4125 #. :ghc-flag:`-XDeriveFunctor` puts everything back together again at the end by
4126    invoking the constructor. :ghc-flag:`-XDeriveFoldable`, however, builds up a value
4127    of some type. For ``foldr``, this is accomplished by chaining applications
4128    of ``f`` and recursive ``foldr`` calls on the state value ``z``. For
4129    ``foldMap``, this happens by combining all values with ``mappend``. For ``null``,
4130    the values are usually combined with ``&&``. However, if any of the values is
4131    known to be ``False``, all the rest will be dropped. For example, ::
4132
4133        data SnocList a = Nil | Snoc (SnocList a) a