It is Really Useful in practice.
2. There is a paragraph-fill combinator, fsep, that's much like sep,
- only it keeps fitting things on one line until itc can't fit any more.
+ only it keeps fitting things on one line until it can't fit any more.
3. Some random useful extra combinators are provided.
<+> puts its arguments beside each other with a space between them,
\begin{code}
+{-# OPTIONS -w #-}
+-- The above warning supression flag is a temporary kludge.
+-- While working on this module you are encouraged to remove it and fix
+-- any warnings in the module. See
+-- http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings
+-- for details
+
module Pretty (
Doc, -- Abstract
Mode(..), TextDetails(..),
integer n = text (show n)
float n = text (show n)
double n = text (show n)
-rational n = text (show (fromRat n))
+rational n = text (show (fromRat n :: Double))
--rational n = text (show (fromRationalX n)) -- _showRational 30 n)
quotes p = char '`' <> p <> char '\''
other -> lay1 k s sl p
- lay1 k s sl p = Str (indent k) `txt` (s `txt` lay2 (k PLUS sl) p)
+ lay1 k s sl p = indent k (s `txt` lay2 (k PLUS sl) p)
lay2 k (NilAbove p) = nl_text `txt` lay k p
lay2 k (TextBeside s sl p) = s `txt` (lay2 (k PLUS sl) p)
lay2 k (Nest _ p) = lay2 k p
lay2 k Empty = end
+
+ -- optimise long indentations using LitString chunks of 8 spaces
+ indent n r | n GREQ ILIT(8) = LStr " "# 8# `txt`
+ indent (n MINUS ILIT(8)) r
+ | otherwise = Str (spaces n) `txt` r
in
lay ILIT(0) doc
}}
cant_fail = error "easy_display: NoDoc"
-indent n | n GREQ ILIT(8) = '\t' : indent (n MINUS ILIT(8))
- | otherwise = spaces n
-
multi_ch n ch | n LTEQ ILIT(0) = ""
| otherwise = ch : multi_ch (n MINUS ILIT(1)) ch
spaces n | n LTEQ ILIT(0) = ""
| otherwise = ' ' : spaces (n MINUS ILIT(1))
+
\end{code}
\begin{code}