sasha-0.2: tests/Sasha/Example/SaTTH.hs
{-# LANGUAGE TemplateHaskell #-}
{-# OPTIONS_GHC -ddump-splices #-}
module Sasha.Example.SaTTH (satthToken, satthUtf8) where
import Algebra.Lattice ((/\))
import qualified Data.ByteString as BS
import Sasha.Example.Token
import Sasha.TTH
mkToken :: tag -> BS.ByteString -> BS.ByteString -> Maybe (tag, BS.ByteString, BS.ByteString)
mkToken tk pfx sfx = Just (tk, pfx, sfx)
satthToken :: BS.ByteString -> Maybe (Tk, BS.ByteString, BS.ByteString)
satthToken = $$(satth
[|| Nothing ||]
-- Lexer specification of JSON(like) tokens.
[ plus (unions (map utf8Char (" \t\r\n"))) := \ pfx sfx -> [|| mkToken TkSpace $$pfx $$sfx ||]
, "{" := \ pfx sfx -> [|| mkToken TkBraceOpen $$pfx $$sfx ||]
, "}" := \ pfx sfx -> [|| mkToken TkBraceClose $$pfx $$sfx ||]
, "[" := \ pfx sfx -> [|| mkToken TkBracketOpen $$pfx $$sfx ||]
, "]" := \ pfx sfx -> [|| mkToken TkBracketClose $$pfx $$sfx ||]
, "," := \ pfx sfx -> [|| mkToken TkComma $$pfx $$sfx ||]
, ":" := \ pfx sfx -> [|| mkToken TkColon $$pfx $$sfx ||]
, appends [ "\"", star (anyChar /\ complement (utf8Char '"')), "\"" ] := \ pfx sfx -> [|| mkToken TkString $$pfx $$sfx ||]
, plus digit := \ pfx sfx -> [|| mkToken TkNumber $$pfx $$sfx ||]
, "true" := \ pfx sfx -> [|| mkToken TkTrue $$pfx $$sfx ||]
, "false" := \ pfx sfx -> [|| mkToken TkFalse $$pfx $$sfx ||]
, "null" := \ pfx sfx -> [|| mkToken TkNull $$pfx $$sfx ||]
])
satthUtf8 :: BS.ByteString -> Maybe BS.ByteString
satthUtf8 = $$(satth [|| Nothing ||] [ anyUtf8Char := \_ sfx -> [|| Just $$sfx ||] ] )