@@ -31,9 +31,9 @@ module Codec.CBOR.Cuddle.CDDL.Resolve (
31
31
asMap ,
32
32
buildMonoCTree ,
33
33
fullResolveCDDL ,
34
- MonoRef (.. ),
35
- OrRef (.. ),
36
34
NameResolutionFailure (.. ),
35
+ MonoReferenced ,
36
+ MonoRef (.. ),
37
37
)
38
38
where
39
39
@@ -56,7 +56,6 @@ import Codec.CBOR.Cuddle.CDDL.Postlude (PTerm (..))
56
56
import Control.Monad.Except (ExceptT (.. ), runExceptT )
57
57
import Control.Monad.Reader (Reader , ReaderT (.. ), runReader )
58
58
import Control.Monad.State.Strict (StateT (.. ))
59
- import Data.Functor.Identity (Identity (.. ))
60
59
import Data.Generics.Product
61
60
import Data.Generics.Sum
62
61
import Data.Hashable
@@ -345,7 +344,7 @@ data DistRef a
345
344
RuleRef Name [CTree. Node DistReferenced ]
346
345
deriving (Eq , Generic , Functor , Show )
347
346
348
- instance Hashable (DistRef a )
347
+ instance Hashable a => Hashable (DistRef a )
349
348
350
349
deriving instance Show (CTree DistReferenced )
351
350
@@ -530,32 +529,23 @@ resolveGenericCTree = CTree.traverseCTree resolveGenericRef resolveGenericCTree
530
529
-- Concretely, for each reference in the tree to a generic rule, we synthesize a
531
530
-- new monomorphic instance of that rule at top-level with the correct
532
531
-- 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
-
540
532
buildMonoCTree ::
541
533
CTreeRoot DistReferenced ->
542
534
Either NameResolutionFailure (Map. Map Name (CTree. Node MonoReferenced ))
543
535
buildMonoCTree (CTreeRoot ct) = do
544
- let a1 = runExceptT $ runMonoM (monoCTree monoC)
536
+ let a1 = runExceptT $ runMonoM (traverse resolveGenericRef monoC)
545
537
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
549
540
where
550
541
initBindingEnv = BindingEnv ct mempty
551
542
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
559
549
560
550
--------------------------------------------------------------------------------
561
551
-- Combined resolution
0 commit comments