{-# LANGUAGE NoMonomorphismRestriction #-}

module Snap.Extras.TextUtils
    ( readT
    , showT
    , readBS
    , showBS
    , titleCase
    ) where

-------------------------------------------------------------------------------
import qualified Data.ByteString.Char8 as B
import           Data.ByteString.Char8 (ByteString)
import           Data.Char
import qualified Data.Text             as T
import           Data.Text             (Text)
import           Safe
-------------------------------------------------------------------------------


showT :: (Show a) => a -> Text
showT = T.pack . show


showBS :: (Show a) => a -> ByteString
showBS = B.pack . show


readT :: (Read a) => Text -> a
readT = readNote "Can't read value in readT" . T.unpack



readBS :: (Read a) => ByteString -> a
readBS = readNote "Can't read value in readBS" . B.unpack


titleCase :: Text -> Text
titleCase = T.unwords . map upFirst . T.words
  where
    upFirst str = T.cons (toUpper $ T.head str) (T.tail str)