| 
| Test | | Portability | portable |  | Stability | provisional |  | Maintainer | libraries@haskell.org |  
  |  
  | 
 | 
 | 
 | 
| Description | 
| This module illustrates & tests most of the features of Haddock.
 Testing references from the description: T, f, g, visible.
 | 
 | 
| Synopsis | 
 | 
| data  T a b  |  | = A Int (Maybe Float) |  | | B (T a b, T Int Float) |  
  |  
  |   |  | data  T2 a b |   |   |   |   |   |   |   |   |   |  | newtype  N1 a = N1 a |   |  | newtype  N2 a b = N2 {} |   |  | newtype  N3 a b = N3 {} |   |  | data  N4 a b |   |  | newtype  N5 a b = N5 {} |   |  | newtype  N6 a b = N6 {} |   |  | newtype  N7 a b = N7 {} |   |  | data  R   |  = C1 {| p :: Int |  | q :: forall a.  a -> a |  | r :: Int |  | s :: Int |   } |  | C2 {| t :: T1 -> T2 Int Int -> T3 Bool Bool -> T4 Float Float -> T5 () () |  | u :: Int |  | v :: Int |   } |  
  |  
  |   |  | data  R1  = C3 {} |   |  | p :: R -> Int |   |  | q :: R -> forall a.  a -> a |   |  | u :: R -> Int |   |  | class D a => C a  where |   |   |  | class  D a  where |   |   |  | class  E a  |   |  | class  F a  where |   |   |  | a :: C a => IO a |   |  | f :: C a => a -> Int |   |  | g :: Int -> IO CInt |   |  | hidden :: Int -> Int |   |  | module Visible |   |  | data  Ex a  |  | = forall b . C b => Ex1 b |  | | forall b . Ex2 b |  | | forall b . C a => Ex3 b |  | | Ex4 (forall a.  a -> a) |  
  |  
  |   |  | k :: T () () -> T2 Int Int -> (T3 Bool Bool -> T4 Float Float) -> T5 () () -> IO () |   |  | l :: (Int, Int, Float) -> Int |   |  | m :: R -> N1 () -> IO Int |   |  | o :: Float -> IO Float |   |  | f' :: Int |  
  | 
 | 
 | 
| Type declarations
 | 
 | 
| Data types
 | 
 | 
| data  T a b  | 
| This comment applies to the following declaration
 and it continues until the next non-comment line
 |  | Constructors |  | A Int (Maybe Float) | This comment describes the A constructor
 |  | B (T a b, T Int Float) | This comment describes the B constructor
 |  
  |  
  | 
 | 
| data  T2 a b  | 
| An abstract data declaration
 |  
  | 
 | 
| data  T3 a b  | 
| A data declaration with no documentation annotations on the constructors
 |  | Constructors |   |  
  | 
 | 
| data  T4 a b  | 
 | 
 | 
| data  T5 a b  | 
| Constructors |  | A3 a | documents A3
 |  | B3 b | documents B3
 |  
  |  
  | 
 | 
| data  T6   | 
| Testing alternative comment styles
 |  | Constructors |  | A4 | This is the doc for A4
 |  | B4 | This is the doc for B4
 |  | C4 | This is the doc for C4
 |  
  |  
  | 
 | 
| newtype  N1 a  | 
 | 
 | 
| newtype  N2 a b  | 
| A newtype with a fieldname
 |  | Constructors |   |  
  | 
 | 
| newtype  N3 a b  | 
| A newtype with a fieldname, documentation on the field
 |  | Constructors |  | N3 |  |  | n3 :: a b | this is the n3 field 
 |  
  |  
  |  
  | 
 | 
| data  N4 a b  | 
| An abstract newtype - we show this one as data rather than newtype because
 the difference isn't visible to the programmer for an abstract type.
 |  
  | 
 | 
| newtype  N5 a b  | 
| Constructors |  | N5 |  |  | n5 :: a b | no docs on the datatype or the constructor
 |  
  |  
  |  
  | 
 | 
| newtype  N6 a b  | 
| Constructors |  | N6 | docs on the constructor only
 |   |  
  |  
  | 
 | 
| newtype  N7 a b  | 
| docs on the newtype and the constructor
 |  | Constructors |   |  
  | 
 | 
| Records
 | 
 | 
| data  R   | 
| This is the documentation for the R record, which has four fields,
 p, q, r, and s.
 |  | Constructors |  | C1 | This is the C1 record constructor, with the following fields:
 |  | p :: Int | This comment applies to the p field
 |  | q :: forall a.  a -> a | This comment applies to the q field
 |  | r :: Int | This comment applies to both r and s
 |  | s :: Int | This comment applies to both r and s
 |  
  |  | C2 | This is the C2 record constructor, also with some fields:
 |  | t :: T1 -> T2 Int Int -> T3 Bool Bool -> T4 Float Float -> T5 () () |  |  | u :: Int |  |  | v :: Int |  |  
  |  
  |  
  | 
 | 
| data  R1   | 
| Testing different record commenting styles
 |  | Constructors |  | C3 | This is the C3 record constructor
 |  | s1 :: Int | The s1 record selector
 |  | s2 :: Int | The s2 record selector
 |  | s3 :: Int | The s3 record selector
 |  
  |  
  |  
  | 
 | 
| test that we can export record selectors on their own:
 | 
 | 
| p :: R -> Int | 
| This comment applies to the p field
 | 
 | 
| q :: R -> forall a.  a -> a | 
| This comment applies to the q field
 | 
 | 
| u :: R -> Int | 
 | 
| Class declarations
 | 
 | 
| class D a => C a  where | 
| This comment applies to the previous declaration (the C class)
 |   |  | Methods |  | a :: IO a |  | this is a description of the a method
 |   |  | b :: [a] |  | this is a description of the b method
 |  
  |  
  | 
 | 
| class  D a  where | 
| This is a class declaration with no separate docs for the methods
 |   |  | Methods |   |   |    Instances |   |  
  | 
 | 
| class  E a  | 
| This is a class declaration with no methods (or no methods exported)
 |  
  | 
 | 
| class  F a  where | 
 | 
 | 
| Test that we can export a class method on its own:
 | 
 | 
| a :: C a => IO a | 
| this is a description of the a method
 | 
 | 
| Function types
 | 
 | 
| f :: C a => a -> Int | 
In a comment string we can refer to identifiers in scope with
single quotes like this: T, and we can refer to modules by
using double quotes: Foo.  We can add emphasis like this.
 -  This is a bulleted list
 -  This is the next item (different kind of bullet)
 
 -  This is an ordered list
 
 2. This is the next item (different kind of bullet)
 
     This is a block of code, which can include other markup: R
     formatting
               is
                 significant
 this is another block of code
 We can also include URLs in documentation: http://www.haskell.org/.
  | 
 | 
| g :: Int -> IO CInt | 
| we can export foreign declarations too
 | 
 | 
| Auxiliary stuff
 | 
 | 
This is some documentation that is attached to a name ($aux1)
 rather than a source declaration.  The documentation may be
 referred to in the export list using its name.
  code block in named doc  | 
 | 
| This is some documentation that is attached to a name ($aux2)
 | 
 | 
 code block on its own in named doc  | 
 | 
 code block on its own in named doc (after newline)  | 
 | 
a nested, named doc comment
 with a paragraph,
  and a code block  | 
 | 
test
test1
  test2
  test3
  | 
 | 
test1
test2
  | 
 | 
test3
test4
  | 
 | 
test1
test2
 test3
test4
  | 
 | 
test3
test4
 
test1
test2
  | 
 | 
aux11:
 test3
test4
 
test1
test2
  | 
 | 
 foo
  bar
  | 
 | 
This is some inline documentation in the export list
  a code block using bird-tracks
 each line must begin with > (which isn't significant unless it
 is at the beginning of the line).
  | 
 | 
| A hidden module
 | 
 | 
| hidden :: Int -> Int | 
 | 
| A visible module
 | 
 | 
| module Visible | 
 | 
| nested-style doc comments 
 | 
 | 
| Existential / Universal types
 | 
 | 
| data  Ex a  | 
| A data-type using existential/universal types
 |  | Constructors |  | forall b . C b => Ex1 b |  |  | forall b . Ex2 b |  |  | forall b . C a => Ex3 b |  |  | Ex4 (forall a.  a -> a) |  |  
  |  
  | 
 | 
| Type signatures with argument docs
 | 
 | 
| k | 
| :: T () () | This argument has type T
 |  | -> T2 Int Int | This argument has type 'T2 Int Int'
 |  | -> T3 Bool Bool -> T4 Float Float | This argument has type T3 Bool Bool -> T4 Float Float
 |  | -> T5 () () | This argument has a very long description that should
 hopefully cause some wrapping to happen when it is finally
 rendered by Haddock in the generated HTML page.
 |  | -> IO () | This is the result type
 |  | This is a function with documentation for each argument
 |  
  | 
 | 
| l | 
| :: (Int, Int, Float) | takes a triple
 |  | -> Int | returns an Int
 |  
  | 
 | 
| m | 
| :: R |  |  | -> N1 () | one of the arguments
 |  | -> IO Int | and the return value
 |  | This function has some arg docs 
 |  
  | 
 | 
| o | 
| :: Float | The input float
 |  | -> IO Float | The output float
 |  | A foreign import with argument docs
 |  
  | 
 | 
| A section
 | 
 | 
| A subsection 
 | 
 | 
 a literal line
 $ a non literal line $
  | 
 | 
| f' :: Int | 
| a function with a prime can be referred to as f' 
 but f' doesn't get link'd 'f\''
 | 
 | 
| Produced by Haddock version 2.3.0 |