module Data.Text.Buildable
(
Buildable(..)
) where
import Data.Int (Int8, Int16, Int32, Int64)
import Data.Ratio (Ratio, denominator, numerator)
import Data.Text.Format.Functions ((<>))
import Data.Text.Format.Int (integral)
import Data.Text.Format.RealFloat (showFloat)
import Data.Text.Format.RealFloat.Fast (fshowFloat)
import Data.Text.Format.Types (Fast(..), Shown(..))
import Data.Text.Lazy.Builder
import Data.Time.Calendar (Day, showGregorian)
import Data.Time.Clock (DiffTime, NominalDiffTime, UTCTime, UniversalTime)
import Data.Time.Clock (getModJulianDate)
import Data.Time.LocalTime (LocalTime, TimeOfDay, TimeZone, ZonedTime)
import Data.Word (Word, Word8, Word16, Word32, Word64)
import qualified Data.Text as ST
import qualified Data.Text.Lazy as LT
class Buildable p where
build :: p -> Builder
instance Buildable Builder where
build = id
instance Buildable LT.Text where
build = fromLazyText
instance Buildable ST.Text where
build = fromText
instance Buildable Char where
build = singleton
instance Buildable [Char] where
build = fromString
instance Buildable Int8 where
build = integral
instance Buildable Int16 where
build = integral
instance Buildable Int32 where
build = integral
instance Buildable Int where
build = integral
instance Buildable Int64 where
build = integral
instance Buildable Integer where
build = integral
instance Buildable Word8 where
build = integral
instance Buildable Word16 where
build = integral
instance Buildable Word32 where
build = integral
instance Buildable Word where
build = integral
instance Buildable Word64 where
build = integral
instance (Integral a, Buildable a) => Buildable (Ratio a) where
build a = build (numerator a) <> singleton '/' <> build (denominator a)
instance Buildable Float where
build = showFloat
instance Buildable Double where
build = showFloat
instance Buildable (Fast Float) where
build = fshowFloat . fromFast
instance Buildable (Fast Double) where
build = fshowFloat . fromFast
instance Buildable DiffTime where
build = build . Shown
instance Buildable NominalDiffTime where
build = build . Shown
instance Buildable UTCTime where
build = build . Shown
instance Buildable UniversalTime where
build = build . Shown . getModJulianDate
instance Buildable Day where
build = fromString . showGregorian
instance (Show a) => Buildable (Shown a) where
build = fromString . show . shown
instance Buildable TimeOfDay where
build = build . Shown
instance Buildable TimeZone where
build = build . Shown
instance Buildable LocalTime where
build = build . Shown
instance Buildable ZonedTime where
build = build . Shown