From 571d07488275a3f9ba649c03d79fd93568101d2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Janis=20Voigtl=C3=A4nder?= Date: Thu, 11 Apr 2024 17:00:50 +0200 Subject: [PATCH 1/4] make Delayed type abstract --- src/Formula/Parsing/Delayed.hs | 4 ++-- src/LogicTasks/Syntax/TreeToFormula.hs | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Formula/Parsing/Delayed.hs b/src/Formula/Parsing/Delayed.hs index 9992c112..a91068e6 100644 --- a/src/Formula/Parsing/Delayed.hs +++ b/src/Formula/Parsing/Delayed.hs @@ -1,6 +1,6 @@ {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE DeriveGeneric #-} -module Formula.Parsing.Delayed where +module Formula.Parsing.Delayed (Delayed, delayed, unDelayed, parseDelayed, withDelayed) where import Text.Parsec @@ -14,7 +14,7 @@ import LogicTasks.Helpers (reject) import Data.Typeable (Typeable) import GHC.Generics (Generic) -newtype Delayed a = Delayed String deriving (Eq, Show, Typeable, Generic) +newtype Delayed a = Delayed {unDelayed :: String} deriving (Eq, Typeable, Generic) delayed :: String -> Delayed a delayed = Delayed diff --git a/src/LogicTasks/Syntax/TreeToFormula.hs b/src/LogicTasks/Syntax/TreeToFormula.hs index 16bc165f..3f25960c 100644 --- a/src/LogicTasks/Syntax/TreeToFormula.hs +++ b/src/LogicTasks/Syntax/TreeToFormula.hs @@ -27,7 +27,7 @@ import Formula.Util (isSemanticEqual) import Control.Monad (when) import Trees.Print (transferToPicture) import Tasks.TreeToFormula.Config (TreeToFormulaInst(..)) -import Formula.Parsing.Delayed (Delayed (..), withDelayed) +import Formula.Parsing.Delayed (Delayed, unDelayed, withDelayed, parseDelayed) import Formula.Parsing (Parse(..)) import Trees.Parsing() import Text.Parsec (parse) @@ -78,10 +78,10 @@ start :: TreeFormulaAnswer start = TreeFormulaAnswer Nothing partialGrade :: OutputMonad m => TreeToFormulaInst -> Delayed TreeFormulaAnswer -> LangM m -partialGrade inst (Delayed ans) = - case parse (fully $ parser @TreeFormulaAnswer) "(delayed input)" ans of +partialGrade inst ans = + case parseDelayed ans (fully $ parser @TreeFormulaAnswer) of Right f -> partialGrade' inst f - Left err -> case parse (fully tokenSequence) "" ans of + Left err -> case parse (fully tokenSequence) "" (unDelayed ans) of Left _ -> reject $ do german $ show err english $ show err From 81e49a98d358f3b3eb997760ff924fa007b0bb50 Mon Sep 17 00:00:00 2001 From: Oliver Westphal Date: Fri, 12 Apr 2024 11:08:39 +0200 Subject: [PATCH 2/4] refine Delayed type --- src/Formula/Parsing/Delayed.hs | 16 +++++++++++----- src/LogicTasks/Syntax/TreeToFormula.hs | 7 +++---- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/Formula/Parsing/Delayed.hs b/src/Formula/Parsing/Delayed.hs index a91068e6..ac766561 100644 --- a/src/Formula/Parsing/Delayed.hs +++ b/src/Formula/Parsing/Delayed.hs @@ -1,6 +1,6 @@ {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE DeriveGeneric #-} -module Formula.Parsing.Delayed (Delayed, delayed, unDelayed, parseDelayed, withDelayed) where +module Formula.Parsing.Delayed (Delayed, delayed, parseDelayed, parseDelayedRaw, withDelayed) where import Text.Parsec @@ -14,17 +14,23 @@ import LogicTasks.Helpers (reject) import Data.Typeable (Typeable) import GHC.Generics (Generic) -newtype Delayed a = Delayed {unDelayed :: String} deriving (Eq, Typeable, Generic) +newtype Delayed a = Delayed String deriving (Eq, Typeable, Generic) + +instance Show (Delayed a) where + show (Delayed str) = str delayed :: String -> Delayed a delayed = Delayed -parseDelayed :: Delayed a -> Parser a -> Either ParseError a -parseDelayed (Delayed str) p = parse p "(delayed input)" str +parseDelayed :: Parser a -> Delayed a -> Either ParseError a +parseDelayed = parseDelayedRaw + +parseDelayedRaw :: Parser b -> Delayed a -> Either ParseError b +parseDelayedRaw p (Delayed str) = parse p "(answer string)" str withDelayed :: OutputMonad m => (a -> LangM m) -> Parser a -> Delayed a -> LangM m withDelayed grade p d = - case parseDelayed d (fully p) of + case parseDelayed (fully p) d of Left err -> reject $ do english $ show err german $ show err diff --git a/src/LogicTasks/Syntax/TreeToFormula.hs b/src/LogicTasks/Syntax/TreeToFormula.hs index 7d13c687..b79c5c6f 100644 --- a/src/LogicTasks/Syntax/TreeToFormula.hs +++ b/src/LogicTasks/Syntax/TreeToFormula.hs @@ -27,10 +27,9 @@ import Formula.Util (isSemanticEqual) import Control.Monad (when) import Trees.Print (transferToPicture) import Tasks.TreeToFormula.Config (TreeToFormulaInst(..)) -import Formula.Parsing.Delayed (Delayed, unDelayed, withDelayed, parseDelayed) +import Formula.Parsing.Delayed (Delayed, withDelayed, parseDelayed, parseDelayedRaw) import Formula.Parsing (Parse(..)) import Trees.Parsing() -import Text.Parsec (parse) import UniversalParser (tokenSequence) import ParsingHelpers (fully) @@ -79,9 +78,9 @@ start = TreeFormulaAnswer Nothing partialGrade :: OutputMonad m => TreeToFormulaInst -> Delayed TreeFormulaAnswer -> LangM m partialGrade inst ans = - case parseDelayed ans (fully $ parser @TreeFormulaAnswer) of + case parseDelayed (fully $ parser @TreeFormulaAnswer) ans of Right f -> partialGrade' inst f - Left err -> reject $ case parse (fully tokenSequence) "" (unDelayed ans) of + Left err -> reject $ case parseDelayedRaw (fully tokenSequence) ans of Left _ -> do german $ show err english $ show err From 764d46923699c6337e588deec77a495c794877e1 Mon Sep 17 00:00:00 2001 From: Oliver Westphal Date: Fri, 12 Apr 2024 13:53:05 +0200 Subject: [PATCH 3/4] remove Show (Delayed a) instance --- src/Formula/Parsing/Delayed.hs | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/Formula/Parsing/Delayed.hs b/src/Formula/Parsing/Delayed.hs index ac766561..c5df0e2d 100644 --- a/src/Formula/Parsing/Delayed.hs +++ b/src/Formula/Parsing/Delayed.hs @@ -16,9 +16,6 @@ import GHC.Generics (Generic) newtype Delayed a = Delayed String deriving (Eq, Typeable, Generic) -instance Show (Delayed a) where - show (Delayed str) = str - delayed :: String -> Delayed a delayed = Delayed From f8cebe54104c2794e882a8473ce69f8863c60484 Mon Sep 17 00:00:00 2001 From: Oliver Westphal Date: Fri, 12 Apr 2024 14:49:38 +0200 Subject: [PATCH 4/4] remove unnecessary instances --- src/Formula/Parsing/Delayed.hs | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/Formula/Parsing/Delayed.hs b/src/Formula/Parsing/Delayed.hs index c5df0e2d..3f6f2c73 100644 --- a/src/Formula/Parsing/Delayed.hs +++ b/src/Formula/Parsing/Delayed.hs @@ -1,8 +1,6 @@ {-# LANGUAGE FlexibleContexts #-} -{-# LANGUAGE DeriveGeneric #-} module Formula.Parsing.Delayed (Delayed, delayed, parseDelayed, parseDelayedRaw, withDelayed) where - import Text.Parsec import Text.Parsec.String (Parser) import ParsingHelpers (fully) @@ -11,10 +9,7 @@ import Control.Monad.Output (LangM, english, german, OutputMonad) import LogicTasks.Helpers (reject) -import Data.Typeable (Typeable) -import GHC.Generics (Generic) - -newtype Delayed a = Delayed String deriving (Eq, Typeable, Generic) +newtype Delayed a = Delayed String delayed :: String -> Delayed a delayed = Delayed