happy-arbitrary-0.0.1: src/Language/Happy/Ast.hs
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DeriveTraversable #-}
{-# LANGUAGE DerivingVia #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE Strict #-}
module Language.Happy.Ast
( Node, NodeF (..)
) where
import Data.Aeson (FromJSON, FromJSON1, ToJSON,
ToJSON1)
import Data.Fix (Fix)
import Data.Functor.Classes (Eq1, Ord1, Read1, Show1)
import Data.Functor.Classes.Generic (FunctorClassesDefault (..))
import GHC.Generics (Generic, Generic1)
data NodeF lexeme a
= Grammar [lexeme] [a] [a] [lexeme]
| PragmaExpect lexeme
| PragmaName lexeme lexeme
| PragmaErrorHandlerType lexeme
| PragmaError lexeme
| PragmaLexer lexeme lexeme
| PragmaMonad lexeme
| PragmaTokenType lexeme
| PragmaToken [a]
| PragmaLeft [lexeme]
| PragmaRight [lexeme]
| Token lexeme lexeme
| Rule a a
| RuleType lexeme lexeme
| RuleDefn lexeme [a]
| RuleLine [lexeme] lexeme
deriving (Show, Read, Eq, Ord, Generic, Generic1, Functor, Foldable, Traversable)
deriving (Show1, Read1, Eq1, Ord1) via FunctorClassesDefault (NodeF lexeme)
type Node lexeme = Fix (NodeF lexeme)
instance FromJSON lexeme => FromJSON1 (NodeF lexeme)
instance ToJSON lexeme => ToJSON1 (NodeF lexeme)