{-# LANGUAGE DataKinds, GADTs, KindSignatures, StandaloneDeriving #-} module Text.GentleMark.Term ( Type(..), Term(..), tagName, tagOptions, tagBody ) where data Type = Toplevel | Textual data Term :: Type -> * where Text :: String -> Term Textual Bold :: [Term Textual] -> Term Textual Italic :: [Term Textual] -> Term Textual Underlined :: [Term Textual] -> Term Textual Striked :: [Term Textual] -> Term Textual Spoiler :: [Term Textual] -> Term Textual Latex :: String -> Term Textual Monospace :: String -> Term Textual Reference :: String -> Term Textual Hyperlink :: String -> Term Textual Tag :: String -> [String] -> String -> Term Textual Quote :: String -> Term Toplevel UList :: [[Term Textual]] -> Term Toplevel OList :: [(Integer, [Term Textual])] -> Term Toplevel Paragraph :: [Term Textual] -> Term Toplevel deriving instance Eq (Term t) deriving instance Ord (Term t) deriving instance Show (Term t) tagName :: Term Textual -> String tagName (Tag name _ _) = name tagName _ = error "Not a Tag-Term!" tagOptions :: Term Textual -> [String] tagOptions (Tag _ options _) = options tagOptions _ = error "Not a Tag-Term!" tagBody :: Term Textual -> String tagBody (Tag _ _ body) = body tagBody _ = error "Not a Tag-Term!"