module Logging.Class.Message ( IsMessage(..) ) where import Control.Exception import Data.Aeson import qualified Data.ByteString.Char8 as B8 import qualified Data.ByteString.Lazy.Char8 as LB8 import Data.List (intercalate) import qualified Data.Text as T import qualified Data.Text.Lazy as LT {-| A class for datatypes that can be converted to log message. @since 0.8.0 -} class IsMessage a where toMessage :: a -> String toMessageList :: [a] -> String toMessageList [] = "" toMessageList xs = "[" ++ (intercalate "," $ map toMessage xs) ++ "]" instance IsMessage Char where toMessage = (: "") toMessageList = id instance IsMessage B8.ByteString where toMessage = B8.unpack instance IsMessage LB8.ByteString where toMessage = LB8.unpack instance IsMessage T.Text where toMessage = T.unpack instance IsMessage LT.Text where toMessage = LT.unpack instance IsMessage Value where toMessage = toMessage . encode instance IsMessage SomeException where toMessage = show instance IsMessage a => IsMessage [a] where {-# SPECIALIZE instance IsMessage [Char] #-} toMessage = toMessageList