module Marvin.Interpolate.Text where
import Data.Monoid
import Data.Text hiding (map)
import qualified Data.Text.Lazy as L
import Language.Haskell.TH
import Language.Haskell.TH.Quote
import Marvin.Interpolate
import Util
class ShowT a where
showT :: a -> Text
showListT :: [a] -> Text
showListT l = "[" <> intercalate ", " (map showT l) <> "]"
instance ShowT Text where
showT = id
instance ShowT L.Text where
showT = L.toStrict
instance ShowT Char where
showT = pack . show
showListT = pack
instance Show a => ShowT a where
showT = pack . show
isT :: String -> Q Exp
isT = return . interpolateInto (VarE 'showT)
iT :: QuasiQuoter
iT = mqq { quoteExp = isT }