{-# LANGUAGE FlexibleInstances #-} module Fmt ( (%<), (>%), FromBuilder(..), ) where import Data.Text import qualified Data.Text.Lazy as TL import Data.Text.Lazy.Builder hiding (fromString) import Data.Monoid import Data.Text.Buildable class FromBuilder a where fromBuilder :: Builder -> a instance FromBuilder Builder where fromBuilder = id {-# INLINE fromBuilder #-} instance FromBuilder String where fromBuilder = TL.unpack . toLazyText {-# INLINE fromBuilder #-} instance FromBuilder Text where fromBuilder = TL.toStrict . toLazyText {-# INLINE fromBuilder #-} instance FromBuilder TL.Text where fromBuilder = toLazyText {-# INLINE fromBuilder #-} (%<) :: (Buildable a, FromBuilder b) => Builder -> a -> b (%<) x a = fromBuilder (x <> build a) (>%) :: (FromBuilder b) => Builder -> Builder -> b (>%) x a = fromBuilder (x <> a)