alms-0.6.0: src/Message/AST.hs
{-# LANGUAGE GADTs #-}
module Message.AST (
Message(..),
H, V, StackStyle(..),
wordsMsg, quoteMsg, pprMsg, showMsg, emptyMsg,
) where
import Syntax.PprClass
-- | Simple message markup
data Message d where
Words :: String -> Message d
Flow :: [Message H] -> Message d
Exact :: String -> Message d
Surround :: String -> String -> Message d -> Message d
Quote :: Message d -> Message d
Stack :: StackStyle -> [Message V] -> Message V
Table :: [(String, Message V)] -> Message V
Indent :: Message V -> Message V
Printable :: Ppr a => Int -> a -> Message d
Showable :: Show a => a -> Message d
AntiMsg :: String -> String -> Message d
-- | 'H' and 'V' need constructors or pattern matching on
-- @'Message' 'H'@ gives non-exhaustiveness warnings for unreachable
-- cases.
data H = H
data V = V
-- | Don't warn about the fact that 'H' and 'V' aren't used.
_don'tWarnAbout :: (H, V)
_don'tWarnAbout = (H, V)
-- | Types of lists
data StackStyle
= Numbered
| Bulleted
| Separated
| Broken
--
-- Public AST builders
--
wordsMsg :: String -> Message d
wordsMsg = Words
quoteMsg :: Message d -> Message d
quoteMsg = Quote
pprMsg :: Ppr a => a -> Message d
pprMsg = Printable (-1)
showMsg :: Show a => a -> Message d
showMsg = Showable
emptyMsg :: Message d
emptyMsg = Words ""