Skip to content

Commit 503019d

Browse files
committed
WIP
1 parent adcc5e8 commit 503019d

File tree

9 files changed

+272
-162
lines changed

9 files changed

+272
-162
lines changed

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ jobs:
7272

7373
- name: Install fourmolu
7474
run: |
75-
FOURMOLU_VERSION="0.18.0.0"
75+
FOURMOLU_VERSION="0.15.0.0"
7676
mkdir -p "$HOME/.local/bin"
7777
curl -sL "https://github.com/fourmolu/fourmolu/releases/download/v${FOURMOLU_VERSION}/fourmolu-${FOURMOLU_VERSION}-linux-x86_64" -o "$HOME/.local/bin/fourmolu"
7878
chmod a+x "$HOME/.local/bin/fourmolu"

flake.lock

Lines changed: 15 additions & 15 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

nickel.lock.ncl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
organist = import "/nix/store/7zrf2b1ysrgrx7613qlmbz71cfyxgyfb-source/lib/organist.ncl",
2+
organist = import "/nix/store/fjxrgrx0s69m5vkss5ff1i5akjcx39ss-source/lib/organist.ncl",
33
}

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

Lines changed: 16 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,17 @@ import Codec.CBOR.Cuddle.CDDL (
2525
Value (..),
2626
ValueVariant (..),
2727
)
28-
import Codec.CBOR.Cuddle.CDDL.CTree (CTree, CTreeRoot' (..))
28+
import Codec.CBOR.Cuddle.CDDL.CTree (
29+
CTree,
30+
CTreeRoot' (..),
31+
WrappedTerm,
32+
flattenWrappedList,
33+
pairTermList,
34+
singleTermList,
35+
pattern G,
36+
pattern P,
37+
pattern S,
38+
)
2939
import Codec.CBOR.Cuddle.CDDL.CTree qualified as CTree
3040
import Codec.CBOR.Cuddle.CDDL.CtlOp qualified as CtlOp
3141
import Codec.CBOR.Cuddle.CDDL.Postlude (PTerm (..))
@@ -53,6 +63,7 @@ import System.Random.Stateful (
5363
Random,
5464
RandomGen (..),
5565
StateGenM (..),
66+
StatefulGen (..),
5667
UniformRange (uniformRM),
5768
randomM,
5869
uniformByteStringM,
@@ -207,53 +218,11 @@ genPostlude pt = case pt of
207218
PTNil -> pure TNull
208219
PTUndefined -> pure $ TSimple 23
209220

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-
252221
--------------------------------------------------------------------------------
253222
-- Generator functions
254223
--------------------------------------------------------------------------------
255224

256-
genForCTree :: RandomGen g => CTree MonoRef -> M g WrappedTerm
225+
genForCTree :: forall g. RandomGen g => CTree MonoRef -> M g WrappedTerm
257226
genForCTree (CTree.Literal v) = S <$> genValue v
258227
genForCTree (CTree.Postlude pt) = S <$> genPostlude pt
259228
genForCTree (CTree.Map nodes) = do
@@ -362,6 +331,7 @@ genForCTree (CTree.Tag tag node) = do
362331
case enc of
363332
S x -> pure $ S $ TTagged tag x
364333
_ -> error "Tag controller does not correspond to a single term"
334+
genForCTree (CTree.WithGen gen _) = gen StateGenM
365335

366336
genForNode :: RandomGen g => CTree.Node MonoRef -> M g WrappedTerm
367337
genForNode = genForCTree <=< resolveIfRef
@@ -446,7 +416,8 @@ generateCBORTerm cddl n stdGen =
446416
genState = GenState {randomSeed = stdGen, depth = 1}
447417
in evalGen (genForName n) genEnv genState
448418

449-
generateCBORTerm' :: RandomGen g => CTreeRoot' Identity MonoRef -> Name -> g -> (Term, g)
419+
generateCBORTerm' ::
420+
(RandomGen g, StatefulGen g (M g)) => CTreeRoot' Identity MonoRef -> Name -> g -> (Term, g)
450421
generateCBORTerm' cddl n stdGen =
451422
let genEnv = GenEnv {cddl}
452423
genState = GenState {randomSeed = stdGen, depth = 1}

0 commit comments

Comments
 (0)