interpol-0.2.2: Text/Interpol.hs
{-# LANGUAGE FlexibleInstances, UndecidableInstances, OverlappingInstances #-}
-- | Support module for the @interpol@ preprocessor.
module Text.Interpol (
(^-^)
, interpol
, ToString
) where
infixl 3 ^-^
-- | Append a showable value to a 'String' in a smart way. In
-- particular, do /not/ 'show' a 'String', as this encloses it in
-- \"quotes\". So, depending on the type of the second parameter,
-- '^-^' is equivalent to one of the following
--
-- @
-- x ^-^ y = x ++ y
-- x ^-^ y = x ++ show y
-- @
--
-- For all intents and purposes, the 'ToString' type-class is a
-- wrapper around 'Show', so any type that has an instance for 'Show'
-- will also have an instance for 'Interpol'.
(^-^), interpol :: (ToString a, ToString b) => a -> b -> String
(^-^) = interpol
interpol a b = toString a ++ toString b
class ToString a where
toString :: a -> String
instance ToString [Char] where
toString = id
instance ToString Char where
toString c = '\'' : c : "'"
instance Show a => ToString a where
toString = show