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