Skip to content

Commit a2fac4b

Browse files
committed
Parametrise CDDL AST over decorations
1 parent 954c402 commit a2fac4b

File tree

17 files changed

+713
-612
lines changed

17 files changed

+713
-612
lines changed

bin/Main.hs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import Codec.CBOR.Term (encodeTerm)
1717
import Codec.CBOR.Write (toStrictByteString)
1818
import Data.ByteString.Base16 qualified as Base16
1919
import Data.ByteString.Char8 qualified as BSC
20+
import Data.Functor (($>))
2021
import Data.Text qualified as T
2122
import Data.Text.IO qualified as T
2223
import Options.Applicative
@@ -195,7 +196,7 @@ run (Opts cmd cddlFile) = do
195196
| vNoPrelude vOpts = res
196197
| otherwise = prependPrelude res
197198
in
198-
case fullResolveCDDL res' of
199+
case fullResolveCDDL (res' $> ()) of
199200
Left err -> putStrLnErr (show err) >> exitFailure
200201
Right _ -> exitSuccess
201202
(GenerateCBOR gOpts) ->
@@ -204,7 +205,7 @@ run (Opts cmd cddlFile) = do
204205
| gNoPrelude gOpts = res
205206
| otherwise = prependPrelude res
206207
in
207-
case fullResolveCDDL res' of
208+
case fullResolveCDDL (res' $> ()) of
208209
Left err -> putStrLnErr (show err) >> exitFailure
209210
Right mt -> do
210211
stdGen <- getStdGen
@@ -222,7 +223,7 @@ run (Opts cmd cddlFile) = do
222223
| vcNoPrelude vcOpts = res
223224
| otherwise = prependPrelude res
224225
in
225-
case fullResolveCDDL res' of
226+
case fullResolveCDDL (res' $> ()) of
226227
Left err -> putStrLnErr (show err) >> exitFailure
227228
Right mt -> do
228229
cbor <- BSC.readFile (vcInput vcOpts)

cuddle.cabal

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ library
5555
Codec.CBOR.Cuddle.Comments
5656
Codec.CBOR.Cuddle.Huddle
5757
Codec.CBOR.Cuddle.Huddle.HuddleM
58-
Codec.CBOR.Cuddle.Huddle.Optics
5958
Codec.CBOR.Cuddle.Parser
6059
Codec.CBOR.Cuddle.Parser.Lexer
6160
Codec.CBOR.Cuddle.Pretty

src/Codec/CBOR/Cuddle/CBOR/Gen.hs

Lines changed: 8 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,13 @@ import Codec.CBOR.Cuddle.CDDL (
2424
OccurrenceIndicator (..),
2525
Value (..),
2626
ValueVariant (..),
27+
WrappedTerm,
28+
flattenWrappedList,
29+
pairTermList,
30+
singleTermList,
31+
pattern G,
32+
pattern P,
33+
pattern S,
2734
)
2835
import Codec.CBOR.Cuddle.CDDL.CTree (CTree, CTreeRoot' (..))
2936
import Codec.CBOR.Cuddle.CDDL.CTree qualified as CTree
@@ -207,48 +214,6 @@ genPostlude pt = case pt of
207214
PTNil -> pure TNull
208215
PTUndefined -> pure $ TSimple 23
209216

210-
--------------------------------------------------------------------------------
211-
-- Kinds of terms
212-
--------------------------------------------------------------------------------
213-
214-
data WrappedTerm
215-
= SingleTerm Term
216-
| PairTerm Term Term
217-
| GroupTerm [WrappedTerm]
218-
deriving (Eq, Show)
219-
220-
-- | Recursively flatten wrapped list. That is, expand any groups out to their
221-
-- individual entries.
222-
flattenWrappedList :: [WrappedTerm] -> [WrappedTerm]
223-
flattenWrappedList [] = []
224-
flattenWrappedList (GroupTerm xxs : xs) =
225-
flattenWrappedList xxs <> flattenWrappedList xs
226-
flattenWrappedList (y : xs) = y : flattenWrappedList xs
227-
228-
pattern S :: Term -> WrappedTerm
229-
pattern S t = SingleTerm t
230-
231-
-- | Convert a list of wrapped terms to a list of terms. If any 'PairTerm's are
232-
-- present, we just take their "value" part.
233-
singleTermList :: [WrappedTerm] -> Maybe [Term]
234-
singleTermList [] = Just []
235-
singleTermList (S x : xs) = (x :) <$> singleTermList xs
236-
singleTermList (P _ y : xs) = (y :) <$> singleTermList xs
237-
singleTermList _ = Nothing
238-
239-
pattern P :: Term -> Term -> WrappedTerm
240-
pattern P t1 t2 = PairTerm t1 t2
241-
242-
-- | Convert a list of wrapped terms to a list of pairs of terms, or fail if any
243-
-- 'SingleTerm's are present.
244-
pairTermList :: [WrappedTerm] -> Maybe [(Term, Term)]
245-
pairTermList [] = Just []
246-
pairTermList (P x y : xs) = ((x, y) :) <$> pairTermList xs
247-
pairTermList _ = Nothing
248-
249-
pattern G :: [WrappedTerm] -> WrappedTerm
250-
pattern G xs = GroupTerm xs
251-
252217
--------------------------------------------------------------------------------
253218
-- Generator functions
254219
--------------------------------------------------------------------------------
@@ -420,7 +385,7 @@ applyOccurenceIndicator (OIBounded mlb mub) oldGen =
420385
genDepthBiasedRM (fromMaybe 0 mlb :: Word64, fromMaybe 10 mub)
421386
>>= \i -> G <$> replicateM (fromIntegral i) oldGen
422387

423-
genValue :: RandomGen g => Value -> M g Term
388+
genValue :: RandomGen g => Value () -> M g Term
424389
genValue (Value x _) = genValueVariant x
425390

426391
genValueVariant :: RandomGen g => ValueVariant -> M g Term

0 commit comments

Comments
 (0)