summaryrefslogtreecommitdiff
path: root/docs/users_guide/editing-guide.rst
diff options
context:
space:
mode:
Diffstat (limited to 'docs/users_guide/editing-guide.rst')
-rw-r--r--docs/users_guide/editing-guide.rst334
1 files changed, 334 insertions, 0 deletions
diff --git a/docs/users_guide/editing-guide.rst b/docs/users_guide/editing-guide.rst
new file mode 100644
index 0000000000..7e973ce6d3
--- /dev/null
+++ b/docs/users_guide/editing-guide.rst
@@ -0,0 +1,334 @@
+Care and feeding of your GHC Users Guide
+========================================
+
+The GHC User's Guide is the primary reference documentation
+for the Glasgow Haskell Compiler. Even more than this, it at times serves (for
+better or for worse) as a de-facto language standard, being the sole
+non-academic reference for many widely used language extensions.
+
+Since GHC 8.0, the User's Guide is authored in `ReStructuredText
+<https://en.wikipedia.org/wiki/ReStructuredText>`__ (or ReST or RST, for short)
+a rich but light-weight mark-up language aimed at producing documentation. The
+`Sphinx <http://sphinx-doc.org/>`__ tool is used to produce the final PDF and
+HTML documentation.
+
+This document (also written in ReST) serves as a brief introducion to ReST and to
+document the conventions used in the User's Guide. This document is *not* intended
+to be a thorough guide to ReST. For this see the resources referenced
+`below <#references>`__.
+
+Basics
+------
+
+Unicode characters are allowed in the document.
+
+The basic syntax works largely as one would expect. For instance,
+
+.. code-block:: rest
+
+ This is a paragraph containing a few sentences of text. Purple turtles walk
+ through green fields of lofty maize. Lorem ipsum dolor sit amet, consectetur
+ adipiscing elit. Some lists,
+
+ 1. This is a list item
+
+ a. Followed by a sub-item
+ b. And another!
+ c. Now with ``a bit of code`` and some *emphasis*.
+
+ 2. Back to the first list
+
+ Or perhaps you are more of a bullet list person,
+
+ * Foo
+ * Fizzle
+
+ - Bar
+ - Blah
+
+ Or perhaps a definition list is in order,
+
+ *Chelonii*
+ The taxonomic order consisting of modern turtles
+ *Meiolaniidae*
+ The taxonomic order of an extinct variety of herbivorous turtles.
+
+Note the blank lines between a list item and its sub-items. Sub-items should be
+on the same indentation level as the content of their parent items. Also note
+that no whitespace is necessary or desirable before the bullet or item number
+(lest the list be indented unnecessarily).
+
+The above would be rendered as,
+
+ This is a paragraph containing a few sentences of text. Purple turtles walk
+ through green fields of lofty maize. Lorem ipsum dolor sit amet, consectetur
+ adipiscing elit. Some lists,
+
+ 1. This is a list item
+
+ a. Followed by a sub-item
+ b. And another!
+ c. Now with ``a bit of code`` and some *emphasis*.
+
+ 2. Back to the first list
+
+ Or perhaps you are more of a bullet list person,
+
+ * Foo
+ * Fizzle
+
+ - Bar
+ - Blah
+
+ Or perhaps a definition list is in order,
+
+ *Chelonii*
+ The taxonomic order consisting of modern turtles
+ *Meiolaniidae*
+ The taxonomic order of an extinct variety of herbivorous turtles.
+
+
+Headings
+~~~~~~~~
+
+While ReST can accomodate a wide range of heading styles, we have standardized
+on this convention in the User's Guide,
+
+.. code-block:: rest
+
+ Header level 1
+ ==============
+
+ Header level 2
+ --------------
+
+ Header level 3
+ ~~~~~~~~~~~~~~
+
+ Header level 4
+ ^^^^^^^^^^^^^^^
+
+
+Formatting code
+~~~~~~~~~~~~~~~
+
+Haskell
+^^^^^^^
+
+Code snippets can be included as both inline and block elements. Inline
+code is denoted with double-backticks whereas block of code are introduced
+by ending a paragraph with double-colons and indentation,
+
+.. code-block:: rest
+
+ The ``fib`` function is defined as, ::
+
+ fib :: Integer -> Integer
+ fib 1 = 1
+ fib n = n * fib (n - 1)
+
+Which would be rendered as,
+
+ The ``fib`` function is defined as, ::
+
+ fib :: Integer -> Integer
+ fib 1 = 1
+ fib n = n * fib (n - 1)
+
+Other languages
+^^^^^^^^^^^^^^^
+
+Double-colon blocks are syntax-highlighted as Haskell by default. To avoid this
+use a
+``.. code-block`` `directive
+<http://sphinx-doc.org/markup/code.html#directive-code-block>`__ with explicit
+language designation,
+
+.. code-block:: rest
+
+ This is a simple shell script,
+
+ .. code-block:: sh
+
+ #!/bin/bash
+ echo "Hello World!"
+
+
+Links
+~~~~~
+
+Within the Users Guide
+^^^^^^^^^^^^^^^^^^^^^^
+
+Frequently we want to give a name to a section so it can be referred to
+from other points in the document,
+
+.. code-block:: rest
+
+ .. _options-platform:
+
+ Platform-specific Flags
+ -----------------------
+
+ There are lots of platform-specific flags.
+
+ Some other section
+ -------------------
+
+ GHC supports a variety of :ref:`x86 specific features <options-platform>`.
+
+ See :ref:`options-platform` for details.
+
+
+To GHC Trac resources
+^^^^^^^^^^^^^^^^^^^^^
+
+There are special macros for conveniently linking to GHC Trac
+Wiki articles and tickets,
+
+.. code-block:: rest
+
+ See :ghc-wiki:`Commentary/Latedmd` for details on demand analysis.
+
+ See the :ghc-wiki:`coding style <Commentary/CodingStyle>` for guidelines.
+
+ See the :ghc-ticket:`123` for further discussion.
+
+ See the :ghc-ticket:`this bug <123>` for what happens when this fails.
+
+
+To external resources
+^^^^^^^^^^^^^^^^^^^^^
+
+External links can be written in either of these ways,
+
+.. code-block:: rest
+
+ See the `GHC Wiki <http://ghc.haskell.org/wiki>`_ for details.
+
+ See the `GHC Wiki`_ for details.
+
+ .. _GHC Wiki: http://ghc.haskell.org/wiki
+
+
+To core library Haddock documentation
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+It is often useful to be able to refer to the Haddock documention of the
+libraries shipped with GHC. The users guide's build system provides
+commands for referring to documentation for the following core GHC packages,
+
+* ``base``: ``:base-ref:``
+* ``cabal``: ``:cabal-ref:``
+* ``ghc-prim``: ``:ghc-prim-ref:``
+
+For instance,
+
+.. code-block:: rest
+
+ See the documentation for :base-ref:`Control.Applicative <Control-Applicative.html>`
+ for details.
+
+
+Index entries
+~~~~~~~~~~~~~
+
+Index entries can be included anywhere in the document as a block element.
+They look like,
+
+.. code-block:: rest
+
+ Here is some discussion on the Strict Haskell extension.
+
+ .. index::
+ single: strict haskell
+ single: language extensions; StrictData
+
+This would produce two entries in the index referring to the "Strict Haskell"
+section. One would be a simple "strict haskell" heading whereas the other would
+be a "StrictData" subheading under "language extensions".
+
+Sadly it is not possible to use inline elements (e.g. monotype inlines) inside
+index headings.
+
+Citations
+---------
+
+Citations can be marked-up like this,
+
+.. code-block:: rest
+
+ See the original paper [Doe2008]_
+
+ .. [Doe2008] John Doe and Leslie Conway.
+ "This is the title of our paper" (2008)
+
+
+Admonitions
+-----------
+
+`Admonitions`_ are block elements used to draw the readers attention to a point.
+They should not be over-used for the sake of readability but they can be quite
+effective in separating and drawing attention to points of importance,
+
+.. code-block:: rest
+
+ .. important::
+
+ Be friendly and supportive to your fellow contributors.
+
+Would be rendered as,
+
+ .. important::
+
+ Be friendly and supportive to your fellow contributors.
+
+There are a number of admonitions types,
+
+.. hlist::
+
+ * attention
+ * caution
+ * danger
+ * error
+ * hint
+ * important
+ * note
+ * tip
+ * warning
+
+
+.. _Admonitions: http://docutils.sourceforge.net/docs/ref/rst/directives.html#admonitions
+
+Style Conventions
+-----------------
+
+When describing user commands and the like it is common to need to denote
+user-substitutable tokens. In this document we use the convention, ``⟨subst⟩``
+(note that these are angle brackets, ``U+27E8`` and ``U+27E9``, not
+less-than/greater-than signs).
+
+
+.. _references:
+
+GHC command-line options reference
+----------------------------------
+
+The tabular nature of GHC flags reference (``flags.rst``) makes it very
+difficult to maintain as ReST. For this reason it is generated by
+``utils/mkUserGuidePart``. Any command-line options added to GHC should
+be added to the appropriate file in ``utils/mkUserGuidePart/Options``.
+
+
+ReST reference materials
+------------------------
+
+* `Sphinx ReST Primer`_: A great place to start.
+* `Sphinx extensions`_: How Sphinx extends ReST
+* `ReST reference`_: When you really need the details.
+* `Directives reference`_
+
+.. _Sphinx ReST Primer: http://sphinx-doc.org/rest.html
+.. _ReST reference: http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html
+.. _Sphinx extensions: http://sphinx-doc.org/markup/index.html
+.. _Directives reference: http://docutils.sourceforge.net/docs/ref/rst/directives.html#code