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