Skip to content

Commit c0c2cc9

Browse files
committed
WIP
1 parent 7987a01 commit c0c2cc9

File tree

11 files changed

+279
-300
lines changed

11 files changed

+279
-300
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: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -385,7 +385,7 @@ applyOccurenceIndicator (OIBounded mlb mub) oldGen =
385385
genDepthBiasedRM (fromMaybe 0 mlb :: Word64, fromMaybe 10 mub)
386386
>>= \i -> G <$> replicateM (fromIntegral i) oldGen
387387

388-
genValue :: RandomGen g => Value -> M g Term
388+
genValue :: RandomGen g => Value () -> M g Term
389389
genValue (Value x _) = genValueVariant x
390390

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

src/Codec/CBOR/Cuddle/CDDL.hs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -428,7 +428,7 @@ data Type2 i
428428
= -- | A type can be just a single value (such as 1 or "icecream" or
429429
-- h'0815'), which matches only a data item with that specific value
430430
-- (no conversions defined),
431-
T2Value Value
431+
T2Value (Value i)
432432
| -- | or be defined by a rule giving a meaning to a name (possibly after
433433
-- supplying generic arguments as required by the generic parameters)
434434
T2Name Name (Maybe (GenericArg i))
@@ -583,7 +583,7 @@ instance CollectComments (GroupEntryVariant Comment) where
583583
data MemberKey i
584584
= MKType (Type1 i)
585585
| MKBareword Name
586-
| MKValue Value
586+
| MKValue (Value i)
587587
deriving (Generic, Functor)
588588

589589
deriving instance Eq i => Eq (MemberKey i)
@@ -592,12 +592,12 @@ deriving instance Show i => Show (MemberKey i)
592592

593593
deriving instance ToExpr i => ToExpr (MemberKey i)
594594

595-
data Value = Value ValueVariant Comment
596-
deriving (Eq, Generic, Show, Default)
595+
data Value i = Value ValueVariant i
596+
deriving (Eq, Generic, Show, Default, Functor)
597597
deriving anyclass (ToExpr, Hashable, CollectComments)
598598

599-
value :: ValueVariant -> Value
600-
value x = Value x mempty
599+
value :: Default i => ValueVariant -> Value i
600+
value x = Value x def
601601

602602
data ValueVariant
603603
= VUInt Word64

src/Codec/CBOR/Cuddle/CDDL/CTree.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ import GHC.Generics (Generic)
3131
-- We principally use this functor to represent references - thus, every 'f a'
3232
-- may be either an a or a reference to another CTree.
3333
data CTree f
34-
= Literal Value
34+
= Literal (Value ())
3535
| Postlude PTerm
3636
| Map [Node f]
3737
| Array [Node f]

src/Codec/CBOR/Cuddle/CDDL/Resolve.hs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -139,23 +139,23 @@ deriving instance Show (CTreeRoot OrRef)
139139
-- | Build a CTree incorporating references.
140140
--
141141
-- This translation cannot fail.
142-
buildRefCTree :: CDDLMap i -> RefCTree
142+
buildRefCTree :: CDDLMap () -> RefCTree
143143
buildRefCTree rules = CTreeRoot $ fmap toCTreeRule rules
144144
where
145145
toCTreeRule ::
146-
Parametrised (TypeOrGroup i) ->
146+
Parametrised (TypeOrGroup ()) ->
147147
ParametrisedWith [Name] (CTree.Node OrRef)
148148
toCTreeRule = fmap toCTreeTOG
149149

150-
toCTreeTOG :: TypeOrGroup i -> CTree.Node OrRef
150+
toCTreeTOG :: TypeOrGroup () -> CTree.Node OrRef
151151
toCTreeTOG (TOGType t0) = toCTreeT0 t0
152152
toCTreeTOG (TOGGroup ge) = toCTreeGroupEntry ge
153153

154-
toCTreeT0 :: Type0 i -> CTree.Node OrRef
154+
toCTreeT0 :: Type0 () -> CTree.Node OrRef
155155
toCTreeT0 (Type0 (t1 NE.:| [])) = toCTreeT1 t1
156156
toCTreeT0 (Type0 xs) = It . CTree.Choice $ toCTreeT1 <$> xs
157157

158-
toCTreeT1 :: Type1 i -> CTree.Node OrRef
158+
toCTreeT1 :: Type1 () -> CTree.Node OrRef
159159
toCTreeT1 (Type1 t2 Nothing _) = toCTreeT2 t2
160160
toCTreeT1 (Type1 t2 (Just (op, t2')) _) = case op of
161161
RangeOp bound ->
@@ -173,7 +173,7 @@ buildRefCTree rules = CTreeRoot $ fmap toCTreeRule rules
173173
, CTree.controller = toCTreeT2 t2'
174174
}
175175

176-
toCTreeT2 :: Type2 i -> CTree.Node OrRef
176+
toCTreeT2 :: Type2 () -> CTree.Node OrRef
177177
toCTreeT2 (T2Value v) = It $ CTree.Literal v
178178
toCTreeT2 (T2Name n garg) =
179179
Ref n (fromGenArgs garg)
@@ -215,7 +215,7 @@ buildRefCTree rules = CTreeRoot $ fmap toCTreeRule rules
215215
toCTreeDataItem _ =
216216
It $ CTree.Postlude PTAny
217217

218-
toCTreeGroupEntry :: GroupEntry i -> CTree.Node OrRef
218+
toCTreeGroupEntry :: GroupEntry () -> CTree.Node OrRef
219219
toCTreeGroupEntry (GroupEntry (Just occi) (GEType mmkey t0) _) =
220220
It $
221221
CTree.Occur
@@ -238,12 +238,12 @@ buildRefCTree rules = CTreeRoot $ fmap toCTreeRule rules
238238
}
239239
toCTreeGroupEntry (GroupEntry Nothing (GEGroup g) _) = groupToGroup g
240240

241-
fromGenArgs :: Maybe (GenericArg i) -> [CTree.Node OrRef]
241+
fromGenArgs :: Maybe (GenericArg ()) -> [CTree.Node OrRef]
242242
fromGenArgs = maybe [] (\(GenericArg xs) -> NE.toList $ fmap toCTreeT1 xs)
243243

244244
-- Interpret a group as an enumeration. Note that we float out the
245245
-- choice options
246-
toCTreeEnum :: Group i -> CTree.Node OrRef
246+
toCTreeEnum :: Group () -> CTree.Node OrRef
247247
toCTreeEnum (Group (a NE.:| [])) =
248248
It . CTree.Enum . It . CTree.Group $ toCTreeGroupEntry <$> gcGroupEntries a
249249
toCTreeEnum (Group xs) =
@@ -253,14 +253,14 @@ buildRefCTree rules = CTreeRoot $ fmap toCTreeRule rules
253253
groupEntries = fmap gcGroupEntries xs
254254

255255
-- Embed a group in another group, again floating out the choice options
256-
groupToGroup :: Group i -> CTree.Node OrRef
256+
groupToGroup :: Group () -> CTree.Node OrRef
257257
groupToGroup (Group (a NE.:| [])) =
258258
It . CTree.Group $ fmap toCTreeGroupEntry (gcGroupEntries a)
259259
groupToGroup (Group xs) =
260260
It . CTree.Choice $
261261
fmap (It . CTree.Group . fmap toCTreeGroupEntry) (gcGroupEntries <$> xs)
262262

263-
toKVPair :: Maybe (MemberKey i) -> Type0 i -> CTree.Node OrRef
263+
toKVPair :: Maybe (MemberKey ()) -> Type0 () -> CTree.Node OrRef
264264
toKVPair Nothing t0 = toCTreeT0 t0
265265
toKVPair (Just mkey) t0 =
266266
It $
@@ -272,7 +272,7 @@ buildRefCTree rules = CTreeRoot $ fmap toCTreeRule rules
272272
}
273273

274274
-- Interpret a group as a map. Note that we float out the choice options
275-
toCTreeMap :: Group i -> CTree.Node OrRef
275+
toCTreeMap :: Group () -> CTree.Node OrRef
276276
toCTreeMap (Group (a NE.:| [])) = It . CTree.Map $ fmap toCTreeGroupEntry (gcGroupEntries a)
277277
toCTreeMap (Group xs) =
278278
It
@@ -281,14 +281,14 @@ buildRefCTree rules = CTreeRoot $ fmap toCTreeRule rules
281281

282282
-- Interpret a group as an array. Note that we float out the choice
283283
-- options
284-
toCTreeArray :: Group i -> CTree.Node OrRef
284+
toCTreeArray :: Group () -> CTree.Node OrRef
285285
toCTreeArray (Group (a NE.:| [])) =
286286
It . CTree.Array $ fmap toCTreeGroupEntry (gcGroupEntries a)
287287
toCTreeArray (Group xs) =
288288
It . CTree.Choice $
289289
fmap (It . CTree.Array . fmap toCTreeGroupEntry) (gcGroupEntries <$> xs)
290290

291-
toCTreeMemberKey :: MemberKey i -> CTree.Node OrRef
291+
toCTreeMemberKey :: MemberKey () -> CTree.Node OrRef
292292
toCTreeMemberKey (MKValue v) = It $ CTree.Literal v
293293
toCTreeMemberKey (MKBareword (Name n _)) = It $ CTree.Literal (Value (VText n) mempty)
294294
toCTreeMemberKey (MKType t1) = toCTreeT1 t1
@@ -556,7 +556,7 @@ buildMonoCTree (CTreeRoot ct) = do
556556
-- Combined resolution
557557
--------------------------------------------------------------------------------
558558

559-
fullResolveCDDL :: CDDL i -> Either NameResolutionFailure (CTreeRoot' Identity MonoRef)
559+
fullResolveCDDL :: CDDL () -> Either NameResolutionFailure (CTreeRoot' Identity MonoRef)
560560
fullResolveCDDL cddl = do
561561
let refCTree = buildRefCTree (asMap cddl)
562562
rCTree <- buildResolvedCTree refCTree

0 commit comments

Comments
 (0)