{-# LANGUAGE TemplateHaskell #-}
module Network.Damn.Tablumps.TH where
import Data.Attoparsec.ByteString (string)
import qualified Data.Attoparsec.ByteString.Char8 as C
import Data.ByteString (ByteString)
import Language.Haskell.TH
import Prelude.Compat
ary :: Int -> String -> Name -> ExpQ
ary n s con =
[|do _ <- string s
_ <- C.char '\t'
Right <$> $(mkApps)|]
where
mkApps =
foldl (\a b -> [|$(a) <*> $(b)|]) [|pure $(conE con)|] $
replicate n [|C.takeWhile (/= '\t') <* C.char '\t'|]
data Lump
= A ByteString
ByteString
| C_A
| Abbr ByteString
| C_Abbr
| Acro ByteString
| C_Acro
| Avatar ByteString
ByteString
| B
| C_B
| Bcode
| C_Bcode
| Br
| Code
| C_Code
| Dev ByteString
ByteString
| Embed ByteString
ByteString
ByteString
| C_Embed
| Emote ByteString
ByteString
ByteString
ByteString
ByteString
| I
| C_I
| Iframe ByteString
ByteString
ByteString
| C_Iframe
| Img ByteString
ByteString
ByteString
| Li
| C_Li
| Link ByteString
(Maybe ByteString)
| Ol
| C_Ol
| P
| C_P
| S
| C_S
| Sub
| C_Sub
| Sup
| C_Sup
| Thumb ByteString
ByteString
ByteString
ByteString
ByteString
ByteString
| U
| C_U
| Ul
| C_Ul
deriving (Eq, Show)
{-# ANN module ("HLint: ignore Use camelCase" :: String) #-}