    -- File generated by the BNF Converter (bnfc 2.9.5).

    {-# LANGUAGE GeneralizedNewtypeDeriving #-}

    -- | The abstract syntax of language C.

    module Language.C.AbsC where

    import Prelude (Char, Double, String)
    import qualified Prelude as C (Eq, Ord, Show, Read)
    import qualified Data.String

    data TranslationUnit = MkTranslationUnit [ExternalDeclaration]
      deriving (TranslationUnit -> TranslationUnit -> Bool
    (TranslationUnit -> TranslationUnit -> Bool)
    -> (TranslationUnit -> TranslationUnit -> Bool)
    -> Eq TranslationUnit
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: TranslationUnit -> TranslationUnit -> Bool
    == :: TranslationUnit -> TranslationUnit -> Bool
    $c/= :: TranslationUnit -> TranslationUnit -> Bool
    /= :: TranslationUnit -> TranslationUnit -> Bool
    C.Eq, Eq TranslationUnit
    Eq TranslationUnit =>
    (TranslationUnit -> TranslationUnit -> Ordering)
    -> (TranslationUnit -> TranslationUnit -> Bool)
    -> (TranslationUnit -> TranslationUnit -> Bool)
    -> (TranslationUnit -> TranslationUnit -> Bool)
    -> (TranslationUnit -> TranslationUnit -> Bool)
    -> (TranslationUnit -> TranslationUnit -> TranslationUnit)
    -> (TranslationUnit -> TranslationUnit -> TranslationUnit)
    -> Ord TranslationUnit
    TranslationUnit -> TranslationUnit -> Bool
    TranslationUnit -> TranslationUnit -> Ordering
    TranslationUnit -> TranslationUnit -> TranslationUnit
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: TranslationUnit -> TranslationUnit -> Ordering
    compare :: TranslationUnit -> TranslationUnit -> Ordering
    $c< :: TranslationUnit -> TranslationUnit -> Bool
    < :: TranslationUnit -> TranslationUnit -> Bool
    $c<= :: TranslationUnit -> TranslationUnit -> Bool
    <= :: TranslationUnit -> TranslationUnit -> Bool
    $c> :: TranslationUnit -> TranslationUnit -> Bool
    > :: TranslationUnit -> TranslationUnit -> Bool
    $c>= :: TranslationUnit -> TranslationUnit -> Bool
    >= :: TranslationUnit -> TranslationUnit -> Bool
    $cmax :: TranslationUnit -> TranslationUnit -> TranslationUnit
    max :: TranslationUnit -> TranslationUnit -> TranslationUnit
    $cmin :: TranslationUnit -> TranslationUnit -> TranslationUnit
    min :: TranslationUnit -> TranslationUnit -> TranslationUnit
    C.Ord, Int -> TranslationUnit -> ShowS
    [TranslationUnit] -> ShowS
    TranslationUnit -> String
    (Int -> TranslationUnit -> ShowS)
    -> (TranslationUnit -> String)
    -> ([TranslationUnit] -> ShowS)
    -> Show TranslationUnit
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> TranslationUnit -> ShowS
    showsPrec :: Int -> TranslationUnit -> ShowS
    $cshow :: TranslationUnit -> String
    show :: TranslationUnit -> String
    $cshowList :: [TranslationUnit] -> ShowS
    showList :: [TranslationUnit] -> ShowS
    C.Show, ReadPrec [TranslationUnit]
    ReadPrec TranslationUnit
    Int -> ReadS TranslationUnit
    ReadS [TranslationUnit]
    (Int -> ReadS TranslationUnit)
    -> ReadS [TranslationUnit]
    -> ReadPrec TranslationUnit
    -> ReadPrec [TranslationUnit]
    -> Read TranslationUnit
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS TranslationUnit
    readsPrec :: Int -> ReadS TranslationUnit
    $creadList :: ReadS [TranslationUnit]
    readList :: ReadS [TranslationUnit]
    $creadPrec :: ReadPrec TranslationUnit
    readPrec :: ReadPrec TranslationUnit
    $creadListPrec :: ReadPrec [TranslationUnit]
    readListPrec :: ReadPrec [TranslationUnit]
    C.Read)

    data ExternalDeclaration
        = MkExternalDeclarationFunctionDefinition FunctionDefinition
        | MkExternalDeclarationDeclaration Declaration
      deriving (ExternalDeclaration -> ExternalDeclaration -> Bool
    (ExternalDeclaration -> ExternalDeclaration -> Bool)
    -> (ExternalDeclaration -> ExternalDeclaration -> Bool)
    -> Eq ExternalDeclaration
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: ExternalDeclaration -> ExternalDeclaration -> Bool
    == :: ExternalDeclaration -> ExternalDeclaration -> Bool
    $c/= :: ExternalDeclaration -> ExternalDeclaration -> Bool
    /= :: ExternalDeclaration -> ExternalDeclaration -> Bool
    C.Eq, Eq ExternalDeclaration
    Eq ExternalDeclaration =>
    (ExternalDeclaration -> ExternalDeclaration -> Ordering)
    -> (ExternalDeclaration -> ExternalDeclaration -> Bool)
    -> (ExternalDeclaration -> ExternalDeclaration -> Bool)
    -> (ExternalDeclaration -> ExternalDeclaration -> Bool)
    -> (ExternalDeclaration -> ExternalDeclaration -> Bool)
    -> (ExternalDeclaration
        -> ExternalDeclaration -> ExternalDeclaration)
    -> (ExternalDeclaration
        -> ExternalDeclaration -> ExternalDeclaration)
    -> Ord ExternalDeclaration
    ExternalDeclaration -> ExternalDeclaration -> Bool
    ExternalDeclaration -> ExternalDeclaration -> Ordering
    ExternalDeclaration -> ExternalDeclaration -> ExternalDeclaration
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: ExternalDeclaration -> ExternalDeclaration -> Ordering
    compare :: ExternalDeclaration -> ExternalDeclaration -> Ordering
    $c< :: ExternalDeclaration -> ExternalDeclaration -> Bool
    < :: ExternalDeclaration -> ExternalDeclaration -> Bool
    $c<= :: ExternalDeclaration -> ExternalDeclaration -> Bool
    <= :: ExternalDeclaration -> ExternalDeclaration -> Bool
    $c> :: ExternalDeclaration -> ExternalDeclaration -> Bool
    > :: ExternalDeclaration -> ExternalDeclaration -> Bool
    $c>= :: ExternalDeclaration -> ExternalDeclaration -> Bool
    >= :: ExternalDeclaration -> ExternalDeclaration -> Bool
    $cmax :: ExternalDeclaration -> ExternalDeclaration -> ExternalDeclaration
    max :: ExternalDeclaration -> ExternalDeclaration -> ExternalDeclaration
    $cmin :: ExternalDeclaration -> ExternalDeclaration -> ExternalDeclaration
    min :: ExternalDeclaration -> ExternalDeclaration -> ExternalDeclaration
    C.Ord, Int -> ExternalDeclaration -> ShowS
    [ExternalDeclaration] -> ShowS
    ExternalDeclaration -> String
    (Int -> ExternalDeclaration -> ShowS)
    -> (ExternalDeclaration -> String)
    -> ([ExternalDeclaration] -> ShowS)
    -> Show ExternalDeclaration
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> ExternalDeclaration -> ShowS
    showsPrec :: Int -> ExternalDeclaration -> ShowS
    $cshow :: ExternalDeclaration -> String
    show :: ExternalDeclaration -> String
    $cshowList :: [ExternalDeclaration] -> ShowS
    showList :: [ExternalDeclaration] -> ShowS
    C.Show, ReadPrec [ExternalDeclaration]
    ReadPrec ExternalDeclaration
    Int -> ReadS ExternalDeclaration
    ReadS [ExternalDeclaration]
    (Int -> ReadS ExternalDeclaration)
    -> ReadS [ExternalDeclaration]
    -> ReadPrec ExternalDeclaration
    -> ReadPrec [ExternalDeclaration]
    -> Read ExternalDeclaration
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS ExternalDeclaration
    readsPrec :: Int -> ReadS ExternalDeclaration
    $creadList :: ReadS [ExternalDeclaration]
    readList :: ReadS [ExternalDeclaration]
    $creadPrec :: ReadPrec ExternalDeclaration
    readPrec :: ReadPrec ExternalDeclaration
    $creadListPrec :: ReadPrec [ExternalDeclaration]
    readListPrec :: ReadPrec [ExternalDeclaration]
    C.Read)

    data FunctionDefinition
        = MkFunctionDefinition [DeclarationSpecifier] Declarator [Declaration] CompoundStatement
      deriving (FunctionDefinition -> FunctionDefinition -> Bool
    (FunctionDefinition -> FunctionDefinition -> Bool)
    -> (FunctionDefinition -> FunctionDefinition -> Bool)
    -> Eq FunctionDefinition
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: FunctionDefinition -> FunctionDefinition -> Bool
    == :: FunctionDefinition -> FunctionDefinition -> Bool
    $c/= :: FunctionDefinition -> FunctionDefinition -> Bool
    /= :: FunctionDefinition -> FunctionDefinition -> Bool
    C.Eq, Eq FunctionDefinition
    Eq FunctionDefinition =>
    (FunctionDefinition -> FunctionDefinition -> Ordering)
    -> (FunctionDefinition -> FunctionDefinition -> Bool)
    -> (FunctionDefinition -> FunctionDefinition -> Bool)
    -> (FunctionDefinition -> FunctionDefinition -> Bool)
    -> (FunctionDefinition -> FunctionDefinition -> Bool)
    -> (FunctionDefinition -> FunctionDefinition -> FunctionDefinition)
    -> (FunctionDefinition -> FunctionDefinition -> FunctionDefinition)
    -> Ord FunctionDefinition
    FunctionDefinition -> FunctionDefinition -> Bool
    FunctionDefinition -> FunctionDefinition -> Ordering
    FunctionDefinition -> FunctionDefinition -> FunctionDefinition
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: FunctionDefinition -> FunctionDefinition -> Ordering
    compare :: FunctionDefinition -> FunctionDefinition -> Ordering
    $c< :: FunctionDefinition -> FunctionDefinition -> Bool
    < :: FunctionDefinition -> FunctionDefinition -> Bool
    $c<= :: FunctionDefinition -> FunctionDefinition -> Bool
    <= :: FunctionDefinition -> FunctionDefinition -> Bool
    $c> :: FunctionDefinition -> FunctionDefinition -> Bool
    > :: FunctionDefinition -> FunctionDefinition -> Bool
    $c>= :: FunctionDefinition -> FunctionDefinition -> Bool
    >= :: FunctionDefinition -> FunctionDefinition -> Bool
    $cmax :: FunctionDefinition -> FunctionDefinition -> FunctionDefinition
    max :: FunctionDefinition -> FunctionDefinition -> FunctionDefinition
    $cmin :: FunctionDefinition -> FunctionDefinition -> FunctionDefinition
    min :: FunctionDefinition -> FunctionDefinition -> FunctionDefinition
    C.Ord, Int -> FunctionDefinition -> ShowS
    [FunctionDefinition] -> ShowS
    FunctionDefinition -> String
    (Int -> FunctionDefinition -> ShowS)
    -> (FunctionDefinition -> String)
    -> ([FunctionDefinition] -> ShowS)
    -> Show FunctionDefinition
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> FunctionDefinition -> ShowS
    showsPrec :: Int -> FunctionDefinition -> ShowS
    $cshow :: FunctionDefinition -> String
    show :: FunctionDefinition -> String
    $cshowList :: [FunctionDefinition] -> ShowS
    showList :: [FunctionDefinition] -> ShowS
    C.Show, ReadPrec [FunctionDefinition]
    ReadPrec FunctionDefinition
    Int -> ReadS FunctionDefinition
    ReadS [FunctionDefinition]
    (Int -> ReadS FunctionDefinition)
    -> ReadS [FunctionDefinition]
    -> ReadPrec FunctionDefinition
    -> ReadPrec [FunctionDefinition]
    -> Read FunctionDefinition
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS FunctionDefinition
    readsPrec :: Int -> ReadS FunctionDefinition
    $creadList :: ReadS [FunctionDefinition]
    readList :: ReadS [FunctionDefinition]
    $creadPrec :: ReadPrec FunctionDefinition
    readPrec :: ReadPrec FunctionDefinition
    $creadListPrec :: ReadPrec [FunctionDefinition]
    readListPrec :: ReadPrec [FunctionDefinition]
    C.Read)

    data Declaration
        = MkDeclaration DeclarationSpecifiers InitDeclarationListOpt
      deriving (Declaration -> Declaration -> Bool
    (Declaration -> Declaration -> Bool)
    -> (Declaration -> Declaration -> Bool) -> Eq Declaration
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: Declaration -> Declaration -> Bool
    == :: Declaration -> Declaration -> Bool
    $c/= :: Declaration -> Declaration -> Bool
    /= :: Declaration -> Declaration -> Bool
    C.Eq, Eq Declaration
    Eq Declaration =>
    (Declaration -> Declaration -> Ordering)
    -> (Declaration -> Declaration -> Bool)
    -> (Declaration -> Declaration -> Bool)
    -> (Declaration -> Declaration -> Bool)
    -> (Declaration -> Declaration -> Bool)
    -> (Declaration -> Declaration -> Declaration)
    -> (Declaration -> Declaration -> Declaration)
    -> Ord Declaration
    Declaration -> Declaration -> Bool
    Declaration -> Declaration -> Ordering
    Declaration -> Declaration -> Declaration
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: Declaration -> Declaration -> Ordering
    compare :: Declaration -> Declaration -> Ordering
    $c< :: Declaration -> Declaration -> Bool
    < :: Declaration -> Declaration -> Bool
    $c<= :: Declaration -> Declaration -> Bool
    <= :: Declaration -> Declaration -> Bool
    $c> :: Declaration -> Declaration -> Bool
    > :: Declaration -> Declaration -> Bool
    $c>= :: Declaration -> Declaration -> Bool
    >= :: Declaration -> Declaration -> Bool
    $cmax :: Declaration -> Declaration -> Declaration
    max :: Declaration -> Declaration -> Declaration
    $cmin :: Declaration -> Declaration -> Declaration
    min :: Declaration -> Declaration -> Declaration
    C.Ord, Int -> Declaration -> ShowS
    [Declaration] -> ShowS
    Declaration -> String
    (Int -> Declaration -> ShowS)
    -> (Declaration -> String)
    -> ([Declaration] -> ShowS)
    -> Show Declaration
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> Declaration -> ShowS
    showsPrec :: Int -> Declaration -> ShowS
    $cshow :: Declaration -> String
    show :: Declaration -> String
    $cshowList :: [Declaration] -> ShowS
    showList :: [Declaration] -> ShowS
    C.Show, ReadPrec [Declaration]
    ReadPrec Declaration
    Int -> ReadS Declaration
    ReadS [Declaration]
    (Int -> ReadS Declaration)
    -> ReadS [Declaration]
    -> ReadPrec Declaration
    -> ReadPrec [Declaration]
    -> Read Declaration
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS Declaration
    readsPrec :: Int -> ReadS Declaration
    $creadList :: ReadS [Declaration]
    readList :: ReadS [Declaration]
    $creadPrec :: ReadPrec Declaration
    readPrec :: ReadPrec Declaration
    $creadListPrec :: ReadPrec [Declaration]
    readListPrec :: ReadPrec [Declaration]
    C.Read)

    data DeclarationSpecifiers
        = DeclarationSpecifiers DeclarationSpecifier [DeclarationSpecifier]
      deriving (DeclarationSpecifiers -> DeclarationSpecifiers -> Bool
    (DeclarationSpecifiers -> DeclarationSpecifiers -> Bool)
    -> (DeclarationSpecifiers -> DeclarationSpecifiers -> Bool)
    -> Eq DeclarationSpecifiers
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: DeclarationSpecifiers -> DeclarationSpecifiers -> Bool
    == :: DeclarationSpecifiers -> DeclarationSpecifiers -> Bool
    $c/= :: DeclarationSpecifiers -> DeclarationSpecifiers -> Bool
    /= :: DeclarationSpecifiers -> DeclarationSpecifiers -> Bool
    C.Eq, Eq DeclarationSpecifiers
    Eq DeclarationSpecifiers =>
    (DeclarationSpecifiers -> DeclarationSpecifiers -> Ordering)
    -> (DeclarationSpecifiers -> DeclarationSpecifiers -> Bool)
    -> (DeclarationSpecifiers -> DeclarationSpecifiers -> Bool)
    -> (DeclarationSpecifiers -> DeclarationSpecifiers -> Bool)
    -> (DeclarationSpecifiers -> DeclarationSpecifiers -> Bool)
    -> (DeclarationSpecifiers
        -> DeclarationSpecifiers -> DeclarationSpecifiers)
    -> (DeclarationSpecifiers
        -> DeclarationSpecifiers -> DeclarationSpecifiers)
    -> Ord DeclarationSpecifiers
    DeclarationSpecifiers -> DeclarationSpecifiers -> Bool
    DeclarationSpecifiers -> DeclarationSpecifiers -> Ordering
    DeclarationSpecifiers
    -> DeclarationSpecifiers -> DeclarationSpecifiers
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: DeclarationSpecifiers -> DeclarationSpecifiers -> Ordering
    compare :: DeclarationSpecifiers -> DeclarationSpecifiers -> Ordering
    $c< :: DeclarationSpecifiers -> DeclarationSpecifiers -> Bool
    < :: DeclarationSpecifiers -> DeclarationSpecifiers -> Bool
    $c<= :: DeclarationSpecifiers -> DeclarationSpecifiers -> Bool
    <= :: DeclarationSpecifiers -> DeclarationSpecifiers -> Bool
    $c> :: DeclarationSpecifiers -> DeclarationSpecifiers -> Bool
    > :: DeclarationSpecifiers -> DeclarationSpecifiers -> Bool
    $c>= :: DeclarationSpecifiers -> DeclarationSpecifiers -> Bool
    >= :: DeclarationSpecifiers -> DeclarationSpecifiers -> Bool
    $cmax :: DeclarationSpecifiers
    -> DeclarationSpecifiers -> DeclarationSpecifiers
    max :: DeclarationSpecifiers
    -> DeclarationSpecifiers -> DeclarationSpecifiers
    $cmin :: DeclarationSpecifiers
    -> DeclarationSpecifiers -> DeclarationSpecifiers
    min :: DeclarationSpecifiers
    -> DeclarationSpecifiers -> DeclarationSpecifiers
    C.Ord, Int -> DeclarationSpecifiers -> ShowS
    [DeclarationSpecifiers] -> ShowS
    DeclarationSpecifiers -> String
    (Int -> DeclarationSpecifiers -> ShowS)
    -> (DeclarationSpecifiers -> String)
    -> ([DeclarationSpecifiers] -> ShowS)
    -> Show DeclarationSpecifiers
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> DeclarationSpecifiers -> ShowS
    showsPrec :: Int -> DeclarationSpecifiers -> ShowS
    $cshow :: DeclarationSpecifiers -> String
    show :: DeclarationSpecifiers -> String
    $cshowList :: [DeclarationSpecifiers] -> ShowS
    showList :: [DeclarationSpecifiers] -> ShowS
    C.Show, ReadPrec [DeclarationSpecifiers]
    ReadPrec DeclarationSpecifiers
    Int -> ReadS DeclarationSpecifiers
    ReadS [DeclarationSpecifiers]
    (Int -> ReadS DeclarationSpecifiers)
    -> ReadS [DeclarationSpecifiers]
    -> ReadPrec DeclarationSpecifiers
    -> ReadPrec [DeclarationSpecifiers]
    -> Read DeclarationSpecifiers
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS DeclarationSpecifiers
    readsPrec :: Int -> ReadS DeclarationSpecifiers
    $creadList :: ReadS [DeclarationSpecifiers]
    readList :: ReadS [DeclarationSpecifiers]
    $creadPrec :: ReadPrec DeclarationSpecifiers
    readPrec :: ReadPrec DeclarationSpecifiers
    $creadListPrec :: ReadPrec [DeclarationSpecifiers]
    readListPrec :: ReadPrec [DeclarationSpecifiers]
    C.Read)

    data DeclarationSpecifier
        = MkDeclarationSpecifierStorageClass StorageClassSpecifier
        | MkDeclarationSpecifierTypeSpecifier TypeSpecifier
        | MkDeclarationSpecifierTypeQualifier TypeQualifier
      deriving (DeclarationSpecifier -> DeclarationSpecifier -> Bool
    (DeclarationSpecifier -> DeclarationSpecifier -> Bool)
    -> (DeclarationSpecifier -> DeclarationSpecifier -> Bool)
    -> Eq DeclarationSpecifier
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: DeclarationSpecifier -> DeclarationSpecifier -> Bool
    == :: DeclarationSpecifier -> DeclarationSpecifier -> Bool
    $c/= :: DeclarationSpecifier -> DeclarationSpecifier -> Bool
    /= :: DeclarationSpecifier -> DeclarationSpecifier -> Bool
    C.Eq, Eq DeclarationSpecifier
    Eq DeclarationSpecifier =>
    (DeclarationSpecifier -> DeclarationSpecifier -> Ordering)
    -> (DeclarationSpecifier -> DeclarationSpecifier -> Bool)
    -> (DeclarationSpecifier -> DeclarationSpecifier -> Bool)
    -> (DeclarationSpecifier -> DeclarationSpecifier -> Bool)
    -> (DeclarationSpecifier -> DeclarationSpecifier -> Bool)
    -> (DeclarationSpecifier
        -> DeclarationSpecifier -> DeclarationSpecifier)
    -> (DeclarationSpecifier
        -> DeclarationSpecifier -> DeclarationSpecifier)
    -> Ord DeclarationSpecifier
    DeclarationSpecifier -> DeclarationSpecifier -> Bool
    DeclarationSpecifier -> DeclarationSpecifier -> Ordering
    DeclarationSpecifier
    -> DeclarationSpecifier -> DeclarationSpecifier
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: DeclarationSpecifier -> DeclarationSpecifier -> Ordering
    compare :: DeclarationSpecifier -> DeclarationSpecifier -> Ordering
    $c< :: DeclarationSpecifier -> DeclarationSpecifier -> Bool
    < :: DeclarationSpecifier -> DeclarationSpecifier -> Bool
    $c<= :: DeclarationSpecifier -> DeclarationSpecifier -> Bool
    <= :: DeclarationSpecifier -> DeclarationSpecifier -> Bool
    $c> :: DeclarationSpecifier -> DeclarationSpecifier -> Bool
    > :: DeclarationSpecifier -> DeclarationSpecifier -> Bool
    $c>= :: DeclarationSpecifier -> DeclarationSpecifier -> Bool
    >= :: DeclarationSpecifier -> DeclarationSpecifier -> Bool
    $cmax :: DeclarationSpecifier
    -> DeclarationSpecifier -> DeclarationSpecifier
    max :: DeclarationSpecifier
    -> DeclarationSpecifier -> DeclarationSpecifier
    $cmin :: DeclarationSpecifier
    -> DeclarationSpecifier -> DeclarationSpecifier
    min :: DeclarationSpecifier
    -> DeclarationSpecifier -> DeclarationSpecifier
    C.Ord, Int -> DeclarationSpecifier -> ShowS
    [DeclarationSpecifier] -> ShowS
    DeclarationSpecifier -> String
    (Int -> DeclarationSpecifier -> ShowS)
    -> (DeclarationSpecifier -> String)
    -> ([DeclarationSpecifier] -> ShowS)
    -> Show DeclarationSpecifier
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> DeclarationSpecifier -> ShowS
    showsPrec :: Int -> DeclarationSpecifier -> ShowS
    $cshow :: DeclarationSpecifier -> String
    show :: DeclarationSpecifier -> String
    $cshowList :: [DeclarationSpecifier] -> ShowS
    showList :: [DeclarationSpecifier] -> ShowS
    C.Show, ReadPrec [DeclarationSpecifier]
    ReadPrec DeclarationSpecifier
    Int -> ReadS DeclarationSpecifier
    ReadS [DeclarationSpecifier]
    (Int -> ReadS DeclarationSpecifier)
    -> ReadS [DeclarationSpecifier]
    -> ReadPrec DeclarationSpecifier
    -> ReadPrec [DeclarationSpecifier]
    -> Read DeclarationSpecifier
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS DeclarationSpecifier
    readsPrec :: Int -> ReadS DeclarationSpecifier
    $creadList :: ReadS [DeclarationSpecifier]
    readList :: ReadS [DeclarationSpecifier]
    $creadPrec :: ReadPrec DeclarationSpecifier
    readPrec :: ReadPrec DeclarationSpecifier
    $creadListPrec :: ReadPrec [DeclarationSpecifier]
    readListPrec :: ReadPrec [DeclarationSpecifier]
    C.Read)

    data StorageClassSpecifier
        = MkStorageClassSpecifierAuto
        | MkStorageClassSpecifierRegister
        | MkStorageClassSpecifierStatic
        | MkStorageClassSpecifierExtern
        | MkStorageClassSpecifierTypedef
      deriving (StorageClassSpecifier -> StorageClassSpecifier -> Bool
    (StorageClassSpecifier -> StorageClassSpecifier -> Bool)
    -> (StorageClassSpecifier -> StorageClassSpecifier -> Bool)
    -> Eq StorageClassSpecifier
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: StorageClassSpecifier -> StorageClassSpecifier -> Bool
    == :: StorageClassSpecifier -> StorageClassSpecifier -> Bool
    $c/= :: StorageClassSpecifier -> StorageClassSpecifier -> Bool
    /= :: StorageClassSpecifier -> StorageClassSpecifier -> Bool
    C.Eq, Eq StorageClassSpecifier
    Eq StorageClassSpecifier =>
    (StorageClassSpecifier -> StorageClassSpecifier -> Ordering)
    -> (StorageClassSpecifier -> StorageClassSpecifier -> Bool)
    -> (StorageClassSpecifier -> StorageClassSpecifier -> Bool)
    -> (StorageClassSpecifier -> StorageClassSpecifier -> Bool)
    -> (StorageClassSpecifier -> StorageClassSpecifier -> Bool)
    -> (StorageClassSpecifier
        -> StorageClassSpecifier -> StorageClassSpecifier)
    -> (StorageClassSpecifier
        -> StorageClassSpecifier -> StorageClassSpecifier)
    -> Ord StorageClassSpecifier
    StorageClassSpecifier -> StorageClassSpecifier -> Bool
    StorageClassSpecifier -> StorageClassSpecifier -> Ordering
    StorageClassSpecifier
    -> StorageClassSpecifier -> StorageClassSpecifier
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: StorageClassSpecifier -> StorageClassSpecifier -> Ordering
    compare :: StorageClassSpecifier -> StorageClassSpecifier -> Ordering
    $c< :: StorageClassSpecifier -> StorageClassSpecifier -> Bool
    < :: StorageClassSpecifier -> StorageClassSpecifier -> Bool
    $c<= :: StorageClassSpecifier -> StorageClassSpecifier -> Bool
    <= :: StorageClassSpecifier -> StorageClassSpecifier -> Bool
    $c> :: StorageClassSpecifier -> StorageClassSpecifier -> Bool
    > :: StorageClassSpecifier -> StorageClassSpecifier -> Bool
    $c>= :: StorageClassSpecifier -> StorageClassSpecifier -> Bool
    >= :: StorageClassSpecifier -> StorageClassSpecifier -> Bool
    $cmax :: StorageClassSpecifier
    -> StorageClassSpecifier -> StorageClassSpecifier
    max :: StorageClassSpecifier
    -> StorageClassSpecifier -> StorageClassSpecifier
    $cmin :: StorageClassSpecifier
    -> StorageClassSpecifier -> StorageClassSpecifier
    min :: StorageClassSpecifier
    -> StorageClassSpecifier -> StorageClassSpecifier
    C.Ord, Int -> StorageClassSpecifier -> ShowS
    [StorageClassSpecifier] -> ShowS
    StorageClassSpecifier -> String
    (Int -> StorageClassSpecifier -> ShowS)
    -> (StorageClassSpecifier -> String)
    -> ([StorageClassSpecifier] -> ShowS)
    -> Show StorageClassSpecifier
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> StorageClassSpecifier -> ShowS
    showsPrec :: Int -> StorageClassSpecifier -> ShowS
    $cshow :: StorageClassSpecifier -> String
    show :: StorageClassSpecifier -> String
    $cshowList :: [StorageClassSpecifier] -> ShowS
    showList :: [StorageClassSpecifier] -> ShowS
    C.Show, ReadPrec [StorageClassSpecifier]
    ReadPrec StorageClassSpecifier
    Int -> ReadS StorageClassSpecifier
    ReadS [StorageClassSpecifier]
    (Int -> ReadS StorageClassSpecifier)
    -> ReadS [StorageClassSpecifier]
    -> ReadPrec StorageClassSpecifier
    -> ReadPrec [StorageClassSpecifier]
    -> Read StorageClassSpecifier
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS StorageClassSpecifier
    readsPrec :: Int -> ReadS StorageClassSpecifier
    $creadList :: ReadS [StorageClassSpecifier]
    readList :: ReadS [StorageClassSpecifier]
    $creadPrec :: ReadPrec StorageClassSpecifier
    readPrec :: ReadPrec StorageClassSpecifier
    $creadListPrec :: ReadPrec [StorageClassSpecifier]
    readListPrec :: ReadPrec [StorageClassSpecifier]
    C.Read)

    data TypeSpecifier
        = MkTypeSpecifierVoid
        | MkTypeSpecifierChar
        | MkTypeSpecifierShort
        | MkTypeSpecifierInt
        | MkTypeSpecifierInt8
        | MkTypeSpecifierInt16
        | MkTypeSpecifierInt32
        | MkTypeSpecifierInt64
        | MkTypeSpecifierUInt8
        | MkTypeSpecifierUInt16
        | MkTypeSpecifierUInt32
        | MkTypeSpecifierUInt64
        | MkTypeSpecifierLong
        | MkTypeSpecifierFloat
        | MkTypeSpecifierDouble
        | MkTypeSpecifierSigned
        | MkTypeSpecifierUnsigned
        | MkTypeSpecifierStructOrUnion StructOrUnionSpecifier
        | MkTypeSpecifierEnumSpecifier EnumSpecifier
      deriving (TypeSpecifier -> TypeSpecifier -> Bool
    (TypeSpecifier -> TypeSpecifier -> Bool)
    -> (TypeSpecifier -> TypeSpecifier -> Bool) -> Eq TypeSpecifier
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: TypeSpecifier -> TypeSpecifier -> Bool
    == :: TypeSpecifier -> TypeSpecifier -> Bool
    $c/= :: TypeSpecifier -> TypeSpecifier -> Bool
    /= :: TypeSpecifier -> TypeSpecifier -> Bool
    C.Eq, Eq TypeSpecifier
    Eq TypeSpecifier =>
    (TypeSpecifier -> TypeSpecifier -> Ordering)
    -> (TypeSpecifier -> TypeSpecifier -> Bool)
    -> (TypeSpecifier -> TypeSpecifier -> Bool)
    -> (TypeSpecifier -> TypeSpecifier -> Bool)
    -> (TypeSpecifier -> TypeSpecifier -> Bool)
    -> (TypeSpecifier -> TypeSpecifier -> TypeSpecifier)
    -> (TypeSpecifier -> TypeSpecifier -> TypeSpecifier)
    -> Ord TypeSpecifier
    TypeSpecifier -> TypeSpecifier -> Bool
    TypeSpecifier -> TypeSpecifier -> Ordering
    TypeSpecifier -> TypeSpecifier -> TypeSpecifier
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: TypeSpecifier -> TypeSpecifier -> Ordering
    compare :: TypeSpecifier -> TypeSpecifier -> Ordering
    $c< :: TypeSpecifier -> TypeSpecifier -> Bool
    < :: TypeSpecifier -> TypeSpecifier -> Bool
    $c<= :: TypeSpecifier -> TypeSpecifier -> Bool
    <= :: TypeSpecifier -> TypeSpecifier -> Bool
    $c> :: TypeSpecifier -> TypeSpecifier -> Bool
    > :: TypeSpecifier -> TypeSpecifier -> Bool
    $c>= :: TypeSpecifier -> TypeSpecifier -> Bool
    >= :: TypeSpecifier -> TypeSpecifier -> Bool
    $cmax :: TypeSpecifier -> TypeSpecifier -> TypeSpecifier
    max :: TypeSpecifier -> TypeSpecifier -> TypeSpecifier
    $cmin :: TypeSpecifier -> TypeSpecifier -> TypeSpecifier
    min :: TypeSpecifier -> TypeSpecifier -> TypeSpecifier
    C.Ord, Int -> TypeSpecifier -> ShowS
    [TypeSpecifier] -> ShowS
    TypeSpecifier -> String
    (Int -> TypeSpecifier -> ShowS)
    -> (TypeSpecifier -> String)
    -> ([TypeSpecifier] -> ShowS)
    -> Show TypeSpecifier
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> TypeSpecifier -> ShowS
    showsPrec :: Int -> TypeSpecifier -> ShowS
    $cshow :: TypeSpecifier -> String
    show :: TypeSpecifier -> String
    $cshowList :: [TypeSpecifier] -> ShowS
    showList :: [TypeSpecifier] -> ShowS
    C.Show, ReadPrec [TypeSpecifier]
    ReadPrec TypeSpecifier
    Int -> ReadS TypeSpecifier
    ReadS [TypeSpecifier]
    (Int -> ReadS TypeSpecifier)
    -> ReadS [TypeSpecifier]
    -> ReadPrec TypeSpecifier
    -> ReadPrec [TypeSpecifier]
    -> Read TypeSpecifier
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS TypeSpecifier
    readsPrec :: Int -> ReadS TypeSpecifier
    $creadList :: ReadS [TypeSpecifier]
    readList :: ReadS [TypeSpecifier]
    $creadPrec :: ReadPrec TypeSpecifier
    readPrec :: ReadPrec TypeSpecifier
    $creadListPrec :: ReadPrec [TypeSpecifier]
    readListPrec :: ReadPrec [TypeSpecifier]
    C.Read)

    data TypeQualifier = MkTypeQualifierConst | MkTypeQualifierVolatile
      deriving (TypeQualifier -> TypeQualifier -> Bool
    (TypeQualifier -> TypeQualifier -> Bool)
    -> (TypeQualifier -> TypeQualifier -> Bool) -> Eq TypeQualifier
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: TypeQualifier -> TypeQualifier -> Bool
    == :: TypeQualifier -> TypeQualifier -> Bool
    $c/= :: TypeQualifier -> TypeQualifier -> Bool
    /= :: TypeQualifier -> TypeQualifier -> Bool
    C.Eq, Eq TypeQualifier
    Eq TypeQualifier =>
    (TypeQualifier -> TypeQualifier -> Ordering)
    -> (TypeQualifier -> TypeQualifier -> Bool)
    -> (TypeQualifier -> TypeQualifier -> Bool)
    -> (TypeQualifier -> TypeQualifier -> Bool)
    -> (TypeQualifier -> TypeQualifier -> Bool)
    -> (TypeQualifier -> TypeQualifier -> TypeQualifier)
    -> (TypeQualifier -> TypeQualifier -> TypeQualifier)
    -> Ord TypeQualifier
    TypeQualifier -> TypeQualifier -> Bool
    TypeQualifier -> TypeQualifier -> Ordering
    TypeQualifier -> TypeQualifier -> TypeQualifier
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: TypeQualifier -> TypeQualifier -> Ordering
    compare :: TypeQualifier -> TypeQualifier -> Ordering
    $c< :: TypeQualifier -> TypeQualifier -> Bool
    < :: TypeQualifier -> TypeQualifier -> Bool
    $c<= :: TypeQualifier -> TypeQualifier -> Bool
    <= :: TypeQualifier -> TypeQualifier -> Bool
    $c> :: TypeQualifier -> TypeQualifier -> Bool
    > :: TypeQualifier -> TypeQualifier -> Bool
    $c>= :: TypeQualifier -> TypeQualifier -> Bool
    >= :: TypeQualifier -> TypeQualifier -> Bool
    $cmax :: TypeQualifier -> TypeQualifier -> TypeQualifier
    max :: TypeQualifier -> TypeQualifier -> TypeQualifier
    $cmin :: TypeQualifier -> TypeQualifier -> TypeQualifier
    min :: TypeQualifier -> TypeQualifier -> TypeQualifier
    C.Ord, Int -> TypeQualifier -> ShowS
    [TypeQualifier] -> ShowS
    TypeQualifier -> String
    (Int -> TypeQualifier -> ShowS)
    -> (TypeQualifier -> String)
    -> ([TypeQualifier] -> ShowS)
    -> Show TypeQualifier
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> TypeQualifier -> ShowS
    showsPrec :: Int -> TypeQualifier -> ShowS
    $cshow :: TypeQualifier -> String
    show :: TypeQualifier -> String
    $cshowList :: [TypeQualifier] -> ShowS
    showList :: [TypeQualifier] -> ShowS
    C.Show, ReadPrec [TypeQualifier]
    ReadPrec TypeQualifier
    Int -> ReadS TypeQualifier
    ReadS [TypeQualifier]
    (Int -> ReadS TypeQualifier)
    -> ReadS [TypeQualifier]
    -> ReadPrec TypeQualifier
    -> ReadPrec [TypeQualifier]
    -> Read TypeQualifier
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS TypeQualifier
    readsPrec :: Int -> ReadS TypeQualifier
    $creadList :: ReadS [TypeQualifier]
    readList :: ReadS [TypeQualifier]
    $creadPrec :: ReadPrec TypeQualifier
    readPrec :: ReadPrec TypeQualifier
    $creadListPrec :: ReadPrec [TypeQualifier]
    readListPrec :: ReadPrec [TypeQualifier]
    C.Read)

    data StructOrUnionSpecifier
        = MkStructOrUnionSpecifierWithFields StructOrUnion IdentifierOpt [StructDeclaration]
        | MkStructOrUnionSpecifierEmpty StructOrUnion Identifier
      deriving (StructOrUnionSpecifier -> StructOrUnionSpecifier -> Bool
    (StructOrUnionSpecifier -> StructOrUnionSpecifier -> Bool)
    -> (StructOrUnionSpecifier -> StructOrUnionSpecifier -> Bool)
    -> Eq StructOrUnionSpecifier
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: StructOrUnionSpecifier -> StructOrUnionSpecifier -> Bool
    == :: StructOrUnionSpecifier -> StructOrUnionSpecifier -> Bool
    $c/= :: StructOrUnionSpecifier -> StructOrUnionSpecifier -> Bool
    /= :: StructOrUnionSpecifier -> StructOrUnionSpecifier -> Bool
    C.Eq, Eq StructOrUnionSpecifier
    Eq StructOrUnionSpecifier =>
    (StructOrUnionSpecifier -> StructOrUnionSpecifier -> Ordering)
    -> (StructOrUnionSpecifier -> StructOrUnionSpecifier -> Bool)
    -> (StructOrUnionSpecifier -> StructOrUnionSpecifier -> Bool)
    -> (StructOrUnionSpecifier -> StructOrUnionSpecifier -> Bool)
    -> (StructOrUnionSpecifier -> StructOrUnionSpecifier -> Bool)
    -> (StructOrUnionSpecifier
        -> StructOrUnionSpecifier -> StructOrUnionSpecifier)
    -> (StructOrUnionSpecifier
        -> StructOrUnionSpecifier -> StructOrUnionSpecifier)
    -> Ord StructOrUnionSpecifier
    StructOrUnionSpecifier -> StructOrUnionSpecifier -> Bool
    StructOrUnionSpecifier -> StructOrUnionSpecifier -> Ordering
    StructOrUnionSpecifier
    -> StructOrUnionSpecifier -> StructOrUnionSpecifier
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: StructOrUnionSpecifier -> StructOrUnionSpecifier -> Ordering
    compare :: StructOrUnionSpecifier -> StructOrUnionSpecifier -> Ordering
    $c< :: StructOrUnionSpecifier -> StructOrUnionSpecifier -> Bool
    < :: StructOrUnionSpecifier -> StructOrUnionSpecifier -> Bool
    $c<= :: StructOrUnionSpecifier -> StructOrUnionSpecifier -> Bool
    <= :: StructOrUnionSpecifier -> StructOrUnionSpecifier -> Bool
    $c> :: StructOrUnionSpecifier -> StructOrUnionSpecifier -> Bool
    > :: StructOrUnionSpecifier -> StructOrUnionSpecifier -> Bool
    $c>= :: StructOrUnionSpecifier -> StructOrUnionSpecifier -> Bool
    >= :: StructOrUnionSpecifier -> StructOrUnionSpecifier -> Bool
    $cmax :: StructOrUnionSpecifier
    -> StructOrUnionSpecifier -> StructOrUnionSpecifier
    max :: StructOrUnionSpecifier
    -> StructOrUnionSpecifier -> StructOrUnionSpecifier
    $cmin :: StructOrUnionSpecifier
    -> StructOrUnionSpecifier -> StructOrUnionSpecifier
    min :: StructOrUnionSpecifier
    -> StructOrUnionSpecifier -> StructOrUnionSpecifier
    C.Ord, Int -> StructOrUnionSpecifier -> ShowS
    [StructOrUnionSpecifier] -> ShowS
    StructOrUnionSpecifier -> String
    (Int -> StructOrUnionSpecifier -> ShowS)
    -> (StructOrUnionSpecifier -> String)
    -> ([StructOrUnionSpecifier] -> ShowS)
    -> Show StructOrUnionSpecifier
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> StructOrUnionSpecifier -> ShowS
    showsPrec :: Int -> StructOrUnionSpecifier -> ShowS
    $cshow :: StructOrUnionSpecifier -> String
    show :: StructOrUnionSpecifier -> String
    $cshowList :: [StructOrUnionSpecifier] -> ShowS
    showList :: [StructOrUnionSpecifier] -> ShowS
    C.Show, ReadPrec [StructOrUnionSpecifier]
    ReadPrec StructOrUnionSpecifier
    Int -> ReadS StructOrUnionSpecifier
    ReadS [StructOrUnionSpecifier]
    (Int -> ReadS StructOrUnionSpecifier)
    -> ReadS [StructOrUnionSpecifier]
    -> ReadPrec StructOrUnionSpecifier
    -> ReadPrec [StructOrUnionSpecifier]
    -> Read StructOrUnionSpecifier
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS StructOrUnionSpecifier
    readsPrec :: Int -> ReadS StructOrUnionSpecifier
    $creadList :: ReadS [StructOrUnionSpecifier]
    readList :: ReadS [StructOrUnionSpecifier]
    $creadPrec :: ReadPrec StructOrUnionSpecifier
    readPrec :: ReadPrec StructOrUnionSpecifier
    $creadListPrec :: ReadPrec [StructOrUnionSpecifier]
    readListPrec :: ReadPrec [StructOrUnionSpecifier]
    C.Read)

    data StructOrUnion = MkStructOrUnionStruct | MkStructOrUnionUnion
      deriving (StructOrUnion -> StructOrUnion -> Bool
    (StructOrUnion -> StructOrUnion -> Bool)
    -> (StructOrUnion -> StructOrUnion -> Bool) -> Eq StructOrUnion
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: StructOrUnion -> StructOrUnion -> Bool
    == :: StructOrUnion -> StructOrUnion -> Bool
    $c/= :: StructOrUnion -> StructOrUnion -> Bool
    /= :: StructOrUnion -> StructOrUnion -> Bool
    C.Eq, Eq StructOrUnion
    Eq StructOrUnion =>
    (StructOrUnion -> StructOrUnion -> Ordering)
    -> (StructOrUnion -> StructOrUnion -> Bool)
    -> (StructOrUnion -> StructOrUnion -> Bool)
    -> (StructOrUnion -> StructOrUnion -> Bool)
    -> (StructOrUnion -> StructOrUnion -> Bool)
    -> (StructOrUnion -> StructOrUnion -> StructOrUnion)
    -> (StructOrUnion -> StructOrUnion -> StructOrUnion)
    -> Ord StructOrUnion
    StructOrUnion -> StructOrUnion -> Bool
    StructOrUnion -> StructOrUnion -> Ordering
    StructOrUnion -> StructOrUnion -> StructOrUnion
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: StructOrUnion -> StructOrUnion -> Ordering
    compare :: StructOrUnion -> StructOrUnion -> Ordering
    $c< :: StructOrUnion -> StructOrUnion -> Bool
    < :: StructOrUnion -> StructOrUnion -> Bool
    $c<= :: StructOrUnion -> StructOrUnion -> Bool
    <= :: StructOrUnion -> StructOrUnion -> Bool
    $c> :: StructOrUnion -> StructOrUnion -> Bool
    > :: StructOrUnion -> StructOrUnion -> Bool
    $c>= :: StructOrUnion -> StructOrUnion -> Bool
    >= :: StructOrUnion -> StructOrUnion -> Bool
    $cmax :: StructOrUnion -> StructOrUnion -> StructOrUnion
    max :: StructOrUnion -> StructOrUnion -> StructOrUnion
    $cmin :: StructOrUnion -> StructOrUnion -> StructOrUnion
    min :: StructOrUnion -> StructOrUnion -> StructOrUnion
    C.Ord, Int -> StructOrUnion -> ShowS
    [StructOrUnion] -> ShowS
    StructOrUnion -> String
    (Int -> StructOrUnion -> ShowS)
    -> (StructOrUnion -> String)
    -> ([StructOrUnion] -> ShowS)
    -> Show StructOrUnion
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> StructOrUnion -> ShowS
    showsPrec :: Int -> StructOrUnion -> ShowS
    $cshow :: StructOrUnion -> String
    show :: StructOrUnion -> String
    $cshowList :: [StructOrUnion] -> ShowS
    showList :: [StructOrUnion] -> ShowS
    C.Show, ReadPrec [StructOrUnion]
    ReadPrec StructOrUnion
    Int -> ReadS StructOrUnion
    ReadS [StructOrUnion]
    (Int -> ReadS StructOrUnion)
    -> ReadS [StructOrUnion]
    -> ReadPrec StructOrUnion
    -> ReadPrec [StructOrUnion]
    -> Read StructOrUnion
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS StructOrUnion
    readsPrec :: Int -> ReadS StructOrUnion
    $creadList :: ReadS [StructOrUnion]
    readList :: ReadS [StructOrUnion]
    $creadPrec :: ReadPrec StructOrUnion
    readPrec :: ReadPrec StructOrUnion
    $creadListPrec :: ReadPrec [StructOrUnion]
    readListPrec :: ReadPrec [StructOrUnion]
    C.Read)

    data InitDeclarationListOpt
        = MkInitDeclarationListOptNothing
        | MkInitDeclarationListOptJust [InitDeclarator]
      deriving (InitDeclarationListOpt -> InitDeclarationListOpt -> Bool
    (InitDeclarationListOpt -> InitDeclarationListOpt -> Bool)
    -> (InitDeclarationListOpt -> InitDeclarationListOpt -> Bool)
    -> Eq InitDeclarationListOpt
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: InitDeclarationListOpt -> InitDeclarationListOpt -> Bool
    == :: InitDeclarationListOpt -> InitDeclarationListOpt -> Bool
    $c/= :: InitDeclarationListOpt -> InitDeclarationListOpt -> Bool
    /= :: InitDeclarationListOpt -> InitDeclarationListOpt -> Bool
    C.Eq, Eq InitDeclarationListOpt
    Eq InitDeclarationListOpt =>
    (InitDeclarationListOpt -> InitDeclarationListOpt -> Ordering)
    -> (InitDeclarationListOpt -> InitDeclarationListOpt -> Bool)
    -> (InitDeclarationListOpt -> InitDeclarationListOpt -> Bool)
    -> (InitDeclarationListOpt -> InitDeclarationListOpt -> Bool)
    -> (InitDeclarationListOpt -> InitDeclarationListOpt -> Bool)
    -> (InitDeclarationListOpt
        -> InitDeclarationListOpt -> InitDeclarationListOpt)
    -> (InitDeclarationListOpt
        -> InitDeclarationListOpt -> InitDeclarationListOpt)
    -> Ord InitDeclarationListOpt
    InitDeclarationListOpt -> InitDeclarationListOpt -> Bool
    InitDeclarationListOpt -> InitDeclarationListOpt -> Ordering
    InitDeclarationListOpt
    -> InitDeclarationListOpt -> InitDeclarationListOpt
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: InitDeclarationListOpt -> InitDeclarationListOpt -> Ordering
    compare :: InitDeclarationListOpt -> InitDeclarationListOpt -> Ordering
    $c< :: InitDeclarationListOpt -> InitDeclarationListOpt -> Bool
    < :: InitDeclarationListOpt -> InitDeclarationListOpt -> Bool
    $c<= :: InitDeclarationListOpt -> InitDeclarationListOpt -> Bool
    <= :: InitDeclarationListOpt -> InitDeclarationListOpt -> Bool
    $c> :: InitDeclarationListOpt -> InitDeclarationListOpt -> Bool
    > :: InitDeclarationListOpt -> InitDeclarationListOpt -> Bool
    $c>= :: InitDeclarationListOpt -> InitDeclarationListOpt -> Bool
    >= :: InitDeclarationListOpt -> InitDeclarationListOpt -> Bool
    $cmax :: InitDeclarationListOpt
    -> InitDeclarationListOpt -> InitDeclarationListOpt
    max :: InitDeclarationListOpt
    -> InitDeclarationListOpt -> InitDeclarationListOpt
    $cmin :: InitDeclarationListOpt
    -> InitDeclarationListOpt -> InitDeclarationListOpt
    min :: InitDeclarationListOpt
    -> InitDeclarationListOpt -> InitDeclarationListOpt
    C.Ord, Int -> InitDeclarationListOpt -> ShowS
    [InitDeclarationListOpt] -> ShowS
    InitDeclarationListOpt -> String
    (Int -> InitDeclarationListOpt -> ShowS)
    -> (InitDeclarationListOpt -> String)
    -> ([InitDeclarationListOpt] -> ShowS)
    -> Show InitDeclarationListOpt
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> InitDeclarationListOpt -> ShowS
    showsPrec :: Int -> InitDeclarationListOpt -> ShowS
    $cshow :: InitDeclarationListOpt -> String
    show :: InitDeclarationListOpt -> String
    $cshowList :: [InitDeclarationListOpt] -> ShowS
    showList :: [InitDeclarationListOpt] -> ShowS
    C.Show, ReadPrec [InitDeclarationListOpt]
    ReadPrec InitDeclarationListOpt
    Int -> ReadS InitDeclarationListOpt
    ReadS [InitDeclarationListOpt]
    (Int -> ReadS InitDeclarationListOpt)
    -> ReadS [InitDeclarationListOpt]
    -> ReadPrec InitDeclarationListOpt
    -> ReadPrec [InitDeclarationListOpt]
    -> Read InitDeclarationListOpt
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS InitDeclarationListOpt
    readsPrec :: Int -> ReadS InitDeclarationListOpt
    $creadList :: ReadS [InitDeclarationListOpt]
    readList :: ReadS [InitDeclarationListOpt]
    $creadPrec :: ReadPrec InitDeclarationListOpt
    readPrec :: ReadPrec InitDeclarationListOpt
    $creadListPrec :: ReadPrec [InitDeclarationListOpt]
    readListPrec :: ReadPrec [InitDeclarationListOpt]
    C.Read)

    data InitDeclarator
        = MkInitDeclaratorUninitialized Declarator
        | MkInitDeclaratorInitialized Declarator Initializer
      deriving (InitDeclarator -> InitDeclarator -> Bool
    (InitDeclarator -> InitDeclarator -> Bool)
    -> (InitDeclarator -> InitDeclarator -> Bool) -> Eq InitDeclarator
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: InitDeclarator -> InitDeclarator -> Bool
    == :: InitDeclarator -> InitDeclarator -> Bool
    $c/= :: InitDeclarator -> InitDeclarator -> Bool
    /= :: InitDeclarator -> InitDeclarator -> Bool
    C.Eq, Eq InitDeclarator
    Eq InitDeclarator =>
    (InitDeclarator -> InitDeclarator -> Ordering)
    -> (InitDeclarator -> InitDeclarator -> Bool)
    -> (InitDeclarator -> InitDeclarator -> Bool)
    -> (InitDeclarator -> InitDeclarator -> Bool)
    -> (InitDeclarator -> InitDeclarator -> Bool)
    -> (InitDeclarator -> InitDeclarator -> InitDeclarator)
    -> (InitDeclarator -> InitDeclarator -> InitDeclarator)
    -> Ord InitDeclarator
    InitDeclarator -> InitDeclarator -> Bool
    InitDeclarator -> InitDeclarator -> Ordering
    InitDeclarator -> InitDeclarator -> InitDeclarator
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: InitDeclarator -> InitDeclarator -> Ordering
    compare :: InitDeclarator -> InitDeclarator -> Ordering
    $c< :: InitDeclarator -> InitDeclarator -> Bool
    < :: InitDeclarator -> InitDeclarator -> Bool
    $c<= :: InitDeclarator -> InitDeclarator -> Bool
    <= :: InitDeclarator -> InitDeclarator -> Bool
    $c> :: InitDeclarator -> InitDeclarator -> Bool
    > :: InitDeclarator -> InitDeclarator -> Bool
    $c>= :: InitDeclarator -> InitDeclarator -> Bool
    >= :: InitDeclarator -> InitDeclarator -> Bool
    $cmax :: InitDeclarator -> InitDeclarator -> InitDeclarator
    max :: InitDeclarator -> InitDeclarator -> InitDeclarator
    $cmin :: InitDeclarator -> InitDeclarator -> InitDeclarator
    min :: InitDeclarator -> InitDeclarator -> InitDeclarator
    C.Ord, Int -> InitDeclarator -> ShowS
    [InitDeclarator] -> ShowS
    InitDeclarator -> String
    (Int -> InitDeclarator -> ShowS)
    -> (InitDeclarator -> String)
    -> ([InitDeclarator] -> ShowS)
    -> Show InitDeclarator
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> InitDeclarator -> ShowS
    showsPrec :: Int -> InitDeclarator -> ShowS
    $cshow :: InitDeclarator -> String
    show :: InitDeclarator -> String
    $cshowList :: [InitDeclarator] -> ShowS
    showList :: [InitDeclarator] -> ShowS
    C.Show, ReadPrec [InitDeclarator]
    ReadPrec InitDeclarator
    Int -> ReadS InitDeclarator
    ReadS [InitDeclarator]
    (Int -> ReadS InitDeclarator)
    -> ReadS [InitDeclarator]
    -> ReadPrec InitDeclarator
    -> ReadPrec [InitDeclarator]
    -> Read InitDeclarator
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS InitDeclarator
    readsPrec :: Int -> ReadS InitDeclarator
    $creadList :: ReadS [InitDeclarator]
    readList :: ReadS [InitDeclarator]
    $creadPrec :: ReadPrec InitDeclarator
    readPrec :: ReadPrec InitDeclarator
    $creadListPrec :: ReadPrec [InitDeclarator]
    readListPrec :: ReadPrec [InitDeclarator]
    C.Read)

    data StructDeclaration
        = MkStructDeclaration [SpecifierQualifier] [StructDeclarator]
      deriving (StructDeclaration -> StructDeclaration -> Bool
    (StructDeclaration -> StructDeclaration -> Bool)
    -> (StructDeclaration -> StructDeclaration -> Bool)
    -> Eq StructDeclaration
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: StructDeclaration -> StructDeclaration -> Bool
    == :: StructDeclaration -> StructDeclaration -> Bool
    $c/= :: StructDeclaration -> StructDeclaration -> Bool
    /= :: StructDeclaration -> StructDeclaration -> Bool
    C.Eq, Eq StructDeclaration
    Eq StructDeclaration =>
    (StructDeclaration -> StructDeclaration -> Ordering)
    -> (StructDeclaration -> StructDeclaration -> Bool)
    -> (StructDeclaration -> StructDeclaration -> Bool)
    -> (StructDeclaration -> StructDeclaration -> Bool)
    -> (StructDeclaration -> StructDeclaration -> Bool)
    -> (StructDeclaration -> StructDeclaration -> StructDeclaration)
    -> (StructDeclaration -> StructDeclaration -> StructDeclaration)
    -> Ord StructDeclaration
    StructDeclaration -> StructDeclaration -> Bool
    StructDeclaration -> StructDeclaration -> Ordering
    StructDeclaration -> StructDeclaration -> StructDeclaration
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: StructDeclaration -> StructDeclaration -> Ordering
    compare :: StructDeclaration -> StructDeclaration -> Ordering
    $c< :: StructDeclaration -> StructDeclaration -> Bool
    < :: StructDeclaration -> StructDeclaration -> Bool
    $c<= :: StructDeclaration -> StructDeclaration -> Bool
    <= :: StructDeclaration -> StructDeclaration -> Bool
    $c> :: StructDeclaration -> StructDeclaration -> Bool
    > :: StructDeclaration -> StructDeclaration -> Bool
    $c>= :: StructDeclaration -> StructDeclaration -> Bool
    >= :: StructDeclaration -> StructDeclaration -> Bool
    $cmax :: StructDeclaration -> StructDeclaration -> StructDeclaration
    max :: StructDeclaration -> StructDeclaration -> StructDeclaration
    $cmin :: StructDeclaration -> StructDeclaration -> StructDeclaration
    min :: StructDeclaration -> StructDeclaration -> StructDeclaration
    C.Ord, Int -> StructDeclaration -> ShowS
    [StructDeclaration] -> ShowS
    StructDeclaration -> String
    (Int -> StructDeclaration -> ShowS)
    -> (StructDeclaration -> String)
    -> ([StructDeclaration] -> ShowS)
    -> Show StructDeclaration
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> StructDeclaration -> ShowS
    showsPrec :: Int -> StructDeclaration -> ShowS
    $cshow :: StructDeclaration -> String
    show :: StructDeclaration -> String
    $cshowList :: [StructDeclaration] -> ShowS
    showList :: [StructDeclaration] -> ShowS
    C.Show, ReadPrec [StructDeclaration]
    ReadPrec StructDeclaration
    Int -> ReadS StructDeclaration
    ReadS [StructDeclaration]
    (Int -> ReadS StructDeclaration)
    -> ReadS [StructDeclaration]
    -> ReadPrec StructDeclaration
    -> ReadPrec [StructDeclaration]
    -> Read StructDeclaration
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS StructDeclaration
    readsPrec :: Int -> ReadS StructDeclaration
    $creadList :: ReadS [StructDeclaration]
    readList :: ReadS [StructDeclaration]
    $creadPrec :: ReadPrec StructDeclaration
    readPrec :: ReadPrec StructDeclaration
    $creadListPrec :: ReadPrec [StructDeclaration]
    readListPrec :: ReadPrec [StructDeclaration]
    C.Read)

    data SpecifierQualifier
        = MkSpecifierQualifierTypeSpecifier TypeSpecifier
        | MkSpecifierQualifierTypeQualifier TypeQualifier
      deriving (SpecifierQualifier -> SpecifierQualifier -> Bool
    (SpecifierQualifier -> SpecifierQualifier -> Bool)
    -> (SpecifierQualifier -> SpecifierQualifier -> Bool)
    -> Eq SpecifierQualifier
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: SpecifierQualifier -> SpecifierQualifier -> Bool
    == :: SpecifierQualifier -> SpecifierQualifier -> Bool
    $c/= :: SpecifierQualifier -> SpecifierQualifier -> Bool
    /= :: SpecifierQualifier -> SpecifierQualifier -> Bool
    C.Eq, Eq SpecifierQualifier
    Eq SpecifierQualifier =>
    (SpecifierQualifier -> SpecifierQualifier -> Ordering)
    -> (SpecifierQualifier -> SpecifierQualifier -> Bool)
    -> (SpecifierQualifier -> SpecifierQualifier -> Bool)
    -> (SpecifierQualifier -> SpecifierQualifier -> Bool)
    -> (SpecifierQualifier -> SpecifierQualifier -> Bool)
    -> (SpecifierQualifier -> SpecifierQualifier -> SpecifierQualifier)
    -> (SpecifierQualifier -> SpecifierQualifier -> SpecifierQualifier)
    -> Ord SpecifierQualifier
    SpecifierQualifier -> SpecifierQualifier -> Bool
    SpecifierQualifier -> SpecifierQualifier -> Ordering
    SpecifierQualifier -> SpecifierQualifier -> SpecifierQualifier
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: SpecifierQualifier -> SpecifierQualifier -> Ordering
    compare :: SpecifierQualifier -> SpecifierQualifier -> Ordering
    $c< :: SpecifierQualifier -> SpecifierQualifier -> Bool
    < :: SpecifierQualifier -> SpecifierQualifier -> Bool
    $c<= :: SpecifierQualifier -> SpecifierQualifier -> Bool
    <= :: SpecifierQualifier -> SpecifierQualifier -> Bool
    $c> :: SpecifierQualifier -> SpecifierQualifier -> Bool
    > :: SpecifierQualifier -> SpecifierQualifier -> Bool
    $c>= :: SpecifierQualifier -> SpecifierQualifier -> Bool
    >= :: SpecifierQualifier -> SpecifierQualifier -> Bool
    $cmax :: SpecifierQualifier -> SpecifierQualifier -> SpecifierQualifier
    max :: SpecifierQualifier -> SpecifierQualifier -> SpecifierQualifier
    $cmin :: SpecifierQualifier -> SpecifierQualifier -> SpecifierQualifier
    min :: SpecifierQualifier -> SpecifierQualifier -> SpecifierQualifier
    C.Ord, Int -> SpecifierQualifier -> ShowS
    [SpecifierQualifier] -> ShowS
    SpecifierQualifier -> String
    (Int -> SpecifierQualifier -> ShowS)
    -> (SpecifierQualifier -> String)
    -> ([SpecifierQualifier] -> ShowS)
    -> Show SpecifierQualifier
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> SpecifierQualifier -> ShowS
    showsPrec :: Int -> SpecifierQualifier -> ShowS
    $cshow :: SpecifierQualifier -> String
    show :: SpecifierQualifier -> String
    $cshowList :: [SpecifierQualifier] -> ShowS
    showList :: [SpecifierQualifier] -> ShowS
    C.Show, ReadPrec [SpecifierQualifier]
    ReadPrec SpecifierQualifier
    Int -> ReadS SpecifierQualifier
    ReadS [SpecifierQualifier]
    (Int -> ReadS SpecifierQualifier)
    -> ReadS [SpecifierQualifier]
    -> ReadPrec SpecifierQualifier
    -> ReadPrec [SpecifierQualifier]
    -> Read SpecifierQualifier
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS SpecifierQualifier
    readsPrec :: Int -> ReadS SpecifierQualifier
    $creadList :: ReadS [SpecifierQualifier]
    readList :: ReadS [SpecifierQualifier]
    $creadPrec :: ReadPrec SpecifierQualifier
    readPrec :: ReadPrec SpecifierQualifier
    $creadListPrec :: ReadPrec [SpecifierQualifier]
    readListPrec :: ReadPrec [SpecifierQualifier]
    C.Read)

    data StructDeclarator
        = MkStructDeclaratorDeclarator Declarator
        | MkStructDeclaratorConstant DeclaratorOpt ConstantExpression
      deriving (StructDeclarator -> StructDeclarator -> Bool
    (StructDeclarator -> StructDeclarator -> Bool)
    -> (StructDeclarator -> StructDeclarator -> Bool)
    -> Eq StructDeclarator
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: StructDeclarator -> StructDeclarator -> Bool
    == :: StructDeclarator -> StructDeclarator -> Bool
    $c/= :: StructDeclarator -> StructDeclarator -> Bool
    /= :: StructDeclarator -> StructDeclarator -> Bool
    C.Eq, Eq StructDeclarator
    Eq StructDeclarator =>
    (StructDeclarator -> StructDeclarator -> Ordering)
    -> (StructDeclarator -> StructDeclarator -> Bool)
    -> (StructDeclarator -> StructDeclarator -> Bool)
    -> (StructDeclarator -> StructDeclarator -> Bool)
    -> (StructDeclarator -> StructDeclarator -> Bool)
    -> (StructDeclarator -> StructDeclarator -> StructDeclarator)
    -> (StructDeclarator -> StructDeclarator -> StructDeclarator)
    -> Ord StructDeclarator
    StructDeclarator -> StructDeclarator -> Bool
    StructDeclarator -> StructDeclarator -> Ordering
    StructDeclarator -> StructDeclarator -> StructDeclarator
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: StructDeclarator -> StructDeclarator -> Ordering
    compare :: StructDeclarator -> StructDeclarator -> Ordering
    $c< :: StructDeclarator -> StructDeclarator -> Bool
    < :: StructDeclarator -> StructDeclarator -> Bool
    $c<= :: StructDeclarator -> StructDeclarator -> Bool
    <= :: StructDeclarator -> StructDeclarator -> Bool
    $c> :: StructDeclarator -> StructDeclarator -> Bool
    > :: StructDeclarator -> StructDeclarator -> Bool
    $c>= :: StructDeclarator -> StructDeclarator -> Bool
    >= :: StructDeclarator -> StructDeclarator -> Bool
    $cmax :: StructDeclarator -> StructDeclarator -> StructDeclarator
    max :: StructDeclarator -> StructDeclarator -> StructDeclarator
    $cmin :: StructDeclarator -> StructDeclarator -> StructDeclarator
    min :: StructDeclarator -> StructDeclarator -> StructDeclarator
    C.Ord, Int -> StructDeclarator -> ShowS
    [StructDeclarator] -> ShowS
    StructDeclarator -> String
    (Int -> StructDeclarator -> ShowS)
    -> (StructDeclarator -> String)
    -> ([StructDeclarator] -> ShowS)
    -> Show StructDeclarator
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> StructDeclarator -> ShowS
    showsPrec :: Int -> StructDeclarator -> ShowS
    $cshow :: StructDeclarator -> String
    show :: StructDeclarator -> String
    $cshowList :: [StructDeclarator] -> ShowS
    showList :: [StructDeclarator] -> ShowS
    C.Show, ReadPrec [StructDeclarator]
    ReadPrec StructDeclarator
    Int -> ReadS StructDeclarator
    ReadS [StructDeclarator]
    (Int -> ReadS StructDeclarator)
    -> ReadS [StructDeclarator]
    -> ReadPrec StructDeclarator
    -> ReadPrec [StructDeclarator]
    -> Read StructDeclarator
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS StructDeclarator
    readsPrec :: Int -> ReadS StructDeclarator
    $creadList :: ReadS [StructDeclarator]
    readList :: ReadS [StructDeclarator]
    $creadPrec :: ReadPrec StructDeclarator
    readPrec :: ReadPrec StructDeclarator
    $creadListPrec :: ReadPrec [StructDeclarator]
    readListPrec :: ReadPrec [StructDeclarator]
    C.Read)

    data EnumSpecifier
        = MkEnumSpecifierWithCases IdentifierOpt EnumeratorList
        | MkEnumSpecifierEmpty Identifier
      deriving (EnumSpecifier -> EnumSpecifier -> Bool
    (EnumSpecifier -> EnumSpecifier -> Bool)
    -> (EnumSpecifier -> EnumSpecifier -> Bool) -> Eq EnumSpecifier
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: EnumSpecifier -> EnumSpecifier -> Bool
    == :: EnumSpecifier -> EnumSpecifier -> Bool
    $c/= :: EnumSpecifier -> EnumSpecifier -> Bool
    /= :: EnumSpecifier -> EnumSpecifier -> Bool
    C.Eq, Eq EnumSpecifier
    Eq EnumSpecifier =>
    (EnumSpecifier -> EnumSpecifier -> Ordering)
    -> (EnumSpecifier -> EnumSpecifier -> Bool)
    -> (EnumSpecifier -> EnumSpecifier -> Bool)
    -> (EnumSpecifier -> EnumSpecifier -> Bool)
    -> (EnumSpecifier -> EnumSpecifier -> Bool)
    -> (EnumSpecifier -> EnumSpecifier -> EnumSpecifier)
    -> (EnumSpecifier -> EnumSpecifier -> EnumSpecifier)
    -> Ord EnumSpecifier
    EnumSpecifier -> EnumSpecifier -> Bool
    EnumSpecifier -> EnumSpecifier -> Ordering
    EnumSpecifier -> EnumSpecifier -> EnumSpecifier
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: EnumSpecifier -> EnumSpecifier -> Ordering
    compare :: EnumSpecifier -> EnumSpecifier -> Ordering
    $c< :: EnumSpecifier -> EnumSpecifier -> Bool
    < :: EnumSpecifier -> EnumSpecifier -> Bool
    $c<= :: EnumSpecifier -> EnumSpecifier -> Bool
    <= :: EnumSpecifier -> EnumSpecifier -> Bool
    $c> :: EnumSpecifier -> EnumSpecifier -> Bool
    > :: EnumSpecifier -> EnumSpecifier -> Bool
    $c>= :: EnumSpecifier -> EnumSpecifier -> Bool
    >= :: EnumSpecifier -> EnumSpecifier -> Bool
    $cmax :: EnumSpecifier -> EnumSpecifier -> EnumSpecifier
    max :: EnumSpecifier -> EnumSpecifier -> EnumSpecifier
    $cmin :: EnumSpecifier -> EnumSpecifier -> EnumSpecifier
    min :: EnumSpecifier -> EnumSpecifier -> EnumSpecifier
    C.Ord, Int -> EnumSpecifier -> ShowS
    [EnumSpecifier] -> ShowS
    EnumSpecifier -> String
    (Int -> EnumSpecifier -> ShowS)
    -> (EnumSpecifier -> String)
    -> ([EnumSpecifier] -> ShowS)
    -> Show EnumSpecifier
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> EnumSpecifier -> ShowS
    showsPrec :: Int -> EnumSpecifier -> ShowS
    $cshow :: EnumSpecifier -> String
    show :: EnumSpecifier -> String
    $cshowList :: [EnumSpecifier] -> ShowS
    showList :: [EnumSpecifier] -> ShowS
    C.Show, ReadPrec [EnumSpecifier]
    ReadPrec EnumSpecifier
    Int -> ReadS EnumSpecifier
    ReadS [EnumSpecifier]
    (Int -> ReadS EnumSpecifier)
    -> ReadS [EnumSpecifier]
    -> ReadPrec EnumSpecifier
    -> ReadPrec [EnumSpecifier]
    -> Read EnumSpecifier
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS EnumSpecifier
    readsPrec :: Int -> ReadS EnumSpecifier
    $creadList :: ReadS [EnumSpecifier]
    readList :: ReadS [EnumSpecifier]
    $creadPrec :: ReadPrec EnumSpecifier
    readPrec :: ReadPrec EnumSpecifier
    $creadListPrec :: ReadPrec [EnumSpecifier]
    readListPrec :: ReadPrec [EnumSpecifier]
    C.Read)

    data EnumeratorList
        = MkEnumeratorList1 Enumerator
        | MkEnumeratorListN EnumeratorList Enumerator
      deriving (EnumeratorList -> EnumeratorList -> Bool
    (EnumeratorList -> EnumeratorList -> Bool)
    -> (EnumeratorList -> EnumeratorList -> Bool) -> Eq EnumeratorList
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: EnumeratorList -> EnumeratorList -> Bool
    == :: EnumeratorList -> EnumeratorList -> Bool
    $c/= :: EnumeratorList -> EnumeratorList -> Bool
    /= :: EnumeratorList -> EnumeratorList -> Bool
    C.Eq, Eq EnumeratorList
    Eq EnumeratorList =>
    (EnumeratorList -> EnumeratorList -> Ordering)
    -> (EnumeratorList -> EnumeratorList -> Bool)
    -> (EnumeratorList -> EnumeratorList -> Bool)
    -> (EnumeratorList -> EnumeratorList -> Bool)
    -> (EnumeratorList -> EnumeratorList -> Bool)
    -> (EnumeratorList -> EnumeratorList -> EnumeratorList)
    -> (EnumeratorList -> EnumeratorList -> EnumeratorList)
    -> Ord EnumeratorList
    EnumeratorList -> EnumeratorList -> Bool
    EnumeratorList -> EnumeratorList -> Ordering
    EnumeratorList -> EnumeratorList -> EnumeratorList
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: EnumeratorList -> EnumeratorList -> Ordering
    compare :: EnumeratorList -> EnumeratorList -> Ordering
    $c< :: EnumeratorList -> EnumeratorList -> Bool
    < :: EnumeratorList -> EnumeratorList -> Bool
    $c<= :: EnumeratorList -> EnumeratorList -> Bool
    <= :: EnumeratorList -> EnumeratorList -> Bool
    $c> :: EnumeratorList -> EnumeratorList -> Bool
    > :: EnumeratorList -> EnumeratorList -> Bool
    $c>= :: EnumeratorList -> EnumeratorList -> Bool
    >= :: EnumeratorList -> EnumeratorList -> Bool
    $cmax :: EnumeratorList -> EnumeratorList -> EnumeratorList
    max :: EnumeratorList -> EnumeratorList -> EnumeratorList
    $cmin :: EnumeratorList -> EnumeratorList -> EnumeratorList
    min :: EnumeratorList -> EnumeratorList -> EnumeratorList
    C.Ord, Int -> EnumeratorList -> ShowS
    [EnumeratorList] -> ShowS
    EnumeratorList -> String
    (Int -> EnumeratorList -> ShowS)
    -> (EnumeratorList -> String)
    -> ([EnumeratorList] -> ShowS)
    -> Show EnumeratorList
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> EnumeratorList -> ShowS
    showsPrec :: Int -> EnumeratorList -> ShowS
    $cshow :: EnumeratorList -> String
    show :: EnumeratorList -> String
    $cshowList :: [EnumeratorList] -> ShowS
    showList :: [EnumeratorList] -> ShowS
    C.Show, ReadPrec [EnumeratorList]
    ReadPrec EnumeratorList
    Int -> ReadS EnumeratorList
    ReadS [EnumeratorList]
    (Int -> ReadS EnumeratorList)
    -> ReadS [EnumeratorList]
    -> ReadPrec EnumeratorList
    -> ReadPrec [EnumeratorList]
    -> Read EnumeratorList
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS EnumeratorList
    readsPrec :: Int -> ReadS EnumeratorList
    $creadList :: ReadS [EnumeratorList]
    readList :: ReadS [EnumeratorList]
    $creadPrec :: ReadPrec EnumeratorList
    readPrec :: ReadPrec EnumeratorList
    $creadListPrec :: ReadPrec [EnumeratorList]
    readListPrec :: ReadPrec [EnumeratorList]
    C.Read)

    data Enumerator
        = MkEnumeratorUninitialized Identifier
        | MkEnumeratorInitialized Identifier ConstantExpression
      deriving (Enumerator -> Enumerator -> Bool
    (Enumerator -> Enumerator -> Bool)
    -> (Enumerator -> Enumerator -> Bool) -> Eq Enumerator
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: Enumerator -> Enumerator -> Bool
    == :: Enumerator -> Enumerator -> Bool
    $c/= :: Enumerator -> Enumerator -> Bool
    /= :: Enumerator -> Enumerator -> Bool
    C.Eq, Eq Enumerator
    Eq Enumerator =>
    (Enumerator -> Enumerator -> Ordering)
    -> (Enumerator -> Enumerator -> Bool)
    -> (Enumerator -> Enumerator -> Bool)
    -> (Enumerator -> Enumerator -> Bool)
    -> (Enumerator -> Enumerator -> Bool)
    -> (Enumerator -> Enumerator -> Enumerator)
    -> (Enumerator -> Enumerator -> Enumerator)
    -> Ord Enumerator
    Enumerator -> Enumerator -> Bool
    Enumerator -> Enumerator -> Ordering
    Enumerator -> Enumerator -> Enumerator
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: Enumerator -> Enumerator -> Ordering
    compare :: Enumerator -> Enumerator -> Ordering
    $c< :: Enumerator -> Enumerator -> Bool
    < :: Enumerator -> Enumerator -> Bool
    $c<= :: Enumerator -> Enumerator -> Bool
    <= :: Enumerator -> Enumerator -> Bool
    $c> :: Enumerator -> Enumerator -> Bool
    > :: Enumerator -> Enumerator -> Bool
    $c>= :: Enumerator -> Enumerator -> Bool
    >= :: Enumerator -> Enumerator -> Bool
    $cmax :: Enumerator -> Enumerator -> Enumerator
    max :: Enumerator -> Enumerator -> Enumerator
    $cmin :: Enumerator -> Enumerator -> Enumerator
    min :: Enumerator -> Enumerator -> Enumerator
    C.Ord, Int -> Enumerator -> ShowS
    [Enumerator] -> ShowS
    Enumerator -> String
    (Int -> Enumerator -> ShowS)
    -> (Enumerator -> String)
    -> ([Enumerator] -> ShowS)
    -> Show Enumerator
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> Enumerator -> ShowS
    showsPrec :: Int -> Enumerator -> ShowS
    $cshow :: Enumerator -> String
    show :: Enumerator -> String
    $cshowList :: [Enumerator] -> ShowS
    showList :: [Enumerator] -> ShowS
    C.Show, ReadPrec [Enumerator]
    ReadPrec Enumerator
    Int -> ReadS Enumerator
    ReadS [Enumerator]
    (Int -> ReadS Enumerator)
    -> ReadS [Enumerator]
    -> ReadPrec Enumerator
    -> ReadPrec [Enumerator]
    -> Read Enumerator
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS Enumerator
    readsPrec :: Int -> ReadS Enumerator
    $creadList :: ReadS [Enumerator]
    readList :: ReadS [Enumerator]
    $creadPrec :: ReadPrec Enumerator
    readPrec :: ReadPrec Enumerator
    $creadListPrec :: ReadPrec [Enumerator]
    readListPrec :: ReadPrec [Enumerator]
    C.Read)

    data DeclaratorOpt
        = MkDeclaratorOptNothing | MkDeclaratorOptJust Declarator
      deriving (DeclaratorOpt -> DeclaratorOpt -> Bool
    (DeclaratorOpt -> DeclaratorOpt -> Bool)
    -> (DeclaratorOpt -> DeclaratorOpt -> Bool) -> Eq DeclaratorOpt
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: DeclaratorOpt -> DeclaratorOpt -> Bool
    == :: DeclaratorOpt -> DeclaratorOpt -> Bool
    $c/= :: DeclaratorOpt -> DeclaratorOpt -> Bool
    /= :: DeclaratorOpt -> DeclaratorOpt -> Bool
    C.Eq, Eq DeclaratorOpt
    Eq DeclaratorOpt =>
    (DeclaratorOpt -> DeclaratorOpt -> Ordering)
    -> (DeclaratorOpt -> DeclaratorOpt -> Bool)
    -> (DeclaratorOpt -> DeclaratorOpt -> Bool)
    -> (DeclaratorOpt -> DeclaratorOpt -> Bool)
    -> (DeclaratorOpt -> DeclaratorOpt -> Bool)
    -> (DeclaratorOpt -> DeclaratorOpt -> DeclaratorOpt)
    -> (DeclaratorOpt -> DeclaratorOpt -> DeclaratorOpt)
    -> Ord DeclaratorOpt
    DeclaratorOpt -> DeclaratorOpt -> Bool
    DeclaratorOpt -> DeclaratorOpt -> Ordering
    DeclaratorOpt -> DeclaratorOpt -> DeclaratorOpt
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: DeclaratorOpt -> DeclaratorOpt -> Ordering
    compare :: DeclaratorOpt -> DeclaratorOpt -> Ordering
    $c< :: DeclaratorOpt -> DeclaratorOpt -> Bool
    < :: DeclaratorOpt -> DeclaratorOpt -> Bool
    $c<= :: DeclaratorOpt -> DeclaratorOpt -> Bool
    <= :: DeclaratorOpt -> DeclaratorOpt -> Bool
    $c> :: DeclaratorOpt -> DeclaratorOpt -> Bool
    > :: DeclaratorOpt -> DeclaratorOpt -> Bool
    $c>= :: DeclaratorOpt -> DeclaratorOpt -> Bool
    >= :: DeclaratorOpt -> DeclaratorOpt -> Bool
    $cmax :: DeclaratorOpt -> DeclaratorOpt -> DeclaratorOpt
    max :: DeclaratorOpt -> DeclaratorOpt -> DeclaratorOpt
    $cmin :: DeclaratorOpt -> DeclaratorOpt -> DeclaratorOpt
    min :: DeclaratorOpt -> DeclaratorOpt -> DeclaratorOpt
    C.Ord, Int -> DeclaratorOpt -> ShowS
    [DeclaratorOpt] -> ShowS
    DeclaratorOpt -> String
    (Int -> DeclaratorOpt -> ShowS)
    -> (DeclaratorOpt -> String)
    -> ([DeclaratorOpt] -> ShowS)
    -> Show DeclaratorOpt
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> DeclaratorOpt -> ShowS
    showsPrec :: Int -> DeclaratorOpt -> ShowS
    $cshow :: DeclaratorOpt -> String
    show :: DeclaratorOpt -> String
    $cshowList :: [DeclaratorOpt] -> ShowS
    showList :: [DeclaratorOpt] -> ShowS
    C.Show, ReadPrec [DeclaratorOpt]
    ReadPrec DeclaratorOpt
    Int -> ReadS DeclaratorOpt
    ReadS [DeclaratorOpt]
    (Int -> ReadS DeclaratorOpt)
    -> ReadS [DeclaratorOpt]
    -> ReadPrec DeclaratorOpt
    -> ReadPrec [DeclaratorOpt]
    -> Read DeclaratorOpt
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS DeclaratorOpt
    readsPrec :: Int -> ReadS DeclaratorOpt
    $creadList :: ReadS [DeclaratorOpt]
    readList :: ReadS [DeclaratorOpt]
    $creadPrec :: ReadPrec DeclaratorOpt
    readPrec :: ReadPrec DeclaratorOpt
    $creadListPrec :: ReadPrec [DeclaratorOpt]
    readListPrec :: ReadPrec [DeclaratorOpt]
    C.Read)

    data Declarator = MkDeclarator PointerOpt DirectDeclarator
      deriving (Declarator -> Declarator -> Bool
    (Declarator -> Declarator -> Bool)
    -> (Declarator -> Declarator -> Bool) -> Eq Declarator
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: Declarator -> Declarator -> Bool
    == :: Declarator -> Declarator -> Bool
    $c/= :: Declarator -> Declarator -> Bool
    /= :: Declarator -> Declarator -> Bool
    C.Eq, Eq Declarator
    Eq Declarator =>
    (Declarator -> Declarator -> Ordering)
    -> (Declarator -> Declarator -> Bool)
    -> (Declarator -> Declarator -> Bool)
    -> (Declarator -> Declarator -> Bool)
    -> (Declarator -> Declarator -> Bool)
    -> (Declarator -> Declarator -> Declarator)
    -> (Declarator -> Declarator -> Declarator)
    -> Ord Declarator
    Declarator -> Declarator -> Bool
    Declarator -> Declarator -> Ordering
    Declarator -> Declarator -> Declarator
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: Declarator -> Declarator -> Ordering
    compare :: Declarator -> Declarator -> Ordering
    $c< :: Declarator -> Declarator -> Bool
    < :: Declarator -> Declarator -> Bool
    $c<= :: Declarator -> Declarator -> Bool
    <= :: Declarator -> Declarator -> Bool
    $c> :: Declarator -> Declarator -> Bool
    > :: Declarator -> Declarator -> Bool
    $c>= :: Declarator -> Declarator -> Bool
    >= :: Declarator -> Declarator -> Bool
    $cmax :: Declarator -> Declarator -> Declarator
    max :: Declarator -> Declarator -> Declarator
    $cmin :: Declarator -> Declarator -> Declarator
    min :: Declarator -> Declarator -> Declarator
    C.Ord, Int -> Declarator -> ShowS
    [Declarator] -> ShowS
    Declarator -> String
    (Int -> Declarator -> ShowS)
    -> (Declarator -> String)
    -> ([Declarator] -> ShowS)
    -> Show Declarator
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> Declarator -> ShowS
    showsPrec :: Int -> Declarator -> ShowS
    $cshow :: Declarator -> String
    show :: Declarator -> String
    $cshowList :: [Declarator] -> ShowS
    showList :: [Declarator] -> ShowS
    C.Show, ReadPrec [Declarator]
    ReadPrec Declarator
    Int -> ReadS Declarator
    ReadS [Declarator]
    (Int -> ReadS Declarator)
    -> ReadS [Declarator]
    -> ReadPrec Declarator
    -> ReadPrec [Declarator]
    -> Read Declarator
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS Declarator
    readsPrec :: Int -> ReadS Declarator
    $creadList :: ReadS [Declarator]
    readList :: ReadS [Declarator]
    $creadPrec :: ReadPrec Declarator
    readPrec :: ReadPrec Declarator
    $creadListPrec :: ReadPrec [Declarator]
    readListPrec :: ReadPrec [Declarator]
    C.Read)

    data DirectDeclarator
        = MkDirectDeclaratorIdentifier Identifier
        | MkDirectDeclaratorParDeclarator Declarator
        | MkDirectDeclaratorConstantExpressionOpt DirectDeclarator ConstantExpressionOpt
        | MkDirectDeclaratorParameterTypeList DirectDeclarator ParameterTypeList
        | MkDirectDeclaratorIdentifierListOpt DirectDeclarator IdentifierListOpt
      deriving (DirectDeclarator -> DirectDeclarator -> Bool
    (DirectDeclarator -> DirectDeclarator -> Bool)
    -> (DirectDeclarator -> DirectDeclarator -> Bool)
    -> Eq DirectDeclarator
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: DirectDeclarator -> DirectDeclarator -> Bool
    == :: DirectDeclarator -> DirectDeclarator -> Bool
    $c/= :: DirectDeclarator -> DirectDeclarator -> Bool
    /= :: DirectDeclarator -> DirectDeclarator -> Bool
    C.Eq, Eq DirectDeclarator
    Eq DirectDeclarator =>
    (DirectDeclarator -> DirectDeclarator -> Ordering)
    -> (DirectDeclarator -> DirectDeclarator -> Bool)
    -> (DirectDeclarator -> DirectDeclarator -> Bool)
    -> (DirectDeclarator -> DirectDeclarator -> Bool)
    -> (DirectDeclarator -> DirectDeclarator -> Bool)
    -> (DirectDeclarator -> DirectDeclarator -> DirectDeclarator)
    -> (DirectDeclarator -> DirectDeclarator -> DirectDeclarator)
    -> Ord DirectDeclarator
    DirectDeclarator -> DirectDeclarator -> Bool
    DirectDeclarator -> DirectDeclarator -> Ordering
    DirectDeclarator -> DirectDeclarator -> DirectDeclarator
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: DirectDeclarator -> DirectDeclarator -> Ordering
    compare :: DirectDeclarator -> DirectDeclarator -> Ordering
    $c< :: DirectDeclarator -> DirectDeclarator -> Bool
    < :: DirectDeclarator -> DirectDeclarator -> Bool
    $c<= :: DirectDeclarator -> DirectDeclarator -> Bool
    <= :: DirectDeclarator -> DirectDeclarator -> Bool
    $c> :: DirectDeclarator -> DirectDeclarator -> Bool
    > :: DirectDeclarator -> DirectDeclarator -> Bool
    $c>= :: DirectDeclarator -> DirectDeclarator -> Bool
    >= :: DirectDeclarator -> DirectDeclarator -> Bool
    $cmax :: DirectDeclarator -> DirectDeclarator -> DirectDeclarator
    max :: DirectDeclarator -> DirectDeclarator -> DirectDeclarator
    $cmin :: DirectDeclarator -> DirectDeclarator -> DirectDeclarator
    min :: DirectDeclarator -> DirectDeclarator -> DirectDeclarator
    C.Ord, Int -> DirectDeclarator -> ShowS
    [DirectDeclarator] -> ShowS
    DirectDeclarator -> String
    (Int -> DirectDeclarator -> ShowS)
    -> (DirectDeclarator -> String)
    -> ([DirectDeclarator] -> ShowS)
    -> Show DirectDeclarator
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> DirectDeclarator -> ShowS
    showsPrec :: Int -> DirectDeclarator -> ShowS
    $cshow :: DirectDeclarator -> String
    show :: DirectDeclarator -> String
    $cshowList :: [DirectDeclarator] -> ShowS
    showList :: [DirectDeclarator] -> ShowS
    C.Show, ReadPrec [DirectDeclarator]
    ReadPrec DirectDeclarator
    Int -> ReadS DirectDeclarator
    ReadS [DirectDeclarator]
    (Int -> ReadS DirectDeclarator)
    -> ReadS [DirectDeclarator]
    -> ReadPrec DirectDeclarator
    -> ReadPrec [DirectDeclarator]
    -> Read DirectDeclarator
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS DirectDeclarator
    readsPrec :: Int -> ReadS DirectDeclarator
    $creadList :: ReadS [DirectDeclarator]
    readList :: ReadS [DirectDeclarator]
    $creadPrec :: ReadPrec DirectDeclarator
    readPrec :: ReadPrec DirectDeclarator
    $creadListPrec :: ReadPrec [DirectDeclarator]
    readListPrec :: ReadPrec [DirectDeclarator]
    C.Read)

    data PointerOpt = MkPointerOptNothing | MkPointerOptJust Pointer
      deriving (PointerOpt -> PointerOpt -> Bool
    (PointerOpt -> PointerOpt -> Bool)
    -> (PointerOpt -> PointerOpt -> Bool) -> Eq PointerOpt
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: PointerOpt -> PointerOpt -> Bool
    == :: PointerOpt -> PointerOpt -> Bool
    $c/= :: PointerOpt -> PointerOpt -> Bool
    /= :: PointerOpt -> PointerOpt -> Bool
    C.Eq, Eq PointerOpt
    Eq PointerOpt =>
    (PointerOpt -> PointerOpt -> Ordering)
    -> (PointerOpt -> PointerOpt -> Bool)
    -> (PointerOpt -> PointerOpt -> Bool)
    -> (PointerOpt -> PointerOpt -> Bool)
    -> (PointerOpt -> PointerOpt -> Bool)
    -> (PointerOpt -> PointerOpt -> PointerOpt)
    -> (PointerOpt -> PointerOpt -> PointerOpt)
    -> Ord PointerOpt
    PointerOpt -> PointerOpt -> Bool
    PointerOpt -> PointerOpt -> Ordering
    PointerOpt -> PointerOpt -> PointerOpt
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: PointerOpt -> PointerOpt -> Ordering
    compare :: PointerOpt -> PointerOpt -> Ordering
    $c< :: PointerOpt -> PointerOpt -> Bool
    < :: PointerOpt -> PointerOpt -> Bool
    $c<= :: PointerOpt -> PointerOpt -> Bool
    <= :: PointerOpt -> PointerOpt -> Bool
    $c> :: PointerOpt -> PointerOpt -> Bool
    > :: PointerOpt -> PointerOpt -> Bool
    $c>= :: PointerOpt -> PointerOpt -> Bool
    >= :: PointerOpt -> PointerOpt -> Bool
    $cmax :: PointerOpt -> PointerOpt -> PointerOpt
    max :: PointerOpt -> PointerOpt -> PointerOpt
    $cmin :: PointerOpt -> PointerOpt -> PointerOpt
    min :: PointerOpt -> PointerOpt -> PointerOpt
    C.Ord, Int -> PointerOpt -> ShowS
    [PointerOpt] -> ShowS
    PointerOpt -> String
    (Int -> PointerOpt -> ShowS)
    -> (PointerOpt -> String)
    -> ([PointerOpt] -> ShowS)
    -> Show PointerOpt
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> PointerOpt -> ShowS
    showsPrec :: Int -> PointerOpt -> ShowS
    $cshow :: PointerOpt -> String
    show :: PointerOpt -> String
    $cshowList :: [PointerOpt] -> ShowS
    showList :: [PointerOpt] -> ShowS
    C.Show, ReadPrec [PointerOpt]
    ReadPrec PointerOpt
    Int -> ReadS PointerOpt
    ReadS [PointerOpt]
    (Int -> ReadS PointerOpt)
    -> ReadS [PointerOpt]
    -> ReadPrec PointerOpt
    -> ReadPrec [PointerOpt]
    -> Read PointerOpt
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS PointerOpt
    readsPrec :: Int -> ReadS PointerOpt
    $creadList :: ReadS [PointerOpt]
    readList :: ReadS [PointerOpt]
    $creadPrec :: ReadPrec PointerOpt
    readPrec :: ReadPrec PointerOpt
    $creadListPrec :: ReadPrec [PointerOpt]
    readListPrec :: ReadPrec [PointerOpt]
    C.Read)

    data Pointer
        = MkPointer1 TypeQualifierListOpt
        | MkPointerN TypeQualifierListOpt Pointer
      deriving (Pointer -> Pointer -> Bool
    (Pointer -> Pointer -> Bool)
    -> (Pointer -> Pointer -> Bool) -> Eq Pointer
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: Pointer -> Pointer -> Bool
    == :: Pointer -> Pointer -> Bool
    $c/= :: Pointer -> Pointer -> Bool
    /= :: Pointer -> Pointer -> Bool
    C.Eq, Eq Pointer
    Eq Pointer =>
    (Pointer -> Pointer -> Ordering)
    -> (Pointer -> Pointer -> Bool)
    -> (Pointer -> Pointer -> Bool)
    -> (Pointer -> Pointer -> Bool)
    -> (Pointer -> Pointer -> Bool)
    -> (Pointer -> Pointer -> Pointer)
    -> (Pointer -> Pointer -> Pointer)
    -> Ord Pointer
    Pointer -> Pointer -> Bool
    Pointer -> Pointer -> Ordering
    Pointer -> Pointer -> Pointer
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: Pointer -> Pointer -> Ordering
    compare :: Pointer -> Pointer -> Ordering
    $c< :: Pointer -> Pointer -> Bool
    < :: Pointer -> Pointer -> Bool
    $c<= :: Pointer -> Pointer -> Bool
    <= :: Pointer -> Pointer -> Bool
    $c> :: Pointer -> Pointer -> Bool
    > :: Pointer -> Pointer -> Bool
    $c>= :: Pointer -> Pointer -> Bool
    >= :: Pointer -> Pointer -> Bool
    $cmax :: Pointer -> Pointer -> Pointer
    max :: Pointer -> Pointer -> Pointer
    $cmin :: Pointer -> Pointer -> Pointer
    min :: Pointer -> Pointer -> Pointer
    C.Ord, Int -> Pointer -> ShowS
    [Pointer] -> ShowS
    Pointer -> String
    (Int -> Pointer -> ShowS)
    -> (Pointer -> String) -> ([Pointer] -> ShowS) -> Show Pointer
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> Pointer -> ShowS
    showsPrec :: Int -> Pointer -> ShowS
    $cshow :: Pointer -> String
    show :: Pointer -> String
    $cshowList :: [Pointer] -> ShowS
    showList :: [Pointer] -> ShowS
    C.Show, ReadPrec [Pointer]
    ReadPrec Pointer
    Int -> ReadS Pointer
    ReadS [Pointer]
    (Int -> ReadS Pointer)
    -> ReadS [Pointer]
    -> ReadPrec Pointer
    -> ReadPrec [Pointer]
    -> Read Pointer
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS Pointer
    readsPrec :: Int -> ReadS Pointer
    $creadList :: ReadS [Pointer]
    readList :: ReadS [Pointer]
    $creadPrec :: ReadPrec Pointer
    readPrec :: ReadPrec Pointer
    $creadListPrec :: ReadPrec [Pointer]
    readListPrec :: ReadPrec [Pointer]
    C.Read)

    data TypeQualifierListOpt
        = MkTypeQualifierListOptNothing
        | MkTypeQualifierListOptJust TypeQualifierList
      deriving (TypeQualifierListOpt -> TypeQualifierListOpt -> Bool
    (TypeQualifierListOpt -> TypeQualifierListOpt -> Bool)
    -> (TypeQualifierListOpt -> TypeQualifierListOpt -> Bool)
    -> Eq TypeQualifierListOpt
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: TypeQualifierListOpt -> TypeQualifierListOpt -> Bool
    == :: TypeQualifierListOpt -> TypeQualifierListOpt -> Bool
    $c/= :: TypeQualifierListOpt -> TypeQualifierListOpt -> Bool
    /= :: TypeQualifierListOpt -> TypeQualifierListOpt -> Bool
    C.Eq, Eq TypeQualifierListOpt
    Eq TypeQualifierListOpt =>
    (TypeQualifierListOpt -> TypeQualifierListOpt -> Ordering)
    -> (TypeQualifierListOpt -> TypeQualifierListOpt -> Bool)
    -> (TypeQualifierListOpt -> TypeQualifierListOpt -> Bool)
    -> (TypeQualifierListOpt -> TypeQualifierListOpt -> Bool)
    -> (TypeQualifierListOpt -> TypeQualifierListOpt -> Bool)
    -> (TypeQualifierListOpt
        -> TypeQualifierListOpt -> TypeQualifierListOpt)
    -> (TypeQualifierListOpt
        -> TypeQualifierListOpt -> TypeQualifierListOpt)
    -> Ord TypeQualifierListOpt
    TypeQualifierListOpt -> TypeQualifierListOpt -> Bool
    TypeQualifierListOpt -> TypeQualifierListOpt -> Ordering
    TypeQualifierListOpt
    -> TypeQualifierListOpt -> TypeQualifierListOpt
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: TypeQualifierListOpt -> TypeQualifierListOpt -> Ordering
    compare :: TypeQualifierListOpt -> TypeQualifierListOpt -> Ordering
    $c< :: TypeQualifierListOpt -> TypeQualifierListOpt -> Bool
    < :: TypeQualifierListOpt -> TypeQualifierListOpt -> Bool
    $c<= :: TypeQualifierListOpt -> TypeQualifierListOpt -> Bool
    <= :: TypeQualifierListOpt -> TypeQualifierListOpt -> Bool
    $c> :: TypeQualifierListOpt -> TypeQualifierListOpt -> Bool
    > :: TypeQualifierListOpt -> TypeQualifierListOpt -> Bool
    $c>= :: TypeQualifierListOpt -> TypeQualifierListOpt -> Bool
    >= :: TypeQualifierListOpt -> TypeQualifierListOpt -> Bool
    $cmax :: TypeQualifierListOpt
    -> TypeQualifierListOpt -> TypeQualifierListOpt
    max :: TypeQualifierListOpt
    -> TypeQualifierListOpt -> TypeQualifierListOpt
    $cmin :: TypeQualifierListOpt
    -> TypeQualifierListOpt -> TypeQualifierListOpt
    min :: TypeQualifierListOpt
    -> TypeQualifierListOpt -> TypeQualifierListOpt
    C.Ord, Int -> TypeQualifierListOpt -> ShowS
    [TypeQualifierListOpt] -> ShowS
    TypeQualifierListOpt -> String
    (Int -> TypeQualifierListOpt -> ShowS)
    -> (TypeQualifierListOpt -> String)
    -> ([TypeQualifierListOpt] -> ShowS)
    -> Show TypeQualifierListOpt
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> TypeQualifierListOpt -> ShowS
    showsPrec :: Int -> TypeQualifierListOpt -> ShowS
    $cshow :: TypeQualifierListOpt -> String
    show :: TypeQualifierListOpt -> String
    $cshowList :: [TypeQualifierListOpt] -> ShowS
    showList :: [TypeQualifierListOpt] -> ShowS
    C.Show, ReadPrec [TypeQualifierListOpt]
    ReadPrec TypeQualifierListOpt
    Int -> ReadS TypeQualifierListOpt
    ReadS [TypeQualifierListOpt]
    (Int -> ReadS TypeQualifierListOpt)
    -> ReadS [TypeQualifierListOpt]
    -> ReadPrec TypeQualifierListOpt
    -> ReadPrec [TypeQualifierListOpt]
    -> Read TypeQualifierListOpt
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS TypeQualifierListOpt
    readsPrec :: Int -> ReadS TypeQualifierListOpt
    $creadList :: ReadS [TypeQualifierListOpt]
    readList :: ReadS [TypeQualifierListOpt]
    $creadPrec :: ReadPrec TypeQualifierListOpt
    readPrec :: ReadPrec TypeQualifierListOpt
    $creadListPrec :: ReadPrec [TypeQualifierListOpt]
    readListPrec :: ReadPrec [TypeQualifierListOpt]
    C.Read)

    data TypeQualifierList
        = MkTypeQualifierList1 TypeQualifier
        | MkTypeQualifierListN TypeQualifierList TypeQualifier
      deriving (TypeQualifierList -> TypeQualifierList -> Bool
    (TypeQualifierList -> TypeQualifierList -> Bool)
    -> (TypeQualifierList -> TypeQualifierList -> Bool)
    -> Eq TypeQualifierList
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: TypeQualifierList -> TypeQualifierList -> Bool
    == :: TypeQualifierList -> TypeQualifierList -> Bool
    $c/= :: TypeQualifierList -> TypeQualifierList -> Bool
    /= :: TypeQualifierList -> TypeQualifierList -> Bool
    C.Eq, Eq TypeQualifierList
    Eq TypeQualifierList =>
    (TypeQualifierList -> TypeQualifierList -> Ordering)
    -> (TypeQualifierList -> TypeQualifierList -> Bool)
    -> (TypeQualifierList -> TypeQualifierList -> Bool)
    -> (TypeQualifierList -> TypeQualifierList -> Bool)
    -> (TypeQualifierList -> TypeQualifierList -> Bool)
    -> (TypeQualifierList -> TypeQualifierList -> TypeQualifierList)
    -> (TypeQualifierList -> TypeQualifierList -> TypeQualifierList)
    -> Ord TypeQualifierList
    TypeQualifierList -> TypeQualifierList -> Bool
    TypeQualifierList -> TypeQualifierList -> Ordering
    TypeQualifierList -> TypeQualifierList -> TypeQualifierList
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: TypeQualifierList -> TypeQualifierList -> Ordering
    compare :: TypeQualifierList -> TypeQualifierList -> Ordering
    $c< :: TypeQualifierList -> TypeQualifierList -> Bool
    < :: TypeQualifierList -> TypeQualifierList -> Bool
    $c<= :: TypeQualifierList -> TypeQualifierList -> Bool
    <= :: TypeQualifierList -> TypeQualifierList -> Bool
    $c> :: TypeQualifierList -> TypeQualifierList -> Bool
    > :: TypeQualifierList -> TypeQualifierList -> Bool
    $c>= :: TypeQualifierList -> TypeQualifierList -> Bool
    >= :: TypeQualifierList -> TypeQualifierList -> Bool
    $cmax :: TypeQualifierList -> TypeQualifierList -> TypeQualifierList
    max :: TypeQualifierList -> TypeQualifierList -> TypeQualifierList
    $cmin :: TypeQualifierList -> TypeQualifierList -> TypeQualifierList
    min :: TypeQualifierList -> TypeQualifierList -> TypeQualifierList
    C.Ord, Int -> TypeQualifierList -> ShowS
    [TypeQualifierList] -> ShowS
    TypeQualifierList -> String
    (Int -> TypeQualifierList -> ShowS)
    -> (TypeQualifierList -> String)
    -> ([TypeQualifierList] -> ShowS)
    -> Show TypeQualifierList
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> TypeQualifierList -> ShowS
    showsPrec :: Int -> TypeQualifierList -> ShowS
    $cshow :: TypeQualifierList -> String
    show :: TypeQualifierList -> String
    $cshowList :: [TypeQualifierList] -> ShowS
    showList :: [TypeQualifierList] -> ShowS
    C.Show, ReadPrec [TypeQualifierList]
    ReadPrec TypeQualifierList
    Int -> ReadS TypeQualifierList
    ReadS [TypeQualifierList]
    (Int -> ReadS TypeQualifierList)
    -> ReadS [TypeQualifierList]
    -> ReadPrec TypeQualifierList
    -> ReadPrec [TypeQualifierList]
    -> Read TypeQualifierList
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS TypeQualifierList
    readsPrec :: Int -> ReadS TypeQualifierList
    $creadList :: ReadS [TypeQualifierList]
    readList :: ReadS [TypeQualifierList]
    $creadPrec :: ReadPrec TypeQualifierList
    readPrec :: ReadPrec TypeQualifierList
    $creadListPrec :: ReadPrec [TypeQualifierList]
    readListPrec :: ReadPrec [TypeQualifierList]
    C.Read)

    data ParameterTypeList
        = MkParameterTypeList ParameterList
        | MkParameterTypeListEllipsis ParameterList
      deriving (ParameterTypeList -> ParameterTypeList -> Bool
    (ParameterTypeList -> ParameterTypeList -> Bool)
    -> (ParameterTypeList -> ParameterTypeList -> Bool)
    -> Eq ParameterTypeList
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: ParameterTypeList -> ParameterTypeList -> Bool
    == :: ParameterTypeList -> ParameterTypeList -> Bool
    $c/= :: ParameterTypeList -> ParameterTypeList -> Bool
    /= :: ParameterTypeList -> ParameterTypeList -> Bool
    C.Eq, Eq ParameterTypeList
    Eq ParameterTypeList =>
    (ParameterTypeList -> ParameterTypeList -> Ordering)
    -> (ParameterTypeList -> ParameterTypeList -> Bool)
    -> (ParameterTypeList -> ParameterTypeList -> Bool)
    -> (ParameterTypeList -> ParameterTypeList -> Bool)
    -> (ParameterTypeList -> ParameterTypeList -> Bool)
    -> (ParameterTypeList -> ParameterTypeList -> ParameterTypeList)
    -> (ParameterTypeList -> ParameterTypeList -> ParameterTypeList)
    -> Ord ParameterTypeList
    ParameterTypeList -> ParameterTypeList -> Bool
    ParameterTypeList -> ParameterTypeList -> Ordering
    ParameterTypeList -> ParameterTypeList -> ParameterTypeList
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: ParameterTypeList -> ParameterTypeList -> Ordering
    compare :: ParameterTypeList -> ParameterTypeList -> Ordering
    $c< :: ParameterTypeList -> ParameterTypeList -> Bool
    < :: ParameterTypeList -> ParameterTypeList -> Bool
    $c<= :: ParameterTypeList -> ParameterTypeList -> Bool
    <= :: ParameterTypeList -> ParameterTypeList -> Bool
    $c> :: ParameterTypeList -> ParameterTypeList -> Bool
    > :: ParameterTypeList -> ParameterTypeList -> Bool
    $c>= :: ParameterTypeList -> ParameterTypeList -> Bool
    >= :: ParameterTypeList -> ParameterTypeList -> Bool
    $cmax :: ParameterTypeList -> ParameterTypeList -> ParameterTypeList
    max :: ParameterTypeList -> ParameterTypeList -> ParameterTypeList
    $cmin :: ParameterTypeList -> ParameterTypeList -> ParameterTypeList
    min :: ParameterTypeList -> ParameterTypeList -> ParameterTypeList
    C.Ord, Int -> ParameterTypeList -> ShowS
    [ParameterTypeList] -> ShowS
    ParameterTypeList -> String
    (Int -> ParameterTypeList -> ShowS)
    -> (ParameterTypeList -> String)
    -> ([ParameterTypeList] -> ShowS)
    -> Show ParameterTypeList
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> ParameterTypeList -> ShowS
    showsPrec :: Int -> ParameterTypeList -> ShowS
    $cshow :: ParameterTypeList -> String
    show :: ParameterTypeList -> String
    $cshowList :: [ParameterTypeList] -> ShowS
    showList :: [ParameterTypeList] -> ShowS
    C.Show, ReadPrec [ParameterTypeList]
    ReadPrec ParameterTypeList
    Int -> ReadS ParameterTypeList
    ReadS [ParameterTypeList]
    (Int -> ReadS ParameterTypeList)
    -> ReadS [ParameterTypeList]
    -> ReadPrec ParameterTypeList
    -> ReadPrec [ParameterTypeList]
    -> Read ParameterTypeList
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS ParameterTypeList
    readsPrec :: Int -> ReadS ParameterTypeList
    $creadList :: ReadS [ParameterTypeList]
    readList :: ReadS [ParameterTypeList]
    $creadPrec :: ReadPrec ParameterTypeList
    readPrec :: ReadPrec ParameterTypeList
    $creadListPrec :: ReadPrec [ParameterTypeList]
    readListPrec :: ReadPrec [ParameterTypeList]
    C.Read)

    data ParameterList
        = MkParameterList1 ParameterDeclaration
        | MkParameterListN ParameterList ParameterDeclaration
      deriving (ParameterList -> ParameterList -> Bool
    (ParameterList -> ParameterList -> Bool)
    -> (ParameterList -> ParameterList -> Bool) -> Eq ParameterList
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: ParameterList -> ParameterList -> Bool
    == :: ParameterList -> ParameterList -> Bool
    $c/= :: ParameterList -> ParameterList -> Bool
    /= :: ParameterList -> ParameterList -> Bool
    C.Eq, Eq ParameterList
    Eq ParameterList =>
    (ParameterList -> ParameterList -> Ordering)
    -> (ParameterList -> ParameterList -> Bool)
    -> (ParameterList -> ParameterList -> Bool)
    -> (ParameterList -> ParameterList -> Bool)
    -> (ParameterList -> ParameterList -> Bool)
    -> (ParameterList -> ParameterList -> ParameterList)
    -> (ParameterList -> ParameterList -> ParameterList)
    -> Ord ParameterList
    ParameterList -> ParameterList -> Bool
    ParameterList -> ParameterList -> Ordering
    ParameterList -> ParameterList -> ParameterList
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: ParameterList -> ParameterList -> Ordering
    compare :: ParameterList -> ParameterList -> Ordering
    $c< :: ParameterList -> ParameterList -> Bool
    < :: ParameterList -> ParameterList -> Bool
    $c<= :: ParameterList -> ParameterList -> Bool
    <= :: ParameterList -> ParameterList -> Bool
    $c> :: ParameterList -> ParameterList -> Bool
    > :: ParameterList -> ParameterList -> Bool
    $c>= :: ParameterList -> ParameterList -> Bool
    >= :: ParameterList -> ParameterList -> Bool
    $cmax :: ParameterList -> ParameterList -> ParameterList
    max :: ParameterList -> ParameterList -> ParameterList
    $cmin :: ParameterList -> ParameterList -> ParameterList
    min :: ParameterList -> ParameterList -> ParameterList
    C.Ord, Int -> ParameterList -> ShowS
    [ParameterList] -> ShowS
    ParameterList -> String
    (Int -> ParameterList -> ShowS)
    -> (ParameterList -> String)
    -> ([ParameterList] -> ShowS)
    -> Show ParameterList
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> ParameterList -> ShowS
    showsPrec :: Int -> ParameterList -> ShowS
    $cshow :: ParameterList -> String
    show :: ParameterList -> String
    $cshowList :: [ParameterList] -> ShowS
    showList :: [ParameterList] -> ShowS
    C.Show, ReadPrec [ParameterList]
    ReadPrec ParameterList
    Int -> ReadS ParameterList
    ReadS [ParameterList]
    (Int -> ReadS ParameterList)
    -> ReadS [ParameterList]
    -> ReadPrec ParameterList
    -> ReadPrec [ParameterList]
    -> Read ParameterList
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS ParameterList
    readsPrec :: Int -> ReadS ParameterList
    $creadList :: ReadS [ParameterList]
    readList :: ReadS [ParameterList]
    $creadPrec :: ReadPrec ParameterList
    readPrec :: ReadPrec ParameterList
    $creadListPrec :: ReadPrec [ParameterList]
    readListPrec :: ReadPrec [ParameterList]
    C.Read)

    data ParameterDeclaration
        = MkParameterDeclarationDeclarator DeclarationSpecifiers Declarator
        | MkParameterDeclarationAbstractDeclaratorOpt DeclarationSpecifiers AbstractDeclaratorOpt
      deriving (ParameterDeclaration -> ParameterDeclaration -> Bool
    (ParameterDeclaration -> ParameterDeclaration -> Bool)
    -> (ParameterDeclaration -> ParameterDeclaration -> Bool)
    -> Eq ParameterDeclaration
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: ParameterDeclaration -> ParameterDeclaration -> Bool
    == :: ParameterDeclaration -> ParameterDeclaration -> Bool
    $c/= :: ParameterDeclaration -> ParameterDeclaration -> Bool
    /= :: ParameterDeclaration -> ParameterDeclaration -> Bool
    C.Eq, Eq ParameterDeclaration
    Eq ParameterDeclaration =>
    (ParameterDeclaration -> ParameterDeclaration -> Ordering)
    -> (ParameterDeclaration -> ParameterDeclaration -> Bool)
    -> (ParameterDeclaration -> ParameterDeclaration -> Bool)
    -> (ParameterDeclaration -> ParameterDeclaration -> Bool)
    -> (ParameterDeclaration -> ParameterDeclaration -> Bool)
    -> (ParameterDeclaration
        -> ParameterDeclaration -> ParameterDeclaration)
    -> (ParameterDeclaration
        -> ParameterDeclaration -> ParameterDeclaration)
    -> Ord ParameterDeclaration
    ParameterDeclaration -> ParameterDeclaration -> Bool
    ParameterDeclaration -> ParameterDeclaration -> Ordering
    ParameterDeclaration
    -> ParameterDeclaration -> ParameterDeclaration
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: ParameterDeclaration -> ParameterDeclaration -> Ordering
    compare :: ParameterDeclaration -> ParameterDeclaration -> Ordering
    $c< :: ParameterDeclaration -> ParameterDeclaration -> Bool
    < :: ParameterDeclaration -> ParameterDeclaration -> Bool
    $c<= :: ParameterDeclaration -> ParameterDeclaration -> Bool
    <= :: ParameterDeclaration -> ParameterDeclaration -> Bool
    $c> :: ParameterDeclaration -> ParameterDeclaration -> Bool
    > :: ParameterDeclaration -> ParameterDeclaration -> Bool
    $c>= :: ParameterDeclaration -> ParameterDeclaration -> Bool
    >= :: ParameterDeclaration -> ParameterDeclaration -> Bool
    $cmax :: ParameterDeclaration
    -> ParameterDeclaration -> ParameterDeclaration
    max :: ParameterDeclaration
    -> ParameterDeclaration -> ParameterDeclaration
    $cmin :: ParameterDeclaration
    -> ParameterDeclaration -> ParameterDeclaration
    min :: ParameterDeclaration
    -> ParameterDeclaration -> ParameterDeclaration
    C.Ord, Int -> ParameterDeclaration -> ShowS
    [ParameterDeclaration] -> ShowS
    ParameterDeclaration -> String
    (Int -> ParameterDeclaration -> ShowS)
    -> (ParameterDeclaration -> String)
    -> ([ParameterDeclaration] -> ShowS)
    -> Show ParameterDeclaration
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> ParameterDeclaration -> ShowS
    showsPrec :: Int -> ParameterDeclaration -> ShowS
    $cshow :: ParameterDeclaration -> String
    show :: ParameterDeclaration -> String
    $cshowList :: [ParameterDeclaration] -> ShowS
    showList :: [ParameterDeclaration] -> ShowS
    C.Show, ReadPrec [ParameterDeclaration]
    ReadPrec ParameterDeclaration
    Int -> ReadS ParameterDeclaration
    ReadS [ParameterDeclaration]
    (Int -> ReadS ParameterDeclaration)
    -> ReadS [ParameterDeclaration]
    -> ReadPrec ParameterDeclaration
    -> ReadPrec [ParameterDeclaration]
    -> Read ParameterDeclaration
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS ParameterDeclaration
    readsPrec :: Int -> ReadS ParameterDeclaration
    $creadList :: ReadS [ParameterDeclaration]
    readList :: ReadS [ParameterDeclaration]
    $creadPrec :: ReadPrec ParameterDeclaration
    readPrec :: ReadPrec ParameterDeclaration
    $creadListPrec :: ReadPrec [ParameterDeclaration]
    readListPrec :: ReadPrec [ParameterDeclaration]
    C.Read)

    data IdentifierListOpt
        = MkIdentifierListOptNothing
        | MkIdentifierListOptJust IdentifierList
      deriving (IdentifierListOpt -> IdentifierListOpt -> Bool
    (IdentifierListOpt -> IdentifierListOpt -> Bool)
    -> (IdentifierListOpt -> IdentifierListOpt -> Bool)
    -> Eq IdentifierListOpt
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: IdentifierListOpt -> IdentifierListOpt -> Bool
    == :: IdentifierListOpt -> IdentifierListOpt -> Bool
    $c/= :: IdentifierListOpt -> IdentifierListOpt -> Bool
    /= :: IdentifierListOpt -> IdentifierListOpt -> Bool
    C.Eq, Eq IdentifierListOpt
    Eq IdentifierListOpt =>
    (IdentifierListOpt -> IdentifierListOpt -> Ordering)
    -> (IdentifierListOpt -> IdentifierListOpt -> Bool)
    -> (IdentifierListOpt -> IdentifierListOpt -> Bool)
    -> (IdentifierListOpt -> IdentifierListOpt -> Bool)
    -> (IdentifierListOpt -> IdentifierListOpt -> Bool)
    -> (IdentifierListOpt -> IdentifierListOpt -> IdentifierListOpt)
    -> (IdentifierListOpt -> IdentifierListOpt -> IdentifierListOpt)
    -> Ord IdentifierListOpt
    IdentifierListOpt -> IdentifierListOpt -> Bool
    IdentifierListOpt -> IdentifierListOpt -> Ordering
    IdentifierListOpt -> IdentifierListOpt -> IdentifierListOpt
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: IdentifierListOpt -> IdentifierListOpt -> Ordering
    compare :: IdentifierListOpt -> IdentifierListOpt -> Ordering
    $c< :: IdentifierListOpt -> IdentifierListOpt -> Bool
    < :: IdentifierListOpt -> IdentifierListOpt -> Bool
    $c<= :: IdentifierListOpt -> IdentifierListOpt -> Bool
    <= :: IdentifierListOpt -> IdentifierListOpt -> Bool
    $c> :: IdentifierListOpt -> IdentifierListOpt -> Bool
    > :: IdentifierListOpt -> IdentifierListOpt -> Bool
    $c>= :: IdentifierListOpt -> IdentifierListOpt -> Bool
    >= :: IdentifierListOpt -> IdentifierListOpt -> Bool
    $cmax :: IdentifierListOpt -> IdentifierListOpt -> IdentifierListOpt
    max :: IdentifierListOpt -> IdentifierListOpt -> IdentifierListOpt
    $cmin :: IdentifierListOpt -> IdentifierListOpt -> IdentifierListOpt
    min :: IdentifierListOpt -> IdentifierListOpt -> IdentifierListOpt
    C.Ord, Int -> IdentifierListOpt -> ShowS
    [IdentifierListOpt] -> ShowS
    IdentifierListOpt -> String
    (Int -> IdentifierListOpt -> ShowS)
    -> (IdentifierListOpt -> String)
    -> ([IdentifierListOpt] -> ShowS)
    -> Show IdentifierListOpt
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> IdentifierListOpt -> ShowS
    showsPrec :: Int -> IdentifierListOpt -> ShowS
    $cshow :: IdentifierListOpt -> String
    show :: IdentifierListOpt -> String
    $cshowList :: [IdentifierListOpt] -> ShowS
    showList :: [IdentifierListOpt] -> ShowS
    C.Show, ReadPrec [IdentifierListOpt]
    ReadPrec IdentifierListOpt
    Int -> ReadS IdentifierListOpt
    ReadS [IdentifierListOpt]
    (Int -> ReadS IdentifierListOpt)
    -> ReadS [IdentifierListOpt]
    -> ReadPrec IdentifierListOpt
    -> ReadPrec [IdentifierListOpt]
    -> Read IdentifierListOpt
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS IdentifierListOpt
    readsPrec :: Int -> ReadS IdentifierListOpt
    $creadList :: ReadS [IdentifierListOpt]
    readList :: ReadS [IdentifierListOpt]
    $creadPrec :: ReadPrec IdentifierListOpt
    readPrec :: ReadPrec IdentifierListOpt
    $creadListPrec :: ReadPrec [IdentifierListOpt]
    readListPrec :: ReadPrec [IdentifierListOpt]
    C.Read)

    data IdentifierList
        = MkIdentifierList1 Identifier
        | MkIdentifierListN IdentifierList Identifier
      deriving (IdentifierList -> IdentifierList -> Bool
    (IdentifierList -> IdentifierList -> Bool)
    -> (IdentifierList -> IdentifierList -> Bool) -> Eq IdentifierList
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: IdentifierList -> IdentifierList -> Bool
    == :: IdentifierList -> IdentifierList -> Bool
    $c/= :: IdentifierList -> IdentifierList -> Bool
    /= :: IdentifierList -> IdentifierList -> Bool
    C.Eq, Eq IdentifierList
    Eq IdentifierList =>
    (IdentifierList -> IdentifierList -> Ordering)
    -> (IdentifierList -> IdentifierList -> Bool)
    -> (IdentifierList -> IdentifierList -> Bool)
    -> (IdentifierList -> IdentifierList -> Bool)
    -> (IdentifierList -> IdentifierList -> Bool)
    -> (IdentifierList -> IdentifierList -> IdentifierList)
    -> (IdentifierList -> IdentifierList -> IdentifierList)
    -> Ord IdentifierList
    IdentifierList -> IdentifierList -> Bool
    IdentifierList -> IdentifierList -> Ordering
    IdentifierList -> IdentifierList -> IdentifierList
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: IdentifierList -> IdentifierList -> Ordering
    compare :: IdentifierList -> IdentifierList -> Ordering
    $c< :: IdentifierList -> IdentifierList -> Bool
    < :: IdentifierList -> IdentifierList -> Bool
    $c<= :: IdentifierList -> IdentifierList -> Bool
    <= :: IdentifierList -> IdentifierList -> Bool
    $c> :: IdentifierList -> IdentifierList -> Bool
    > :: IdentifierList -> IdentifierList -> Bool
    $c>= :: IdentifierList -> IdentifierList -> Bool
    >= :: IdentifierList -> IdentifierList -> Bool
    $cmax :: IdentifierList -> IdentifierList -> IdentifierList
    max :: IdentifierList -> IdentifierList -> IdentifierList
    $cmin :: IdentifierList -> IdentifierList -> IdentifierList
    min :: IdentifierList -> IdentifierList -> IdentifierList
    C.Ord, Int -> IdentifierList -> ShowS
    [IdentifierList] -> ShowS
    IdentifierList -> String
    (Int -> IdentifierList -> ShowS)
    -> (IdentifierList -> String)
    -> ([IdentifierList] -> ShowS)
    -> Show IdentifierList
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> IdentifierList -> ShowS
    showsPrec :: Int -> IdentifierList -> ShowS
    $cshow :: IdentifierList -> String
    show :: IdentifierList -> String
    $cshowList :: [IdentifierList] -> ShowS
    showList :: [IdentifierList] -> ShowS
    C.Show, ReadPrec [IdentifierList]
    ReadPrec IdentifierList
    Int -> ReadS IdentifierList
    ReadS [IdentifierList]
    (Int -> ReadS IdentifierList)
    -> ReadS [IdentifierList]
    -> ReadPrec IdentifierList
    -> ReadPrec [IdentifierList]
    -> Read IdentifierList
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS IdentifierList
    readsPrec :: Int -> ReadS IdentifierList
    $creadList :: ReadS [IdentifierList]
    readList :: ReadS [IdentifierList]
    $creadPrec :: ReadPrec IdentifierList
    readPrec :: ReadPrec IdentifierList
    $creadListPrec :: ReadPrec [IdentifierList]
    readListPrec :: ReadPrec [IdentifierList]
    C.Read)

    data Initializer
        = MkInitializerAssignment Expression
        | MkInitializerIniutializerList InitializerList
        | MkInitializerIniutializerListC InitializerList
      deriving (Initializer -> Initializer -> Bool
    (Initializer -> Initializer -> Bool)
    -> (Initializer -> Initializer -> Bool) -> Eq Initializer
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: Initializer -> Initializer -> Bool
    == :: Initializer -> Initializer -> Bool
    $c/= :: Initializer -> Initializer -> Bool
    /= :: Initializer -> Initializer -> Bool
    C.Eq, Eq Initializer
    Eq Initializer =>
    (Initializer -> Initializer -> Ordering)
    -> (Initializer -> Initializer -> Bool)
    -> (Initializer -> Initializer -> Bool)
    -> (Initializer -> Initializer -> Bool)
    -> (Initializer -> Initializer -> Bool)
    -> (Initializer -> Initializer -> Initializer)
    -> (Initializer -> Initializer -> Initializer)
    -> Ord Initializer
    Initializer -> Initializer -> Bool
    Initializer -> Initializer -> Ordering
    Initializer -> Initializer -> Initializer
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: Initializer -> Initializer -> Ordering
    compare :: Initializer -> Initializer -> Ordering
    $c< :: Initializer -> Initializer -> Bool
    < :: Initializer -> Initializer -> Bool
    $c<= :: Initializer -> Initializer -> Bool
    <= :: Initializer -> Initializer -> Bool
    $c> :: Initializer -> Initializer -> Bool
    > :: Initializer -> Initializer -> Bool
    $c>= :: Initializer -> Initializer -> Bool
    >= :: Initializer -> Initializer -> Bool
    $cmax :: Initializer -> Initializer -> Initializer
    max :: Initializer -> Initializer -> Initializer
    $cmin :: Initializer -> Initializer -> Initializer
    min :: Initializer -> Initializer -> Initializer
    C.Ord, Int -> Initializer -> ShowS
    [Initializer] -> ShowS
    Initializer -> String
    (Int -> Initializer -> ShowS)
    -> (Initializer -> String)
    -> ([Initializer] -> ShowS)
    -> Show Initializer
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> Initializer -> ShowS
    showsPrec :: Int -> Initializer -> ShowS
    $cshow :: Initializer -> String
    show :: Initializer -> String
    $cshowList :: [Initializer] -> ShowS
    showList :: [Initializer] -> ShowS
    C.Show, ReadPrec [Initializer]
    ReadPrec Initializer
    Int -> ReadS Initializer
    ReadS [Initializer]
    (Int -> ReadS Initializer)
    -> ReadS [Initializer]
    -> ReadPrec Initializer
    -> ReadPrec [Initializer]
    -> Read Initializer
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS Initializer
    readsPrec :: Int -> ReadS Initializer
    $creadList :: ReadS [Initializer]
    readList :: ReadS [Initializer]
    $creadPrec :: ReadPrec Initializer
    readPrec :: ReadPrec Initializer
    $creadListPrec :: ReadPrec [Initializer]
    readListPrec :: ReadPrec [Initializer]
    C.Read)

    data InitializerList
        = MkInitializerList1 Initializer
        | MkInitializerListN InitializerList Initializer
      deriving (InitializerList -> InitializerList -> Bool
    (InitializerList -> InitializerList -> Bool)
    -> (InitializerList -> InitializerList -> Bool)
    -> Eq InitializerList
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: InitializerList -> InitializerList -> Bool
    == :: InitializerList -> InitializerList -> Bool
    $c/= :: InitializerList -> InitializerList -> Bool
    /= :: InitializerList -> InitializerList -> Bool
    C.Eq, Eq InitializerList
    Eq InitializerList =>
    (InitializerList -> InitializerList -> Ordering)
    -> (InitializerList -> InitializerList -> Bool)
    -> (InitializerList -> InitializerList -> Bool)
    -> (InitializerList -> InitializerList -> Bool)
    -> (InitializerList -> InitializerList -> Bool)
    -> (InitializerList -> InitializerList -> InitializerList)
    -> (InitializerList -> InitializerList -> InitializerList)
    -> Ord InitializerList
    InitializerList -> InitializerList -> Bool
    InitializerList -> InitializerList -> Ordering
    InitializerList -> InitializerList -> InitializerList
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: InitializerList -> InitializerList -> Ordering
    compare :: InitializerList -> InitializerList -> Ordering
    $c< :: InitializerList -> InitializerList -> Bool
    < :: InitializerList -> InitializerList -> Bool
    $c<= :: InitializerList -> InitializerList -> Bool
    <= :: InitializerList -> InitializerList -> Bool
    $c> :: InitializerList -> InitializerList -> Bool
    > :: InitializerList -> InitializerList -> Bool
    $c>= :: InitializerList -> InitializerList -> Bool
    >= :: InitializerList -> InitializerList -> Bool
    $cmax :: InitializerList -> InitializerList -> InitializerList
    max :: InitializerList -> InitializerList -> InitializerList
    $cmin :: InitializerList -> InitializerList -> InitializerList
    min :: InitializerList -> InitializerList -> InitializerList
    C.Ord, Int -> InitializerList -> ShowS
    [InitializerList] -> ShowS
    InitializerList -> String
    (Int -> InitializerList -> ShowS)
    -> (InitializerList -> String)
    -> ([InitializerList] -> ShowS)
    -> Show InitializerList
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> InitializerList -> ShowS
    showsPrec :: Int -> InitializerList -> ShowS
    $cshow :: InitializerList -> String
    show :: InitializerList -> String
    $cshowList :: [InitializerList] -> ShowS
    showList :: [InitializerList] -> ShowS
    C.Show, ReadPrec [InitializerList]
    ReadPrec InitializerList
    Int -> ReadS InitializerList
    ReadS [InitializerList]
    (Int -> ReadS InitializerList)
    -> ReadS [InitializerList]
    -> ReadPrec InitializerList
    -> ReadPrec [InitializerList]
    -> Read InitializerList
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS InitializerList
    readsPrec :: Int -> ReadS InitializerList
    $creadList :: ReadS [InitializerList]
    readList :: ReadS [InitializerList]
    $creadPrec :: ReadPrec InitializerList
    readPrec :: ReadPrec InitializerList
    $creadListPrec :: ReadPrec [InitializerList]
    readListPrec :: ReadPrec [InitializerList]
    C.Read)

    data TypeName
        = MkTypeName [SpecifierQualifier] AbstractDeclaratorOpt
      deriving (TypeName -> TypeName -> Bool
    (TypeName -> TypeName -> Bool)
    -> (TypeName -> TypeName -> Bool) -> Eq TypeName
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: TypeName -> TypeName -> Bool
    == :: TypeName -> TypeName -> Bool
    $c/= :: TypeName -> TypeName -> Bool
    /= :: TypeName -> TypeName -> Bool
    C.Eq, Eq TypeName
    Eq TypeName =>
    (TypeName -> TypeName -> Ordering)
    -> (TypeName -> TypeName -> Bool)
    -> (TypeName -> TypeName -> Bool)
    -> (TypeName -> TypeName -> Bool)
    -> (TypeName -> TypeName -> Bool)
    -> (TypeName -> TypeName -> TypeName)
    -> (TypeName -> TypeName -> TypeName)
    -> Ord TypeName
    TypeName -> TypeName -> Bool
    TypeName -> TypeName -> Ordering
    TypeName -> TypeName -> TypeName
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: TypeName -> TypeName -> Ordering
    compare :: TypeName -> TypeName -> Ordering
    $c< :: TypeName -> TypeName -> Bool
    < :: TypeName -> TypeName -> Bool
    $c<= :: TypeName -> TypeName -> Bool
    <= :: TypeName -> TypeName -> Bool
    $c> :: TypeName -> TypeName -> Bool
    > :: TypeName -> TypeName -> Bool
    $c>= :: TypeName -> TypeName -> Bool
    >= :: TypeName -> TypeName -> Bool
    $cmax :: TypeName -> TypeName -> TypeName
    max :: TypeName -> TypeName -> TypeName
    $cmin :: TypeName -> TypeName -> TypeName
    min :: TypeName -> TypeName -> TypeName
    C.Ord, Int -> TypeName -> ShowS
    [TypeName] -> ShowS
    TypeName -> String
    (Int -> TypeName -> ShowS)
    -> (TypeName -> String) -> ([TypeName] -> ShowS) -> Show TypeName
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> TypeName -> ShowS
    showsPrec :: Int -> TypeName -> ShowS
    $cshow :: TypeName -> String
    show :: TypeName -> String
    $cshowList :: [TypeName] -> ShowS
    showList :: [TypeName] -> ShowS
    C.Show, ReadPrec [TypeName]
    ReadPrec TypeName
    Int -> ReadS TypeName
    ReadS [TypeName]
    (Int -> ReadS TypeName)
    -> ReadS [TypeName]
    -> ReadPrec TypeName
    -> ReadPrec [TypeName]
    -> Read TypeName
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS TypeName
    readsPrec :: Int -> ReadS TypeName
    $creadList :: ReadS [TypeName]
    readList :: ReadS [TypeName]
    $creadPrec :: ReadPrec TypeName
    readPrec :: ReadPrec TypeName
    $creadListPrec :: ReadPrec [TypeName]
    readListPrec :: ReadPrec [TypeName]
    C.Read)

    data AbstractDeclaratorOpt
        = MkAbstractDeclaratorOptNothing
        | MkAbstractDeclaratorOptJust AbstractDeclarator
      deriving (AbstractDeclaratorOpt -> AbstractDeclaratorOpt -> Bool
    (AbstractDeclaratorOpt -> AbstractDeclaratorOpt -> Bool)
    -> (AbstractDeclaratorOpt -> AbstractDeclaratorOpt -> Bool)
    -> Eq AbstractDeclaratorOpt
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: AbstractDeclaratorOpt -> AbstractDeclaratorOpt -> Bool
    == :: AbstractDeclaratorOpt -> AbstractDeclaratorOpt -> Bool
    $c/= :: AbstractDeclaratorOpt -> AbstractDeclaratorOpt -> Bool
    /= :: AbstractDeclaratorOpt -> AbstractDeclaratorOpt -> Bool
    C.Eq, Eq AbstractDeclaratorOpt
    Eq AbstractDeclaratorOpt =>
    (AbstractDeclaratorOpt -> AbstractDeclaratorOpt -> Ordering)
    -> (AbstractDeclaratorOpt -> AbstractDeclaratorOpt -> Bool)
    -> (AbstractDeclaratorOpt -> AbstractDeclaratorOpt -> Bool)
    -> (AbstractDeclaratorOpt -> AbstractDeclaratorOpt -> Bool)
    -> (AbstractDeclaratorOpt -> AbstractDeclaratorOpt -> Bool)
    -> (AbstractDeclaratorOpt
        -> AbstractDeclaratorOpt -> AbstractDeclaratorOpt)
    -> (AbstractDeclaratorOpt
        -> AbstractDeclaratorOpt -> AbstractDeclaratorOpt)
    -> Ord AbstractDeclaratorOpt
    AbstractDeclaratorOpt -> AbstractDeclaratorOpt -> Bool
    AbstractDeclaratorOpt -> AbstractDeclaratorOpt -> Ordering
    AbstractDeclaratorOpt
    -> AbstractDeclaratorOpt -> AbstractDeclaratorOpt
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: AbstractDeclaratorOpt -> AbstractDeclaratorOpt -> Ordering
    compare :: AbstractDeclaratorOpt -> AbstractDeclaratorOpt -> Ordering
    $c< :: AbstractDeclaratorOpt -> AbstractDeclaratorOpt -> Bool
    < :: AbstractDeclaratorOpt -> AbstractDeclaratorOpt -> Bool
    $c<= :: AbstractDeclaratorOpt -> AbstractDeclaratorOpt -> Bool
    <= :: AbstractDeclaratorOpt -> AbstractDeclaratorOpt -> Bool
    $c> :: AbstractDeclaratorOpt -> AbstractDeclaratorOpt -> Bool
    > :: AbstractDeclaratorOpt -> AbstractDeclaratorOpt -> Bool
    $c>= :: AbstractDeclaratorOpt -> AbstractDeclaratorOpt -> Bool
    >= :: AbstractDeclaratorOpt -> AbstractDeclaratorOpt -> Bool
    $cmax :: AbstractDeclaratorOpt
    -> AbstractDeclaratorOpt -> AbstractDeclaratorOpt
    max :: AbstractDeclaratorOpt
    -> AbstractDeclaratorOpt -> AbstractDeclaratorOpt
    $cmin :: AbstractDeclaratorOpt
    -> AbstractDeclaratorOpt -> AbstractDeclaratorOpt
    min :: AbstractDeclaratorOpt
    -> AbstractDeclaratorOpt -> AbstractDeclaratorOpt
    C.Ord, Int -> AbstractDeclaratorOpt -> ShowS
    [AbstractDeclaratorOpt] -> ShowS
    AbstractDeclaratorOpt -> String
    (Int -> AbstractDeclaratorOpt -> ShowS)
    -> (AbstractDeclaratorOpt -> String)
    -> ([AbstractDeclaratorOpt] -> ShowS)
    -> Show AbstractDeclaratorOpt
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> AbstractDeclaratorOpt -> ShowS
    showsPrec :: Int -> AbstractDeclaratorOpt -> ShowS
    $cshow :: AbstractDeclaratorOpt -> String
    show :: AbstractDeclaratorOpt -> String
    $cshowList :: [AbstractDeclaratorOpt] -> ShowS
    showList :: [AbstractDeclaratorOpt] -> ShowS
    C.Show, ReadPrec [AbstractDeclaratorOpt]
    ReadPrec AbstractDeclaratorOpt
    Int -> ReadS AbstractDeclaratorOpt
    ReadS [AbstractDeclaratorOpt]
    (Int -> ReadS AbstractDeclaratorOpt)
    -> ReadS [AbstractDeclaratorOpt]
    -> ReadPrec AbstractDeclaratorOpt
    -> ReadPrec [AbstractDeclaratorOpt]
    -> Read AbstractDeclaratorOpt
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS AbstractDeclaratorOpt
    readsPrec :: Int -> ReadS AbstractDeclaratorOpt
    $creadList :: ReadS [AbstractDeclaratorOpt]
    readList :: ReadS [AbstractDeclaratorOpt]
    $creadPrec :: ReadPrec AbstractDeclaratorOpt
    readPrec :: ReadPrec AbstractDeclaratorOpt
    $creadListPrec :: ReadPrec [AbstractDeclaratorOpt]
    readListPrec :: ReadPrec [AbstractDeclaratorOpt]
    C.Read)

    data AbstractDeclarator
        = MkAbstractDeclaratorPointer Pointer
        | MkAbstractDeclaratorDirect PointerOpt DirectAbstractDeclarator
      deriving (AbstractDeclarator -> AbstractDeclarator -> Bool
    (AbstractDeclarator -> AbstractDeclarator -> Bool)
    -> (AbstractDeclarator -> AbstractDeclarator -> Bool)
    -> Eq AbstractDeclarator
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: AbstractDeclarator -> AbstractDeclarator -> Bool
    == :: AbstractDeclarator -> AbstractDeclarator -> Bool
    $c/= :: AbstractDeclarator -> AbstractDeclarator -> Bool
    /= :: AbstractDeclarator -> AbstractDeclarator -> Bool
    C.Eq, Eq AbstractDeclarator
    Eq AbstractDeclarator =>
    (AbstractDeclarator -> AbstractDeclarator -> Ordering)
    -> (AbstractDeclarator -> AbstractDeclarator -> Bool)
    -> (AbstractDeclarator -> AbstractDeclarator -> Bool)
    -> (AbstractDeclarator -> AbstractDeclarator -> Bool)
    -> (AbstractDeclarator -> AbstractDeclarator -> Bool)
    -> (AbstractDeclarator -> AbstractDeclarator -> AbstractDeclarator)
    -> (AbstractDeclarator -> AbstractDeclarator -> AbstractDeclarator)
    -> Ord AbstractDeclarator
    AbstractDeclarator -> AbstractDeclarator -> Bool
    AbstractDeclarator -> AbstractDeclarator -> Ordering
    AbstractDeclarator -> AbstractDeclarator -> AbstractDeclarator
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: AbstractDeclarator -> AbstractDeclarator -> Ordering
    compare :: AbstractDeclarator -> AbstractDeclarator -> Ordering
    $c< :: AbstractDeclarator -> AbstractDeclarator -> Bool
    < :: AbstractDeclarator -> AbstractDeclarator -> Bool
    $c<= :: AbstractDeclarator -> AbstractDeclarator -> Bool
    <= :: AbstractDeclarator -> AbstractDeclarator -> Bool
    $c> :: AbstractDeclarator -> AbstractDeclarator -> Bool
    > :: AbstractDeclarator -> AbstractDeclarator -> Bool
    $c>= :: AbstractDeclarator -> AbstractDeclarator -> Bool
    >= :: AbstractDeclarator -> AbstractDeclarator -> Bool
    $cmax :: AbstractDeclarator -> AbstractDeclarator -> AbstractDeclarator
    max :: AbstractDeclarator -> AbstractDeclarator -> AbstractDeclarator
    $cmin :: AbstractDeclarator -> AbstractDeclarator -> AbstractDeclarator
    min :: AbstractDeclarator -> AbstractDeclarator -> AbstractDeclarator
    C.Ord, Int -> AbstractDeclarator -> ShowS
    [AbstractDeclarator] -> ShowS
    AbstractDeclarator -> String
    (Int -> AbstractDeclarator -> ShowS)
    -> (AbstractDeclarator -> String)
    -> ([AbstractDeclarator] -> ShowS)
    -> Show AbstractDeclarator
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> AbstractDeclarator -> ShowS
    showsPrec :: Int -> AbstractDeclarator -> ShowS
    $cshow :: AbstractDeclarator -> String
    show :: AbstractDeclarator -> String
    $cshowList :: [AbstractDeclarator] -> ShowS
    showList :: [AbstractDeclarator] -> ShowS
    C.Show, ReadPrec [AbstractDeclarator]
    ReadPrec AbstractDeclarator
    Int -> ReadS AbstractDeclarator
    ReadS [AbstractDeclarator]
    (Int -> ReadS AbstractDeclarator)
    -> ReadS [AbstractDeclarator]
    -> ReadPrec AbstractDeclarator
    -> ReadPrec [AbstractDeclarator]
    -> Read AbstractDeclarator
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS AbstractDeclarator
    readsPrec :: Int -> ReadS AbstractDeclarator
    $creadList :: ReadS [AbstractDeclarator]
    readList :: ReadS [AbstractDeclarator]
    $creadPrec :: ReadPrec AbstractDeclarator
    readPrec :: ReadPrec AbstractDeclarator
    $creadListPrec :: ReadPrec [AbstractDeclarator]
    readListPrec :: ReadPrec [AbstractDeclarator]
    C.Read)

    data DirectAbstractDeclaratorOpt
        = MkDirectAbstractDeclaratorOptNothing
        | MkDirectAbstractDeclaratorOptJust DirectAbstractDeclarator
      deriving (DirectAbstractDeclaratorOpt -> DirectAbstractDeclaratorOpt -> Bool
    (DirectAbstractDeclaratorOpt
     -> DirectAbstractDeclaratorOpt -> Bool)
    -> (DirectAbstractDeclaratorOpt
        -> DirectAbstractDeclaratorOpt -> Bool)
    -> Eq DirectAbstractDeclaratorOpt
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: DirectAbstractDeclaratorOpt -> DirectAbstractDeclaratorOpt -> Bool
    == :: DirectAbstractDeclaratorOpt -> DirectAbstractDeclaratorOpt -> Bool
    $c/= :: DirectAbstractDeclaratorOpt -> DirectAbstractDeclaratorOpt -> Bool
    /= :: DirectAbstractDeclaratorOpt -> DirectAbstractDeclaratorOpt -> Bool
    C.Eq, Eq DirectAbstractDeclaratorOpt
    Eq DirectAbstractDeclaratorOpt =>
    (DirectAbstractDeclaratorOpt
     -> DirectAbstractDeclaratorOpt -> Ordering)
    -> (DirectAbstractDeclaratorOpt
        -> DirectAbstractDeclaratorOpt -> Bool)
    -> (DirectAbstractDeclaratorOpt
        -> DirectAbstractDeclaratorOpt -> Bool)
    -> (DirectAbstractDeclaratorOpt
        -> DirectAbstractDeclaratorOpt -> Bool)
    -> (DirectAbstractDeclaratorOpt
        -> DirectAbstractDeclaratorOpt -> Bool)
    -> (DirectAbstractDeclaratorOpt
        -> DirectAbstractDeclaratorOpt -> DirectAbstractDeclaratorOpt)
    -> (DirectAbstractDeclaratorOpt
        -> DirectAbstractDeclaratorOpt -> DirectAbstractDeclaratorOpt)
    -> Ord DirectAbstractDeclaratorOpt
    DirectAbstractDeclaratorOpt -> DirectAbstractDeclaratorOpt -> Bool
    DirectAbstractDeclaratorOpt
    -> DirectAbstractDeclaratorOpt -> Ordering
    DirectAbstractDeclaratorOpt
    -> DirectAbstractDeclaratorOpt -> DirectAbstractDeclaratorOpt
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: DirectAbstractDeclaratorOpt
    -> DirectAbstractDeclaratorOpt -> Ordering
    compare :: DirectAbstractDeclaratorOpt
    -> DirectAbstractDeclaratorOpt -> Ordering
    $c< :: DirectAbstractDeclaratorOpt -> DirectAbstractDeclaratorOpt -> Bool
    < :: DirectAbstractDeclaratorOpt -> DirectAbstractDeclaratorOpt -> Bool
    $c<= :: DirectAbstractDeclaratorOpt -> DirectAbstractDeclaratorOpt -> Bool
    <= :: DirectAbstractDeclaratorOpt -> DirectAbstractDeclaratorOpt -> Bool
    $c> :: DirectAbstractDeclaratorOpt -> DirectAbstractDeclaratorOpt -> Bool
    > :: DirectAbstractDeclaratorOpt -> DirectAbstractDeclaratorOpt -> Bool
    $c>= :: DirectAbstractDeclaratorOpt -> DirectAbstractDeclaratorOpt -> Bool
    >= :: DirectAbstractDeclaratorOpt -> DirectAbstractDeclaratorOpt -> Bool
    $cmax :: DirectAbstractDeclaratorOpt
    -> DirectAbstractDeclaratorOpt -> DirectAbstractDeclaratorOpt
    max :: DirectAbstractDeclaratorOpt
    -> DirectAbstractDeclaratorOpt -> DirectAbstractDeclaratorOpt
    $cmin :: DirectAbstractDeclaratorOpt
    -> DirectAbstractDeclaratorOpt -> DirectAbstractDeclaratorOpt
    min :: DirectAbstractDeclaratorOpt
    -> DirectAbstractDeclaratorOpt -> DirectAbstractDeclaratorOpt
    C.Ord, Int -> DirectAbstractDeclaratorOpt -> ShowS
    [DirectAbstractDeclaratorOpt] -> ShowS
    DirectAbstractDeclaratorOpt -> String
    (Int -> DirectAbstractDeclaratorOpt -> ShowS)
    -> (DirectAbstractDeclaratorOpt -> String)
    -> ([DirectAbstractDeclaratorOpt] -> ShowS)
    -> Show DirectAbstractDeclaratorOpt
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> DirectAbstractDeclaratorOpt -> ShowS
    showsPrec :: Int -> DirectAbstractDeclaratorOpt -> ShowS
    $cshow :: DirectAbstractDeclaratorOpt -> String
    show :: DirectAbstractDeclaratorOpt -> String
    $cshowList :: [DirectAbstractDeclaratorOpt] -> ShowS
    showList :: [DirectAbstractDeclaratorOpt] -> ShowS
    C.Show, ReadPrec [DirectAbstractDeclaratorOpt]
    ReadPrec DirectAbstractDeclaratorOpt
    Int -> ReadS DirectAbstractDeclaratorOpt
    ReadS [DirectAbstractDeclaratorOpt]
    (Int -> ReadS DirectAbstractDeclaratorOpt)
    -> ReadS [DirectAbstractDeclaratorOpt]
    -> ReadPrec DirectAbstractDeclaratorOpt
    -> ReadPrec [DirectAbstractDeclaratorOpt]
    -> Read DirectAbstractDeclaratorOpt
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS DirectAbstractDeclaratorOpt
    readsPrec :: Int -> ReadS DirectAbstractDeclaratorOpt
    $creadList :: ReadS [DirectAbstractDeclaratorOpt]
    readList :: ReadS [DirectAbstractDeclaratorOpt]
    $creadPrec :: ReadPrec DirectAbstractDeclaratorOpt
    readPrec :: ReadPrec DirectAbstractDeclaratorOpt
    $creadListPrec :: ReadPrec [DirectAbstractDeclaratorOpt]
    readListPrec :: ReadPrec [DirectAbstractDeclaratorOpt]
    C.Read)

    data DirectAbstractDeclarator
        = MkDirectAbstractDeclaratorPar AbstractDeclarator
        | MkDirectAbstractDeclaratorConstantExpressionOpt DirectAbstractDeclaratorOpt ConstantExpressionOpt
        | MkDirectAbstractDeclaratorParameterTypeList DirectAbstractDeclaratorOpt ParameterTypeList
      deriving (DirectAbstractDeclarator -> DirectAbstractDeclarator -> Bool
    (DirectAbstractDeclarator -> DirectAbstractDeclarator -> Bool)
    -> (DirectAbstractDeclarator -> DirectAbstractDeclarator -> Bool)
    -> Eq DirectAbstractDeclarator
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: DirectAbstractDeclarator -> DirectAbstractDeclarator -> Bool
    == :: DirectAbstractDeclarator -> DirectAbstractDeclarator -> Bool
    $c/= :: DirectAbstractDeclarator -> DirectAbstractDeclarator -> Bool
    /= :: DirectAbstractDeclarator -> DirectAbstractDeclarator -> Bool
    C.Eq, Eq DirectAbstractDeclarator
    Eq DirectAbstractDeclarator =>
    (DirectAbstractDeclarator -> DirectAbstractDeclarator -> Ordering)
    -> (DirectAbstractDeclarator -> DirectAbstractDeclarator -> Bool)
    -> (DirectAbstractDeclarator -> DirectAbstractDeclarator -> Bool)
    -> (DirectAbstractDeclarator -> DirectAbstractDeclarator -> Bool)
    -> (DirectAbstractDeclarator -> DirectAbstractDeclarator -> Bool)
    -> (DirectAbstractDeclarator
        -> DirectAbstractDeclarator -> DirectAbstractDeclarator)
    -> (DirectAbstractDeclarator
        -> DirectAbstractDeclarator -> DirectAbstractDeclarator)
    -> Ord DirectAbstractDeclarator
    DirectAbstractDeclarator -> DirectAbstractDeclarator -> Bool
    DirectAbstractDeclarator -> DirectAbstractDeclarator -> Ordering
    DirectAbstractDeclarator
    -> DirectAbstractDeclarator -> DirectAbstractDeclarator
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: DirectAbstractDeclarator -> DirectAbstractDeclarator -> Ordering
    compare :: DirectAbstractDeclarator -> DirectAbstractDeclarator -> Ordering
    $c< :: DirectAbstractDeclarator -> DirectAbstractDeclarator -> Bool
    < :: DirectAbstractDeclarator -> DirectAbstractDeclarator -> Bool
    $c<= :: DirectAbstractDeclarator -> DirectAbstractDeclarator -> Bool
    <= :: DirectAbstractDeclarator -> DirectAbstractDeclarator -> Bool
    $c> :: DirectAbstractDeclarator -> DirectAbstractDeclarator -> Bool
    > :: DirectAbstractDeclarator -> DirectAbstractDeclarator -> Bool
    $c>= :: DirectAbstractDeclarator -> DirectAbstractDeclarator -> Bool
    >= :: DirectAbstractDeclarator -> DirectAbstractDeclarator -> Bool
    $cmax :: DirectAbstractDeclarator
    -> DirectAbstractDeclarator -> DirectAbstractDeclarator
    max :: DirectAbstractDeclarator
    -> DirectAbstractDeclarator -> DirectAbstractDeclarator
    $cmin :: DirectAbstractDeclarator
    -> DirectAbstractDeclarator -> DirectAbstractDeclarator
    min :: DirectAbstractDeclarator
    -> DirectAbstractDeclarator -> DirectAbstractDeclarator
    C.Ord, Int -> DirectAbstractDeclarator -> ShowS
    [DirectAbstractDeclarator] -> ShowS
    DirectAbstractDeclarator -> String
    (Int -> DirectAbstractDeclarator -> ShowS)
    -> (DirectAbstractDeclarator -> String)
    -> ([DirectAbstractDeclarator] -> ShowS)
    -> Show DirectAbstractDeclarator
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> DirectAbstractDeclarator -> ShowS
    showsPrec :: Int -> DirectAbstractDeclarator -> ShowS
    $cshow :: DirectAbstractDeclarator -> String
    show :: DirectAbstractDeclarator -> String
    $cshowList :: [DirectAbstractDeclarator] -> ShowS
    showList :: [DirectAbstractDeclarator] -> ShowS
    C.Show, ReadPrec [DirectAbstractDeclarator]
    ReadPrec DirectAbstractDeclarator
    Int -> ReadS DirectAbstractDeclarator
    ReadS [DirectAbstractDeclarator]
    (Int -> ReadS DirectAbstractDeclarator)
    -> ReadS [DirectAbstractDeclarator]
    -> ReadPrec DirectAbstractDeclarator
    -> ReadPrec [DirectAbstractDeclarator]
    -> Read DirectAbstractDeclarator
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS DirectAbstractDeclarator
    readsPrec :: Int -> ReadS DirectAbstractDeclarator
    $creadList :: ReadS [DirectAbstractDeclarator]
    readList :: ReadS [DirectAbstractDeclarator]
    $creadPrec :: ReadPrec DirectAbstractDeclarator
    readPrec :: ReadPrec DirectAbstractDeclarator
    $creadListPrec :: ReadPrec [DirectAbstractDeclarator]
    readListPrec :: ReadPrec [DirectAbstractDeclarator]
    C.Read)

    data Statement
        = MkStatementLabeled LabeledStatement
        | MkStatementExpression ExpressionStatement
        | MkStatementCompound CompoundStatement
        | MkStatementSelection SelectionStatement
        | MkStatementIteration IterationStatement
        | MkStatementJump JumpStatement
      deriving (Statement -> Statement -> Bool
    (Statement -> Statement -> Bool)
    -> (Statement -> Statement -> Bool) -> Eq Statement
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: Statement -> Statement -> Bool
    == :: Statement -> Statement -> Bool
    $c/= :: Statement -> Statement -> Bool
    /= :: Statement -> Statement -> Bool
    C.Eq, Eq Statement
    Eq Statement =>
    (Statement -> Statement -> Ordering)
    -> (Statement -> Statement -> Bool)
    -> (Statement -> Statement -> Bool)
    -> (Statement -> Statement -> Bool)
    -> (Statement -> Statement -> Bool)
    -> (Statement -> Statement -> Statement)
    -> (Statement -> Statement -> Statement)
    -> Ord Statement
    Statement -> Statement -> Bool
    Statement -> Statement -> Ordering
    Statement -> Statement -> Statement
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: Statement -> Statement -> Ordering
    compare :: Statement -> Statement -> Ordering
    $c< :: Statement -> Statement -> Bool
    < :: Statement -> Statement -> Bool
    $c<= :: Statement -> Statement -> Bool
    <= :: Statement -> Statement -> Bool
    $c> :: Statement -> Statement -> Bool
    > :: Statement -> Statement -> Bool
    $c>= :: Statement -> Statement -> Bool
    >= :: Statement -> Statement -> Bool
    $cmax :: Statement -> Statement -> Statement
    max :: Statement -> Statement -> Statement
    $cmin :: Statement -> Statement -> Statement
    min :: Statement -> Statement -> Statement
    C.Ord, Int -> Statement -> ShowS
    [Statement] -> ShowS
    Statement -> String
    (Int -> Statement -> ShowS)
    -> (Statement -> String)
    -> ([Statement] -> ShowS)
    -> Show Statement
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> Statement -> ShowS
    showsPrec :: Int -> Statement -> ShowS
    $cshow :: Statement -> String
    show :: Statement -> String
    $cshowList :: [Statement] -> ShowS
    showList :: [Statement] -> ShowS
    C.Show, ReadPrec [Statement]
    ReadPrec Statement
    Int -> ReadS Statement
    ReadS [Statement]
    (Int -> ReadS Statement)
    -> ReadS [Statement]
    -> ReadPrec Statement
    -> ReadPrec [Statement]
    -> Read Statement
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS Statement
    readsPrec :: Int -> ReadS Statement
    $creadList :: ReadS [Statement]
    readList :: ReadS [Statement]
    $creadPrec :: ReadPrec Statement
    readPrec :: ReadPrec Statement
    $creadListPrec :: ReadPrec [Statement]
    readListPrec :: ReadPrec [Statement]
    C.Read)

    data LabeledStatement
        = MkLabeledStatementIdentifier Identifier Statement
        | MkLabeledStatementCase ConstantExpression Statement
        | MkLabeledStatementDefault Statement
      deriving (LabeledStatement -> LabeledStatement -> Bool
    (LabeledStatement -> LabeledStatement -> Bool)
    -> (LabeledStatement -> LabeledStatement -> Bool)
    -> Eq LabeledStatement
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: LabeledStatement -> LabeledStatement -> Bool
    == :: LabeledStatement -> LabeledStatement -> Bool
    $c/= :: LabeledStatement -> LabeledStatement -> Bool
    /= :: LabeledStatement -> LabeledStatement -> Bool
    C.Eq, Eq LabeledStatement
    Eq LabeledStatement =>
    (LabeledStatement -> LabeledStatement -> Ordering)
    -> (LabeledStatement -> LabeledStatement -> Bool)
    -> (LabeledStatement -> LabeledStatement -> Bool)
    -> (LabeledStatement -> LabeledStatement -> Bool)
    -> (LabeledStatement -> LabeledStatement -> Bool)
    -> (LabeledStatement -> LabeledStatement -> LabeledStatement)
    -> (LabeledStatement -> LabeledStatement -> LabeledStatement)
    -> Ord LabeledStatement
    LabeledStatement -> LabeledStatement -> Bool
    LabeledStatement -> LabeledStatement -> Ordering
    LabeledStatement -> LabeledStatement -> LabeledStatement
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: LabeledStatement -> LabeledStatement -> Ordering
    compare :: LabeledStatement -> LabeledStatement -> Ordering
    $c< :: LabeledStatement -> LabeledStatement -> Bool
    < :: LabeledStatement -> LabeledStatement -> Bool
    $c<= :: LabeledStatement -> LabeledStatement -> Bool
    <= :: LabeledStatement -> LabeledStatement -> Bool
    $c> :: LabeledStatement -> LabeledStatement -> Bool
    > :: LabeledStatement -> LabeledStatement -> Bool
    $c>= :: LabeledStatement -> LabeledStatement -> Bool
    >= :: LabeledStatement -> LabeledStatement -> Bool
    $cmax :: LabeledStatement -> LabeledStatement -> LabeledStatement
    max :: LabeledStatement -> LabeledStatement -> LabeledStatement
    $cmin :: LabeledStatement -> LabeledStatement -> LabeledStatement
    min :: LabeledStatement -> LabeledStatement -> LabeledStatement
    C.Ord, Int -> LabeledStatement -> ShowS
    [LabeledStatement] -> ShowS
    LabeledStatement -> String
    (Int -> LabeledStatement -> ShowS)
    -> (LabeledStatement -> String)
    -> ([LabeledStatement] -> ShowS)
    -> Show LabeledStatement
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> LabeledStatement -> ShowS
    showsPrec :: Int -> LabeledStatement -> ShowS
    $cshow :: LabeledStatement -> String
    show :: LabeledStatement -> String
    $cshowList :: [LabeledStatement] -> ShowS
    showList :: [LabeledStatement] -> ShowS
    C.Show, ReadPrec [LabeledStatement]
    ReadPrec LabeledStatement
    Int -> ReadS LabeledStatement
    ReadS [LabeledStatement]
    (Int -> ReadS LabeledStatement)
    -> ReadS [LabeledStatement]
    -> ReadPrec LabeledStatement
    -> ReadPrec [LabeledStatement]
    -> Read LabeledStatement
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS LabeledStatement
    readsPrec :: Int -> ReadS LabeledStatement
    $creadList :: ReadS [LabeledStatement]
    readList :: ReadS [LabeledStatement]
    $creadPrec :: ReadPrec LabeledStatement
    readPrec :: ReadPrec LabeledStatement
    $creadListPrec :: ReadPrec [LabeledStatement]
    readListPrec :: ReadPrec [LabeledStatement]
    C.Read)

    data ExpressionStatement = MkExpressionStatement ExpressionOpt
      deriving (ExpressionStatement -> ExpressionStatement -> Bool
    (ExpressionStatement -> ExpressionStatement -> Bool)
    -> (ExpressionStatement -> ExpressionStatement -> Bool)
    -> Eq ExpressionStatement
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: ExpressionStatement -> ExpressionStatement -> Bool
    == :: ExpressionStatement -> ExpressionStatement -> Bool
    $c/= :: ExpressionStatement -> ExpressionStatement -> Bool
    /= :: ExpressionStatement -> ExpressionStatement -> Bool
    C.Eq, Eq ExpressionStatement
    Eq ExpressionStatement =>
    (ExpressionStatement -> ExpressionStatement -> Ordering)
    -> (ExpressionStatement -> ExpressionStatement -> Bool)
    -> (ExpressionStatement -> ExpressionStatement -> Bool)
    -> (ExpressionStatement -> ExpressionStatement -> Bool)
    -> (ExpressionStatement -> ExpressionStatement -> Bool)
    -> (ExpressionStatement
        -> ExpressionStatement -> ExpressionStatement)
    -> (ExpressionStatement
        -> ExpressionStatement -> ExpressionStatement)
    -> Ord ExpressionStatement
    ExpressionStatement -> ExpressionStatement -> Bool
    ExpressionStatement -> ExpressionStatement -> Ordering
    ExpressionStatement -> ExpressionStatement -> ExpressionStatement
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: ExpressionStatement -> ExpressionStatement -> Ordering
    compare :: ExpressionStatement -> ExpressionStatement -> Ordering
    $c< :: ExpressionStatement -> ExpressionStatement -> Bool
    < :: ExpressionStatement -> ExpressionStatement -> Bool
    $c<= :: ExpressionStatement -> ExpressionStatement -> Bool
    <= :: ExpressionStatement -> ExpressionStatement -> Bool
    $c> :: ExpressionStatement -> ExpressionStatement -> Bool
    > :: ExpressionStatement -> ExpressionStatement -> Bool
    $c>= :: ExpressionStatement -> ExpressionStatement -> Bool
    >= :: ExpressionStatement -> ExpressionStatement -> Bool
    $cmax :: ExpressionStatement -> ExpressionStatement -> ExpressionStatement
    max :: ExpressionStatement -> ExpressionStatement -> ExpressionStatement
    $cmin :: ExpressionStatement -> ExpressionStatement -> ExpressionStatement
    min :: ExpressionStatement -> ExpressionStatement -> ExpressionStatement
    C.Ord, Int -> ExpressionStatement -> ShowS
    [ExpressionStatement] -> ShowS
    ExpressionStatement -> String
    (Int -> ExpressionStatement -> ShowS)
    -> (ExpressionStatement -> String)
    -> ([ExpressionStatement] -> ShowS)
    -> Show ExpressionStatement
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> ExpressionStatement -> ShowS
    showsPrec :: Int -> ExpressionStatement -> ShowS
    $cshow :: ExpressionStatement -> String
    show :: ExpressionStatement -> String
    $cshowList :: [ExpressionStatement] -> ShowS
    showList :: [ExpressionStatement] -> ShowS
    C.Show, ReadPrec [ExpressionStatement]
    ReadPrec ExpressionStatement
    Int -> ReadS ExpressionStatement
    ReadS [ExpressionStatement]
    (Int -> ReadS ExpressionStatement)
    -> ReadS [ExpressionStatement]
    -> ReadPrec ExpressionStatement
    -> ReadPrec [ExpressionStatement]
    -> Read ExpressionStatement
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS ExpressionStatement
    readsPrec :: Int -> ReadS ExpressionStatement
    $creadList :: ReadS [ExpressionStatement]
    readList :: ReadS [ExpressionStatement]
    $creadPrec :: ReadPrec ExpressionStatement
    readPrec :: ReadPrec ExpressionStatement
    $creadListPrec :: ReadPrec [ExpressionStatement]
    readListPrec :: ReadPrec [ExpressionStatement]
    C.Read)

    data CompoundStatement
        = MkCompoundStatement [Declaration] [Statement]
      deriving (CompoundStatement -> CompoundStatement -> Bool
    (CompoundStatement -> CompoundStatement -> Bool)
    -> (CompoundStatement -> CompoundStatement -> Bool)
    -> Eq CompoundStatement
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: CompoundStatement -> CompoundStatement -> Bool
    == :: CompoundStatement -> CompoundStatement -> Bool
    $c/= :: CompoundStatement -> CompoundStatement -> Bool
    /= :: CompoundStatement -> CompoundStatement -> Bool
    C.Eq, Eq CompoundStatement
    Eq CompoundStatement =>
    (CompoundStatement -> CompoundStatement -> Ordering)
    -> (CompoundStatement -> CompoundStatement -> Bool)
    -> (CompoundStatement -> CompoundStatement -> Bool)
    -> (CompoundStatement -> CompoundStatement -> Bool)
    -> (CompoundStatement -> CompoundStatement -> Bool)
    -> (CompoundStatement -> CompoundStatement -> CompoundStatement)
    -> (CompoundStatement -> CompoundStatement -> CompoundStatement)
    -> Ord CompoundStatement
    CompoundStatement -> CompoundStatement -> Bool
    CompoundStatement -> CompoundStatement -> Ordering
    CompoundStatement -> CompoundStatement -> CompoundStatement
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: CompoundStatement -> CompoundStatement -> Ordering
    compare :: CompoundStatement -> CompoundStatement -> Ordering
    $c< :: CompoundStatement -> CompoundStatement -> Bool
    < :: CompoundStatement -> CompoundStatement -> Bool
    $c<= :: CompoundStatement -> CompoundStatement -> Bool
    <= :: CompoundStatement -> CompoundStatement -> Bool
    $c> :: CompoundStatement -> CompoundStatement -> Bool
    > :: CompoundStatement -> CompoundStatement -> Bool
    $c>= :: CompoundStatement -> CompoundStatement -> Bool
    >= :: CompoundStatement -> CompoundStatement -> Bool
    $cmax :: CompoundStatement -> CompoundStatement -> CompoundStatement
    max :: CompoundStatement -> CompoundStatement -> CompoundStatement
    $cmin :: CompoundStatement -> CompoundStatement -> CompoundStatement
    min :: CompoundStatement -> CompoundStatement -> CompoundStatement
    C.Ord, Int -> CompoundStatement -> ShowS
    [CompoundStatement] -> ShowS
    CompoundStatement -> String
    (Int -> CompoundStatement -> ShowS)
    -> (CompoundStatement -> String)
    -> ([CompoundStatement] -> ShowS)
    -> Show CompoundStatement
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> CompoundStatement -> ShowS
    showsPrec :: Int -> CompoundStatement -> ShowS
    $cshow :: CompoundStatement -> String
    show :: CompoundStatement -> String
    $cshowList :: [CompoundStatement] -> ShowS
    showList :: [CompoundStatement] -> ShowS
    C.Show, ReadPrec [CompoundStatement]
    ReadPrec CompoundStatement
    Int -> ReadS CompoundStatement
    ReadS [CompoundStatement]
    (Int -> ReadS CompoundStatement)
    -> ReadS [CompoundStatement]
    -> ReadPrec CompoundStatement
    -> ReadPrec [CompoundStatement]
    -> Read CompoundStatement
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS CompoundStatement
    readsPrec :: Int -> ReadS CompoundStatement
    $creadList :: ReadS [CompoundStatement]
    readList :: ReadS [CompoundStatement]
    $creadPrec :: ReadPrec CompoundStatement
    readPrec :: ReadPrec CompoundStatement
    $creadListPrec :: ReadPrec [CompoundStatement]
    readListPrec :: ReadPrec [CompoundStatement]
    C.Read)

    data SelectionStatement
        = MkSelectionStatementIfThen Expression Statement
        | MkSelectionStatementIfThenElse Expression Statement Statement
        | MkSelectionStatementSwitch Expression Statement
      deriving (SelectionStatement -> SelectionStatement -> Bool
    (SelectionStatement -> SelectionStatement -> Bool)
    -> (SelectionStatement -> SelectionStatement -> Bool)
    -> Eq SelectionStatement
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: SelectionStatement -> SelectionStatement -> Bool
    == :: SelectionStatement -> SelectionStatement -> Bool
    $c/= :: SelectionStatement -> SelectionStatement -> Bool
    /= :: SelectionStatement -> SelectionStatement -> Bool
    C.Eq, Eq SelectionStatement
    Eq SelectionStatement =>
    (SelectionStatement -> SelectionStatement -> Ordering)
    -> (SelectionStatement -> SelectionStatement -> Bool)
    -> (SelectionStatement -> SelectionStatement -> Bool)
    -> (SelectionStatement -> SelectionStatement -> Bool)
    -> (SelectionStatement -> SelectionStatement -> Bool)
    -> (SelectionStatement -> SelectionStatement -> SelectionStatement)
    -> (SelectionStatement -> SelectionStatement -> SelectionStatement)
    -> Ord SelectionStatement
    SelectionStatement -> SelectionStatement -> Bool
    SelectionStatement -> SelectionStatement -> Ordering
    SelectionStatement -> SelectionStatement -> SelectionStatement
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: SelectionStatement -> SelectionStatement -> Ordering
    compare :: SelectionStatement -> SelectionStatement -> Ordering
    $c< :: SelectionStatement -> SelectionStatement -> Bool
    < :: SelectionStatement -> SelectionStatement -> Bool
    $c<= :: SelectionStatement -> SelectionStatement -> Bool
    <= :: SelectionStatement -> SelectionStatement -> Bool
    $c> :: SelectionStatement -> SelectionStatement -> Bool
    > :: SelectionStatement -> SelectionStatement -> Bool
    $c>= :: SelectionStatement -> SelectionStatement -> Bool
    >= :: SelectionStatement -> SelectionStatement -> Bool
    $cmax :: SelectionStatement -> SelectionStatement -> SelectionStatement
    max :: SelectionStatement -> SelectionStatement -> SelectionStatement
    $cmin :: SelectionStatement -> SelectionStatement -> SelectionStatement
    min :: SelectionStatement -> SelectionStatement -> SelectionStatement
    C.Ord, Int -> SelectionStatement -> ShowS
    [SelectionStatement] -> ShowS
    SelectionStatement -> String
    (Int -> SelectionStatement -> ShowS)
    -> (SelectionStatement -> String)
    -> ([SelectionStatement] -> ShowS)
    -> Show SelectionStatement
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> SelectionStatement -> ShowS
    showsPrec :: Int -> SelectionStatement -> ShowS
    $cshow :: SelectionStatement -> String
    show :: SelectionStatement -> String
    $cshowList :: [SelectionStatement] -> ShowS
    showList :: [SelectionStatement] -> ShowS
    C.Show, ReadPrec [SelectionStatement]
    ReadPrec SelectionStatement
    Int -> ReadS SelectionStatement
    ReadS [SelectionStatement]
    (Int -> ReadS SelectionStatement)
    -> ReadS [SelectionStatement]
    -> ReadPrec SelectionStatement
    -> ReadPrec [SelectionStatement]
    -> Read SelectionStatement
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS SelectionStatement
    readsPrec :: Int -> ReadS SelectionStatement
    $creadList :: ReadS [SelectionStatement]
    readList :: ReadS [SelectionStatement]
    $creadPrec :: ReadPrec SelectionStatement
    readPrec :: ReadPrec SelectionStatement
    $creadListPrec :: ReadPrec [SelectionStatement]
    readListPrec :: ReadPrec [SelectionStatement]
    C.Read)

    data IterationStatement
        = MkIterationStatementWhile Expression Statement
        | MkIterationStatementDo Statement Expression
        | MkIterationStatementFor ExpressionOpt ExpressionOpt ExpressionOpt Statement
      deriving (IterationStatement -> IterationStatement -> Bool
    (IterationStatement -> IterationStatement -> Bool)
    -> (IterationStatement -> IterationStatement -> Bool)
    -> Eq IterationStatement
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: IterationStatement -> IterationStatement -> Bool
    == :: IterationStatement -> IterationStatement -> Bool
    $c/= :: IterationStatement -> IterationStatement -> Bool
    /= :: IterationStatement -> IterationStatement -> Bool
    C.Eq, Eq IterationStatement
    Eq IterationStatement =>
    (IterationStatement -> IterationStatement -> Ordering)
    -> (IterationStatement -> IterationStatement -> Bool)
    -> (IterationStatement -> IterationStatement -> Bool)
    -> (IterationStatement -> IterationStatement -> Bool)
    -> (IterationStatement -> IterationStatement -> Bool)
    -> (IterationStatement -> IterationStatement -> IterationStatement)
    -> (IterationStatement -> IterationStatement -> IterationStatement)
    -> Ord IterationStatement
    IterationStatement -> IterationStatement -> Bool
    IterationStatement -> IterationStatement -> Ordering
    IterationStatement -> IterationStatement -> IterationStatement
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: IterationStatement -> IterationStatement -> Ordering
    compare :: IterationStatement -> IterationStatement -> Ordering
    $c< :: IterationStatement -> IterationStatement -> Bool
    < :: IterationStatement -> IterationStatement -> Bool
    $c<= :: IterationStatement -> IterationStatement -> Bool
    <= :: IterationStatement -> IterationStatement -> Bool
    $c> :: IterationStatement -> IterationStatement -> Bool
    > :: IterationStatement -> IterationStatement -> Bool
    $c>= :: IterationStatement -> IterationStatement -> Bool
    >= :: IterationStatement -> IterationStatement -> Bool
    $cmax :: IterationStatement -> IterationStatement -> IterationStatement
    max :: IterationStatement -> IterationStatement -> IterationStatement
    $cmin :: IterationStatement -> IterationStatement -> IterationStatement
    min :: IterationStatement -> IterationStatement -> IterationStatement
    C.Ord, Int -> IterationStatement -> ShowS
    [IterationStatement] -> ShowS
    IterationStatement -> String
    (Int -> IterationStatement -> ShowS)
    -> (IterationStatement -> String)
    -> ([IterationStatement] -> ShowS)
    -> Show IterationStatement
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> IterationStatement -> ShowS
    showsPrec :: Int -> IterationStatement -> ShowS
    $cshow :: IterationStatement -> String
    show :: IterationStatement -> String
    $cshowList :: [IterationStatement] -> ShowS
    showList :: [IterationStatement] -> ShowS
    C.Show, ReadPrec [IterationStatement]
    ReadPrec IterationStatement
    Int -> ReadS IterationStatement
    ReadS [IterationStatement]
    (Int -> ReadS IterationStatement)
    -> ReadS [IterationStatement]
    -> ReadPrec IterationStatement
    -> ReadPrec [IterationStatement]
    -> Read IterationStatement
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS IterationStatement
    readsPrec :: Int -> ReadS IterationStatement
    $creadList :: ReadS [IterationStatement]
    readList :: ReadS [IterationStatement]
    $creadPrec :: ReadPrec IterationStatement
    readPrec :: ReadPrec IterationStatement
    $creadListPrec :: ReadPrec [IterationStatement]
    readListPrec :: ReadPrec [IterationStatement]
    C.Read)

    data JumpStatement
        = MkJumpStatementGoto Identifier
        | MkJumpStatementContinue
        | MkJumpStatementBreak
        | MkJumpStatementReturn ExpressionOpt
      deriving (JumpStatement -> JumpStatement -> Bool
    (JumpStatement -> JumpStatement -> Bool)
    -> (JumpStatement -> JumpStatement -> Bool) -> Eq JumpStatement
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: JumpStatement -> JumpStatement -> Bool
    == :: JumpStatement -> JumpStatement -> Bool
    $c/= :: JumpStatement -> JumpStatement -> Bool
    /= :: JumpStatement -> JumpStatement -> Bool
    C.Eq, Eq JumpStatement
    Eq JumpStatement =>
    (JumpStatement -> JumpStatement -> Ordering)
    -> (JumpStatement -> JumpStatement -> Bool)
    -> (JumpStatement -> JumpStatement -> Bool)
    -> (JumpStatement -> JumpStatement -> Bool)
    -> (JumpStatement -> JumpStatement -> Bool)
    -> (JumpStatement -> JumpStatement -> JumpStatement)
    -> (JumpStatement -> JumpStatement -> JumpStatement)
    -> Ord JumpStatement
    JumpStatement -> JumpStatement -> Bool
    JumpStatement -> JumpStatement -> Ordering
    JumpStatement -> JumpStatement -> JumpStatement
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: JumpStatement -> JumpStatement -> Ordering
    compare :: JumpStatement -> JumpStatement -> Ordering
    $c< :: JumpStatement -> JumpStatement -> Bool
    < :: JumpStatement -> JumpStatement -> Bool
    $c<= :: JumpStatement -> JumpStatement -> Bool
    <= :: JumpStatement -> JumpStatement -> Bool
    $c> :: JumpStatement -> JumpStatement -> Bool
    > :: JumpStatement -> JumpStatement -> Bool
    $c>= :: JumpStatement -> JumpStatement -> Bool
    >= :: JumpStatement -> JumpStatement -> Bool
    $cmax :: JumpStatement -> JumpStatement -> JumpStatement
    max :: JumpStatement -> JumpStatement -> JumpStatement
    $cmin :: JumpStatement -> JumpStatement -> JumpStatement
    min :: JumpStatement -> JumpStatement -> JumpStatement
    C.Ord, Int -> JumpStatement -> ShowS
    [JumpStatement] -> ShowS
    JumpStatement -> String
    (Int -> JumpStatement -> ShowS)
    -> (JumpStatement -> String)
    -> ([JumpStatement] -> ShowS)
    -> Show JumpStatement
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> JumpStatement -> ShowS
    showsPrec :: Int -> JumpStatement -> ShowS
    $cshow :: JumpStatement -> String
    show :: JumpStatement -> String
    $cshowList :: [JumpStatement] -> ShowS
    showList :: [JumpStatement] -> ShowS
    C.Show, ReadPrec [JumpStatement]
    ReadPrec JumpStatement
    Int -> ReadS JumpStatement
    ReadS [JumpStatement]
    (Int -> ReadS JumpStatement)
    -> ReadS [JumpStatement]
    -> ReadPrec JumpStatement
    -> ReadPrec [JumpStatement]
    -> Read JumpStatement
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS JumpStatement
    readsPrec :: Int -> ReadS JumpStatement
    $creadList :: ReadS [JumpStatement]
    readList :: ReadS [JumpStatement]
    $creadPrec :: ReadPrec JumpStatement
    readPrec :: ReadPrec JumpStatement
    $creadListPrec :: ReadPrec [JumpStatement]
    readListPrec :: ReadPrec [JumpStatement]
    C.Read)

    data ExpressionOpt
        = MkExpressionOptNothing | MkExpressionOptJust Expression
      deriving (ExpressionOpt -> ExpressionOpt -> Bool
    (ExpressionOpt -> ExpressionOpt -> Bool)
    -> (ExpressionOpt -> ExpressionOpt -> Bool) -> Eq ExpressionOpt
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: ExpressionOpt -> ExpressionOpt -> Bool
    == :: ExpressionOpt -> ExpressionOpt -> Bool
    $c/= :: ExpressionOpt -> ExpressionOpt -> Bool
    /= :: ExpressionOpt -> ExpressionOpt -> Bool
    C.Eq, Eq ExpressionOpt
    Eq ExpressionOpt =>
    (ExpressionOpt -> ExpressionOpt -> Ordering)
    -> (ExpressionOpt -> ExpressionOpt -> Bool)
    -> (ExpressionOpt -> ExpressionOpt -> Bool)
    -> (ExpressionOpt -> ExpressionOpt -> Bool)
    -> (ExpressionOpt -> ExpressionOpt -> Bool)
    -> (ExpressionOpt -> ExpressionOpt -> ExpressionOpt)
    -> (ExpressionOpt -> ExpressionOpt -> ExpressionOpt)
    -> Ord ExpressionOpt
    ExpressionOpt -> ExpressionOpt -> Bool
    ExpressionOpt -> ExpressionOpt -> Ordering
    ExpressionOpt -> ExpressionOpt -> ExpressionOpt
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: ExpressionOpt -> ExpressionOpt -> Ordering
    compare :: ExpressionOpt -> ExpressionOpt -> Ordering
    $c< :: ExpressionOpt -> ExpressionOpt -> Bool
    < :: ExpressionOpt -> ExpressionOpt -> Bool
    $c<= :: ExpressionOpt -> ExpressionOpt -> Bool
    <= :: ExpressionOpt -> ExpressionOpt -> Bool
    $c> :: ExpressionOpt -> ExpressionOpt -> Bool
    > :: ExpressionOpt -> ExpressionOpt -> Bool
    $c>= :: ExpressionOpt -> ExpressionOpt -> Bool
    >= :: ExpressionOpt -> ExpressionOpt -> Bool
    $cmax :: ExpressionOpt -> ExpressionOpt -> ExpressionOpt
    max :: ExpressionOpt -> ExpressionOpt -> ExpressionOpt
    $cmin :: ExpressionOpt -> ExpressionOpt -> ExpressionOpt
    min :: ExpressionOpt -> ExpressionOpt -> ExpressionOpt
    C.Ord, Int -> ExpressionOpt -> ShowS
    [ExpressionOpt] -> ShowS
    ExpressionOpt -> String
    (Int -> ExpressionOpt -> ShowS)
    -> (ExpressionOpt -> String)
    -> ([ExpressionOpt] -> ShowS)
    -> Show ExpressionOpt
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> ExpressionOpt -> ShowS
    showsPrec :: Int -> ExpressionOpt -> ShowS
    $cshow :: ExpressionOpt -> String
    show :: ExpressionOpt -> String
    $cshowList :: [ExpressionOpt] -> ShowS
    showList :: [ExpressionOpt] -> ShowS
    C.Show, ReadPrec [ExpressionOpt]
    ReadPrec ExpressionOpt
    Int -> ReadS ExpressionOpt
    ReadS [ExpressionOpt]
    (Int -> ReadS ExpressionOpt)
    -> ReadS [ExpressionOpt]
    -> ReadPrec ExpressionOpt
    -> ReadPrec [ExpressionOpt]
    -> Read ExpressionOpt
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS ExpressionOpt
    readsPrec :: Int -> ReadS ExpressionOpt
    $creadList :: ReadS [ExpressionOpt]
    readList :: ReadS [ExpressionOpt]
    $creadPrec :: ReadPrec ExpressionOpt
    readPrec :: ReadPrec ExpressionOpt
    $creadListPrec :: ReadPrec [ExpressionOpt]
    readListPrec :: ReadPrec [ExpressionOpt]
    C.Read)

    data Expression
        = Expression12 CastExpression
        | Expression11 Expression MultOp Expression
        | Expression10 Expression AddOp Expression
        | Expression9 Expression ShiftOp Expression
        | Expression8 Expression RelOp Expression
        | Expression7 Expression EqOp Expression
        | Expression6 Expression Expression
        | Expression5 Expression Expression
        | Expression4 Expression Expression
        | Expression3 Expression Expression
        | Expression2 Expression Expression Expression
        | Expression1 UnaryExpression AssignmentOperator Expression
        | Expression Expression Expression
      deriving (Expression -> Expression -> Bool
    (Expression -> Expression -> Bool)
    -> (Expression -> Expression -> Bool) -> Eq Expression
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: Expression -> Expression -> Bool
    == :: Expression -> Expression -> Bool
    $c/= :: Expression -> Expression -> Bool
    /= :: Expression -> Expression -> Bool
    C.Eq, Eq Expression
    Eq Expression =>
    (Expression -> Expression -> Ordering)
    -> (Expression -> Expression -> Bool)
    -> (Expression -> Expression -> Bool)
    -> (Expression -> Expression -> Bool)
    -> (Expression -> Expression -> Bool)
    -> (Expression -> Expression -> Expression)
    -> (Expression -> Expression -> Expression)
    -> Ord Expression
    Expression -> Expression -> Bool
    Expression -> Expression -> Ordering
    Expression -> Expression -> Expression
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: Expression -> Expression -> Ordering
    compare :: Expression -> Expression -> Ordering
    $c< :: Expression -> Expression -> Bool
    < :: Expression -> Expression -> Bool
    $c<= :: Expression -> Expression -> Bool
    <= :: Expression -> Expression -> Bool
    $c> :: Expression -> Expression -> Bool
    > :: Expression -> Expression -> Bool
    $c>= :: Expression -> Expression -> Bool
    >= :: Expression -> Expression -> Bool
    $cmax :: Expression -> Expression -> Expression
    max :: Expression -> Expression -> Expression
    $cmin :: Expression -> Expression -> Expression
    min :: Expression -> Expression -> Expression
    C.Ord, Int -> Expression -> ShowS
    [Expression] -> ShowS
    Expression -> String
    (Int -> Expression -> ShowS)
    -> (Expression -> String)
    -> ([Expression] -> ShowS)
    -> Show Expression
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> Expression -> ShowS
    showsPrec :: Int -> Expression -> ShowS
    $cshow :: Expression -> String
    show :: Expression -> String
    $cshowList :: [Expression] -> ShowS
    showList :: [Expression] -> ShowS
    C.Show, ReadPrec [Expression]
    ReadPrec Expression
    Int -> ReadS Expression
    ReadS [Expression]
    (Int -> ReadS Expression)
    -> ReadS [Expression]
    -> ReadPrec Expression
    -> ReadPrec [Expression]
    -> Read Expression
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS Expression
    readsPrec :: Int -> ReadS Expression
    $creadList :: ReadS [Expression]
    readList :: ReadS [Expression]
    $creadPrec :: ReadPrec Expression
    readPrec :: ReadPrec Expression
    $creadListPrec :: ReadPrec [Expression]
    readListPrec :: ReadPrec [Expression]
    C.Read)

    data AssignmentOperator
        = MkAssignmentOperatorAssign
        | MkAssignmentOperatorTimes
        | MkAssignmentOperatorDiv
        | MkAssignmentOperatorMod
        | MkAssignmentOperatorPlus
        | MkAssignmentOperatorMinus
        | MkAssignmentOperatorShiftL
        | MkAssignmentOperatorShiftR
        | MkAssignmentOperatorAnd
        | MkAssignmentOperatorXOr
        | MkAssignmentOperatorOr
      deriving (AssignmentOperator -> AssignmentOperator -> Bool
    (AssignmentOperator -> AssignmentOperator -> Bool)
    -> (AssignmentOperator -> AssignmentOperator -> Bool)
    -> Eq AssignmentOperator
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: AssignmentOperator -> AssignmentOperator -> Bool
    == :: AssignmentOperator -> AssignmentOperator -> Bool
    $c/= :: AssignmentOperator -> AssignmentOperator -> Bool
    /= :: AssignmentOperator -> AssignmentOperator -> Bool
    C.Eq, Eq AssignmentOperator
    Eq AssignmentOperator =>
    (AssignmentOperator -> AssignmentOperator -> Ordering)
    -> (AssignmentOperator -> AssignmentOperator -> Bool)
    -> (AssignmentOperator -> AssignmentOperator -> Bool)
    -> (AssignmentOperator -> AssignmentOperator -> Bool)
    -> (AssignmentOperator -> AssignmentOperator -> Bool)
    -> (AssignmentOperator -> AssignmentOperator -> AssignmentOperator)
    -> (AssignmentOperator -> AssignmentOperator -> AssignmentOperator)
    -> Ord AssignmentOperator
    AssignmentOperator -> AssignmentOperator -> Bool
    AssignmentOperator -> AssignmentOperator -> Ordering
    AssignmentOperator -> AssignmentOperator -> AssignmentOperator
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: AssignmentOperator -> AssignmentOperator -> Ordering
    compare :: AssignmentOperator -> AssignmentOperator -> Ordering
    $c< :: AssignmentOperator -> AssignmentOperator -> Bool
    < :: AssignmentOperator -> AssignmentOperator -> Bool
    $c<= :: AssignmentOperator -> AssignmentOperator -> Bool
    <= :: AssignmentOperator -> AssignmentOperator -> Bool
    $c> :: AssignmentOperator -> AssignmentOperator -> Bool
    > :: AssignmentOperator -> AssignmentOperator -> Bool
    $c>= :: AssignmentOperator -> AssignmentOperator -> Bool
    >= :: AssignmentOperator -> AssignmentOperator -> Bool
    $cmax :: AssignmentOperator -> AssignmentOperator -> AssignmentOperator
    max :: AssignmentOperator -> AssignmentOperator -> AssignmentOperator
    $cmin :: AssignmentOperator -> AssignmentOperator -> AssignmentOperator
    min :: AssignmentOperator -> AssignmentOperator -> AssignmentOperator
    C.Ord, Int -> AssignmentOperator -> ShowS
    [AssignmentOperator] -> ShowS
    AssignmentOperator -> String
    (Int -> AssignmentOperator -> ShowS)
    -> (AssignmentOperator -> String)
    -> ([AssignmentOperator] -> ShowS)
    -> Show AssignmentOperator
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> AssignmentOperator -> ShowS
    showsPrec :: Int -> AssignmentOperator -> ShowS
    $cshow :: AssignmentOperator -> String
    show :: AssignmentOperator -> String
    $cshowList :: [AssignmentOperator] -> ShowS
    showList :: [AssignmentOperator] -> ShowS
    C.Show, ReadPrec [AssignmentOperator]
    ReadPrec AssignmentOperator
    Int -> ReadS AssignmentOperator
    ReadS [AssignmentOperator]
    (Int -> ReadS AssignmentOperator)
    -> ReadS [AssignmentOperator]
    -> ReadPrec AssignmentOperator
    -> ReadPrec [AssignmentOperator]
    -> Read AssignmentOperator
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS AssignmentOperator
    readsPrec :: Int -> ReadS AssignmentOperator
    $creadList :: ReadS [AssignmentOperator]
    readList :: ReadS [AssignmentOperator]
    $creadPrec :: ReadPrec AssignmentOperator
    readPrec :: ReadPrec AssignmentOperator
    $creadListPrec :: ReadPrec [AssignmentOperator]
    readListPrec :: ReadPrec [AssignmentOperator]
    C.Read)

    data ConstantExpressionOpt
        = MkConditionalExpressionNothing
        | MkConditionalExpressionJust ConstantExpression
      deriving (ConstantExpressionOpt -> ConstantExpressionOpt -> Bool
    (ConstantExpressionOpt -> ConstantExpressionOpt -> Bool)
    -> (ConstantExpressionOpt -> ConstantExpressionOpt -> Bool)
    -> Eq ConstantExpressionOpt
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: ConstantExpressionOpt -> ConstantExpressionOpt -> Bool
    == :: ConstantExpressionOpt -> ConstantExpressionOpt -> Bool
    $c/= :: ConstantExpressionOpt -> ConstantExpressionOpt -> Bool
    /= :: ConstantExpressionOpt -> ConstantExpressionOpt -> Bool
    C.Eq, Eq ConstantExpressionOpt
    Eq ConstantExpressionOpt =>
    (ConstantExpressionOpt -> ConstantExpressionOpt -> Ordering)
    -> (ConstantExpressionOpt -> ConstantExpressionOpt -> Bool)
    -> (ConstantExpressionOpt -> ConstantExpressionOpt -> Bool)
    -> (ConstantExpressionOpt -> ConstantExpressionOpt -> Bool)
    -> (ConstantExpressionOpt -> ConstantExpressionOpt -> Bool)
    -> (ConstantExpressionOpt
        -> ConstantExpressionOpt -> ConstantExpressionOpt)
    -> (ConstantExpressionOpt
        -> ConstantExpressionOpt -> ConstantExpressionOpt)
    -> Ord ConstantExpressionOpt
    ConstantExpressionOpt -> ConstantExpressionOpt -> Bool
    ConstantExpressionOpt -> ConstantExpressionOpt -> Ordering
    ConstantExpressionOpt
    -> ConstantExpressionOpt -> ConstantExpressionOpt
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: ConstantExpressionOpt -> ConstantExpressionOpt -> Ordering
    compare :: ConstantExpressionOpt -> ConstantExpressionOpt -> Ordering
    $c< :: ConstantExpressionOpt -> ConstantExpressionOpt -> Bool
    < :: ConstantExpressionOpt -> ConstantExpressionOpt -> Bool
    $c<= :: ConstantExpressionOpt -> ConstantExpressionOpt -> Bool
    <= :: ConstantExpressionOpt -> ConstantExpressionOpt -> Bool
    $c> :: ConstantExpressionOpt -> ConstantExpressionOpt -> Bool
    > :: ConstantExpressionOpt -> ConstantExpressionOpt -> Bool
    $c>= :: ConstantExpressionOpt -> ConstantExpressionOpt -> Bool
    >= :: ConstantExpressionOpt -> ConstantExpressionOpt -> Bool
    $cmax :: ConstantExpressionOpt
    -> ConstantExpressionOpt -> ConstantExpressionOpt
    max :: ConstantExpressionOpt
    -> ConstantExpressionOpt -> ConstantExpressionOpt
    $cmin :: ConstantExpressionOpt
    -> ConstantExpressionOpt -> ConstantExpressionOpt
    min :: ConstantExpressionOpt
    -> ConstantExpressionOpt -> ConstantExpressionOpt
    C.Ord, Int -> ConstantExpressionOpt -> ShowS
    [ConstantExpressionOpt] -> ShowS
    ConstantExpressionOpt -> String
    (Int -> ConstantExpressionOpt -> ShowS)
    -> (ConstantExpressionOpt -> String)
    -> ([ConstantExpressionOpt] -> ShowS)
    -> Show ConstantExpressionOpt
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> ConstantExpressionOpt -> ShowS
    showsPrec :: Int -> ConstantExpressionOpt -> ShowS
    $cshow :: ConstantExpressionOpt -> String
    show :: ConstantExpressionOpt -> String
    $cshowList :: [ConstantExpressionOpt] -> ShowS
    showList :: [ConstantExpressionOpt] -> ShowS
    C.Show, ReadPrec [ConstantExpressionOpt]
    ReadPrec ConstantExpressionOpt
    Int -> ReadS ConstantExpressionOpt
    ReadS [ConstantExpressionOpt]
    (Int -> ReadS ConstantExpressionOpt)
    -> ReadS [ConstantExpressionOpt]
    -> ReadPrec ConstantExpressionOpt
    -> ReadPrec [ConstantExpressionOpt]
    -> Read ConstantExpressionOpt
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS ConstantExpressionOpt
    readsPrec :: Int -> ReadS ConstantExpressionOpt
    $creadList :: ReadS [ConstantExpressionOpt]
    readList :: ReadS [ConstantExpressionOpt]
    $creadPrec :: ReadPrec ConstantExpressionOpt
    readPrec :: ReadPrec ConstantExpressionOpt
    $creadListPrec :: ReadPrec [ConstantExpressionOpt]
    readListPrec :: ReadPrec [ConstantExpressionOpt]
    C.Read)

    data ConstantExpression = MkConstantExpression Expression
      deriving (ConstantExpression -> ConstantExpression -> Bool
    (ConstantExpression -> ConstantExpression -> Bool)
    -> (ConstantExpression -> ConstantExpression -> Bool)
    -> Eq ConstantExpression
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: ConstantExpression -> ConstantExpression -> Bool
    == :: ConstantExpression -> ConstantExpression -> Bool
    $c/= :: ConstantExpression -> ConstantExpression -> Bool
    /= :: ConstantExpression -> ConstantExpression -> Bool
    C.Eq, Eq ConstantExpression
    Eq ConstantExpression =>
    (ConstantExpression -> ConstantExpression -> Ordering)
    -> (ConstantExpression -> ConstantExpression -> Bool)
    -> (ConstantExpression -> ConstantExpression -> Bool)
    -> (ConstantExpression -> ConstantExpression -> Bool)
    -> (ConstantExpression -> ConstantExpression -> Bool)
    -> (ConstantExpression -> ConstantExpression -> ConstantExpression)
    -> (ConstantExpression -> ConstantExpression -> ConstantExpression)
    -> Ord ConstantExpression
    ConstantExpression -> ConstantExpression -> Bool
    ConstantExpression -> ConstantExpression -> Ordering
    ConstantExpression -> ConstantExpression -> ConstantExpression
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: ConstantExpression -> ConstantExpression -> Ordering
    compare :: ConstantExpression -> ConstantExpression -> Ordering
    $c< :: ConstantExpression -> ConstantExpression -> Bool
    < :: ConstantExpression -> ConstantExpression -> Bool
    $c<= :: ConstantExpression -> ConstantExpression -> Bool
    <= :: ConstantExpression -> ConstantExpression -> Bool
    $c> :: ConstantExpression -> ConstantExpression -> Bool
    > :: ConstantExpression -> ConstantExpression -> Bool
    $c>= :: ConstantExpression -> ConstantExpression -> Bool
    >= :: ConstantExpression -> ConstantExpression -> Bool
    $cmax :: ConstantExpression -> ConstantExpression -> ConstantExpression
    max :: ConstantExpression -> ConstantExpression -> ConstantExpression
    $cmin :: ConstantExpression -> ConstantExpression -> ConstantExpression
    min :: ConstantExpression -> ConstantExpression -> ConstantExpression
    C.Ord, Int -> ConstantExpression -> ShowS
    [ConstantExpression] -> ShowS
    ConstantExpression -> String
    (Int -> ConstantExpression -> ShowS)
    -> (ConstantExpression -> String)
    -> ([ConstantExpression] -> ShowS)
    -> Show ConstantExpression
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> ConstantExpression -> ShowS
    showsPrec :: Int -> ConstantExpression -> ShowS
    $cshow :: ConstantExpression -> String
    show :: ConstantExpression -> String
    $cshowList :: [ConstantExpression] -> ShowS
    showList :: [ConstantExpression] -> ShowS
    C.Show, ReadPrec [ConstantExpression]
    ReadPrec ConstantExpression
    Int -> ReadS ConstantExpression
    ReadS [ConstantExpression]
    (Int -> ReadS ConstantExpression)
    -> ReadS [ConstantExpression]
    -> ReadPrec ConstantExpression
    -> ReadPrec [ConstantExpression]
    -> Read ConstantExpression
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS ConstantExpression
    readsPrec :: Int -> ReadS ConstantExpression
    $creadList :: ReadS [ConstantExpression]
    readList :: ReadS [ConstantExpression]
    $creadPrec :: ReadPrec ConstantExpression
    readPrec :: ReadPrec ConstantExpression
    $creadListPrec :: ReadPrec [ConstantExpression]
    readListPrec :: ReadPrec [ConstantExpression]
    C.Read)

    data EqOp = EqOpEq | EqOpNeq
      deriving (EqOp -> EqOp -> Bool
    (EqOp -> EqOp -> Bool) -> (EqOp -> EqOp -> Bool) -> Eq EqOp
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: EqOp -> EqOp -> Bool
    == :: EqOp -> EqOp -> Bool
    $c/= :: EqOp -> EqOp -> Bool
    /= :: EqOp -> EqOp -> Bool
    C.Eq, Eq EqOp
    Eq EqOp =>
    (EqOp -> EqOp -> Ordering)
    -> (EqOp -> EqOp -> Bool)
    -> (EqOp -> EqOp -> Bool)
    -> (EqOp -> EqOp -> Bool)
    -> (EqOp -> EqOp -> Bool)
    -> (EqOp -> EqOp -> EqOp)
    -> (EqOp -> EqOp -> EqOp)
    -> Ord EqOp
    EqOp -> EqOp -> Bool
    EqOp -> EqOp -> Ordering
    EqOp -> EqOp -> EqOp
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: EqOp -> EqOp -> Ordering
    compare :: EqOp -> EqOp -> Ordering
    $c< :: EqOp -> EqOp -> Bool
    < :: EqOp -> EqOp -> Bool
    $c<= :: EqOp -> EqOp -> Bool
    <= :: EqOp -> EqOp -> Bool
    $c> :: EqOp -> EqOp -> Bool
    > :: EqOp -> EqOp -> Bool
    $c>= :: EqOp -> EqOp -> Bool
    >= :: EqOp -> EqOp -> Bool
    $cmax :: EqOp -> EqOp -> EqOp
    max :: EqOp -> EqOp -> EqOp
    $cmin :: EqOp -> EqOp -> EqOp
    min :: EqOp -> EqOp -> EqOp
    C.Ord, Int -> EqOp -> ShowS
    [EqOp] -> ShowS
    EqOp -> String
    (Int -> EqOp -> ShowS)
    -> (EqOp -> String) -> ([EqOp] -> ShowS) -> Show EqOp
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> EqOp -> ShowS
    showsPrec :: Int -> EqOp -> ShowS
    $cshow :: EqOp -> String
    show :: EqOp -> String
    $cshowList :: [EqOp] -> ShowS
    showList :: [EqOp] -> ShowS
    C.Show, ReadPrec [EqOp]
    ReadPrec EqOp
    Int -> ReadS EqOp
    ReadS [EqOp]
    (Int -> ReadS EqOp)
    -> ReadS [EqOp] -> ReadPrec EqOp -> ReadPrec [EqOp] -> Read EqOp
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS EqOp
    readsPrec :: Int -> ReadS EqOp
    $creadList :: ReadS [EqOp]
    readList :: ReadS [EqOp]
    $creadPrec :: ReadPrec EqOp
    readPrec :: ReadPrec EqOp
    $creadListPrec :: ReadPrec [EqOp]
    readListPrec :: ReadPrec [EqOp]
    C.Read)

    data RelOp = RelOpLT | RelOpGT | RelOpLE | RelOpGE
      deriving (RelOp -> RelOp -> Bool
    (RelOp -> RelOp -> Bool) -> (RelOp -> RelOp -> Bool) -> Eq RelOp
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: RelOp -> RelOp -> Bool
    == :: RelOp -> RelOp -> Bool
    $c/= :: RelOp -> RelOp -> Bool
    /= :: RelOp -> RelOp -> Bool
    C.Eq, Eq RelOp
    Eq RelOp =>
    (RelOp -> RelOp -> Ordering)
    -> (RelOp -> RelOp -> Bool)
    -> (RelOp -> RelOp -> Bool)
    -> (RelOp -> RelOp -> Bool)
    -> (RelOp -> RelOp -> Bool)
    -> (RelOp -> RelOp -> RelOp)
    -> (RelOp -> RelOp -> RelOp)
    -> Ord RelOp
    RelOp -> RelOp -> Bool
    RelOp -> RelOp -> Ordering
    RelOp -> RelOp -> RelOp
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: RelOp -> RelOp -> Ordering
    compare :: RelOp -> RelOp -> Ordering
    $c< :: RelOp -> RelOp -> Bool
    < :: RelOp -> RelOp -> Bool
    $c<= :: RelOp -> RelOp -> Bool
    <= :: RelOp -> RelOp -> Bool
    $c> :: RelOp -> RelOp -> Bool
    > :: RelOp -> RelOp -> Bool
    $c>= :: RelOp -> RelOp -> Bool
    >= :: RelOp -> RelOp -> Bool
    $cmax :: RelOp -> RelOp -> RelOp
    max :: RelOp -> RelOp -> RelOp
    $cmin :: RelOp -> RelOp -> RelOp
    min :: RelOp -> RelOp -> RelOp
    C.Ord, Int -> RelOp -> ShowS
    [RelOp] -> ShowS
    RelOp -> String
    (Int -> RelOp -> ShowS)
    -> (RelOp -> String) -> ([RelOp] -> ShowS) -> Show RelOp
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> RelOp -> ShowS
    showsPrec :: Int -> RelOp -> ShowS
    $cshow :: RelOp -> String
    show :: RelOp -> String
    $cshowList :: [RelOp] -> ShowS
    showList :: [RelOp] -> ShowS
    C.Show, ReadPrec [RelOp]
    ReadPrec RelOp
    Int -> ReadS RelOp
    ReadS [RelOp]
    (Int -> ReadS RelOp)
    -> ReadS [RelOp]
    -> ReadPrec RelOp
    -> ReadPrec [RelOp]
    -> Read RelOp
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS RelOp
    readsPrec :: Int -> ReadS RelOp
    $creadList :: ReadS [RelOp]
    readList :: ReadS [RelOp]
    $creadPrec :: ReadPrec RelOp
    readPrec :: ReadPrec RelOp
    $creadListPrec :: ReadPrec [RelOp]
    readListPrec :: ReadPrec [RelOp]
    C.Read)

    data ShiftOp = ShiftOpLeft | ShiftOpRight
      deriving (ShiftOp -> ShiftOp -> Bool
    (ShiftOp -> ShiftOp -> Bool)
    -> (ShiftOp -> ShiftOp -> Bool) -> Eq ShiftOp
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: ShiftOp -> ShiftOp -> Bool
    == :: ShiftOp -> ShiftOp -> Bool
    $c/= :: ShiftOp -> ShiftOp -> Bool
    /= :: ShiftOp -> ShiftOp -> Bool
    C.Eq, Eq ShiftOp
    Eq ShiftOp =>
    (ShiftOp -> ShiftOp -> Ordering)
    -> (ShiftOp -> ShiftOp -> Bool)
    -> (ShiftOp -> ShiftOp -> Bool)
    -> (ShiftOp -> ShiftOp -> Bool)
    -> (ShiftOp -> ShiftOp -> Bool)
    -> (ShiftOp -> ShiftOp -> ShiftOp)
    -> (ShiftOp -> ShiftOp -> ShiftOp)
    -> Ord ShiftOp
    ShiftOp -> ShiftOp -> Bool
    ShiftOp -> ShiftOp -> Ordering
    ShiftOp -> ShiftOp -> ShiftOp
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: ShiftOp -> ShiftOp -> Ordering
    compare :: ShiftOp -> ShiftOp -> Ordering
    $c< :: ShiftOp -> ShiftOp -> Bool
    < :: ShiftOp -> ShiftOp -> Bool
    $c<= :: ShiftOp -> ShiftOp -> Bool
    <= :: ShiftOp -> ShiftOp -> Bool
    $c> :: ShiftOp -> ShiftOp -> Bool
    > :: ShiftOp -> ShiftOp -> Bool
    $c>= :: ShiftOp -> ShiftOp -> Bool
    >= :: ShiftOp -> ShiftOp -> Bool
    $cmax :: ShiftOp -> ShiftOp -> ShiftOp
    max :: ShiftOp -> ShiftOp -> ShiftOp
    $cmin :: ShiftOp -> ShiftOp -> ShiftOp
    min :: ShiftOp -> ShiftOp -> ShiftOp
    C.Ord, Int -> ShiftOp -> ShowS
    [ShiftOp] -> ShowS
    ShiftOp -> String
    (Int -> ShiftOp -> ShowS)
    -> (ShiftOp -> String) -> ([ShiftOp] -> ShowS) -> Show ShiftOp
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> ShiftOp -> ShowS
    showsPrec :: Int -> ShiftOp -> ShowS
    $cshow :: ShiftOp -> String
    show :: ShiftOp -> String
    $cshowList :: [ShiftOp] -> ShowS
    showList :: [ShiftOp] -> ShowS
    C.Show, ReadPrec [ShiftOp]
    ReadPrec ShiftOp
    Int -> ReadS ShiftOp
    ReadS [ShiftOp]
    (Int -> ReadS ShiftOp)
    -> ReadS [ShiftOp]
    -> ReadPrec ShiftOp
    -> ReadPrec [ShiftOp]
    -> Read ShiftOp
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS ShiftOp
    readsPrec :: Int -> ReadS ShiftOp
    $creadList :: ReadS [ShiftOp]
    readList :: ReadS [ShiftOp]
    $creadPrec :: ReadPrec ShiftOp
    readPrec :: ReadPrec ShiftOp
    $creadListPrec :: ReadPrec [ShiftOp]
    readListPrec :: ReadPrec [ShiftOp]
    C.Read)

    data AddOp = AddOpPlus | AddOpMinus
      deriving (AddOp -> AddOp -> Bool
    (AddOp -> AddOp -> Bool) -> (AddOp -> AddOp -> Bool) -> Eq AddOp
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: AddOp -> AddOp -> Bool
    == :: AddOp -> AddOp -> Bool
    $c/= :: AddOp -> AddOp -> Bool
    /= :: AddOp -> AddOp -> Bool
    C.Eq, Eq AddOp
    Eq AddOp =>
    (AddOp -> AddOp -> Ordering)
    -> (AddOp -> AddOp -> Bool)
    -> (AddOp -> AddOp -> Bool)
    -> (AddOp -> AddOp -> Bool)
    -> (AddOp -> AddOp -> Bool)
    -> (AddOp -> AddOp -> AddOp)
    -> (AddOp -> AddOp -> AddOp)
    -> Ord AddOp
    AddOp -> AddOp -> Bool
    AddOp -> AddOp -> Ordering
    AddOp -> AddOp -> AddOp
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: AddOp -> AddOp -> Ordering
    compare :: AddOp -> AddOp -> Ordering
    $c< :: AddOp -> AddOp -> Bool
    < :: AddOp -> AddOp -> Bool
    $c<= :: AddOp -> AddOp -> Bool
    <= :: AddOp -> AddOp -> Bool
    $c> :: AddOp -> AddOp -> Bool
    > :: AddOp -> AddOp -> Bool
    $c>= :: AddOp -> AddOp -> Bool
    >= :: AddOp -> AddOp -> Bool
    $cmax :: AddOp -> AddOp -> AddOp
    max :: AddOp -> AddOp -> AddOp
    $cmin :: AddOp -> AddOp -> AddOp
    min :: AddOp -> AddOp -> AddOp
    C.Ord, Int -> AddOp -> ShowS
    [AddOp] -> ShowS
    AddOp -> String
    (Int -> AddOp -> ShowS)
    -> (AddOp -> String) -> ([AddOp] -> ShowS) -> Show AddOp
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> AddOp -> ShowS
    showsPrec :: Int -> AddOp -> ShowS
    $cshow :: AddOp -> String
    show :: AddOp -> String
    $cshowList :: [AddOp] -> ShowS
    showList :: [AddOp] -> ShowS
    C.Show, ReadPrec [AddOp]
    ReadPrec AddOp
    Int -> ReadS AddOp
    ReadS [AddOp]
    (Int -> ReadS AddOp)
    -> ReadS [AddOp]
    -> ReadPrec AddOp
    -> ReadPrec [AddOp]
    -> Read AddOp
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS AddOp
    readsPrec :: Int -> ReadS AddOp
    $creadList :: ReadS [AddOp]
    readList :: ReadS [AddOp]
    $creadPrec :: ReadPrec AddOp
    readPrec :: ReadPrec AddOp
    $creadListPrec :: ReadPrec [AddOp]
    readListPrec :: ReadPrec [AddOp]
    C.Read)

    data MultOp = MultOpTimes | MultOpDiv | MultOpMod
      deriving (MultOp -> MultOp -> Bool
    (MultOp -> MultOp -> Bool)
    -> (MultOp -> MultOp -> Bool) -> Eq MultOp
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: MultOp -> MultOp -> Bool
    == :: MultOp -> MultOp -> Bool
    $c/= :: MultOp -> MultOp -> Bool
    /= :: MultOp -> MultOp -> Bool
    C.Eq, Eq MultOp
    Eq MultOp =>
    (MultOp -> MultOp -> Ordering)
    -> (MultOp -> MultOp -> Bool)
    -> (MultOp -> MultOp -> Bool)
    -> (MultOp -> MultOp -> Bool)
    -> (MultOp -> MultOp -> Bool)
    -> (MultOp -> MultOp -> MultOp)
    -> (MultOp -> MultOp -> MultOp)
    -> Ord MultOp
    MultOp -> MultOp -> Bool
    MultOp -> MultOp -> Ordering
    MultOp -> MultOp -> MultOp
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: MultOp -> MultOp -> Ordering
    compare :: MultOp -> MultOp -> Ordering
    $c< :: MultOp -> MultOp -> Bool
    < :: MultOp -> MultOp -> Bool
    $c<= :: MultOp -> MultOp -> Bool
    <= :: MultOp -> MultOp -> Bool
    $c> :: MultOp -> MultOp -> Bool
    > :: MultOp -> MultOp -> Bool
    $c>= :: MultOp -> MultOp -> Bool
    >= :: MultOp -> MultOp -> Bool
    $cmax :: MultOp -> MultOp -> MultOp
    max :: MultOp -> MultOp -> MultOp
    $cmin :: MultOp -> MultOp -> MultOp
    min :: MultOp -> MultOp -> MultOp
    C.Ord, Int -> MultOp -> ShowS
    [MultOp] -> ShowS
    MultOp -> String
    (Int -> MultOp -> ShowS)
    -> (MultOp -> String) -> ([MultOp] -> ShowS) -> Show MultOp
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> MultOp -> ShowS
    showsPrec :: Int -> MultOp -> ShowS
    $cshow :: MultOp -> String
    show :: MultOp -> String
    $cshowList :: [MultOp] -> ShowS
    showList :: [MultOp] -> ShowS
    C.Show, ReadPrec [MultOp]
    ReadPrec MultOp
    Int -> ReadS MultOp
    ReadS [MultOp]
    (Int -> ReadS MultOp)
    -> ReadS [MultOp]
    -> ReadPrec MultOp
    -> ReadPrec [MultOp]
    -> Read MultOp
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS MultOp
    readsPrec :: Int -> ReadS MultOp
    $creadList :: ReadS [MultOp]
    readList :: ReadS [MultOp]
    $creadPrec :: ReadPrec MultOp
    readPrec :: ReadPrec MultOp
    $creadListPrec :: ReadPrec [MultOp]
    readListPrec :: ReadPrec [MultOp]
    C.Read)

    data CastExpression
        = MkCastExpression1 UnaryExpression
        | MkCastExpressionN TypeName CastExpression
      deriving (CastExpression -> CastExpression -> Bool
    (CastExpression -> CastExpression -> Bool)
    -> (CastExpression -> CastExpression -> Bool) -> Eq CastExpression
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: CastExpression -> CastExpression -> Bool
    == :: CastExpression -> CastExpression -> Bool
    $c/= :: CastExpression -> CastExpression -> Bool
    /= :: CastExpression -> CastExpression -> Bool
    C.Eq, Eq CastExpression
    Eq CastExpression =>
    (CastExpression -> CastExpression -> Ordering)
    -> (CastExpression -> CastExpression -> Bool)
    -> (CastExpression -> CastExpression -> Bool)
    -> (CastExpression -> CastExpression -> Bool)
    -> (CastExpression -> CastExpression -> Bool)
    -> (CastExpression -> CastExpression -> CastExpression)
    -> (CastExpression -> CastExpression -> CastExpression)
    -> Ord CastExpression
    CastExpression -> CastExpression -> Bool
    CastExpression -> CastExpression -> Ordering
    CastExpression -> CastExpression -> CastExpression
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: CastExpression -> CastExpression -> Ordering
    compare :: CastExpression -> CastExpression -> Ordering
    $c< :: CastExpression -> CastExpression -> Bool
    < :: CastExpression -> CastExpression -> Bool
    $c<= :: CastExpression -> CastExpression -> Bool
    <= :: CastExpression -> CastExpression -> Bool
    $c> :: CastExpression -> CastExpression -> Bool
    > :: CastExpression -> CastExpression -> Bool
    $c>= :: CastExpression -> CastExpression -> Bool
    >= :: CastExpression -> CastExpression -> Bool
    $cmax :: CastExpression -> CastExpression -> CastExpression
    max :: CastExpression -> CastExpression -> CastExpression
    $cmin :: CastExpression -> CastExpression -> CastExpression
    min :: CastExpression -> CastExpression -> CastExpression
    C.Ord, Int -> CastExpression -> ShowS
    [CastExpression] -> ShowS
    CastExpression -> String
    (Int -> CastExpression -> ShowS)
    -> (CastExpression -> String)
    -> ([CastExpression] -> ShowS)
    -> Show CastExpression
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> CastExpression -> ShowS
    showsPrec :: Int -> CastExpression -> ShowS
    $cshow :: CastExpression -> String
    show :: CastExpression -> String
    $cshowList :: [CastExpression] -> ShowS
    showList :: [CastExpression] -> ShowS
    C.Show, ReadPrec [CastExpression]
    ReadPrec CastExpression
    Int -> ReadS CastExpression
    ReadS [CastExpression]
    (Int -> ReadS CastExpression)
    -> ReadS [CastExpression]
    -> ReadPrec CastExpression
    -> ReadPrec [CastExpression]
    -> Read CastExpression
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS CastExpression
    readsPrec :: Int -> ReadS CastExpression
    $creadList :: ReadS [CastExpression]
    readList :: ReadS [CastExpression]
    $creadPrec :: ReadPrec CastExpression
    readPrec :: ReadPrec CastExpression
    $creadListPrec :: ReadPrec [CastExpression]
    readListPrec :: ReadPrec [CastExpression]
    C.Read)

    data UnaryExpression
        = MkUnaryExpressionPostfix PostfixExpression
        | MkUnaryExpressionPlus2 UnaryExpression
        | MkUnaryExpressionMinus2 UnaryExpression
        | MkUnaryExpressionUnaryOp UnaryOperator CastExpression
        | MkUnaryExpressionSizeof1 UnaryExpression
        | MkUnaryExpressionSizeofPar TypeName
      deriving (UnaryExpression -> UnaryExpression -> Bool
    (UnaryExpression -> UnaryExpression -> Bool)
    -> (UnaryExpression -> UnaryExpression -> Bool)
    -> Eq UnaryExpression
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: UnaryExpression -> UnaryExpression -> Bool
    == :: UnaryExpression -> UnaryExpression -> Bool
    $c/= :: UnaryExpression -> UnaryExpression -> Bool
    /= :: UnaryExpression -> UnaryExpression -> Bool
    C.Eq, Eq UnaryExpression
    Eq UnaryExpression =>
    (UnaryExpression -> UnaryExpression -> Ordering)
    -> (UnaryExpression -> UnaryExpression -> Bool)
    -> (UnaryExpression -> UnaryExpression -> Bool)
    -> (UnaryExpression -> UnaryExpression -> Bool)
    -> (UnaryExpression -> UnaryExpression -> Bool)
    -> (UnaryExpression -> UnaryExpression -> UnaryExpression)
    -> (UnaryExpression -> UnaryExpression -> UnaryExpression)
    -> Ord UnaryExpression
    UnaryExpression -> UnaryExpression -> Bool
    UnaryExpression -> UnaryExpression -> Ordering
    UnaryExpression -> UnaryExpression -> UnaryExpression
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: UnaryExpression -> UnaryExpression -> Ordering
    compare :: UnaryExpression -> UnaryExpression -> Ordering
    $c< :: UnaryExpression -> UnaryExpression -> Bool
    < :: UnaryExpression -> UnaryExpression -> Bool
    $c<= :: UnaryExpression -> UnaryExpression -> Bool
    <= :: UnaryExpression -> UnaryExpression -> Bool
    $c> :: UnaryExpression -> UnaryExpression -> Bool
    > :: UnaryExpression -> UnaryExpression -> Bool
    $c>= :: UnaryExpression -> UnaryExpression -> Bool
    >= :: UnaryExpression -> UnaryExpression -> Bool
    $cmax :: UnaryExpression -> UnaryExpression -> UnaryExpression
    max :: UnaryExpression -> UnaryExpression -> UnaryExpression
    $cmin :: UnaryExpression -> UnaryExpression -> UnaryExpression
    min :: UnaryExpression -> UnaryExpression -> UnaryExpression
    C.Ord, Int -> UnaryExpression -> ShowS
    [UnaryExpression] -> ShowS
    UnaryExpression -> String
    (Int -> UnaryExpression -> ShowS)
    -> (UnaryExpression -> String)
    -> ([UnaryExpression] -> ShowS)
    -> Show UnaryExpression
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> UnaryExpression -> ShowS
    showsPrec :: Int -> UnaryExpression -> ShowS
    $cshow :: UnaryExpression -> String
    show :: UnaryExpression -> String
    $cshowList :: [UnaryExpression] -> ShowS
    showList :: [UnaryExpression] -> ShowS
    C.Show, ReadPrec [UnaryExpression]
    ReadPrec UnaryExpression
    Int -> ReadS UnaryExpression
    ReadS [UnaryExpression]
    (Int -> ReadS UnaryExpression)
    -> ReadS [UnaryExpression]
    -> ReadPrec UnaryExpression
    -> ReadPrec [UnaryExpression]
    -> Read UnaryExpression
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS UnaryExpression
    readsPrec :: Int -> ReadS UnaryExpression
    $creadList :: ReadS [UnaryExpression]
    readList :: ReadS [UnaryExpression]
    $creadPrec :: ReadPrec UnaryExpression
    readPrec :: ReadPrec UnaryExpression
    $creadListPrec :: ReadPrec [UnaryExpression]
    readListPrec :: ReadPrec [UnaryExpression]
    C.Read)

    data UnaryOperator
        = MkUnaryOperatorAnd
        | MkUnaryOperatorTimes
        | MkUnaryOperatorPlus
        | MkUnaryOperatorMinus
        | MkUnaryOperatorTilde
        | MkUnaryOperatorBang
      deriving (UnaryOperator -> UnaryOperator -> Bool
    (UnaryOperator -> UnaryOperator -> Bool)
    -> (UnaryOperator -> UnaryOperator -> Bool) -> Eq UnaryOperator
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: UnaryOperator -> UnaryOperator -> Bool
    == :: UnaryOperator -> UnaryOperator -> Bool
    $c/= :: UnaryOperator -> UnaryOperator -> Bool
    /= :: UnaryOperator -> UnaryOperator -> Bool
    C.Eq, Eq UnaryOperator
    Eq UnaryOperator =>
    (UnaryOperator -> UnaryOperator -> Ordering)
    -> (UnaryOperator -> UnaryOperator -> Bool)
    -> (UnaryOperator -> UnaryOperator -> Bool)
    -> (UnaryOperator -> UnaryOperator -> Bool)
    -> (UnaryOperator -> UnaryOperator -> Bool)
    -> (UnaryOperator -> UnaryOperator -> UnaryOperator)
    -> (UnaryOperator -> UnaryOperator -> UnaryOperator)
    -> Ord UnaryOperator
    UnaryOperator -> UnaryOperator -> Bool
    UnaryOperator -> UnaryOperator -> Ordering
    UnaryOperator -> UnaryOperator -> UnaryOperator
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: UnaryOperator -> UnaryOperator -> Ordering
    compare :: UnaryOperator -> UnaryOperator -> Ordering
    $c< :: UnaryOperator -> UnaryOperator -> Bool
    < :: UnaryOperator -> UnaryOperator -> Bool
    $c<= :: UnaryOperator -> UnaryOperator -> Bool
    <= :: UnaryOperator -> UnaryOperator -> Bool
    $c> :: UnaryOperator -> UnaryOperator -> Bool
    > :: UnaryOperator -> UnaryOperator -> Bool
    $c>= :: UnaryOperator -> UnaryOperator -> Bool
    >= :: UnaryOperator -> UnaryOperator -> Bool
    $cmax :: UnaryOperator -> UnaryOperator -> UnaryOperator
    max :: UnaryOperator -> UnaryOperator -> UnaryOperator
    $cmin :: UnaryOperator -> UnaryOperator -> UnaryOperator
    min :: UnaryOperator -> UnaryOperator -> UnaryOperator
    C.Ord, Int -> UnaryOperator -> ShowS
    [UnaryOperator] -> ShowS
    UnaryOperator -> String
    (Int -> UnaryOperator -> ShowS)
    -> (UnaryOperator -> String)
    -> ([UnaryOperator] -> ShowS)
    -> Show UnaryOperator
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> UnaryOperator -> ShowS
    showsPrec :: Int -> UnaryOperator -> ShowS
    $cshow :: UnaryOperator -> String
    show :: UnaryOperator -> String
    $cshowList :: [UnaryOperator] -> ShowS
    showList :: [UnaryOperator] -> ShowS
    C.Show, ReadPrec [UnaryOperator]
    ReadPrec UnaryOperator
    Int -> ReadS UnaryOperator
    ReadS [UnaryOperator]
    (Int -> ReadS UnaryOperator)
    -> ReadS [UnaryOperator]
    -> ReadPrec UnaryOperator
    -> ReadPrec [UnaryOperator]
    -> Read UnaryOperator
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS UnaryOperator
    readsPrec :: Int -> ReadS UnaryOperator
    $creadList :: ReadS [UnaryOperator]
    readList :: ReadS [UnaryOperator]
    $creadPrec :: ReadPrec UnaryOperator
    readPrec :: ReadPrec UnaryOperator
    $creadListPrec :: ReadPrec [UnaryOperator]
    readListPrec :: ReadPrec [UnaryOperator]
    C.Read)

    data PostfixExpression
        = MkPostfixExpression1 PrimaryExpression
        | MkPostfixExpressionBrackets PostfixExpression Expression
        | MkPostfixExpressionArgumentExpressionListOpt PostfixExpression ArgumentExpressionListOpt
        | MkPostfixExpressionDot PostfixExpression Identifier
        | MkPostfixExpressionArrow PostfixExpression Identifier
        | MkPostfixExpressionPlus2 PostfixExpression
        | MkPostfixExpressionMinus2 PostfixExpression
      deriving (PostfixExpression -> PostfixExpression -> Bool
    (PostfixExpression -> PostfixExpression -> Bool)
    -> (PostfixExpression -> PostfixExpression -> Bool)
    -> Eq PostfixExpression
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: PostfixExpression -> PostfixExpression -> Bool
    == :: PostfixExpression -> PostfixExpression -> Bool
    $c/= :: PostfixExpression -> PostfixExpression -> Bool
    /= :: PostfixExpression -> PostfixExpression -> Bool
    C.Eq, Eq PostfixExpression
    Eq PostfixExpression =>
    (PostfixExpression -> PostfixExpression -> Ordering)
    -> (PostfixExpression -> PostfixExpression -> Bool)
    -> (PostfixExpression -> PostfixExpression -> Bool)
    -> (PostfixExpression -> PostfixExpression -> Bool)
    -> (PostfixExpression -> PostfixExpression -> Bool)
    -> (PostfixExpression -> PostfixExpression -> PostfixExpression)
    -> (PostfixExpression -> PostfixExpression -> PostfixExpression)
    -> Ord PostfixExpression
    PostfixExpression -> PostfixExpression -> Bool
    PostfixExpression -> PostfixExpression -> Ordering
    PostfixExpression -> PostfixExpression -> PostfixExpression
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: PostfixExpression -> PostfixExpression -> Ordering
    compare :: PostfixExpression -> PostfixExpression -> Ordering
    $c< :: PostfixExpression -> PostfixExpression -> Bool
    < :: PostfixExpression -> PostfixExpression -> Bool
    $c<= :: PostfixExpression -> PostfixExpression -> Bool
    <= :: PostfixExpression -> PostfixExpression -> Bool
    $c> :: PostfixExpression -> PostfixExpression -> Bool
    > :: PostfixExpression -> PostfixExpression -> Bool
    $c>= :: PostfixExpression -> PostfixExpression -> Bool
    >= :: PostfixExpression -> PostfixExpression -> Bool
    $cmax :: PostfixExpression -> PostfixExpression -> PostfixExpression
    max :: PostfixExpression -> PostfixExpression -> PostfixExpression
    $cmin :: PostfixExpression -> PostfixExpression -> PostfixExpression
    min :: PostfixExpression -> PostfixExpression -> PostfixExpression
    C.Ord, Int -> PostfixExpression -> ShowS
    [PostfixExpression] -> ShowS
    PostfixExpression -> String
    (Int -> PostfixExpression -> ShowS)
    -> (PostfixExpression -> String)
    -> ([PostfixExpression] -> ShowS)
    -> Show PostfixExpression
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> PostfixExpression -> ShowS
    showsPrec :: Int -> PostfixExpression -> ShowS
    $cshow :: PostfixExpression -> String
    show :: PostfixExpression -> String
    $cshowList :: [PostfixExpression] -> ShowS
    showList :: [PostfixExpression] -> ShowS
    C.Show, ReadPrec [PostfixExpression]
    ReadPrec PostfixExpression
    Int -> ReadS PostfixExpression
    ReadS [PostfixExpression]
    (Int -> ReadS PostfixExpression)
    -> ReadS [PostfixExpression]
    -> ReadPrec PostfixExpression
    -> ReadPrec [PostfixExpression]
    -> Read PostfixExpression
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS PostfixExpression
    readsPrec :: Int -> ReadS PostfixExpression
    $creadList :: ReadS [PostfixExpression]
    readList :: ReadS [PostfixExpression]
    $creadPrec :: ReadPrec PostfixExpression
    readPrec :: ReadPrec PostfixExpression
    $creadListPrec :: ReadPrec [PostfixExpression]
    readListPrec :: ReadPrec [PostfixExpression]
    C.Read)

    data PrimaryExpression
        = MkPrimaryExpressionIdentifier Identifier
        | MkPrimaryExpressionConstant Constant
        | MkPrimaryExpressionString String
        | MkPrimaryExpressionParExpression Expression
      deriving (PrimaryExpression -> PrimaryExpression -> Bool
    (PrimaryExpression -> PrimaryExpression -> Bool)
    -> (PrimaryExpression -> PrimaryExpression -> Bool)
    -> Eq PrimaryExpression
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: PrimaryExpression -> PrimaryExpression -> Bool
    == :: PrimaryExpression -> PrimaryExpression -> Bool
    $c/= :: PrimaryExpression -> PrimaryExpression -> Bool
    /= :: PrimaryExpression -> PrimaryExpression -> Bool
    C.Eq, Eq PrimaryExpression
    Eq PrimaryExpression =>
    (PrimaryExpression -> PrimaryExpression -> Ordering)
    -> (PrimaryExpression -> PrimaryExpression -> Bool)
    -> (PrimaryExpression -> PrimaryExpression -> Bool)
    -> (PrimaryExpression -> PrimaryExpression -> Bool)
    -> (PrimaryExpression -> PrimaryExpression -> Bool)
    -> (PrimaryExpression -> PrimaryExpression -> PrimaryExpression)
    -> (PrimaryExpression -> PrimaryExpression -> PrimaryExpression)
    -> Ord PrimaryExpression
    PrimaryExpression -> PrimaryExpression -> Bool
    PrimaryExpression -> PrimaryExpression -> Ordering
    PrimaryExpression -> PrimaryExpression -> PrimaryExpression
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: PrimaryExpression -> PrimaryExpression -> Ordering
    compare :: PrimaryExpression -> PrimaryExpression -> Ordering
    $c< :: PrimaryExpression -> PrimaryExpression -> Bool
    < :: PrimaryExpression -> PrimaryExpression -> Bool
    $c<= :: PrimaryExpression -> PrimaryExpression -> Bool
    <= :: PrimaryExpression -> PrimaryExpression -> Bool
    $c> :: PrimaryExpression -> PrimaryExpression -> Bool
    > :: PrimaryExpression -> PrimaryExpression -> Bool
    $c>= :: PrimaryExpression -> PrimaryExpression -> Bool
    >= :: PrimaryExpression -> PrimaryExpression -> Bool
    $cmax :: PrimaryExpression -> PrimaryExpression -> PrimaryExpression
    max :: PrimaryExpression -> PrimaryExpression -> PrimaryExpression
    $cmin :: PrimaryExpression -> PrimaryExpression -> PrimaryExpression
    min :: PrimaryExpression -> PrimaryExpression -> PrimaryExpression
    C.Ord, Int -> PrimaryExpression -> ShowS
    [PrimaryExpression] -> ShowS
    PrimaryExpression -> String
    (Int -> PrimaryExpression -> ShowS)
    -> (PrimaryExpression -> String)
    -> ([PrimaryExpression] -> ShowS)
    -> Show PrimaryExpression
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> PrimaryExpression -> ShowS
    showsPrec :: Int -> PrimaryExpression -> ShowS
    $cshow :: PrimaryExpression -> String
    show :: PrimaryExpression -> String
    $cshowList :: [PrimaryExpression] -> ShowS
    showList :: [PrimaryExpression] -> ShowS
    C.Show, ReadPrec [PrimaryExpression]
    ReadPrec PrimaryExpression
    Int -> ReadS PrimaryExpression
    ReadS [PrimaryExpression]
    (Int -> ReadS PrimaryExpression)
    -> ReadS [PrimaryExpression]
    -> ReadPrec PrimaryExpression
    -> ReadPrec [PrimaryExpression]
    -> Read PrimaryExpression
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS PrimaryExpression
    readsPrec :: Int -> ReadS PrimaryExpression
    $creadList :: ReadS [PrimaryExpression]
    readList :: ReadS [PrimaryExpression]
    $creadPrec :: ReadPrec PrimaryExpression
    readPrec :: ReadPrec PrimaryExpression
    $creadListPrec :: ReadPrec [PrimaryExpression]
    readListPrec :: ReadPrec [PrimaryExpression]
    C.Read)

    data ArgumentExpressionListOpt
        = MkArgumentExpressionListOptNothing
        | MkArgumentExpressionListOptJust [Expression]
      deriving (ArgumentExpressionListOpt -> ArgumentExpressionListOpt -> Bool
    (ArgumentExpressionListOpt -> ArgumentExpressionListOpt -> Bool)
    -> (ArgumentExpressionListOpt -> ArgumentExpressionListOpt -> Bool)
    -> Eq ArgumentExpressionListOpt
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: ArgumentExpressionListOpt -> ArgumentExpressionListOpt -> Bool
    == :: ArgumentExpressionListOpt -> ArgumentExpressionListOpt -> Bool
    $c/= :: ArgumentExpressionListOpt -> ArgumentExpressionListOpt -> Bool
    /= :: ArgumentExpressionListOpt -> ArgumentExpressionListOpt -> Bool
    C.Eq, Eq ArgumentExpressionListOpt
    Eq ArgumentExpressionListOpt =>
    (ArgumentExpressionListOpt
     -> ArgumentExpressionListOpt -> Ordering)
    -> (ArgumentExpressionListOpt -> ArgumentExpressionListOpt -> Bool)
    -> (ArgumentExpressionListOpt -> ArgumentExpressionListOpt -> Bool)
    -> (ArgumentExpressionListOpt -> ArgumentExpressionListOpt -> Bool)
    -> (ArgumentExpressionListOpt -> ArgumentExpressionListOpt -> Bool)
    -> (ArgumentExpressionListOpt
        -> ArgumentExpressionListOpt -> ArgumentExpressionListOpt)
    -> (ArgumentExpressionListOpt
        -> ArgumentExpressionListOpt -> ArgumentExpressionListOpt)
    -> Ord ArgumentExpressionListOpt
    ArgumentExpressionListOpt -> ArgumentExpressionListOpt -> Bool
    ArgumentExpressionListOpt -> ArgumentExpressionListOpt -> Ordering
    ArgumentExpressionListOpt
    -> ArgumentExpressionListOpt -> ArgumentExpressionListOpt
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: ArgumentExpressionListOpt -> ArgumentExpressionListOpt -> Ordering
    compare :: ArgumentExpressionListOpt -> ArgumentExpressionListOpt -> Ordering
    $c< :: ArgumentExpressionListOpt -> ArgumentExpressionListOpt -> Bool
    < :: ArgumentExpressionListOpt -> ArgumentExpressionListOpt -> Bool
    $c<= :: ArgumentExpressionListOpt -> ArgumentExpressionListOpt -> Bool
    <= :: ArgumentExpressionListOpt -> ArgumentExpressionListOpt -> Bool
    $c> :: ArgumentExpressionListOpt -> ArgumentExpressionListOpt -> Bool
    > :: ArgumentExpressionListOpt -> ArgumentExpressionListOpt -> Bool
    $c>= :: ArgumentExpressionListOpt -> ArgumentExpressionListOpt -> Bool
    >= :: ArgumentExpressionListOpt -> ArgumentExpressionListOpt -> Bool
    $cmax :: ArgumentExpressionListOpt
    -> ArgumentExpressionListOpt -> ArgumentExpressionListOpt
    max :: ArgumentExpressionListOpt
    -> ArgumentExpressionListOpt -> ArgumentExpressionListOpt
    $cmin :: ArgumentExpressionListOpt
    -> ArgumentExpressionListOpt -> ArgumentExpressionListOpt
    min :: ArgumentExpressionListOpt
    -> ArgumentExpressionListOpt -> ArgumentExpressionListOpt
    C.Ord, Int -> ArgumentExpressionListOpt -> ShowS
    [ArgumentExpressionListOpt] -> ShowS
    ArgumentExpressionListOpt -> String
    (Int -> ArgumentExpressionListOpt -> ShowS)
    -> (ArgumentExpressionListOpt -> String)
    -> ([ArgumentExpressionListOpt] -> ShowS)
    -> Show ArgumentExpressionListOpt
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> ArgumentExpressionListOpt -> ShowS
    showsPrec :: Int -> ArgumentExpressionListOpt -> ShowS
    $cshow :: ArgumentExpressionListOpt -> String
    show :: ArgumentExpressionListOpt -> String
    $cshowList :: [ArgumentExpressionListOpt] -> ShowS
    showList :: [ArgumentExpressionListOpt] -> ShowS
    C.Show, ReadPrec [ArgumentExpressionListOpt]
    ReadPrec ArgumentExpressionListOpt
    Int -> ReadS ArgumentExpressionListOpt
    ReadS [ArgumentExpressionListOpt]
    (Int -> ReadS ArgumentExpressionListOpt)
    -> ReadS [ArgumentExpressionListOpt]
    -> ReadPrec ArgumentExpressionListOpt
    -> ReadPrec [ArgumentExpressionListOpt]
    -> Read ArgumentExpressionListOpt
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS ArgumentExpressionListOpt
    readsPrec :: Int -> ReadS ArgumentExpressionListOpt
    $creadList :: ReadS [ArgumentExpressionListOpt]
    readList :: ReadS [ArgumentExpressionListOpt]
    $creadPrec :: ReadPrec ArgumentExpressionListOpt
    readPrec :: ReadPrec ArgumentExpressionListOpt
    $creadListPrec :: ReadPrec [ArgumentExpressionListOpt]
    readListPrec :: ReadPrec [ArgumentExpressionListOpt]
    C.Read)

    data Constant
        = MkConstantInteger IntegerConstant
        | MkConstantCharacter CharacterConstant
        | MkConstantFloating FloatingConstant
      deriving (Constant -> Constant -> Bool
    (Constant -> Constant -> Bool)
    -> (Constant -> Constant -> Bool) -> Eq Constant
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: Constant -> Constant -> Bool
    == :: Constant -> Constant -> Bool
    $c/= :: Constant -> Constant -> Bool
    /= :: Constant -> Constant -> Bool
    C.Eq, Eq Constant
    Eq Constant =>
    (Constant -> Constant -> Ordering)
    -> (Constant -> Constant -> Bool)
    -> (Constant -> Constant -> Bool)
    -> (Constant -> Constant -> Bool)
    -> (Constant -> Constant -> Bool)
    -> (Constant -> Constant -> Constant)
    -> (Constant -> Constant -> Constant)
    -> Ord Constant
    Constant -> Constant -> Bool
    Constant -> Constant -> Ordering
    Constant -> Constant -> Constant
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: Constant -> Constant -> Ordering
    compare :: Constant -> Constant -> Ordering
    $c< :: Constant -> Constant -> Bool
    < :: Constant -> Constant -> Bool
    $c<= :: Constant -> Constant -> Bool
    <= :: Constant -> Constant -> Bool
    $c> :: Constant -> Constant -> Bool
    > :: Constant -> Constant -> Bool
    $c>= :: Constant -> Constant -> Bool
    >= :: Constant -> Constant -> Bool
    $cmax :: Constant -> Constant -> Constant
    max :: Constant -> Constant -> Constant
    $cmin :: Constant -> Constant -> Constant
    min :: Constant -> Constant -> Constant
    C.Ord, Int -> Constant -> ShowS
    [Constant] -> ShowS
    Constant -> String
    (Int -> Constant -> ShowS)
    -> (Constant -> String) -> ([Constant] -> ShowS) -> Show Constant
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> Constant -> ShowS
    showsPrec :: Int -> Constant -> ShowS
    $cshow :: Constant -> String
    show :: Constant -> String
    $cshowList :: [Constant] -> ShowS
    showList :: [Constant] -> ShowS
    C.Show, ReadPrec [Constant]
    ReadPrec Constant
    Int -> ReadS Constant
    ReadS [Constant]
    (Int -> ReadS Constant)
    -> ReadS [Constant]
    -> ReadPrec Constant
    -> ReadPrec [Constant]
    -> Read Constant
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS Constant
    readsPrec :: Int -> ReadS Constant
    $creadList :: ReadS [Constant]
    readList :: ReadS [Constant]
    $creadPrec :: ReadPrec Constant
    readPrec :: ReadPrec Constant
    $creadListPrec :: ReadPrec [Constant]
    readListPrec :: ReadPrec [Constant]
    C.Read)

    data IdentifierOpt
        = MkIdentifierOptNothing | MkIdentifierOptJust Identifier
      deriving (IdentifierOpt -> IdentifierOpt -> Bool
    (IdentifierOpt -> IdentifierOpt -> Bool)
    -> (IdentifierOpt -> IdentifierOpt -> Bool) -> Eq IdentifierOpt
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: IdentifierOpt -> IdentifierOpt -> Bool
    == :: IdentifierOpt -> IdentifierOpt -> Bool
    $c/= :: IdentifierOpt -> IdentifierOpt -> Bool
    /= :: IdentifierOpt -> IdentifierOpt -> Bool
    C.Eq, Eq IdentifierOpt
    Eq IdentifierOpt =>
    (IdentifierOpt -> IdentifierOpt -> Ordering)
    -> (IdentifierOpt -> IdentifierOpt -> Bool)
    -> (IdentifierOpt -> IdentifierOpt -> Bool)
    -> (IdentifierOpt -> IdentifierOpt -> Bool)
    -> (IdentifierOpt -> IdentifierOpt -> Bool)
    -> (IdentifierOpt -> IdentifierOpt -> IdentifierOpt)
    -> (IdentifierOpt -> IdentifierOpt -> IdentifierOpt)
    -> Ord IdentifierOpt
    IdentifierOpt -> IdentifierOpt -> Bool
    IdentifierOpt -> IdentifierOpt -> Ordering
    IdentifierOpt -> IdentifierOpt -> IdentifierOpt
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: IdentifierOpt -> IdentifierOpt -> Ordering
    compare :: IdentifierOpt -> IdentifierOpt -> Ordering
    $c< :: IdentifierOpt -> IdentifierOpt -> Bool
    < :: IdentifierOpt -> IdentifierOpt -> Bool
    $c<= :: IdentifierOpt -> IdentifierOpt -> Bool
    <= :: IdentifierOpt -> IdentifierOpt -> Bool
    $c> :: IdentifierOpt -> IdentifierOpt -> Bool
    > :: IdentifierOpt -> IdentifierOpt -> Bool
    $c>= :: IdentifierOpt -> IdentifierOpt -> Bool
    >= :: IdentifierOpt -> IdentifierOpt -> Bool
    $cmax :: IdentifierOpt -> IdentifierOpt -> IdentifierOpt
    max :: IdentifierOpt -> IdentifierOpt -> IdentifierOpt
    $cmin :: IdentifierOpt -> IdentifierOpt -> IdentifierOpt
    min :: IdentifierOpt -> IdentifierOpt -> IdentifierOpt
    C.Ord, Int -> IdentifierOpt -> ShowS
    [IdentifierOpt] -> ShowS
    IdentifierOpt -> String
    (Int -> IdentifierOpt -> ShowS)
    -> (IdentifierOpt -> String)
    -> ([IdentifierOpt] -> ShowS)
    -> Show IdentifierOpt
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> IdentifierOpt -> ShowS
    showsPrec :: Int -> IdentifierOpt -> ShowS
    $cshow :: IdentifierOpt -> String
    show :: IdentifierOpt -> String
    $cshowList :: [IdentifierOpt] -> ShowS
    showList :: [IdentifierOpt] -> ShowS
    C.Show, ReadPrec [IdentifierOpt]
    ReadPrec IdentifierOpt
    Int -> ReadS IdentifierOpt
    ReadS [IdentifierOpt]
    (Int -> ReadS IdentifierOpt)
    -> ReadS [IdentifierOpt]
    -> ReadPrec IdentifierOpt
    -> ReadPrec [IdentifierOpt]
    -> Read IdentifierOpt
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS IdentifierOpt
    readsPrec :: Int -> ReadS IdentifierOpt
    $creadList :: ReadS [IdentifierOpt]
    readList :: ReadS [IdentifierOpt]
    $creadPrec :: ReadPrec IdentifierOpt
    readPrec :: ReadPrec IdentifierOpt
    $creadListPrec :: ReadPrec [IdentifierOpt]
    readListPrec :: ReadPrec [IdentifierOpt]
    C.Read)

    data CharacterConstant = MkCharacterConstant Char
      deriving (CharacterConstant -> CharacterConstant -> Bool
    (CharacterConstant -> CharacterConstant -> Bool)
    -> (CharacterConstant -> CharacterConstant -> Bool)
    -> Eq CharacterConstant
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: CharacterConstant -> CharacterConstant -> Bool
    == :: CharacterConstant -> CharacterConstant -> Bool
    $c/= :: CharacterConstant -> CharacterConstant -> Bool
    /= :: CharacterConstant -> CharacterConstant -> Bool
    C.Eq, Eq CharacterConstant
    Eq CharacterConstant =>
    (CharacterConstant -> CharacterConstant -> Ordering)
    -> (CharacterConstant -> CharacterConstant -> Bool)
    -> (CharacterConstant -> CharacterConstant -> Bool)
    -> (CharacterConstant -> CharacterConstant -> Bool)
    -> (CharacterConstant -> CharacterConstant -> Bool)
    -> (CharacterConstant -> CharacterConstant -> CharacterConstant)
    -> (CharacterConstant -> CharacterConstant -> CharacterConstant)
    -> Ord CharacterConstant
    CharacterConstant -> CharacterConstant -> Bool
    CharacterConstant -> CharacterConstant -> Ordering
    CharacterConstant -> CharacterConstant -> CharacterConstant
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: CharacterConstant -> CharacterConstant -> Ordering
    compare :: CharacterConstant -> CharacterConstant -> Ordering
    $c< :: CharacterConstant -> CharacterConstant -> Bool
    < :: CharacterConstant -> CharacterConstant -> Bool
    $c<= :: CharacterConstant -> CharacterConstant -> Bool
    <= :: CharacterConstant -> CharacterConstant -> Bool
    $c> :: CharacterConstant -> CharacterConstant -> Bool
    > :: CharacterConstant -> CharacterConstant -> Bool
    $c>= :: CharacterConstant -> CharacterConstant -> Bool
    >= :: CharacterConstant -> CharacterConstant -> Bool
    $cmax :: CharacterConstant -> CharacterConstant -> CharacterConstant
    max :: CharacterConstant -> CharacterConstant -> CharacterConstant
    $cmin :: CharacterConstant -> CharacterConstant -> CharacterConstant
    min :: CharacterConstant -> CharacterConstant -> CharacterConstant
    C.Ord, Int -> CharacterConstant -> ShowS
    [CharacterConstant] -> ShowS
    CharacterConstant -> String
    (Int -> CharacterConstant -> ShowS)
    -> (CharacterConstant -> String)
    -> ([CharacterConstant] -> ShowS)
    -> Show CharacterConstant
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> CharacterConstant -> ShowS
    showsPrec :: Int -> CharacterConstant -> ShowS
    $cshow :: CharacterConstant -> String
    show :: CharacterConstant -> String
    $cshowList :: [CharacterConstant] -> ShowS
    showList :: [CharacterConstant] -> ShowS
    C.Show, ReadPrec [CharacterConstant]
    ReadPrec CharacterConstant
    Int -> ReadS CharacterConstant
    ReadS [CharacterConstant]
    (Int -> ReadS CharacterConstant)
    -> ReadS [CharacterConstant]
    -> ReadPrec CharacterConstant
    -> ReadPrec [CharacterConstant]
    -> Read CharacterConstant
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS CharacterConstant
    readsPrec :: Int -> ReadS CharacterConstant
    $creadList :: ReadS [CharacterConstant]
    readList :: ReadS [CharacterConstant]
    $creadPrec :: ReadPrec CharacterConstant
    readPrec :: ReadPrec CharacterConstant
    $creadListPrec :: ReadPrec [CharacterConstant]
    readListPrec :: ReadPrec [CharacterConstant]
    C.Read)

    data FloatingConstant = MkFloatingConstant Double
      deriving (FloatingConstant -> FloatingConstant -> Bool
    (FloatingConstant -> FloatingConstant -> Bool)
    -> (FloatingConstant -> FloatingConstant -> Bool)
    -> Eq FloatingConstant
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: FloatingConstant -> FloatingConstant -> Bool
    == :: FloatingConstant -> FloatingConstant -> Bool
    $c/= :: FloatingConstant -> FloatingConstant -> Bool
    /= :: FloatingConstant -> FloatingConstant -> Bool
    C.Eq, Eq FloatingConstant
    Eq FloatingConstant =>
    (FloatingConstant -> FloatingConstant -> Ordering)
    -> (FloatingConstant -> FloatingConstant -> Bool)
    -> (FloatingConstant -> FloatingConstant -> Bool)
    -> (FloatingConstant -> FloatingConstant -> Bool)
    -> (FloatingConstant -> FloatingConstant -> Bool)
    -> (FloatingConstant -> FloatingConstant -> FloatingConstant)
    -> (FloatingConstant -> FloatingConstant -> FloatingConstant)
    -> Ord FloatingConstant
    FloatingConstant -> FloatingConstant -> Bool
    FloatingConstant -> FloatingConstant -> Ordering
    FloatingConstant -> FloatingConstant -> FloatingConstant
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: FloatingConstant -> FloatingConstant -> Ordering
    compare :: FloatingConstant -> FloatingConstant -> Ordering
    $c< :: FloatingConstant -> FloatingConstant -> Bool
    < :: FloatingConstant -> FloatingConstant -> Bool
    $c<= :: FloatingConstant -> FloatingConstant -> Bool
    <= :: FloatingConstant -> FloatingConstant -> Bool
    $c> :: FloatingConstant -> FloatingConstant -> Bool
    > :: FloatingConstant -> FloatingConstant -> Bool
    $c>= :: FloatingConstant -> FloatingConstant -> Bool
    >= :: FloatingConstant -> FloatingConstant -> Bool
    $cmax :: FloatingConstant -> FloatingConstant -> FloatingConstant
    max :: FloatingConstant -> FloatingConstant -> FloatingConstant
    $cmin :: FloatingConstant -> FloatingConstant -> FloatingConstant
    min :: FloatingConstant -> FloatingConstant -> FloatingConstant
    C.Ord, Int -> FloatingConstant -> ShowS
    [FloatingConstant] -> ShowS
    FloatingConstant -> String
    (Int -> FloatingConstant -> ShowS)
    -> (FloatingConstant -> String)
    -> ([FloatingConstant] -> ShowS)
    -> Show FloatingConstant
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> FloatingConstant -> ShowS
    showsPrec :: Int -> FloatingConstant -> ShowS
    $cshow :: FloatingConstant -> String
    show :: FloatingConstant -> String
    $cshowList :: [FloatingConstant] -> ShowS
    showList :: [FloatingConstant] -> ShowS
    C.Show, ReadPrec [FloatingConstant]
    ReadPrec FloatingConstant
    Int -> ReadS FloatingConstant
    ReadS [FloatingConstant]
    (Int -> ReadS FloatingConstant)
    -> ReadS [FloatingConstant]
    -> ReadPrec FloatingConstant
    -> ReadPrec [FloatingConstant]
    -> Read FloatingConstant
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS FloatingConstant
    readsPrec :: Int -> ReadS FloatingConstant
    $creadList :: ReadS [FloatingConstant]
    readList :: ReadS [FloatingConstant]
    $creadPrec :: ReadPrec FloatingConstant
    readPrec :: ReadPrec FloatingConstant
    $creadListPrec :: ReadPrec [FloatingConstant]
    readListPrec :: ReadPrec [FloatingConstant]
    C.Read)

    newtype Identifier = Identifier String
      deriving (Identifier -> Identifier -> Bool
    (Identifier -> Identifier -> Bool)
    -> (Identifier -> Identifier -> Bool) -> Eq Identifier
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: Identifier -> Identifier -> Bool
    == :: Identifier -> Identifier -> Bool
    $c/= :: Identifier -> Identifier -> Bool
    /= :: Identifier -> Identifier -> Bool
    C.Eq, Eq Identifier
    Eq Identifier =>
    (Identifier -> Identifier -> Ordering)
    -> (Identifier -> Identifier -> Bool)
    -> (Identifier -> Identifier -> Bool)
    -> (Identifier -> Identifier -> Bool)
    -> (Identifier -> Identifier -> Bool)
    -> (Identifier -> Identifier -> Identifier)
    -> (Identifier -> Identifier -> Identifier)
    -> Ord Identifier
    Identifier -> Identifier -> Bool
    Identifier -> Identifier -> Ordering
    Identifier -> Identifier -> Identifier
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: Identifier -> Identifier -> Ordering
    compare :: Identifier -> Identifier -> Ordering
    $c< :: Identifier -> Identifier -> Bool
    < :: Identifier -> Identifier -> Bool
    $c<= :: Identifier -> Identifier -> Bool
    <= :: Identifier -> Identifier -> Bool
    $c> :: Identifier -> Identifier -> Bool
    > :: Identifier -> Identifier -> Bool
    $c>= :: Identifier -> Identifier -> Bool
    >= :: Identifier -> Identifier -> Bool
    $cmax :: Identifier -> Identifier -> Identifier
    max :: Identifier -> Identifier -> Identifier
    $cmin :: Identifier -> Identifier -> Identifier
    min :: Identifier -> Identifier -> Identifier
    C.Ord, Int -> Identifier -> ShowS
    [Identifier] -> ShowS
    Identifier -> String
    (Int -> Identifier -> ShowS)
    -> (Identifier -> String)
    -> ([Identifier] -> ShowS)
    -> Show Identifier
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> Identifier -> ShowS
    showsPrec :: Int -> Identifier -> ShowS
    $cshow :: Identifier -> String
    show :: Identifier -> String
    $cshowList :: [Identifier] -> ShowS
    showList :: [Identifier] -> ShowS
    C.Show, ReadPrec [Identifier]
    ReadPrec Identifier
    Int -> ReadS Identifier
    ReadS [Identifier]
    (Int -> ReadS Identifier)
    -> ReadS [Identifier]
    -> ReadPrec Identifier
    -> ReadPrec [Identifier]
    -> Read Identifier
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS Identifier
    readsPrec :: Int -> ReadS Identifier
    $creadList :: ReadS [Identifier]
    readList :: ReadS [Identifier]
    $creadPrec :: ReadPrec Identifier
    readPrec :: ReadPrec Identifier
    $creadListPrec :: ReadPrec [Identifier]
    readListPrec :: ReadPrec [Identifier]
    C.Read, String -> Identifier
    (String -> Identifier) -> IsString Identifier
    forall a. (String -> a) -> IsString a
    $cfromString :: String -> Identifier
    fromString :: String -> Identifier
    Data.String.IsString)

    newtype IntegerConstant = IntegerConstant String
      deriving (IntegerConstant -> IntegerConstant -> Bool
    (IntegerConstant -> IntegerConstant -> Bool)
    -> (IntegerConstant -> IntegerConstant -> Bool)
    -> Eq IntegerConstant
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: IntegerConstant -> IntegerConstant -> Bool
    == :: IntegerConstant -> IntegerConstant -> Bool
    $c/= :: IntegerConstant -> IntegerConstant -> Bool
    /= :: IntegerConstant -> IntegerConstant -> Bool
    C.Eq, Eq IntegerConstant
    Eq IntegerConstant =>
    (IntegerConstant -> IntegerConstant -> Ordering)
    -> (IntegerConstant -> IntegerConstant -> Bool)
    -> (IntegerConstant -> IntegerConstant -> Bool)
    -> (IntegerConstant -> IntegerConstant -> Bool)
    -> (IntegerConstant -> IntegerConstant -> Bool)
    -> (IntegerConstant -> IntegerConstant -> IntegerConstant)
    -> (IntegerConstant -> IntegerConstant -> IntegerConstant)
    -> Ord IntegerConstant
    IntegerConstant -> IntegerConstant -> Bool
    IntegerConstant -> IntegerConstant -> Ordering
    IntegerConstant -> IntegerConstant -> IntegerConstant
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: IntegerConstant -> IntegerConstant -> Ordering
    compare :: IntegerConstant -> IntegerConstant -> Ordering
    $c< :: IntegerConstant -> IntegerConstant -> Bool
    < :: IntegerConstant -> IntegerConstant -> Bool
    $c<= :: IntegerConstant -> IntegerConstant -> Bool
    <= :: IntegerConstant -> IntegerConstant -> Bool
    $c> :: IntegerConstant -> IntegerConstant -> Bool
    > :: IntegerConstant -> IntegerConstant -> Bool
    $c>= :: IntegerConstant -> IntegerConstant -> Bool
    >= :: IntegerConstant -> IntegerConstant -> Bool
    $cmax :: IntegerConstant -> IntegerConstant -> IntegerConstant
    max :: IntegerConstant -> IntegerConstant -> IntegerConstant
    $cmin :: IntegerConstant -> IntegerConstant -> IntegerConstant
    min :: IntegerConstant -> IntegerConstant -> IntegerConstant
    C.Ord, Int -> IntegerConstant -> ShowS
    [IntegerConstant] -> ShowS
    IntegerConstant -> String
    (Int -> IntegerConstant -> ShowS)
    -> (IntegerConstant -> String)
    -> ([IntegerConstant] -> ShowS)
    -> Show IntegerConstant
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> IntegerConstant -> ShowS
    showsPrec :: Int -> IntegerConstant -> ShowS
    $cshow :: IntegerConstant -> String
    show :: IntegerConstant -> String
    $cshowList :: [IntegerConstant] -> ShowS
    showList :: [IntegerConstant] -> ShowS
    C.Show, ReadPrec [IntegerConstant]
    ReadPrec IntegerConstant
    Int -> ReadS IntegerConstant
    ReadS [IntegerConstant]
    (Int -> ReadS IntegerConstant)
    -> ReadS [IntegerConstant]
    -> ReadPrec IntegerConstant
    -> ReadPrec [IntegerConstant]
    -> Read IntegerConstant
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS IntegerConstant
    readsPrec :: Int -> ReadS IntegerConstant
    $creadList :: ReadS [IntegerConstant]
    readList :: ReadS [IntegerConstant]
    $creadPrec :: ReadPrec IntegerConstant
    readPrec :: ReadPrec IntegerConstant
    $creadListPrec :: ReadPrec [IntegerConstant]
    readListPrec :: ReadPrec [IntegerConstant]
    C.Read, String -> IntegerConstant
    (String -> IntegerConstant) -> IsString IntegerConstant
    forall a. (String -> a) -> IsString a
    $cfromString :: String -> IntegerConstant
    fromString :: String -> IntegerConstant
    Data.String.IsString)