@@ -97,7 +97,6 @@ import Codec.CBOR.Cuddle.CDDL (CDDL)
9797import Codec.CBOR.Cuddle.CDDL qualified as C
9898import Codec.CBOR.Cuddle.CDDL.CtlOp qualified as CtlOp
9999import Codec.CBOR.Cuddle.Comments qualified as C
100- import Control.Monad (when )
101100import Control.Monad.State (MonadState (get ), execState , modify )
102101import Data.ByteString (ByteString )
103102import Data.Default.Class (Default (.. ))
@@ -1017,6 +1016,12 @@ collectFrom topRs =
10171016 (traverse goHuddleItem topRs)
10181017 OMap. empty
10191018 where
1019+ whenNotDefined n m = do
1020+ items <- get
1021+ if OMap. notMember n items
1022+ then m
1023+ else error $ " Duplicate definitions found: " <> show n
1024+
10201025 toHuddle items =
10211026 Huddle
10221027 { roots = concatMap hiRule topRs
@@ -1026,21 +1031,18 @@ collectFrom topRs =
10261031 goHuddleItem (HIGroup g) = goNamedGroup g
10271032 goHuddleItem (HIGRule (Named _ (GRule _ t0) _)) = goT0 t0
10281033 goRule r@ (Named n t0 _) = do
1029- items <- get
1030- when (OMap. notMember n items) $ do
1034+ whenNotDefined n $ do
10311035 modify (OMap. |> (n, HIRule r))
10321036 goT0 t0
10331037 goChoice f (NoChoice x) = f x
10341038 goChoice f (ChoiceOf x xs) = f x >> goChoice f xs
10351039 goT0 = goChoice goT2
10361040 goNamedGroup r@ (Named n g _) = do
1037- items <- get
1038- when (OMap. notMember n items) $ do
1041+ whenNotDefined n $ do
10391042 modify (OMap. |> (n, HIGroup r))
10401043 goGroup g
10411044 goGRule r@ (Named n g _) = do
1042- items <- get
1043- when (OMap. notMember n items) $ do
1045+ whenNotDefined n $ do
10441046 modify (OMap. |> (n, HIGRule $ fmap callToDef r))
10451047 goT0 (body g)
10461048 -- Note that the parameters here may be different, so this doesn't live
0 commit comments