summaryrefslogtreecommitdiff
path: root/docs/users_guide/exts/local_fixity_decls.rst
blob: fe9b319c7129b2a5c6a15a1964009438c8f86a1e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
.. _local-fixity-declarations:

Local Fixity Declarations
-------------------------

A careful reading of the Haskell 98 Report reveals that fixity
declarations (``infix``, ``infixl``, and ``infixr``) are permitted to
appear inside local bindings such those introduced by ``let`` and
``where``. However, the Haskell Report does not specify the semantics of
such bindings very precisely.

In GHC, a fixity declaration may accompany a local binding: ::

    let f = ...
        infixr 3 `f`
    in
        ...

and the fixity declaration applies wherever the binding is in scope. For
example, in a ``let``, it applies in the right-hand sides of other
``let``-bindings and the body of the ``let``\ C. Or, in recursive ``do``
expressions (:ref:`recursive-do-notation`), the local fixity
declarations of a ``let`` statement scope over other statements in the
group, just as the bound name does.

Moreover, a local fixity declaration *must* accompany a local binding
of that name: it is not possible to revise the fixity of name bound
elsewhere, as in ::

    let infixr 9 $ in ...

Because local fixity declarations are technically Haskell 98, no extension is
necessary to enable them.