{-# LANGUAGE FlexibleInstances #-}

-- | Display human-readable values to the user.

module Display where

import qualified Data.ByteString as S
import qualified Data.ByteString.Builder as B
import qualified Data.ByteString.Lazy as L
import           Data.Int (Int64, Int32, Int16, Int8)
import           Data.Word (Word64, Word32, Word16, Word8)

class Display a where
  display :: a -> B.Builder
  -- ^ Display a value in a readable format.

instance Display S.ByteString where
  display = B.byteString

instance Display L.ByteString where
  display = B.lazyByteString

instance Display [Char] where
  display = B.stringUtf8

instance Display Char where
  display = B.charUtf8

instance Display Int8 where
  display = B.int8Dec

instance Display Int16 where
  display = B.int16Dec

instance Display Int32 where
  display = B.int32Dec

instance Display Int64 where
  display = B.int64Dec

instance Display Int where
  display = B.intDec

instance Display Integer where
  display = B.integerDec

instance Display Word8 where
  display = B.word8Dec

instance Display Word16 where
  display = B.word16Dec

instance Display Word32 where
  display = B.word32Dec

instance Display Word64 where
  display = B.word64Dec

instance Display Word where
  display = B.wordDec

instance Display Float where
  display = B.floatDec

instance Display Double where
  display = B.doubleDec