From ed2eec22814ab80b177b2900245914b56dc8bd9a Mon Sep 17 00:00:00 2001 From: patritzenfeld Date: Fri, 11 Oct 2024 10:50:16 +0200 Subject: [PATCH] simplify parse and check interpreter run --- flex-task/src/FlexTask/Interpreter.hs | 35 ++++++++++++++------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/flex-task/src/FlexTask/Interpreter.hs b/flex-task/src/FlexTask/Interpreter.hs index 235900a..02e7ab6 100644 --- a/flex-task/src/FlexTask/Interpreter.hs +++ b/flex-task/src/FlexTask/Interpreter.hs @@ -195,34 +195,35 @@ checkSolution taskData globalCode parseCode checkCode submission picPath = do runWithPackageDB (loadModules filePaths >> runCheck) >>= sequence where runCheck = do - setImportsQ - [ ("Control.OutputCapable.Blocks.Type", Just "OC") - , ("Data.Either", Just "E") - , ("Text.Parsec", Just "P") - , ("Text.Parsec.Error", Just "PE") - , ("Control.OutputCapable.Blocks.Generic.Type", Nothing) - , ("Data.Ratio", Nothing) - ] + setImportsQ $ + ("Control.OutputCapable.Blocks.Type", Just "OBT"): + map (,Nothing) + [ "Data.Either" + , "Text.Parsec" + , "Text.Parsec.Error" + , "Control.OutputCapable.Blocks.Generic.Type" + , "Data.Ratio" + ] setTopLevelModules ["Check", "Parse", "Global"] interpret checkSyntaxAbort infer checkSyntaxAbort = [i| let - showWithFieldNumber :: String -> P.ParseError -> String + showWithFieldNumber :: String -> ParseError -> String showWithFieldNumber input e = "Error in input field " ++ fieldNum ++ ":" ++ errors where fieldNum = show $ length (filter (=='\\a') consumed) `div` 2 + 1 - errors = PE.showErrorMessages + errors = showErrorMessages "or" "unknown parse error" "expecting" "unexpected" "end of input" - $ PE.errorMessages e - consumed = take (P.sourceColumn $ P.errorPos e) input + $ errorMessages e + consumed = take (sourceColumn $ errorPos e) input - isAbort (OC.Refuse _) = True - isAbort (OC.Assertion False _) = True + isAbort (Refuse _) = True + isAbort (Assertion False _) = True isAbort _ = False in do @@ -232,13 +233,13 @@ checkSolution taskData globalCode parseCode checkCode submission picPath = do (refuse . code . showWithFieldNumber #{input}) (checkSyntax #{tData} #{path}) parsed - synRes <- OC.getOutputSequence syn + synRes <- OBT.getOutputSequence syn if any isAbort synRes then pure (synRes,Nothing) else do - let sem = checkSemantics #{tData} #{path} (E.fromRight undefined parsed) - semRes <- OC.getOutputSequenceWithRating sem + let sem = checkSemantics #{tData} #{path} (fromRight undefined parsed) + semRes <- OBT.getOutputSequenceWithRating sem pure (synRes, Just semRes) |]