fortran-src-0.10.1: Parsers and analyses for Fortran standards 66, 77, 90, 95 and 2003 (partial).
Safe HaskellSafe-Inferred
LanguageHaskell2010

Language.Fortran.AST.Literal.Complex

Description

Supporting definitions for COMPLEX literals.

Synopsis

Documentation

data ComplexLit a Source #

A COMPLEX literal, composed of a real part and an imaginary part.

Fortran has lots of rules on how COMPLEX literals are defined and used in various contexts. To support all that, we define the syntactic structure ComplexLit to wrap all the parsing rules. Then during a analysis pass, you may (attempt to) convert these into a more regular type, like a Haskell (Double, Double) tuple.

Instances

Instances details
Functor ComplexLit Source # 
Instance details

Defined in Language.Fortran.AST.Literal.Complex

Methods

fmap :: (a -> b) -> ComplexLit a -> ComplexLit b #

(<$) :: a -> ComplexLit b -> ComplexLit a #

Annotated ComplexLit Source # 
Instance details

Defined in Language.Fortran.AST.Literal.Complex

Out a => Out (ComplexLit a) Source # 
Instance details

Defined in Language.Fortran.AST.Literal.Complex

Methods

docPrec :: Int -> ComplexLit a -> Doc #

doc :: ComplexLit a -> Doc #

docList :: [ComplexLit a] -> Doc #

Data a => Data (ComplexLit a) Source # 
Instance details

Defined in Language.Fortran.AST.Literal.Complex

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> ComplexLit a -> c (ComplexLit a) #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (ComplexLit a) #

toConstr :: ComplexLit a -> Constr #

dataTypeOf :: ComplexLit a -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (ComplexLit a)) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (ComplexLit a)) #

gmapT :: (forall b. Data b => b -> b) -> ComplexLit a -> ComplexLit a #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> ComplexLit a -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> ComplexLit a -> r #

gmapQ :: (forall d. Data d => d -> u) -> ComplexLit a -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> ComplexLit a -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> ComplexLit a -> m (ComplexLit a) #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> ComplexLit a -> m (ComplexLit a) #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> ComplexLit a -> m (ComplexLit a) #

Generic (ComplexLit a) Source # 
Instance details

Defined in Language.Fortran.AST.Literal.Complex

Associated Types

type Rep (ComplexLit a) :: Type -> Type #

Methods

from :: ComplexLit a -> Rep (ComplexLit a) x #

to :: Rep (ComplexLit a) x -> ComplexLit a #

Show a => Show (ComplexLit a) Source # 
Instance details

Defined in Language.Fortran.AST.Literal.Complex

NFData a => NFData (ComplexLit a) Source # 
Instance details

Defined in Language.Fortran.AST.Literal.Complex

Methods

rnf :: ComplexLit a -> () #

Pretty (ComplexLit a) Source # 
Instance details

Defined in Language.Fortran.PrettyPrint

Spanned (ComplexLit a) Source # 
Instance details

Defined in Language.Fortran.AST.Literal.Complex

Eq a => Eq (ComplexLit a) Source # 
Instance details

Defined in Language.Fortran.AST.Literal.Complex

Methods

(==) :: ComplexLit a -> ComplexLit a -> Bool #

(/=) :: ComplexLit a -> ComplexLit a -> Bool #

FirstParameter (ComplexLit a) a Source # 
Instance details

Defined in Language.Fortran.AST.Literal.Complex

SecondParameter (ComplexLit a) SrcSpan Source # 
Instance details

Defined in Language.Fortran.AST.Literal.Complex

type Rep (ComplexLit a) Source # 
Instance details

Defined in Language.Fortran.AST.Literal.Complex

type Rep (ComplexLit a) = D1 ('MetaData "ComplexLit" "Language.Fortran.AST.Literal.Complex" "fortran-src-0.10.1-inplace" 'False) (C1 ('MetaCons "ComplexLit" 'PrefixI 'True) ((S1 ('MetaSel ('Just "complexLitAnno") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Just "complexLitPos") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 SrcSpan)) :*: (S1 ('MetaSel ('Just "complexLitRealPart") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (ComplexPart a)) :*: S1 ('MetaSel ('Just "complexLitImagPart") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (ComplexPart a)))))

data ComplexPart a Source #

A part (either real or imaginary) of a complex literal.

Since Fortran 2003, complex literal parts support named constants, which must be resolved in context at compile time (R422, R423).

Some compilers also allow constant expressions for the parts, and must evaluate at compile time. That's not allowed in any standard. Apparently, gfortran and ifort don't allow it, while nvfortran does. See: https://fortran-lang.discourse.group/t/complex-constants-and-variables/2909/3

We specifically avoid supporting that by defining complex parts without being mutually recursive with Expression.

Constructors

ComplexPartReal a SrcSpan RealLit (Maybe (KindParam a))

signed real lit

ComplexPartInt a SrcSpan String (Maybe (KindParam a))

signed int lit

ComplexPartNamed a SrcSpan Name

named constant

Instances

Instances details
Functor ComplexPart Source # 
Instance details

Defined in Language.Fortran.AST.Literal.Complex

Methods

fmap :: (a -> b) -> ComplexPart a -> ComplexPart b #

(<$) :: a -> ComplexPart b -> ComplexPart a #

Annotated ComplexPart Source # 
Instance details

Defined in Language.Fortran.AST.Literal.Complex

Out a => Out (ComplexPart a) Source # 
Instance details

Defined in Language.Fortran.AST.Literal.Complex

Methods

docPrec :: Int -> ComplexPart a -> Doc #

doc :: ComplexPart a -> Doc #

docList :: [ComplexPart a] -> Doc #

Data a => Data (ComplexPart a) Source # 
Instance details

Defined in Language.Fortran.AST.Literal.Complex

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> ComplexPart a -> c (ComplexPart a) #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (ComplexPart a) #

toConstr :: ComplexPart a -> Constr #

dataTypeOf :: ComplexPart a -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (ComplexPart a)) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (ComplexPart a)) #

gmapT :: (forall b. Data b => b -> b) -> ComplexPart a -> ComplexPart a #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> ComplexPart a -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> ComplexPart a -> r #

gmapQ :: (forall d. Data d => d -> u) -> ComplexPart a -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> ComplexPart a -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> ComplexPart a -> m (ComplexPart a) #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> ComplexPart a -> m (ComplexPart a) #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> ComplexPart a -> m (ComplexPart a) #

Generic (ComplexPart a) Source # 
Instance details

Defined in Language.Fortran.AST.Literal.Complex

Associated Types

type Rep (ComplexPart a) :: Type -> Type #

Methods

from :: ComplexPart a -> Rep (ComplexPart a) x #

to :: Rep (ComplexPart a) x -> ComplexPart a #

Show a => Show (ComplexPart a) Source # 
Instance details

Defined in Language.Fortran.AST.Literal.Complex

NFData a => NFData (ComplexPart a) Source # 
Instance details

Defined in Language.Fortran.AST.Literal.Complex

Methods

rnf :: ComplexPart a -> () #

Pretty (ComplexPart a) Source # 
Instance details

Defined in Language.Fortran.PrettyPrint

Spanned (ComplexPart a) Source # 
Instance details

Defined in Language.Fortran.AST.Literal.Complex

Eq a => Eq (ComplexPart a) Source # 
Instance details

Defined in Language.Fortran.AST.Literal.Complex

FirstParameter (ComplexPart a) a Source # 
Instance details

Defined in Language.Fortran.AST.Literal.Complex

SecondParameter (ComplexPart a) SrcSpan Source # 
Instance details

Defined in Language.Fortran.AST.Literal.Complex

type Rep (ComplexPart a) Source # 
Instance details

Defined in Language.Fortran.AST.Literal.Complex

type Rep (ComplexPart a) = D1 ('MetaData "ComplexPart" "Language.Fortran.AST.Literal.Complex" "fortran-src-0.10.1-inplace" 'False) (C1 ('MetaCons "ComplexPartReal" 'PrefixI 'False) ((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 SrcSpan)) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 RealLit) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe (KindParam a))))) :+: (C1 ('MetaCons "ComplexPartInt" 'PrefixI 'False) ((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 SrcSpan)) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 String) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe (KindParam a))))) :+: C1 ('MetaCons "ComplexPartNamed" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 SrcSpan) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Name)))))