| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Types
Description
Views of C datatypes. While Language.C.Types.Parse defines datatypes for
representing the concrete syntax tree of C types, this module provides
friendlier views of C types, by turning them into a data type matching more
closely how we read and think about types, both in Haskell and in C. To
appreciate the difference, look at the difference between
ParameterDeclaration and ParameterDeclaration.
As a bonus, routines are provided for describing types in natural language
(English) -- see describeParameterDeclaration and describeType.
Synopsis
- newtype Identifier = Identifier {}
- data StorageClassSpecifier
- data TypeQualifier
- data FunctionSpecifier = INLINE
- data ArrayType
- data Specifiers = Specifiers {}
- data Type
- data TypeSpecifier
- data Sign
- data ParameterDeclaration = ParameterDeclaration {}
- type IsTypeName = Identifier -> Bool
- type CParser m = (Monad m, Functor m, Applicative m, MonadPlus m, Parsing m, CharParsing m, TokenParsing m, LookAheadParsing m, MonadReader IsTypeName m)
- runCParser :: Stream s Identity Char => IsTypeName -> String -> s -> ReaderT IsTypeName (Parsec s ()) a -> Either ParseError a
- quickCParser :: IsTypeName -> String -> ReaderT IsTypeName (Parsec String ()) a -> a
- quickCParser_ :: String -> ReaderT IsTypeName (Parsec String ()) a -> a
- parseParameterDeclaration :: CParser m => m ParameterDeclaration
- parseParameterList :: CParser m => m [ParameterDeclaration]
- parseIdentifier :: CParser m => m Identifier
- parseType :: CParser m => m Type
- data UntangleErr
- untangleParameterDeclaration :: ParameterDeclaration -> Either UntangleErr ParameterDeclaration
- tangleParameterDeclaration :: ParameterDeclaration -> ParameterDeclaration
- describeParameterDeclaration :: ParameterDeclaration -> Doc
- describeType :: Type -> Doc
Types
newtype Identifier Source #
Constructors
| Identifier | |
Fields | |
Instances
| Eq Identifier Source # | |
Defined in Types.Internal | |
| Ord Identifier Source # | |
Defined in Types.Internal Methods compare :: Identifier -> Identifier -> Ordering # (<) :: Identifier -> Identifier -> Bool # (<=) :: Identifier -> Identifier -> Bool # (>) :: Identifier -> Identifier -> Bool # (>=) :: Identifier -> Identifier -> Bool # max :: Identifier -> Identifier -> Identifier # min :: Identifier -> Identifier -> Identifier # | |
| Show Identifier Source # | |
Defined in Types.Internal Methods showsPrec :: Int -> Identifier -> ShowS # show :: Identifier -> String # showList :: [Identifier] -> ShowS # | |
| IsString Identifier Source # | |
Defined in Types.Internal Methods fromString :: String -> Identifier # | |
| Pretty Identifier Source # | |
Defined in Types.Internal | |
data StorageClassSpecifier Source #
Instances
data TypeQualifier Source #
Instances
| Eq TypeQualifier Source # | |
Defined in Types.Internal Methods (==) :: TypeQualifier -> TypeQualifier -> Bool # (/=) :: TypeQualifier -> TypeQualifier -> Bool # | |
| Ord TypeQualifier Source # | |
Defined in Types.Internal Methods compare :: TypeQualifier -> TypeQualifier -> Ordering # (<) :: TypeQualifier -> TypeQualifier -> Bool # (<=) :: TypeQualifier -> TypeQualifier -> Bool # (>) :: TypeQualifier -> TypeQualifier -> Bool # (>=) :: TypeQualifier -> TypeQualifier -> Bool # max :: TypeQualifier -> TypeQualifier -> TypeQualifier # min :: TypeQualifier -> TypeQualifier -> TypeQualifier # | |
| Show TypeQualifier Source # | |
Defined in Types.Internal Methods showsPrec :: Int -> TypeQualifier -> ShowS # show :: TypeQualifier -> String # showList :: [TypeQualifier] -> ShowS # | |
| Pretty TypeQualifier Source # | |
Defined in Types.Internal | |
data FunctionSpecifier Source #
Constructors
| INLINE |
Instances
| Eq FunctionSpecifier Source # | |
Defined in Types.Internal Methods (==) :: FunctionSpecifier -> FunctionSpecifier -> Bool # (/=) :: FunctionSpecifier -> FunctionSpecifier -> Bool # | |
| Ord FunctionSpecifier Source # | |
Defined in Types.Internal Methods compare :: FunctionSpecifier -> FunctionSpecifier -> Ordering # (<) :: FunctionSpecifier -> FunctionSpecifier -> Bool # (<=) :: FunctionSpecifier -> FunctionSpecifier -> Bool # (>) :: FunctionSpecifier -> FunctionSpecifier -> Bool # (>=) :: FunctionSpecifier -> FunctionSpecifier -> Bool # max :: FunctionSpecifier -> FunctionSpecifier -> FunctionSpecifier # min :: FunctionSpecifier -> FunctionSpecifier -> FunctionSpecifier # | |
| Show FunctionSpecifier Source # | |
Defined in Types.Internal Methods showsPrec :: Int -> FunctionSpecifier -> ShowS # show :: FunctionSpecifier -> String # showList :: [FunctionSpecifier] -> ShowS # | |
| Pretty FunctionSpecifier Source # | |
Defined in Types.Internal | |
Constructors
| VariablySized | |
| Unsized | |
| SizedByInteger Integer | |
| SizedByIdentifier Identifier |
Instances
| Eq ArrayType Source # | |
| Ord ArrayType Source # | |
| Show ArrayType Source # | |
| Pretty ArrayType Source # | |
Defined in Types.Internal | |
data Specifiers Source #
Constructors
| Specifiers | |
Instances
| Eq Specifiers Source # | |
Defined in Types | |
| Ord Specifiers Source # | |
Defined in Types Methods compare :: Specifiers -> Specifiers -> Ordering # (<) :: Specifiers -> Specifiers -> Bool # (<=) :: Specifiers -> Specifiers -> Bool # (>) :: Specifiers -> Specifiers -> Bool # (>=) :: Specifiers -> Specifiers -> Bool # max :: Specifiers -> Specifiers -> Specifiers # min :: Specifiers -> Specifiers -> Specifiers # | |
| Show Specifiers Source # | |
Defined in Types Methods showsPrec :: Int -> Specifiers -> ShowS # show :: Specifiers -> String # showList :: [Specifiers] -> ShowS # | |
| Semigroup Specifiers Source # | |
Defined in Types Methods (<>) :: Specifiers -> Specifiers -> Specifiers # sconcat :: NonEmpty Specifiers -> Specifiers # stimes :: Integral b => b -> Specifiers -> Specifiers # | |
| Monoid Specifiers Source # | |
Defined in Types Methods mempty :: Specifiers # mappend :: Specifiers -> Specifiers -> Specifiers # mconcat :: [Specifiers] -> Specifiers # | |
Constructors
| TypeSpecifier Specifiers TypeSpecifier | |
| Ptr [TypeQualifier] Type | |
| Array ArrayType Type | |
| Proto Type [ParameterDeclaration] |
data TypeSpecifier Source #
Constructors
| Void | |
| Char (Maybe Sign) | |
| Short Sign | |
| Int Sign | |
| Long Sign | |
| LLong Sign | |
| Float | |
| Double | |
| LDouble | |
| TypeName Identifier | |
| Struct Identifier | |
| Enum Identifier |
Instances
| Eq TypeSpecifier Source # | |
Defined in Types Methods (==) :: TypeSpecifier -> TypeSpecifier -> Bool # (/=) :: TypeSpecifier -> TypeSpecifier -> Bool # | |
| Ord TypeSpecifier Source # | |
Defined in Types Methods compare :: TypeSpecifier -> TypeSpecifier -> Ordering # (<) :: TypeSpecifier -> TypeSpecifier -> Bool # (<=) :: TypeSpecifier -> TypeSpecifier -> Bool # (>) :: TypeSpecifier -> TypeSpecifier -> Bool # (>=) :: TypeSpecifier -> TypeSpecifier -> Bool # max :: TypeSpecifier -> TypeSpecifier -> TypeSpecifier # min :: TypeSpecifier -> TypeSpecifier -> TypeSpecifier # | |
| Show TypeSpecifier Source # | |
Defined in Types Methods showsPrec :: Int -> TypeSpecifier -> ShowS # show :: TypeSpecifier -> String # showList :: [TypeSpecifier] -> ShowS # | |
| Pretty TypeSpecifier Source # | |
Defined in Types | |
data ParameterDeclaration Source #
Constructors
| ParameterDeclaration | |
Instances
| Eq ParameterDeclaration Source # | |
Defined in Types Methods (==) :: ParameterDeclaration -> ParameterDeclaration -> Bool # (/=) :: ParameterDeclaration -> ParameterDeclaration -> Bool # | |
| Ord ParameterDeclaration Source # | |
Defined in Types Methods compare :: ParameterDeclaration -> ParameterDeclaration -> Ordering # (<) :: ParameterDeclaration -> ParameterDeclaration -> Bool # (<=) :: ParameterDeclaration -> ParameterDeclaration -> Bool # (>) :: ParameterDeclaration -> ParameterDeclaration -> Bool # (>=) :: ParameterDeclaration -> ParameterDeclaration -> Bool # max :: ParameterDeclaration -> ParameterDeclaration -> ParameterDeclaration # min :: ParameterDeclaration -> ParameterDeclaration -> ParameterDeclaration # | |
| Show ParameterDeclaration Source # | |
Defined in Types Methods showsPrec :: Int -> ParameterDeclaration -> ShowS # show :: ParameterDeclaration -> String # showList :: [ParameterDeclaration] -> ShowS # | |
| Pretty ParameterDeclaration Source # | |
Defined in Types | |
Parsing
type IsTypeName = Identifier -> Bool Source #
Function used to determine whether an Id is a type name.
type CParser m = (Monad m, Functor m, Applicative m, MonadPlus m, Parsing m, CharParsing m, TokenParsing m, LookAheadParsing m, MonadReader IsTypeName m) Source #
All the parsing is done using the type classes provided by the
parsers package. You can use the parsing routines with any of the parsers
that implement the classes, such as parsec or trifecta.
The MonadReader with IsTypeName is required for parsing C, see
http://en.wikipedia.org/wiki/The_lexer_hack.
Arguments
| :: Stream s Identity Char | |
| => IsTypeName | Function determining if an identifier is a type name. |
| -> String | Source name. |
| -> s | String to parse. |
| -> ReaderT IsTypeName (Parsec s ()) a | Parser. Anything with type |
| -> Either ParseError a |
Runs a using CParserparsec.
Arguments
| :: IsTypeName | Function determining if an identifier is a type name. |
| -> String | String to parse. |
| -> ReaderT IsTypeName (Parsec String ()) a | Parser. Anything with type |
| -> a |
Useful for quick testing. Uses "quickCParser" as source name, and throws
an error if parsing fails.
Arguments
| :: String | String to parse. |
| -> ReaderT IsTypeName (Parsec String ()) a | Parser. Anything with type |
| -> a |
Like quickCParser, but uses as const FalseIsTypeName.
parseParameterList :: CParser m => m [ParameterDeclaration] Source #
parseIdentifier :: CParser m => m Identifier Source #
Convert to and from high-level views
data UntangleErr Source #
Constructors
| MultipleDataTypes [DeclarationSpecifier] | |
| NoDataTypes [DeclarationSpecifier] | |
| IllegalSpecifiers String [TypeSpecifier] |
Instances
| Eq UntangleErr Source # | |
Defined in Types | |
| Show UntangleErr Source # | |
Defined in Types Methods showsPrec :: Int -> UntangleErr -> ShowS # show :: UntangleErr -> String # showList :: [UntangleErr] -> ShowS # | |
| Pretty UntangleErr Source # | |
Defined in Types | |
untangleParameterDeclaration :: ParameterDeclaration -> Either UntangleErr ParameterDeclaration Source #
To english
describeType :: Type -> Doc Source #