{-# LANGUAGE NoMonomorphismRestriction, ScopedTypeVariables, RankNTypes #-} -- | Functions to assist with writing abstract syntax manually. module Language.ObjC.Syntax.Builders ( -- * simple constructors idType ,idTypeSpec ,idSpec ,protoType -- * create a node with only internal information ,nonode ) where import Language.ObjC.Syntax.AST import Language.ObjC.Data.Ident import Language.ObjC.Data.Node import Language.ObjC.Data.Position import Data.Foldable (foldMap) import Data.Maybe import Data.Monoid import Control.Newtype idType :: CDecl idType = CDecl [idTypeSpec] [] nonode idTypeSpec :: CDeclSpec idTypeSpec = idTypeG nonode idSpec :: CTypeSpec idSpec = idSpecG nonode idTypeG :: a -> CDeclarationSpecifier a idTypeG = CTypeSpec . idSpecG -- | Create a type name of @id @ protoType :: Ident -> CDecl protoType pNm = CDecl [CTypeSpec (ObjCTypeProto (internalIdent "id") [ObjCProtoNm pNm nonode] nonode)] [] nonode -- formerly idQuals idSpecG :: a -> CTypeSpecifier a idSpecG = CTypeDef (internalIdent "id") nonode :: NodeInfo nonode = mkNodeInfoOnlyPos internalPos