úÎBñAc   Fixity of operators. Right associative operator. Left associative operator. No fixity information. 6The precedence of operators and function application. = Operators usually have a precedence in the range of 0 to 9. 0 Function application always has precedence 10. >To render you need to supply the precedence and fixity of the enclosing context. (For rendering  top-level values see  .) 8For more documentation about precedence and fixity see:  4http://haskell.org/onlinereport/decls.html#sect4.4.2 "The reason the renderer returns a  , instead of a   for example, Kis that the rendering of numeric expression involves lots of left-factored appends i.e.: ((a ++ b) ++ c) ++ d. A   has a O(1) append operation while a  ' just has a O(n) append. So choosing a   is more  efficient. Repr a is a value of type a" paired with a way to render that Dvalue to a string which will contain a representation of the value.  Note that Repr a9 is overloaded for all the numeric classes provided that aE has instances for the respected classes. This allows you to write a numeric expression of type Repr a. For example:   -*Repr> let r = 1.5 + 2 + (3 + (-4) * (5 - pi / sqrt 6)) :: Repr Double You can extract the value of r:   *Repr> value r 17.281195923884734 And you can than render r to its textual representation:  *Repr> render r "efromRational (3 % 2) + fromInteger 2 + (fromInteger 3 + negate (fromInteger 4) * (fromInteger 5 - pi / sqrt (fromInteger 6)))" Extract the value of the Repr. Extrac the renderer of the Repr. $Precedence of function application.  Render a  top-level value to a   . Note that:   render r =  $  r 0  x <?> s0 annotates the rendering with the given string. The rendering wil look like: "({- s -} ...)" where ... is the rendering of x. @This combinator is handy when you want to render the ouput of a @function and you want to see how the parameters of the function ?contribute to the result. For example, suppose you defined the following function f:   &f p0 p1 p2 = p0 ^ 2 + sqrt p1 * ([p2..] !! 10) You can then apply f4 to some parameters annotated with some descriptive ;strings (the name of the parameter is usally a good idea):   f (1 <?> "p0") (2 <?> "p1") (3 <?> "p2") #The rendering will then look like:  "({- p0 -} fromInteger 1) * ({- p0 -} fromInteger 1) + sqrt ({- p1 -} (fromInteger 2)) * enumFrom ({- p2 -} (fromInteger 3)) !! 10"  Construct a  from a given value and string. Given a function f and the name of that function fStr return a function that takes a able argument x and returns a   that has f x as value and fStr prepended to the showed x as  renderer .  For example:  !*Repr> let r = from fromRational  fromRational 13.4 *Repr> value r 13.4 -- fromRational (67 % 5) *Repr> render r fromRational (67 % 5)  Same as @ with the difference that the given function has two arguments. "Return the converted value of the . "Return the combined values of the s. Given a function f and the name of that function fStr return a function that takes a Repr and returns a Repr that has as value f# applied to the value of the given Repr and as renderer fStr 'prepended to the renderer of the given Repr.  For example:  *Repr> let r = app sqrt sqrt 4 *Repr> value r 2.0 -- sqrt (fromInteger 4) *Repr> render r sqrt (fromInteger 4)  Like ! but works for binary functions.  For example:  *Repr> let r = app2 quot quot 4 2 *Repr> value r *2 -- quot (fromInteger 4) (fromInteger 2) *Repr> render r $quot (fromInteger 4) (fromInteger 2)  2Given the fixity, precedence, the actual operator op and the name of the  operator opStr" return a function that takes two Reprs: rx and ry and  returns a Repr that has as value  value rx op value ry and as renderer opStr in between the rendering of rx and ry.  For example:  *Repr> let r = infx L 6 (+) + 2 3 *Repr> value r #5 -- fromInteger 2 + fromInteger 3 *Repr> render r fromInteger 2 + fromInteger 3          !"#$%&repr-0.2ReprFixityRLNon PrecedenceRenderervaluerendererrenderdstring-0.3.0.2 Data.DStringDStringbaseGHC.BaseStringS funAppPrecto-string-class-0.1.2Data.String.ToStringtoStringenumconstantfromGHC.ShowShowfrom2toto2appapp2infxbinapplyargstup