module Text.Layout.Class where
import Data.List
import Data.Monoid

class (Monoid format) => IsFormat format where
  formatVerbatim :: String -> format
  fromShow :: (Show a) => a -> format
  fromShow = formatVerbatim . show

class (IsFormat format) => Layout a format where
  format :: a -> format
  formatList :: [a] -> format -- required to implement exception for String
  formatList as = formatVerbatim "[" `mappend`
                  (mconcat $ intersperse (formatVerbatim ", ") $ map format as) `mappend` 
                  formatVerbatim "]"