import Data.String (IsString(..))
import Prelude hiding (any)
-import Language.Symantic.Grammar.Source
-import Language.Symantic.Grammar.Error
+import Language.Symantic.Grammar.Meta
import Language.Symantic.Grammar.Fixity
import Language.Symantic.Grammar.EBNF
import Language.Symantic.Grammar.Terminal
-- | Context-free grammar.
newtype CF g a = CF { unCF :: g a }
deriving (IsString, Functor, Gram_Terminal, Applicative, Gram_App)
-deriving instance Gram_Alt g => Gram_Alt (CF g)
-deriving instance Gram_Try g => Gram_Try (CF g)
+deriving instance Gram_Error err g => Gram_Error err (CF g)
+deriving instance Gram_Reader st g => Gram_Reader st (CF g)
+deriving instance Gram_State st g => Gram_State st (CF g)
+deriving instance Gram_Alt g => Gram_Alt (CF g)
+deriving instance Gram_Try g => Gram_Try (CF g)
deriving instance Gram_AltApp g => Gram_AltApp (CF g)
-deriving instance Gram_Rule g => Gram_Rule (CF g)
-deriving instance Gram_RegL g => Gram_RegL (CF g)
-deriving instance Gram_RegR g => Gram_RegR (CF g)
-deriving instance Gram_CF g => Gram_CF (CF g)
+deriving instance Gram_Rule g => Gram_Rule (CF g)
+deriving instance Gram_RegL g => Gram_RegL (CF g)
+deriving instance Gram_RegR g => Gram_RegR (CF g)
+deriving instance Gram_CF g => Gram_CF (CF g)
deriving instance Gram_CF RuleEBNF
deriving instance Gram_RuleEBNF g => Gram_RuleEBNF (CF g)
instance Gram_CF EBNF where
CF $ EBNF $ \bo po -> parenInfix po op $
f bo (op, SideL) <> " - " <> g bo (op, SideR)
where op = infixL 6
-instance Gram_Meta meta g => Gram_Meta meta (CF g) where
- withMeta = CF . withMeta . unCF
-deriving instance Gram_Error err g => Gram_Error err (CF g)
cf_of_Terminal :: Terminal g a -> CF g a
cf_of_Terminal (Terminal g) = CF g