Skip to content

Commit a800565

Browse files
committed
Error when duplicates encountered
1 parent c337e76 commit a800565

File tree

2 files changed

+14
-11
lines changed

2 files changed

+14
-11
lines changed

nix/shell.nix

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,6 @@ let
3636
enable = true;
3737
package = tools.fourmolu;
3838
};
39-
hlint = {
40-
enable = true;
41-
package = tools.hlint;
42-
};
4339
nixpkgs-fmt = {
4440
enable = true;
4541
package = pkgs.nixpkgs-fmt;

src/Codec/CBOR/Cuddle/Huddle.hs

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,6 @@ import Codec.CBOR.Cuddle.CDDL (CDDL)
9797
import Codec.CBOR.Cuddle.CDDL qualified as C
9898
import Codec.CBOR.Cuddle.CDDL.CtlOp qualified as CtlOp
9999
import Codec.CBOR.Cuddle.Comments qualified as C
100-
import Control.Monad (when)
101100
import Control.Monad.State (MonadState (get), execState, modify)
102101
import Data.ByteString (ByteString)
103102
import Data.Default.Class (Default (..))
@@ -109,6 +108,7 @@ import Data.Map.Ordered.Strict (OMap, (|<>))
109108
import Data.Map.Ordered.Strict qualified as OMap
110109
import Data.Set qualified as Set
111110
import Data.String (IsString (fromString))
111+
import Data.Text (Text)
112112
import Data.Text qualified as T
113113
import Data.Tuple.Optics (Field2 (..))
114114
import Data.Void (Void)
@@ -1007,6 +1007,10 @@ hiName (HIRule (Named n _ _)) = n
10071007
hiName (HIGroup (Named n _ _)) = n
10081008
hiName (HIGRule (Named n _ _)) = n
10091009

1010+
data HuddleError
1011+
= DuplicateDefinitions Text
1012+
deriving (Eq, Show)
1013+
10101014
-- | Collect all rules starting from a given point. This will also insert a
10111015
-- single pseudo-rule as the first element which references the specified
10121016
-- top-level rules.
@@ -1017,6 +1021,12 @@ collectFrom topRs =
10171021
(traverse goHuddleItem topRs)
10181022
OMap.empty
10191023
where
1024+
whenNotDefined n m = do
1025+
items <- get
1026+
if OMap.notMember n items
1027+
then m
1028+
else error $ "Duplicate definitions found: " <> show n
1029+
10201030
toHuddle items =
10211031
Huddle
10221032
{ roots = concatMap hiRule topRs
@@ -1026,21 +1036,18 @@ collectFrom topRs =
10261036
goHuddleItem (HIGroup g) = goNamedGroup g
10271037
goHuddleItem (HIGRule (Named _ (GRule _ t0) _)) = goT0 t0
10281038
goRule r@(Named n t0 _) = do
1029-
items <- get
1030-
when (OMap.notMember n items) $ do
1039+
whenNotDefined n $ do
10311040
modify (OMap.|> (n, HIRule r))
10321041
goT0 t0
10331042
goChoice f (NoChoice x) = f x
10341043
goChoice f (ChoiceOf x xs) = f x >> goChoice f xs
10351044
goT0 = goChoice goT2
10361045
goNamedGroup r@(Named n g _) = do
1037-
items <- get
1038-
when (OMap.notMember n items) $ do
1046+
whenNotDefined n $ do
10391047
modify (OMap.|> (n, HIGroup r))
10401048
goGroup g
10411049
goGRule r@(Named n g _) = do
1042-
items <- get
1043-
when (OMap.notMember n items) $ do
1050+
whenNotDefined n $ do
10441051
modify (OMap.|> (n, HIGRule $ fmap callToDef r))
10451052
goT0 (body g)
10461053
-- Note that the parameters here may be different, so this doesn't live

0 commit comments

Comments
 (0)