formattable-0.1.1: src/Formattable.hs
{-# LANGUAGE CPP #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeFamilies #-}
-----------------------------------------------------------------------------
-- |
-- Module : Formattable
-- Copyright : Soostone Inc
-- License : BSD3
--
-- Maintainer : libs@soostone.com
-- Stability : experimental
--
-- Practical formatting interface for output values intended for human
-- consumption. We try to support several variants often required by
-- real-world applications.
----------------------------------------------------------------------------
module Formattable
( module Formattable
, module Formattable.NumFormat
) where
-------------------------------------------------------------------------------
import Data.Int
import Data.Text (Text)
import qualified Data.Text as T
import Data.Word
#if MIN_VERSION_time(1,5,0)
import Data.Time
#else
import Data.Time
import System.Locale (TimeLocale, defaultTimeLocale)
#endif
-------------------------------------------------------------------------------
import Formattable.NumFormat
-------------------------------------------------------------------------------
------------------------------------------------------------------------------
-- | Provides a uniform interface for formatting all kinds of types.
class Format a where
-- | A format settings type specific to the object type.
type TheFormat a
-- | Render into text using format settings
runFormat :: TheFormat a -> a -> Text
------------------------------------------------------------------------------
-- | TheFormat = NumFormat
instance Format Integer where
type TheFormat Integer = NumFormat
runFormat set a = formatIntegral set a
------------------------------------------------------------------------------
-- | TheFormat = NumFormat
instance Format Int where
type TheFormat Int = NumFormat
runFormat set a = formatIntegral set a
------------------------------------------------------------------------------
-- | TheFormat = NumFormat
instance Format Int8 where
type TheFormat Int8 = NumFormat
runFormat set a = formatIntegral set a
------------------------------------------------------------------------------
-- | TheFormat = NumFormat
instance Format Int16 where
type TheFormat Int16 = NumFormat
runFormat set a = formatIntegral set a
------------------------------------------------------------------------------
-- | TheFormat = NumFormat
instance Format Int32 where
type TheFormat Int32 = NumFormat
runFormat set a = formatIntegral set a
------------------------------------------------------------------------------
-- | TheFormat = NumFormat
instance Format Int64 where
type TheFormat Int64 = NumFormat
runFormat set a = formatIntegral set a
------------------------------------------------------------------------------
-- | TheFormat = NumFormat
instance Format Word where
type TheFormat Word = NumFormat
runFormat set a = formatIntegral set a
------------------------------------------------------------------------------
-- | TheFormat = NumFormat
instance Format Word8 where
type TheFormat Word8 = NumFormat
runFormat set a = formatIntegral set a
------------------------------------------------------------------------------
-- | TheFormat = NumFormat
instance Format Word16 where
type TheFormat Word16 = NumFormat
runFormat set a = formatIntegral set a
------------------------------------------------------------------------------
-- | TheFormat = NumFormat
instance Format Word32 where
type TheFormat Word32 = NumFormat
runFormat set a = formatIntegral set a
------------------------------------------------------------------------------
-- | TheFormat = NumFormat
instance Format Word64 where
type TheFormat Word64 = NumFormat
runFormat set a = formatIntegral set a
------------------------------------------------------------------------------
-- | TheFormat = NumFormat
instance Format Double where
type TheFormat Double = NumFormat
runFormat set a = formatNum set a
------------------------------------------------------------------------------
-- | TheFormat = NumFormat
instance Format Float where
type TheFormat Float = NumFormat
runFormat set a = formatNum set a
------------------------------------------------------------------------------
-- | TheFormat = String
instance Format Day where
type TheFormat Day = String
runFormat set a = T.pack $ formatTime defaultTimeLocale set a
------------------------------------------------------------------------------
-- | TheFormat = String
instance Format UTCTime where
type TheFormat UTCTime = String
runFormat set a = T.pack $ formatTime defaultTimeLocale set a
------------------------------------------------------------------------------
-- | TheFormat = ()
instance Format Text where
type TheFormat Text = ()
runFormat _ a = a
------------------------------------------------------------------------------
-- | TheFormat = ()
instance Format Bool where
type TheFormat Bool = ()
runFormat _ a = T.pack (show a)