packages feed

cuddle-1.7.0.0: src/Codec/CBOR/Cuddle/CDDL/Custom/Core.hs

{-# LANGUAGE TypeFamilies #-}

module Codec.CBOR.Cuddle.CDDL.Custom.Core (MonadCddl (..), RuleTerm (..)) where

import Codec.CBOR.Cuddle.CDDL (GRef, Name)
import Codec.CBOR.Cuddle.CDDL.CTree (CTree)
import Codec.CBOR.Term (Term)
import Data.Kind (Type)

class MonadCddl m where
  type Phase m :: Type

  -- | Look up a top-level rule by name.
  lookupCddl :: Name -> m (Maybe (CTree (Phase m)))

  -- | Look up the rule bound to a generic parameter at the enclosing rule.
  -- Returns 'Nothing' outside of a custom generator/validator that was
  -- attached to a generic rule.
  lookupGRef :: GRef -> m (Maybe (CTree (Phase m)))

data RuleTerm
  = SingleTerm Term
  | PairTerm Term Term
  | GroupTerm [RuleTerm]
  deriving (Eq, Ord, Show)