-- | 'Texy' class, as proposed in <http://deltadiaz.blogspot.com.es/2013/04/hatex-36-proposal-texy-class.html>.
module Text.LaTeX.Base.Texy (
   -- * Texy class
   Texy (..)
 ) where

import Text.LaTeX.Base.Syntax
import Text.LaTeX.Base.Class
import Text.LaTeX.Base.Render
--
import Numeric
import Data.Fixed

-- | Class of types that can be pretty-printed as 'LaTeX' values.
class Texy t where
 texy :: LaTeXC l => t -> l

-- Basic instances

instance Texy LaTeX where
 texy :: forall l. LaTeXC l => LaTeX -> l
texy = forall l. LaTeXC l => LaTeX -> l
fromLaTeX

instance Texy Text where
 texy :: forall l. LaTeXC l => Text -> l
texy = forall l. LaTeXC l => LaTeX -> l
fromLaTeX forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> LaTeX
TeXRaw forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Text
protectText

instance Texy Int where
 texy :: forall l. LaTeXC l => Int -> l
texy = forall a l. (Render a, LaTeXC l) => a -> l
rendertex

instance Texy Integer where
 texy :: forall l. LaTeXC l => Integer -> l
texy = forall a l. (Render a, LaTeXC l) => a -> l
rendertex

instance Texy Float where
 texy :: forall l. LaTeXC l => Float -> l
texy Float
x = forall a. IsString a => String -> a
fromString forall a b. (a -> b) -> a -> b
$ forall a. RealFloat a => Maybe Int -> a -> ShowS
showFFloat forall a. Maybe a
Nothing Float
x String
""

instance Texy Double where
 texy :: forall l. LaTeXC l => Double -> l
texy Double
x = forall a. IsString a => String -> a
fromString forall a b. (a -> b) -> a -> b
$ forall a. RealFloat a => Maybe Int -> a -> ShowS
showFFloat forall a. Maybe a
Nothing Double
x String
""

instance Texy Char where
 texy :: forall l. LaTeXC l => Char -> l
texy Char
c = forall a. IsString a => String -> a
fromString [Char
'`' , Char
c , Char
'`']

instance HasResolution a => Texy (Fixed a) where
 texy :: forall l. LaTeXC l => Fixed a -> l
texy = forall a. IsString a => String -> a
fromString forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Show a => a -> String
show

instance Texy Bool where
 texy :: forall l. LaTeXC l => Bool -> l
texy = forall a. IsString a => String -> a
fromString forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Show a => a -> String
show

instance Texy Measure where
 texy :: forall l. LaTeXC l => Measure -> l
texy = forall a l. (Render a, LaTeXC l) => a -> l
rendertex