summaryrefslogtreecommitdiff
path: root/src/Parser
diff options
context:
space:
mode:
Diffstat (limited to 'src/Parser')
-rw-r--r--src/Parser/Core.hs10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/Parser/Core.hs b/src/Parser/Core.hs
index b932523..341d9ca 100644
--- a/src/Parser/Core.hs
+++ b/src/Parser/Core.hs
@@ -2,6 +2,7 @@ module Parser.Core where
import Control.Monad
import Control.Monad.State
+import Control.Monad.Writer
import Data.Text (Text)
import qualified Data.Text.Lazy as TL
@@ -15,10 +16,13 @@ import qualified Text.Megaparsec.Char.Lexer as L
import Network ()
import Test
-type TestParser = ParsecT Void TestStream (State TestParserState)
+type TestParser = ParsecT Void TestStream (WriterT [ Toplevel ] (State TestParserState))
type TestStream = TL.Text
+data Toplevel
+ = ToplevelTest Test
+
data TestParserState = TestParserState
{ testVars :: [(VarName, SomeExprType)]
, testContext :: SomeExpr
@@ -65,8 +69,8 @@ localState inner = do
put s
return x
-toplevel :: TestParser a -> TestParser a
-toplevel = L.nonIndented scn
+toplevel :: (a -> Toplevel) -> TestParser a -> TestParser ()
+toplevel f = tell . (: []) . f <=< L.nonIndented scn
block :: (a -> [b] -> TestParser c) -> TestParser a -> TestParser b -> TestParser c
block merge header item = L.indentBlock scn $ do