From dd2a2c78f9933cf012705efb40c573df91a4aeae Mon Sep 17 00:00:00 2001 From: Alan Lawrence Date: Tue, 3 Dec 2024 21:49:42 +0000 Subject: [PATCH 1/3] Change fail to BadPortPull --- brat/Brat/Checker/Helpers.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/brat/Brat/Checker/Helpers.hs b/brat/Brat/Checker/Helpers.hs index 160fb27b..e23adc44 100644 --- a/brat/Brat/Checker/Helpers.hs +++ b/brat/Brat/Checker/Helpers.hs @@ -121,7 +121,7 @@ pullPorts toPort showFn (p:ports) types = do pull1Port :: PortName -> [(a, ty)] -> Checking ((a, ty), [(a, ty)]) - pull1Port p [] = fail $ "Port not found: " ++ p ++ " in " ++ showFn types + pull1Port p [] = err $ BadPortPull $ "Port not found: " ++ p ++ " in " ++ showFn types pull1Port p (x@(a,_):xs) | p == toPort a = if p `elem` (toPort . fst <$> xs) From e2983c70226d3a58385821e71e64f6fe8bb48ad3 Mon Sep 17 00:00:00 2001 From: Alan Lawrence Date: Tue, 3 Dec 2024 21:53:50 +0000 Subject: [PATCH 2/3] pull1Port: use partition --- brat/Brat/Checker/Helpers.hs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/brat/Brat/Checker/Helpers.hs b/brat/Brat/Checker/Helpers.hs index e23adc44..f82424a8 100644 --- a/brat/Brat/Checker/Helpers.hs +++ b/brat/Brat/Checker/Helpers.hs @@ -39,6 +39,7 @@ import Util (log2) import Control.Monad.Freer (req) import Data.Bifunctor import Data.Foldable (foldrM) +import Data.List (partition) import Data.Type.Equality (TestEquality(..), (:~:)(..)) import qualified Data.Map as M import Prelude hiding (last) @@ -121,13 +122,12 @@ pullPorts toPort showFn (p:ports) types = do pull1Port :: PortName -> [(a, ty)] -> Checking ((a, ty), [(a, ty)]) - pull1Port p [] = err $ BadPortPull $ "Port not found: " ++ p ++ " in " ++ showFn types - pull1Port p (x@(a,_):xs) - | p == toPort a - = if p `elem` (toPort . fst <$> xs) - then err (AmbiguousPortPull p (showFn (x:xs))) - else pure (x, xs) - | otherwise = second (x:) <$> pull1Port p xs + pull1Port p available = case partition ((== p) . toPort . fst) available of + ([], _) -> err $ BadPortPull $ "Port not found: " ++ p ++ " in " ++ showFn available + ([found], remaining) -> pure (found, remaining) + -- this is not quite a refactor: we used to show only the suffix + -- of 'available' beginning with the first match + (_, _) -> err $ AmbiguousPortPull p (showFn available) ensureEmpty :: Show ty => String -> [(NamedPort e, ty)] -> Checking () ensureEmpty _ [] = pure () From 8e2201d8969e66d5697bcb1664716ffd8120a29e Mon Sep 17 00:00:00 2001 From: Alan Lawrence Date: Wed, 4 Dec 2024 09:50:24 +0000 Subject: [PATCH 3/3] drop comment --- brat/Brat/Checker/Helpers.hs | 2 -- 1 file changed, 2 deletions(-) diff --git a/brat/Brat/Checker/Helpers.hs b/brat/Brat/Checker/Helpers.hs index f82424a8..74f0193e 100644 --- a/brat/Brat/Checker/Helpers.hs +++ b/brat/Brat/Checker/Helpers.hs @@ -125,8 +125,6 @@ pullPorts toPort showFn (p:ports) types = do pull1Port p available = case partition ((== p) . toPort . fst) available of ([], _) -> err $ BadPortPull $ "Port not found: " ++ p ++ " in " ++ showFn available ([found], remaining) -> pure (found, remaining) - -- this is not quite a refactor: we used to show only the suffix - -- of 'available' beginning with the first match (_, _) -> err $ AmbiguousPortPull p (showFn available) ensureEmpty :: Show ty => String -> [(NamedPort e, ty)] -> Checking ()