Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Language.Fortran.AST.Literal.Complex
Description
Supporting definitions for COMPLEX literals.
Synopsis
- data ComplexLit a = ComplexLit {}
- data ComplexPart a
- = ComplexPartReal a SrcSpan RealLit (Maybe (KindParam a))
- | ComplexPartInt a SrcSpan String (Maybe (KindParam a))
- | ComplexPartNamed a SrcSpan Name
- complexLitIsPure :: ComplexLit a -> Bool
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.
Constructors
ComplexLit | |
Fields
|
Instances
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
Functor ComplexPart Source # | |||||
Defined in Language.Fortran.AST.Literal.Complex Methods fmap :: (a -> b) -> ComplexPart a -> ComplexPart b # (<$) :: a -> ComplexPart b -> ComplexPart a # | |||||
Annotated ComplexPart Source # | |||||
Defined in Language.Fortran.AST.Literal.Complex Methods getAnnotation :: ComplexPart a -> a Source # setAnnotation :: a -> ComplexPart a -> ComplexPart a Source # modifyAnnotation :: (a -> a) -> ComplexPart a -> ComplexPart a Source # | |||||
Out a => Out (ComplexPart a) Source # | |||||
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 # | |||||
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 # | |||||
Defined in Language.Fortran.AST.Literal.Complex Associated Types
Methods from :: ComplexPart a -> Rep (ComplexPart a) x # to :: Rep (ComplexPart a) x -> ComplexPart a # | |||||
Show a => Show (ComplexPart a) Source # | |||||
Defined in Language.Fortran.AST.Literal.Complex Methods showsPrec :: Int -> ComplexPart a -> ShowS # show :: ComplexPart a -> String # showList :: [ComplexPart a] -> ShowS # | |||||
NFData a => NFData (ComplexPart a) Source # | |||||
Defined in Language.Fortran.AST.Literal.Complex Methods rnf :: ComplexPart a -> () # | |||||
Pretty (ComplexPart a) Source # | |||||
Defined in Language.Fortran.PrettyPrint Methods pprint' :: FortranVersion -> ComplexPart a -> Doc Source # | |||||
Spanned (ComplexPart a) Source # | |||||
Defined in Language.Fortran.AST.Literal.Complex Methods getSpan :: ComplexPart a -> SrcSpan Source # setSpan :: SrcSpan -> ComplexPart a -> ComplexPart a Source # | |||||
Eq a => Eq (ComplexPart a) Source # | |||||
Defined in Language.Fortran.AST.Literal.Complex Methods (==) :: ComplexPart a -> ComplexPart a -> Bool # (/=) :: ComplexPart a -> ComplexPart a -> Bool # | |||||
Ord a => Ord (ComplexPart a) Source # | |||||
Defined in Language.Fortran.AST.Literal.Complex Methods compare :: ComplexPart a -> ComplexPart a -> Ordering # (<) :: ComplexPart a -> ComplexPart a -> Bool # (<=) :: ComplexPart a -> ComplexPart a -> Bool # (>) :: ComplexPart a -> ComplexPart a -> Bool # (>=) :: ComplexPart a -> ComplexPart a -> Bool # max :: ComplexPart a -> ComplexPart a -> ComplexPart a # min :: ComplexPart a -> ComplexPart a -> ComplexPart a # | |||||
FirstParameter (ComplexPart a) a Source # | |||||
Defined in Language.Fortran.AST.Literal.Complex Methods getFirstParameter :: ComplexPart a -> a Source # setFirstParameter :: a -> ComplexPart a -> ComplexPart a Source # | |||||
SecondParameter (ComplexPart a) SrcSpan Source # | |||||
Defined in Language.Fortran.AST.Literal.Complex Methods getSecondParameter :: ComplexPart a -> SrcSpan Source # setSecondParameter :: SrcSpan -> ComplexPart a -> ComplexPart a Source # | |||||
type Rep (ComplexPart a) Source # | |||||
Defined in Language.Fortran.AST.Literal.Complex type Rep (ComplexPart a) = D1 ('MetaData "ComplexPart" "Language.Fortran.AST.Literal.Complex" "fortran-src-0.16.5-CERnQPfKANwBLzRq2l0p1q" '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))))) |
complexLitIsPure :: ComplexLit a -> Bool Source #
Is the given COMPLEX literal "pure", i.e. does it have no named constant components?