Skip to content

Commit 7daac7b

Browse files
committed
Switched Resolve to TTG
1 parent 7029821 commit 7daac7b

File tree

2 files changed

+16
-23
lines changed

2 files changed

+16
-23
lines changed

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import Codec.CBOR.Cuddle.CDDL (
1212
)
1313
import Codec.CBOR.Cuddle.CDDL.CtlOp
1414
import Codec.CBOR.Cuddle.CDDL.Postlude (PTerm)
15+
import Data.Hashable (Hashable)
1516
import Data.List.NonEmpty qualified as NE
1617
import Data.Map.Strict qualified as Map
1718
import Data.Word (Word64)
@@ -33,7 +34,9 @@ data Parametrisation a = Parametrisation
3334
{ parameters :: [Name]
3435
, underlying :: a
3536
}
36-
deriving (Generic, Functor)
37+
deriving (Generic, Functor, Show, Eq, Foldable, Traversable)
38+
39+
instance Hashable a => Hashable (Parametrisation a)
3740

3841
data Parametrised
3942

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

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@ module Codec.CBOR.Cuddle.CDDL.Resolve (
3131
asMap,
3232
buildMonoCTree,
3333
fullResolveCDDL,
34-
MonoRef (..),
35-
OrRef (..),
3634
NameResolutionFailure (..),
35+
MonoReferenced,
36+
MonoRef (..),
3737
)
3838
where
3939

@@ -56,7 +56,6 @@ import Codec.CBOR.Cuddle.CDDL.Postlude (PTerm (..))
5656
import Control.Monad.Except (ExceptT (..), runExceptT)
5757
import Control.Monad.Reader (Reader, ReaderT (..), runReader)
5858
import Control.Monad.State.Strict (StateT (..))
59-
import Data.Functor.Identity (Identity (..))
6059
import Data.Generics.Product
6160
import Data.Generics.Sum
6261
import Data.Hashable
@@ -345,7 +344,7 @@ data DistRef a
345344
RuleRef Name [CTree.Node DistReferenced]
346345
deriving (Eq, Generic, Functor, Show)
347346

348-
instance Hashable (DistRef a)
347+
instance Hashable a => Hashable (DistRef a)
349348

350349
deriving instance Show (CTree DistReferenced)
351350

@@ -530,32 +529,23 @@ resolveGenericCTree = CTree.traverseCTree resolveGenericRef resolveGenericCTree
530529
-- Concretely, for each reference in the tree to a generic rule, we synthesize a
531530
-- new monomorphic instance of that rule at top-level with the correct
532531
-- parameters applied.
533-
monoCTree ::
534-
CTreeRoot DistReferenced ->
535-
MonoM (CTreeRoot MonoReferenced)
536-
monoCTree (CTreeRoot ct) = CTreeRoot <$> traverse go ct
537-
where
538-
go = traverse resolveGenericRef
539-
540532
buildMonoCTree ::
541533
CTreeRoot DistReferenced ->
542534
Either NameResolutionFailure (Map.Map Name (CTree.Node MonoReferenced))
543535
buildMonoCTree (CTreeRoot ct) = do
544-
let a1 = runExceptT $ runMonoM (monoCTree monoC)
536+
let a1 = runExceptT $ runMonoM (traverse resolveGenericRef monoC)
545537
a2 = runStateT a1 mempty
546-
(er, newBindings) = runReader a2 initBindingEnv
547-
CTreeRoot r <- er
548-
pure $ Map.union r $ newBindings
538+
(r, newBindings) = runReader a2 initBindingEnv
539+
(`Map.union` newBindings) <$> r
549540
where
550541
initBindingEnv = BindingEnv ct mempty
551542
monoC =
552-
CTreeRoot $
553-
Map.mapMaybe
554-
( \case
555-
CTree.Parametrisation [] f -> Just $ Identity f
556-
CTree.Parametrisation _ _ -> Nothing
557-
)
558-
ct
543+
Map.mapMaybe
544+
( \case
545+
Parametrisation [] f -> Just f
546+
Parametrisation _ _ -> Nothing
547+
)
548+
ct
559549

560550
--------------------------------------------------------------------------------
561551
-- Combined resolution

0 commit comments

Comments
 (0)