-- 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)