@@ -31,8 +31,9 @@ module Codec.CBOR.Cuddle.CDDL.Resolve (
31
31
asMap ,
32
32
buildMonoCTree ,
33
33
fullResolveCDDL ,
34
- MonoRef (.. ),
35
34
NameResolutionFailure (.. ),
35
+ MonoReferenced ,
36
+ MonoRef (.. ),
36
37
)
37
38
where
38
39
@@ -55,7 +56,6 @@ import Codec.CBOR.Cuddle.CDDL.Postlude (PTerm (..))
55
56
import Control.Monad.Except (ExceptT (.. ), runExceptT )
56
57
import Control.Monad.Reader (Reader , ReaderT (.. ), runReader )
57
58
import Control.Monad.State.Strict (StateT (.. ))
58
- import Data.Functor.Identity (Identity (.. ))
59
59
import Data.Generics.Product
60
60
import Data.Generics.Sum
61
61
import Data.Hashable
@@ -342,7 +342,7 @@ data DistRef a
342
342
RuleRef Name [CTree. Node DistReferenced ]
343
343
deriving (Eq , Generic , Functor , Show )
344
344
345
- instance Hashable (DistRef a )
345
+ instance Hashable a => Hashable (DistRef a )
346
346
347
347
deriving instance Show (CTree DistReferenced )
348
348
@@ -529,32 +529,23 @@ resolveGenericCTree = CTree.traverseCTree resolveGenericRef resolveGenericCTree
529
529
-- Concretely, for each reference in the tree to a generic rule, we synthesize a
530
530
-- new monomorphic instance of that rule at top-level with the correct
531
531
-- parameters applied.
532
- monoCTree ::
533
- CTreeRoot DistReferenced ->
534
- MonoM (CTreeRoot MonoReferenced )
535
- monoCTree (CTreeRoot ct) = CTreeRoot <$> traverse go ct
536
- where
537
- go = traverse resolveGenericRef
538
-
539
532
buildMonoCTree ::
540
533
CTreeRoot DistReferenced ->
541
534
Either NameResolutionFailure (Map. Map Name (CTree. Node MonoReferenced ))
542
535
buildMonoCTree (CTreeRoot ct) = do
543
- let a1 = runExceptT $ runMonoM (monoCTree monoC)
536
+ let a1 = runExceptT $ runMonoM (traverse resolveGenericRef monoC)
544
537
a2 = runStateT a1 mempty
545
- (er, newBindings) = runReader a2 initBindingEnv
546
- CTreeRoot r <- er
547
- pure $ Map. union r $ newBindings
538
+ (r, newBindings) = runReader a2 initBindingEnv
539
+ (`Map.union` newBindings) <$> r
548
540
where
549
541
initBindingEnv = BindingEnv ct mempty
550
542
monoC =
551
- CTreeRoot $
552
- Map. mapMaybe
553
- ( \ case
554
- CTree. Parametrisation [] f -> Just $ Identity f
555
- CTree. Parametrisation _ _ -> Nothing
556
- )
557
- ct
543
+ Map. mapMaybe
544
+ ( \ case
545
+ Parametrisation [] f -> Just f
546
+ Parametrisation _ _ -> Nothing
547
+ )
548
+ ct
558
549
559
550
--------------------------------------------------------------------------------
560
551
-- Combined resolution
0 commit comments