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