-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Fortran lexer and parser, language support, and extensions.
--   
--   Lexer and parser for Fortran roughly supporting standards from FORTRAN
--   77 to Fortran 2003 (but with some patches and rough edges). Also
--   includes language extension support for units-of-measure typing.
@package language-fortran
@version 0.5.1


-- | Based on FortranP.hs from Parameterized Fortran by Martin Erwig.
--   
--   Language definition for Fortran (covers a lot of standards, but still
--   incomplete)
--   
--   The AST is parameterised by type variable p which allows all nodes of
--   the AST to be annotated. The default annotation is (). This is useful
--   for analysis. The <a>Tagged</a> type class provides the function
--   <tt>tag :: d a -&gt; a</tt> to extract these annotations.
--   
--   Furthermore, many nodes of the tree have a <a>SrcSpan</a> which is the
--   start and end locations of the syntax in the source file (including
--   whitespace etc.) This is useful for error reporting and refactoring.
--   The <a>Span</a> type class provides the function <tt>srcSpan :: d a
--   -&gt; SrcSpan</tt> which which extracts the span (where possible)
module Language.Fortran
data SrcLoc
SrcLoc :: String -> Int -> Int -> SrcLoc
[srcFilename] :: SrcLoc -> String
[srcLine] :: SrcLoc -> Int
[srcColumn] :: SrcLoc -> Int
type SrcSpan = (SrcLoc, SrcLoc)
type Variable = String

-- | Fortran program names
type ProgName = String

-- | Fortran subroutine names
data SubName p
SubName :: p -> String -> SubName p
NullSubName :: p -> SubName p
data VarName p
VarName :: p -> Variable -> VarName p
data ArgName p
ArgName :: p -> String -> ArgName p
ASeq :: p -> (ArgName p) -> (ArgName p) -> ArgName p
NullArg :: p -> ArgName p

-- | The src span denotes the end of the arg list before ')'
data Arg p
Arg :: p -> (ArgName p) -> SrcSpan -> Arg p
data ArgList p
ArgList :: p -> (Expr p) -> ArgList p
type Program p = [ProgUnit p]
data ProgUnit p
Main :: p -> SrcSpan -> (SubName p) -> (Arg p) -> (Block p) -> [ProgUnit p] -> ProgUnit p
Sub :: p -> SrcSpan -> (Maybe (BaseType p)) -> (SubName p) -> (Arg p) -> (Block p) -> ProgUnit p
Function :: p -> SrcSpan -> (Maybe (BaseType p)) -> (SubName p) -> (Arg p) -> (Maybe (VarName p)) -> (Block p) -> ProgUnit p
Module :: p -> SrcSpan -> (SubName p) -> (Uses p) -> (Implicit p) -> (Decl p) -> [ProgUnit p] -> ProgUnit p
BlockData :: p -> SrcSpan -> (SubName p) -> (Uses p) -> (Implicit p) -> (Decl p) -> ProgUnit p
Prog :: p -> SrcSpan -> (ProgUnit p) -> ProgUnit p
NullProg :: p -> SrcSpan -> ProgUnit p
IncludeProg :: p -> SrcSpan -> (Decl p) -> (Maybe (Fortran p)) -> ProgUnit p

-- | Implicit none or no implicit
data Implicit p
ImplicitNone :: p -> Implicit p
ImplicitNull :: p -> Implicit p

-- | renames for "use"s
type Renames = [(Variable, Variable)]
data UseBlock p
UseBlock :: (Uses p) -> SrcLoc -> UseBlock p
data Use
Use :: String -> Renames -> Use
UseOnly :: String -> [(Variable, Maybe Variable)] -> Use

-- | (second <tt>p</tt> let's you annotate the <tt>cons</tt> part of the
--   cell)
data Uses p
Uses :: p -> Use -> (Uses p) -> p -> Uses p
UseNil :: p -> Uses p
data Block p
Block :: p -> (UseBlock p) -> (Implicit p) -> SrcSpan -> (Decl p) -> (Fortran p) -> Block p
data Decl p
Decl :: p -> SrcSpan -> [(Expr p, Expr p, Maybe Int)] -> (Type p) -> Decl p
Namelist :: p -> [(Expr p, [Expr p])] -> Decl p
DataDecl :: p -> (DataForm p) -> Decl p
Equivalence :: p -> SrcSpan -> [(Expr p)] -> Decl p
AttrStmt :: p -> (Attr p) -> [(Expr p, Expr p, Maybe Int)] -> Decl p
AccessStmt :: p -> (Attr p) -> [GSpec p] -> Decl p
ExternalStmt :: p -> [String] -> Decl p
Interface :: p -> (Maybe (GSpec p)) -> [InterfaceSpec p] -> Decl p
Common :: p -> SrcSpan -> (Maybe String) -> [Expr p] -> Decl p
DerivedTypeDef :: p -> SrcSpan -> (SubName p) -> [Attr p] -> [Attr p] -> [Decl p] -> Decl p
Include :: p -> (Expr p) -> Decl p
DSeq :: p -> (Decl p) -> (Decl p) -> Decl p
TextDecl :: p -> String -> Decl p
NullDecl :: p -> SrcSpan -> Decl p
MeasureUnitDef :: p -> SrcSpan -> [(MeasureUnit, MeasureUnitSpec p)] -> Decl p
data Type p
BaseType :: p -> (BaseType p) -> [Attr p] -> (Expr p) -> (Expr p) -> Type p
ArrayT :: p -> [(Expr p, Expr p)] -> (BaseType p) -> [Attr p] -> (Expr p) -> (Expr p) -> Type p
data BaseType p
Integer :: p -> BaseType p
Real :: p -> BaseType p
DoublePrecision :: p -> BaseType p
Character :: p -> BaseType p
SomeType :: p -> BaseType p
DerivedType :: p -> (SubName p) -> BaseType p
Recursive :: p -> BaseType p
Pure :: p -> BaseType p
Elemental :: p -> BaseType p
Logical :: p -> BaseType p
Complex :: p -> BaseType p
data Attr p
Parameter :: p -> Attr p
Allocatable :: p -> Attr p
External :: p -> Attr p
Intent :: p -> (IntentAttr p) -> Attr p
Intrinsic :: p -> Attr p
Optional :: p -> Attr p
Pointer :: p -> Attr p
Save :: p -> Attr p
Target :: p -> Attr p
Volatile :: p -> Attr p
Public :: p -> Attr p
Private :: p -> Attr p
Sequence :: p -> Attr p
Dimension :: p -> [(Expr p, Expr p)] -> Attr p
MeasureUnit :: p -> (MeasureUnitSpec p) -> Attr p
type MeasureUnit = String
data MeasureUnitSpec p
UnitProduct :: p -> [(MeasureUnit, Fraction p)] -> MeasureUnitSpec p
UnitQuotient :: p -> [(MeasureUnit, Fraction p)] -> [(MeasureUnit, Fraction p)] -> MeasureUnitSpec p
UnitNone :: p -> MeasureUnitSpec p
data Fraction p
IntegerConst :: p -> String -> Fraction p
FractionConst :: p -> String -> String -> Fraction p
NullFraction :: p -> Fraction p
data GSpec p
GName :: p -> (Expr p) -> GSpec p
GOper :: p -> (BinOp p) -> GSpec p
GAssg :: p -> GSpec p
data InterfaceSpec p
FunctionInterface :: p -> (SubName p) -> (Arg p) -> (Uses p) -> (Implicit p) -> (Decl p) -> InterfaceSpec p
SubroutineInterface :: p -> (SubName p) -> (Arg p) -> (Uses p) -> (Implicit p) -> (Decl p) -> InterfaceSpec p
ModuleProcedure :: p -> [(SubName p)] -> InterfaceSpec p
data DataForm p
Data :: p -> [(Expr p, Expr p)] -> DataForm p
data IntentAttr p
In :: p -> IntentAttr p
Out :: p -> IntentAttr p
InOut :: p -> IntentAttr p
data Fortran p
Assg :: p -> SrcSpan -> (Expr p) -> (Expr p) -> Fortran p
For :: p -> SrcSpan -> (VarName p) -> (Expr p) -> (Expr p) -> (Expr p) -> (Fortran p) -> Fortran p
DoWhile :: p -> SrcSpan -> (Expr p) -> (Fortran p) -> Fortran p
FSeq :: p -> SrcSpan -> (Fortran p) -> (Fortran p) -> Fortran p
If :: p -> SrcSpan -> (Expr p) -> (Fortran p) -> [((Expr p), (Fortran p))] -> (Maybe (Fortran p)) -> Fortran p
Allocate :: p -> SrcSpan -> (Expr p) -> (Expr p) -> Fortran p
Backspace :: p -> SrcSpan -> [Spec p] -> Fortran p
Call :: p -> SrcSpan -> (Expr p) -> (ArgList p) -> Fortran p
Open :: p -> SrcSpan -> [Spec p] -> Fortran p
Close :: p -> SrcSpan -> [Spec p] -> Fortran p
Continue :: p -> SrcSpan -> Fortran p
Cycle :: p -> SrcSpan -> String -> Fortran p
DataStmt :: p -> SrcSpan -> (DataForm p) -> Fortran p
Deallocate :: p -> SrcSpan -> [(Expr p)] -> (Expr p) -> Fortran p
Endfile :: p -> SrcSpan -> [Spec p] -> Fortran p
Exit :: p -> SrcSpan -> String -> Fortran p
Format :: p -> SrcSpan -> [Spec p] -> Fortran p
Forall :: p -> SrcSpan -> ([(String, (Expr p), (Expr p), (Expr p))], (Expr p)) -> (Fortran p) -> Fortran p
Goto :: p -> SrcSpan -> String -> Fortran p
Nullify :: p -> SrcSpan -> [(Expr p)] -> Fortran p
Inquire :: p -> SrcSpan -> [Spec p] -> [(Expr p)] -> Fortran p
Pause :: p -> SrcSpan -> String -> Fortran p
Rewind :: p -> SrcSpan -> [Spec p] -> Fortran p
Stop :: p -> SrcSpan -> (Expr p) -> Fortran p
Where :: p -> SrcSpan -> (Expr p) -> (Fortran p) -> (Maybe (Fortran p)) -> Fortran p
Write :: p -> SrcSpan -> [Spec p] -> [(Expr p)] -> Fortran p
PointerAssg :: p -> SrcSpan -> (Expr p) -> (Expr p) -> Fortran p
Return :: p -> SrcSpan -> (Expr p) -> Fortran p
Label :: p -> SrcSpan -> String -> (Fortran p) -> Fortran p
Print :: p -> SrcSpan -> (Expr p) -> [(Expr p)] -> Fortran p
ReadS :: p -> SrcSpan -> [Spec p] -> [(Expr p)] -> Fortran p
TextStmt :: p -> SrcSpan -> String -> Fortran p
NullStmt :: p -> SrcSpan -> Fortran p
data Expr p
Con :: p -> SrcSpan -> String -> Expr p
ConL :: p -> SrcSpan -> Char -> String -> Expr p
ConS :: p -> SrcSpan -> String -> Expr p
Var :: p -> SrcSpan -> [(VarName p, [Expr p])] -> Expr p
Bin :: p -> SrcSpan -> (BinOp p) -> (Expr p) -> (Expr p) -> Expr p
Unary :: p -> SrcSpan -> (UnaryOp p) -> (Expr p) -> Expr p
CallExpr :: p -> SrcSpan -> (Expr p) -> (ArgList p) -> Expr p
NullExpr :: p -> SrcSpan -> Expr p
Null :: p -> SrcSpan -> Expr p
ESeq :: p -> SrcSpan -> (Expr p) -> (Expr p) -> Expr p
Bound :: p -> SrcSpan -> (Expr p) -> (Expr p) -> Expr p
Sqrt :: p -> SrcSpan -> (Expr p) -> Expr p
ArrayCon :: p -> SrcSpan -> [(Expr p)] -> Expr p
AssgExpr :: p -> SrcSpan -> String -> (Expr p) -> Expr p
data BinOp p
Plus :: p -> BinOp p
Minus :: p -> BinOp p
Mul :: p -> BinOp p
Div :: p -> BinOp p
Or :: p -> BinOp p
And :: p -> BinOp p
Concat :: p -> BinOp p
Power :: p -> BinOp p
RelEQ :: p -> BinOp p
RelNE :: p -> BinOp p
RelLT :: p -> BinOp p
RelLE :: p -> BinOp p
RelGT :: p -> BinOp p
RelGE :: p -> BinOp p
data UnaryOp p
UMinus :: p -> UnaryOp p
Not :: p -> UnaryOp p
data Spec p
Access :: p -> (Expr p) -> Spec p
Action :: p -> (Expr p) -> Spec p
Advance :: p -> (Expr p) -> Spec p
Blank :: p -> (Expr p) -> Spec p
Delim :: p -> (Expr p) -> Spec p
Direct :: p -> (Expr p) -> Spec p
End :: p -> (Expr p) -> Spec p
Err :: p -> (Expr p) -> Spec p
ExFile :: p -> (Expr p) -> Spec p
Exist :: p -> (Expr p) -> Spec p
Eor :: p -> (Expr p) -> Spec p
File :: p -> (Expr p) -> Spec p
FMT :: p -> (Expr p) -> Spec p
Form :: p -> (Expr p) -> Spec p
Formatted :: p -> (Expr p) -> Spec p
Unformatted :: p -> (Expr p) -> Spec p
IOLength :: p -> (Expr p) -> Spec p
IOStat :: p -> (Expr p) -> Spec p
Name :: p -> (Expr p) -> Spec p
Named :: p -> (Expr p) -> Spec p
NoSpec :: p -> (Expr p) -> Spec p
Number :: p -> (Expr p) -> Spec p
Floating :: p -> (Expr p) -> (Expr p) -> Spec p
NextRec :: p -> (Expr p) -> Spec p
NML :: p -> (Expr p) -> Spec p
Opened :: p -> (Expr p) -> Spec p
Pad :: p -> (Expr p) -> Spec p
Position :: p -> (Expr p) -> Spec p
Read :: p -> (Expr p) -> Spec p
ReadWrite :: p -> (Expr p) -> Spec p
Rec :: p -> (Expr p) -> Spec p
Recl :: p -> (Expr p) -> Spec p
Sequential :: p -> (Expr p) -> Spec p
Size :: p -> (Expr p) -> Spec p
Status :: p -> (Expr p) -> Spec p
StringLit :: p -> String -> Spec p
Unit :: p -> (Expr p) -> Spec p
WriteSp :: p -> (Expr p) -> Spec p
Delimiter :: p -> Spec p
class Span t
srcSpan :: Span t => t -> (SrcLoc, SrcLoc)
class Tagged d
tag :: Tagged d => d a -> a
instance GHC.Classes.Eq p => GHC.Classes.Eq (Language.Fortran.ProgUnit p)
instance Data.Data.Data p => Data.Data.Data (Language.Fortran.ProgUnit p)
instance GHC.Base.Functor Language.Fortran.ProgUnit
instance GHC.Show.Show p => GHC.Show.Show (Language.Fortran.ProgUnit p)
instance GHC.Classes.Eq p => GHC.Classes.Eq (Language.Fortran.Block p)
instance Data.Data.Data p => Data.Data.Data (Language.Fortran.Block p)
instance GHC.Base.Functor Language.Fortran.Block
instance GHC.Show.Show p => GHC.Show.Show (Language.Fortran.Block p)
instance GHC.Classes.Eq p => GHC.Classes.Eq (Language.Fortran.Fortran p)
instance Data.Data.Data p => Data.Data.Data (Language.Fortran.Fortran p)
instance GHC.Base.Functor Language.Fortran.Fortran
instance GHC.Show.Show p => GHC.Show.Show (Language.Fortran.Fortran p)
instance GHC.Classes.Eq p => GHC.Classes.Eq (Language.Fortran.Spec p)
instance Data.Data.Data p => Data.Data.Data (Language.Fortran.Spec p)
instance GHC.Base.Functor Language.Fortran.Spec
instance GHC.Show.Show p => GHC.Show.Show (Language.Fortran.Spec p)
instance GHC.Classes.Eq p => GHC.Classes.Eq (Language.Fortran.InterfaceSpec p)
instance Data.Data.Data p => Data.Data.Data (Language.Fortran.InterfaceSpec p)
instance GHC.Base.Functor Language.Fortran.InterfaceSpec
instance GHC.Show.Show p => GHC.Show.Show (Language.Fortran.InterfaceSpec p)
instance GHC.Classes.Eq p => GHC.Classes.Eq (Language.Fortran.Decl p)
instance Data.Data.Data p => Data.Data.Data (Language.Fortran.Decl p)
instance GHC.Base.Functor Language.Fortran.Decl
instance GHC.Show.Show p => GHC.Show.Show (Language.Fortran.Decl p)
instance GHC.Classes.Eq p => GHC.Classes.Eq (Language.Fortran.Type p)
instance Data.Data.Data p => Data.Data.Data (Language.Fortran.Type p)
instance GHC.Base.Functor Language.Fortran.Type
instance GHC.Show.Show p => GHC.Show.Show (Language.Fortran.Type p)
instance GHC.Classes.Eq p => GHC.Classes.Eq (Language.Fortran.Attr p)
instance Data.Data.Data p => Data.Data.Data (Language.Fortran.Attr p)
instance GHC.Base.Functor Language.Fortran.Attr
instance GHC.Show.Show p => GHC.Show.Show (Language.Fortran.Attr p)
instance GHC.Classes.Eq p => GHC.Classes.Eq (Language.Fortran.GSpec p)
instance Data.Data.Data p => Data.Data.Data (Language.Fortran.GSpec p)
instance GHC.Base.Functor Language.Fortran.GSpec
instance GHC.Show.Show p => GHC.Show.Show (Language.Fortran.GSpec p)
instance GHC.Classes.Eq p => GHC.Classes.Eq (Language.Fortran.DataForm p)
instance Data.Data.Data p => Data.Data.Data (Language.Fortran.DataForm p)
instance GHC.Base.Functor Language.Fortran.DataForm
instance GHC.Show.Show p => GHC.Show.Show (Language.Fortran.DataForm p)
instance GHC.Classes.Eq p => GHC.Classes.Eq (Language.Fortran.ArgList p)
instance Data.Data.Data p => Data.Data.Data (Language.Fortran.ArgList p)
instance GHC.Base.Functor Language.Fortran.ArgList
instance GHC.Show.Show p => GHC.Show.Show (Language.Fortran.ArgList p)
instance GHC.Classes.Eq p => GHC.Classes.Eq (Language.Fortran.Expr p)
instance Data.Data.Data p => Data.Data.Data (Language.Fortran.Expr p)
instance GHC.Base.Functor Language.Fortran.Expr
instance GHC.Show.Show p => GHC.Show.Show (Language.Fortran.Expr p)
instance GHC.Classes.Eq p => GHC.Classes.Eq (Language.Fortran.UnaryOp p)
instance Data.Data.Data p => Data.Data.Data (Language.Fortran.UnaryOp p)
instance GHC.Base.Functor Language.Fortran.UnaryOp
instance GHC.Show.Show p => GHC.Show.Show (Language.Fortran.UnaryOp p)
instance GHC.Classes.Eq p => GHC.Classes.Eq (Language.Fortran.BinOp p)
instance Data.Data.Data p => Data.Data.Data (Language.Fortran.BinOp p)
instance GHC.Base.Functor Language.Fortran.BinOp
instance GHC.Show.Show p => GHC.Show.Show (Language.Fortran.BinOp p)
instance GHC.Classes.Eq p => GHC.Classes.Eq (Language.Fortran.IntentAttr p)
instance Data.Data.Data p => Data.Data.Data (Language.Fortran.IntentAttr p)
instance GHC.Base.Functor Language.Fortran.IntentAttr
instance GHC.Show.Show p => GHC.Show.Show (Language.Fortran.IntentAttr p)
instance GHC.Classes.Eq p => GHC.Classes.Eq (Language.Fortran.MeasureUnitSpec p)
instance Data.Data.Data p => Data.Data.Data (Language.Fortran.MeasureUnitSpec p)
instance GHC.Base.Functor Language.Fortran.MeasureUnitSpec
instance GHC.Show.Show p => GHC.Show.Show (Language.Fortran.MeasureUnitSpec p)
instance GHC.Classes.Eq p => GHC.Classes.Eq (Language.Fortran.Fraction p)
instance Data.Data.Data p => Data.Data.Data (Language.Fortran.Fraction p)
instance GHC.Base.Functor Language.Fortran.Fraction
instance GHC.Show.Show p => GHC.Show.Show (Language.Fortran.Fraction p)
instance GHC.Classes.Eq p => GHC.Classes.Eq (Language.Fortran.BaseType p)
instance Data.Data.Data p => Data.Data.Data (Language.Fortran.BaseType p)
instance GHC.Base.Functor Language.Fortran.BaseType
instance GHC.Show.Show p => GHC.Show.Show (Language.Fortran.BaseType p)
instance GHC.Classes.Eq p => GHC.Classes.Eq (Language.Fortran.UseBlock p)
instance Data.Data.Data p => Data.Data.Data (Language.Fortran.UseBlock p)
instance GHC.Base.Functor Language.Fortran.UseBlock
instance GHC.Show.Show p => GHC.Show.Show (Language.Fortran.UseBlock p)
instance GHC.Classes.Eq p => GHC.Classes.Eq (Language.Fortran.Uses p)
instance Data.Data.Data p => Data.Data.Data (Language.Fortran.Uses p)
instance GHC.Base.Functor Language.Fortran.Uses
instance GHC.Show.Show p => GHC.Show.Show (Language.Fortran.Uses p)
instance GHC.Classes.Eq Language.Fortran.Use
instance Data.Data.Data Language.Fortran.Use
instance GHC.Show.Show Language.Fortran.Use
instance GHC.Classes.Eq p => GHC.Classes.Eq (Language.Fortran.Implicit p)
instance Data.Data.Data p => Data.Data.Data (Language.Fortran.Implicit p)
instance GHC.Base.Functor Language.Fortran.Implicit
instance GHC.Show.Show p => GHC.Show.Show (Language.Fortran.Implicit p)
instance GHC.Classes.Eq p => GHC.Classes.Eq (Language.Fortran.Arg p)
instance Data.Data.Data p => Data.Data.Data (Language.Fortran.Arg p)
instance GHC.Base.Functor Language.Fortran.Arg
instance GHC.Show.Show p => GHC.Show.Show (Language.Fortran.Arg p)
instance GHC.Classes.Eq p => GHC.Classes.Eq (Language.Fortran.ArgName p)
instance Data.Data.Data p => Data.Data.Data (Language.Fortran.ArgName p)
instance GHC.Base.Functor Language.Fortran.ArgName
instance GHC.Show.Show p => GHC.Show.Show (Language.Fortran.ArgName p)
instance GHC.Read.Read p => GHC.Read.Read (Language.Fortran.VarName p)
instance GHC.Classes.Eq p => GHC.Classes.Eq (Language.Fortran.VarName p)
instance Data.Data.Data p => Data.Data.Data (Language.Fortran.VarName p)
instance GHC.Base.Functor Language.Fortran.VarName
instance GHC.Show.Show p => GHC.Show.Show (Language.Fortran.VarName p)
instance GHC.Classes.Eq p => GHC.Classes.Eq (Language.Fortran.SubName p)
instance Data.Data.Data p => Data.Data.Data (Language.Fortran.SubName p)
instance GHC.Base.Functor Language.Fortran.SubName
instance GHC.Show.Show p => GHC.Show.Show (Language.Fortran.SubName p)
instance Data.Data.Data Language.Fortran.SrcLoc
instance GHC.Classes.Eq Language.Fortran.SrcLoc
instance Language.Fortran.Tagged Language.Fortran.Attr
instance Language.Fortran.Tagged Language.Fortran.BaseType
instance Language.Fortran.Tagged Language.Fortran.SubName
instance Language.Fortran.Tagged Language.Fortran.VarName
instance Language.Fortran.Tagged Language.Fortran.Implicit
instance Language.Fortran.Tagged Language.Fortran.Uses
instance Language.Fortran.Tagged Language.Fortran.Arg
instance Language.Fortran.Tagged Language.Fortran.ArgList
instance Language.Fortran.Tagged Language.Fortran.ArgName
instance Language.Fortran.Tagged Language.Fortran.ProgUnit
instance Language.Fortran.Tagged Language.Fortran.Decl
instance Language.Fortran.Tagged Language.Fortran.DataForm
instance Language.Fortran.Tagged Language.Fortran.Fortran
instance Language.Fortran.Tagged Language.Fortran.Expr
instance Language.Fortran.Tagged Language.Fortran.GSpec
instance Language.Fortran.Span (Language.Fortran.Block a)
instance Language.Fortran.Span (Language.Fortran.Decl a)
instance Language.Fortran.Span (Language.Fortran.ProgUnit a)
instance Language.Fortran.Span (Language.Fortran.Expr a)
instance Language.Fortran.Span (Language.Fortran.Fortran a)
instance GHC.Show.Show Language.Fortran.SrcLoc

module Language.Fortran.Lexer
data Token
Key :: String -> Token
LitConst :: Char -> String -> Token
OpPower :: Token
OpMul :: Token
OpDiv :: Token
OpAdd :: Token
OpSub :: Token
OpConcat :: Token
OpEQ :: Token
OpNE :: Token
OpLT :: Token
OpLE :: Token
OpGT :: Token
OpGE :: Token
OpLG :: Token
OpNOT :: Token
OpAND :: Token
OpOR :: Token
OpXOR :: Token
OpEQV :: Token
OpNEQV :: Token
BinConst :: String -> Token
OctConst :: String -> Token
HexConst :: String -> Token
ID :: String -> Token
Num :: String -> Token
Comma :: Token
Bang :: Token
Percent :: Token
LParen :: Token
RParen :: Token
LArrCon :: Token
RArrCon :: Token
OpEquals :: Token
RealConst :: String -> Token
StopParamStart :: Token
SingleQuote :: Token
StrConst :: String -> Token
Period :: Token
Colon :: Token
ColonColon :: Token
SemiColon :: Token
DataEditDest :: String -> Token
Arrow :: Token
MArrow :: Token
TrueConst :: Token
FalseConst :: Token
Dollar :: Token
Hash :: Token
LBrace :: Token
RBrace :: Token
NewLine :: Token
TokEOF :: Token
Text :: String -> Token
ContLine :: Token
ContLineAlt :: Token
ContLineWithComment :: Int -> Token
ContLineNoNewLine :: Token
data AlexReturn a
AlexEOF :: AlexReturn a
AlexError :: !AlexInput -> AlexReturn a
AlexSkip :: !AlexInput -> !Int -> AlexReturn a
AlexToken :: !AlexInput -> !Int -> a -> AlexReturn a
alexScan :: AlexInput -> Int -> AlexReturn (String -> Token)
alexScanTokens :: String -> [Token]
lexer :: (Token -> P a) -> P a
lexer' :: Lex a Token
instance GHC.Show.Show Language.Fortran.Lexer.Token
instance GHC.Classes.Eq Language.Fortran.Lexer.Token
instance GHC.Base.Functor Language.Fortran.Lexer.AlexLastAcc


-- | The following provides a string → string preprocessor for Fortran
--   programs that deals with label-delimited <tt>do</tt>-<tt>continue</tt>
--   blocks of FORTRAN 77 era. With a traditional LR(1) parser, these are
--   not easily (or not at all) parsable. Consider the valid FORTRAN 77
--   code:
--   
--   <pre>
--   do j = 1,5
--     do 17 i=1,10
--       print *,i
--     17 continue
--   end do
--   </pre>
--   
--   Here the 'continue' acts as an 'end do' (not as a usual 'continue'
--   statement) because it is labelled with the same label '17' as the 'do'
--   statement which starts the block. Parsing this requires arbitrary
--   look-ahead (e.g., LR(infinity)) which is provided by the following
--   parsec parser, but not by the 'happy' parser generator.
--   
--   This pre processor is currently quite heavy handed. It replaces
--   'continue' in the above program with 'end do'. E.g., the above program
--   is transformed to:
--   
--   <pre>
--   do j = 1,5
--     do 17 i=1,10
--       print *,i
--     17 end do
--   end do
--   </pre>
module Language.Fortran.PreProcess
pre_process :: String -> String
pre_process_fixed_form :: String -> String
parseExpr :: String -> String -> String

module Language.Fortran.Parser
parser :: P Program A0
include_parser :: P Program A0
fst3 :: () => (a, b, c) -> a
snd3 :: () => (a, b, c) -> b
trd3 :: () => (a, b, c) -> c
fst4 :: () => (a, b, c, d) -> a
snd4 :: () => (a, b, c, d) -> b
trd4 :: () => (a, b, c, d) -> c
frh4 :: () => (a, b, c, d) -> d

module Language.Fortran.Pretty

-- | Core pretty-printing primitive
pprint :: PrettyPrintable t => t -> String

-- | Define default pretty-print version constructor
data DefaultPP
DefaultPP :: DefaultPP

-- | The set of all types which can be used to switch between pretty
--   printer versions
class PPVersion a
type PrettyPrintable t = PrintMaster t DefaultPP

-- | Master print behaviour
class PrintMaster t v
printMaster :: (PrintMaster t v, (?variant :: v)) => t -> String

-- | Slave print behaviour
class PrintSlave t v
printSlave :: (PrintSlave t v, (?variant :: v)) => t -> String

-- | Slave print-indenting behaviour
class PrintIndSlave t v
printIndSlave :: (PrintIndSlave t v, (?variant :: v)) => Int -> t -> String

-- | Master print-indenting behaviour
class PrintIndMaster t v
printIndMaster :: (PrintIndMaster t v, (?variant :: v)) => Int -> t -> String

-- | Default slave behaviour

-- | Behaviours that all slaves must have, i.e., for all versions v

-- | Definition of the master pretty printer which, notably, is defined for
--   all versions <tt>v</tt>.
printMasterInterfaceSpecs :: (?variant :: v, PrintMaster t v) => [t] -> [Char]
show_namelist :: (PrintSlave t2 v, PrintSlave t1 v, ?variant :: v) => [(t2, [t1])] -> [Char]
show_data :: (PrintSlave t2 v, PrintSlave t1 v, ?variant :: v) => (t2, t1) -> [Char]
showDV :: (PrintMaster t v, Show a, PrintSlave ArgList p v, PrintSlave BinOp p v, PrintSlave Expr p v, PrintSlave UnaryOp p v, PrintSlave VarName p v, PPVersion v, ?variant :: v) => (t, Expr p, Maybe a) -> [Char]
showDU :: (PrintMaster t2 v, PrintMaster t1 v, ?variant :: v) => (t2, t1) -> [Char]
showElseIf :: (PrintSlave t2 v, PrintSlave t1 v, ?variant :: v) => Int -> (t2, t1) -> [Char]
showForall :: (PrintSlave Expr p v, PrintSlave t2 v, PrintSlave t1 v, ?variant :: v) => [([Char], t2, t1, Expr p)] -> [Char]
showUse :: Uses p -> String
isEmptyArg :: () => Arg p -> Bool
isEmptyArgName :: () => ArgName p -> [Bool]
paren :: String -> String
checkPrec :: BinOp p -> BinOp p -> (a -> a) -> a -> a
opPrec :: BinOp p -> Int
class Indentor t
indR :: Indentor t => t -> Int -> String
showNQ :: Show a => a -> String
ind :: Int -> [Char]
indent :: Int -> Int -> [Char]
printList :: () => [[a1]] -> (a2 -> [a1]) -> [a2] -> [a1]
asTuple :: () => (a -> [Char]) -> [a] -> [Char]
asSeq :: () => (a -> [Char]) -> [a] -> [Char]
asList :: () => (a -> [Char]) -> [a] -> [Char]
asSet :: () => (a -> [Char]) -> [a] -> [Char]
asLisp :: () => (a -> [Char]) -> [a] -> [Char]
asPlain :: () => (a -> [Char]) -> [a] -> [Char]
asPlain' :: () => (a -> [Char]) -> [a] -> [Char]
asCases :: () => Int -> (a -> [Char]) -> [a] -> [Char]
asDefs :: () => [Char] -> (a -> [Char]) -> [a] -> [Char]
asParagraphs :: () => (a -> [Char]) -> [a] -> [Char]
optTuple :: (?variant :: v, PPVersion v, PrintSlave (UnaryOp p) v, PrintMaster (Expr p) v) => [Expr p] -> String
showUnits :: (PPVersion v, ?variant :: v, PrintMaster (Fraction p) v) => [(MeasureUnit, Fraction p)] -> String
printMasterList :: (PPVersion v, ?variant :: v, PrintMaster a v) => [a] -> String
showBounds :: (PPVersion v, ?variant :: v, PrintMaster (Expr p) v) => (Expr p, Expr p) -> String
showRanges :: (PPVersion v, ?variant :: v, PrintMaster (Expr p) v) => [(Expr p, Expr p)] -> String
showPartRefList :: (PPVersion v, ?variant :: v, PrintSlave (VarName p) v, PrintSlave (UnaryOp p) v, PrintMaster (Expr p) v) => [(VarName p, [Expr p])] -> String
instance (Language.Fortran.Pretty.Indentor (Language.Fortran.Decl p), Language.Fortran.Pretty.PrintSlave (Language.Fortran.Arg p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.ArgList p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.Attr p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.BinOp p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.Decl p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.DataForm p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.Expr p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.GSpec p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.Implicit p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.InterfaceSpec p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.MeasureUnitSpec p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.SubName p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.UnaryOp p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.VarName p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.Type p) v, Language.Fortran.Pretty.PPVersion v) => Language.Fortran.Pretty.PrintMaster (Language.Fortran.Decl p) v
instance Language.Fortran.Pretty.Indentor (p ())
instance (Language.Fortran.Pretty.Indentor (Language.Fortran.Fortran p), Language.Fortran.Pretty.PrintSlave (Language.Fortran.VarName p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.Expr p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.UnaryOp p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.BinOp p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.ArgList p) v, Language.Fortran.Pretty.PrintIndSlave (Language.Fortran.Fortran p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.DataForm p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.Fortran p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.Spec p) v, Language.Fortran.Pretty.PPVersion v) => Language.Fortran.Pretty.PrintIndMaster (Language.Fortran.Fortran p) v
instance Language.Fortran.Pretty.PrintIndMaster t Language.Fortran.Pretty.DefaultPP => Language.Fortran.Pretty.PrintIndSlave t Language.Fortran.Pretty.DefaultPP
instance (Language.Fortran.Pretty.PrintIndMaster (Language.Fortran.Fortran p) v, Language.Fortran.Pretty.PPVersion v) => Language.Fortran.Pretty.PrintMaster (Language.Fortran.Fortran p) v
instance Language.Fortran.Pretty.PrintMaster t Language.Fortran.Pretty.DefaultPP => Language.Fortran.Pretty.PrintSlave t Language.Fortran.Pretty.DefaultPP
instance Language.Fortran.Pretty.PPVersion v => Language.Fortran.Pretty.PrintSlave GHC.Base.String v
instance (Language.Fortran.Pretty.PPVersion v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.ProgUnit p) v) => Language.Fortran.Pretty.PrintMaster [Language.Fortran.ProgUnit p] v
instance (Language.Fortran.Pretty.PrintSlave (Language.Fortran.Arg p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.BaseType p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.Block p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.Decl p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.Fortran p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.Implicit p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.SubName p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.VarName p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.ProgUnit p) v, Language.Fortran.Pretty.PPVersion v) => Language.Fortran.Pretty.PrintMaster (Language.Fortran.ProgUnit p) v
instance (Language.Fortran.Pretty.PrintSlave (Language.Fortran.Fortran p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.Decl p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.Implicit p) v, Language.Fortran.Pretty.PPVersion v) => Language.Fortran.Pretty.PrintMaster (Language.Fortran.Block p) v
instance Language.Fortran.Pretty.PrintSlave (Language.Fortran.Expr p) v => Language.Fortran.Pretty.PrintMaster (Language.Fortran.DataForm p) v
instance (Language.Fortran.Pretty.PrintSlave (Language.Fortran.ArgList p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.BinOp p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.UnaryOp p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.BaseType p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.Expr p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.MeasureUnitSpec p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.VarName p) v, Language.Fortran.Pretty.PPVersion v) => Language.Fortran.Pretty.PrintMaster (Language.Fortran.Type p) v
instance (Language.Fortran.Pretty.PrintSlave (Language.Fortran.ArgList p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.BinOp p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.Expr p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.UnaryOp p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.VarName p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.MeasureUnitSpec p) v, Language.Fortran.Pretty.PPVersion v) => Language.Fortran.Pretty.PrintMaster (Language.Fortran.Attr p) v
instance Language.Fortran.Pretty.PPVersion v => Language.Fortran.Pretty.PrintMaster (Language.Fortran.Fraction p) v
instance (Language.Fortran.Pretty.PrintSlave (Language.Fortran.Arg p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.BinOp p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.Expr p) v, Language.Fortran.Pretty.PPVersion v) => Language.Fortran.Pretty.PrintMaster (Language.Fortran.GSpec p) v
instance (Language.Fortran.Pretty.PrintSlave (Language.Fortran.Arg p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.Decl p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.Implicit p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.SubName p) v, Language.Fortran.Pretty.PPVersion v) => Language.Fortran.Pretty.PrintMaster (Language.Fortran.InterfaceSpec p) v
instance (Language.Fortran.Pretty.PrintSlave (Language.Fortran.SubName p) v, Language.Fortran.Pretty.PPVersion v) => Language.Fortran.Pretty.PrintMaster (Language.Fortran.BaseType p) v
instance (Language.Fortran.Pretty.PrintSlave (Language.Fortran.ArgList p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.BinOp p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.Expr p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.UnaryOp p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.VarName p) v, Language.Fortran.Pretty.PPVersion v) => Language.Fortran.Pretty.PrintMaster (Language.Fortran.Expr p) v
instance (Language.Fortran.Pretty.PrintSlave (Language.Fortran.ArgName p) v, Language.Fortran.Pretty.PPVersion v) => Language.Fortran.Pretty.PrintMaster (Language.Fortran.Arg p) v
instance (Language.Fortran.Pretty.PrintSlave (Language.Fortran.Expr p) v, Language.Fortran.Pretty.PPVersion v) => Language.Fortran.Pretty.PrintMaster (Language.Fortran.ArgList p) v
instance (Language.Fortran.Pretty.PrintSlave (Language.Fortran.VarName p) v, Language.Fortran.Pretty.PrintSlave (Language.Fortran.ArgName p) v, Language.Fortran.Pretty.PPVersion v) => Language.Fortran.Pretty.PrintMaster (Language.Fortran.ArgName p) v
instance (Language.Fortran.Pretty.PrintSlave (Language.Fortran.Expr p) v, Language.Fortran.Pretty.PPVersion v) => Language.Fortran.Pretty.PrintMaster (Language.Fortran.Spec p) v
instance Language.Fortran.Pretty.PPVersion v => Language.Fortran.Pretty.PrintMaster GHC.Base.String v
instance Language.Fortran.Pretty.PPVersion v => Language.Fortran.Pretty.PrintMaster (Language.Fortran.MeasureUnitSpec p) v
instance (Language.Fortran.Pretty.PPVersion v, Language.Fortran.Pretty.PrintMaster (Language.Fortran.Uses p) v) => Language.Fortran.Pretty.PrintMaster (Language.Fortran.UseBlock p) v
instance Language.Fortran.Pretty.PPVersion v => Language.Fortran.Pretty.PrintMaster (Language.Fortran.Uses p) v
instance Language.Fortran.Pretty.PPVersion v => Language.Fortran.Pretty.PrintMaster (Language.Fortran.BinOp p) v
instance Language.Fortran.Pretty.PPVersion v => Language.Fortran.Pretty.PrintMaster (Language.Fortran.UnaryOp p) v
instance Language.Fortran.Pretty.PPVersion v => Language.Fortran.Pretty.PrintMaster (Language.Fortran.VarName p) v
instance Language.Fortran.Pretty.PPVersion v => Language.Fortran.Pretty.PrintMaster (Language.Fortran.SubName p) v
instance Language.Fortran.Pretty.PPVersion v => Language.Fortran.Pretty.PrintMaster (Language.Fortran.Implicit p) v
instance Language.Fortran.Pretty.PPVersion Language.Fortran.Pretty.DefaultPP
