Safe Haskell | None |
---|---|
Language | Haskell98 |
- (<<) :: MonadState f m => Lens (->) f [o] -> o -> m ()
- (<<++) :: MonadState f m => Lens (->) f [a] -> a -> m ()
- removeUnits :: (Filename, Program Annotation) -> (Report, (Filename, Program Annotation))
- inferCriticalVariables :: (?solver :: Solver, ?assumeLiterals :: AssumeLiterals) => (Filename, Program Annotation) -> (Report, (Filename, Program Annotation))
- inferUnits :: (?solver :: Solver, ?assumeLiterals :: AssumeLiterals) => (Filename, Program Annotation) -> (Report, (Filename, Program Annotation))
- countVariables :: VarColEnv -> t -> t1 -> Matrix a -> [UnitVarCategory] -> Int
- doInferUnits :: (?criticals :: Bool, ?solver :: Solver, ?debug :: Bool, ?assumeLiterals :: AssumeLiterals) => Program Annotation -> State UnitEnv (Program Annotation)
- inferProgUnits :: (?criticals :: Bool, ?solver :: Solver, ?debug :: Bool, ?assumeLiterals :: AssumeLiterals) => ProgUnit Annotation -> State UnitEnv ()
- inferBlockUnits :: (?solver :: Solver, ?criticals :: Bool, ?debug :: Bool, ?assumeLiterals :: AssumeLiterals) => Block Annotation -> Maybe ProcedureNames -> State UnitEnv ()
- reduceRows :: Col -> LinearSystem -> LinearSystem
- addProcedure :: Maybe ProcedureNames -> State UnitEnv ()
- enterDecls :: (?assumeLiterals :: AssumeLiterals) => Block Annotation -> Maybe ProcedureNames -> State UnitEnv (Block Annotation)
- processVar :: (?assumeLiterals :: AssumeLiterals) => [UnitConstant] -> Maybe ProcedureNames -> (Expr Annotation, Expr Annotation) -> Type Annotation -> State UnitEnv (Expr Annotation, Expr Annotation)
- unitVarCat :: Variable -> Maybe ProcedureNames -> UnitVarCategory
- inferDecl :: (?assumeLiterals :: AssumeLiterals) => Maybe ProcedureNames -> Decl Annotation -> State UnitEnv (Decl Annotation)
- extendConstraints :: [UnitConstant] -> State UnitEnv ()
- inferInterproceduralUnits :: (?solver :: Solver, ?criticals :: Bool, ?debug :: Bool, ?assumeLiterals :: AssumeLiterals) => Program Annotation -> State UnitEnv ()
- inferInterproceduralUnits' :: (?solver :: Solver, ?criticals :: Bool, ?debug :: Bool) => Program Annotation -> Bool -> LinearSystem -> State UnitEnv (Program Annotation)
- class UpdateColInfo t where
- updateColInfo :: Col -> Col -> t -> t
- swapUnitVarCats :: Int -> Int -> [t] -> [t]
- swapUnitVarCats' :: Int -> Int -> [t] -> [t] -> Int -> [t]
- swapCols :: Int -> Int -> State UnitEnv ()
- reorderVarCols :: State UnitEnv ()
- assumeLiteralUnits :: (?solver :: Solver, ?debug :: Bool) => State UnitEnv Bool
- assumeLiteralUnits' :: Int -> StateT UnitEnv Identity ()
- addInterproceduralConstraints :: (?debug :: Bool) => Program Annotation -> State UnitEnv ()
- inferLiteral :: (?assumeLiterals :: AssumeLiterals, PrintMaster t DefaultPP, Span t) => t -> StateT UnitEnv Identity VarCol
- data BinOpKind
- binOpKind :: BinOp a -> BinOpKind
- (<**>) :: Maybe a -> Maybe a -> Maybe a
- lookupCaseInsensitive :: String -> [(String, a)] -> Maybe a
- lookupWithoutSrcSpan :: Variable -> [(VarBinder, a)] -> Maybe a
- lookupWithSrcSpan :: Variable -> SrcSpan -> [(VarBinder, a)] -> Maybe a
- inferExprUnits :: (?assumeLiterals :: AssumeLiterals) => Expr Annotation -> State UnitEnv VarCol
- inferExprSeqUnits :: (?assumeLiterals :: AssumeLiterals) => Expr Annotation -> State UnitEnv [VarCol]
- handleExpr :: (?assumeLiterals :: AssumeLiterals) => Expr Annotation -> State UnitEnv (Expr Annotation)
- inferForHeaderUnits :: (?assumeLiterals :: AssumeLiterals) => (Variable, Expr Annotation, Expr Annotation, Expr Annotation) -> State UnitEnv ()
- inferSpecUnits :: (?assumeLiterals :: AssumeLiterals) => [Spec Annotation] -> State UnitEnv ()
- inferStmtUnits :: (?assumeLiterals :: AssumeLiterals) => Fortran Annotation -> State UnitEnv ()
- inverse :: [Int] -> [Int]
- fixValue :: Eq a => (a -> a) -> a -> a
- moveElem :: Int -> Int -> [a] -> [a]
- incrElem :: Num a => a -> (Int, Int) -> Matrix a -> Matrix a
- moveCol :: Int -> Int -> Matrix a -> Matrix a
- addCol :: UnitVarCategory -> State UnitEnv Int
- addRow :: State UnitEnv Int
- addRow' :: UnitConstant -> State UnitEnv Int
- liftUnitEnv :: (Matrix Rational -> Matrix Rational) -> UnitEnv -> UnitEnv
- mustEqual :: (?assumeLiterals :: AssumeLiterals) => Bool -> VarCol -> VarCol -> State UnitEnv VarCol
- mustAddUp :: VarCol -> VarCol -> Rational -> Rational -> State UnitEnv VarCol
- powerUnits :: (?assumeLiterals :: AssumeLiterals) => VarCol -> Expr Annotation -> State UnitEnv VarCol
- sqrtUnits :: VarCol -> State UnitEnv VarCol
- anyUnits :: UnitVarCategory -> State UnitEnv VarCol
- debugInfoForNonZeros :: [Rational] -> State UnitEnv String
- errorMessage :: (?debug :: Bool) => Row -> UnitConstant -> [Rational] -> State UnitEnv String
- reportInconsistency :: (?debug :: Bool) => LinearSystem -> [Int] -> State UnitEnv ()
- solveSystemM :: (?solver :: Solver, ?debug :: Bool) => String -> State UnitEnv Bool
- checkUnderdeterminedM :: State UnitEnv ()
- checkUnderdetermined :: [UnitVarCategory] -> LinearSystem -> [Int]
- criticalVars :: State UnitEnv [String]
- criticalVars' :: VarColEnv -> [UnitVarCategory] -> Matrix Rational -> Row -> DebugInfo -> [String]
- lookupVarsByColsFilterByArg :: Matrix Rational -> VarColEnv -> [UnitVarCategory] -> [Int] -> DebugInfo -> [String]
- firstNonZeroCoeff :: Matrix Rational -> [UnitVarCategory] -> Row -> Col
- checkUnderdetermined' :: [UnitVarCategory] -> LinearSystem -> Int -> [Int]
- propagateUnderdetermined :: Matrix Rational -> [Int] -> [Int]
- intrinsicsDict :: (?assumeLiterals :: AssumeLiterals) => [(String, String -> State UnitEnv ())]
- addPlain1ArgIntrinsic :: (?assumeLiterals :: AssumeLiterals) => String -> State UnitEnv ()
- addPlain2ArgIntrinsic :: (?assumeLiterals :: AssumeLiterals) => String -> State UnitEnv ()
- addPlain1Arg1ExtraIntrinsic :: (?assumeLiterals :: AssumeLiterals) => String -> State UnitEnv ()
- addPlain2Arg1ExtraIntrinsic :: (?assumeLiterals :: AssumeLiterals) => String -> State UnitEnv ()
- addProductIntrinsic :: (?assumeLiterals :: AssumeLiterals) => String -> State UnitEnv ()
- addPowerIntrinsic :: (?assumeLiterals :: AssumeLiterals) => String -> State UnitEnv ()
- addUnitlessIntrinsic :: (?assumeLiterals :: AssumeLiterals) => String -> State UnitEnv ()
- addUnitlessSubIntrinsic :: (?assumeLiterals :: AssumeLiterals) => String -> State UnitEnv ()
- addUnitlessResult0ArgIntrinsic :: (?assumeLiterals :: AssumeLiterals) => String -> State UnitEnv ()
- addUnitlessResult1ArgIntrinsic :: (?assumeLiterals :: AssumeLiterals) => String -> State UnitEnv ()
- addUnitlessResult2AnyArgIntrinsic :: (?assumeLiterals :: AssumeLiterals) => String -> State UnitEnv ()
- addUnitlessResult2SameArgIntrinsic :: (?assumeLiterals :: AssumeLiterals) => String -> State UnitEnv ()
- fooMatrix :: Matrix Rational
- debugGaussian :: State UnitEnv String
- debugGaussian' :: StateT UnitEnv Identity [Char]
- showExpr :: [UnitVarCategory] -> VarColEnv -> ProcedureEnv -> [(Int, (a, [Char]))] -> Int -> [Char]
- showSrcLoc :: SrcLoc -> [Char]
- showSrcSpan :: (SrcLoc, SrcLoc) -> [Char]
- showSrcFile :: (SrcLoc, t) -> String
- showExprLines :: [UnitVarCategory] -> VarColEnv -> ProcedureEnv -> [(Int, ((SrcLoc, SrcLoc), [Char]))] -> Int -> [Char]
- showArgVars :: [UnitVarCategory] -> VarColEnv -> Int -> [Char]
- showCat :: UnitVarCategory -> [Char]
- lookupProcByArgCol :: ProcedureEnv -> [Int] -> [String]
- lookupProcByCols :: ProcedureEnv -> [Int] -> [String]
- lookupVarsByCols :: VarColEnv -> [Int] -> [Variable]
- lookupVarBindersByCols :: VarColEnv -> [Int] -> [VarBinder]
- showRational :: (Integral r, Show r) => Ratio r -> [Char]
- insertUnitsInBlock :: Block Annotation -> State UnitEnv (Block Annotation)
- removeUnitsInBlock :: Block Annotation -> Block Annotation
- convertUnit :: MeasureUnitSpec a -> State UnitEnv UnitConstant
- convertUnits :: [(MeasureUnit, Fraction a)] -> State UnitEnv UnitConstant
- convertSingleUnit :: MeasureUnit -> Rational -> State UnitEnv UnitConstant
- fromFraction :: Fraction a -> Rational
- extractUnit :: Attr a -> [State UnitEnv UnitConstant]
- lookupUnit :: [UnitVarCategory] -> [Int] -> LinearSystem -> Col -> Maybe UnitConstant
- lookupUnit' :: [UnitVarCategory] -> [Int] -> LinearSystem -> Int -> Int -> Maybe UnitConstant
- insertUnits :: Decl Annotation -> State UnitEnv (Decl Annotation)
- deleteUnits :: Decl Annotation -> Decl Annotation
- hasUnits :: Type a -> Bool
- isUnit :: Attr a -> Bool
- insertUnit :: (?num :: Int) => [UnitVarCategory] -> [Int] -> LinearSystem -> Type Annotation -> Int -> State UnitEnv (Type Annotation)
- deleteUnit :: Type Annotation -> Type Annotation
- insertUnitAttribute :: (?num :: Int) => Maybe UnitConstant -> [Attr Annotation] -> State UnitEnv [Attr Annotation]
- updateAdded :: MonadState UnitEnv m => Int -> String -> m ()
- makeUnitSpec :: (?num :: Int) => UnitConstant -> State UnitEnv (MeasureUnitSpec Annotation)
- formatUnits :: [(MeasureUnit, Rational)] -> [(MeasureUnit, Fraction Annotation)]
- toFraction :: Rational -> Fraction Annotation
Documentation
(<<) :: MonadState f m => Lens (->) f [o] -> o -> m () infix 2 Source
(<<++) :: MonadState f m => Lens (->) f [a] -> a -> m () infix 2 Source
removeUnits :: (Filename, Program Annotation) -> (Report, (Filename, Program Annotation)) Source
inferCriticalVariables :: (?solver :: Solver, ?assumeLiterals :: AssumeLiterals) => (Filename, Program Annotation) -> (Report, (Filename, Program Annotation)) Source
inferUnits :: (?solver :: Solver, ?assumeLiterals :: AssumeLiterals) => (Filename, Program Annotation) -> (Report, (Filename, Program Annotation)) Source
countVariables :: VarColEnv -> t -> t1 -> Matrix a -> [UnitVarCategory] -> Int Source
doInferUnits :: (?criticals :: Bool, ?solver :: Solver, ?debug :: Bool, ?assumeLiterals :: AssumeLiterals) => Program Annotation -> State UnitEnv (Program Annotation) Source
inferProgUnits :: (?criticals :: Bool, ?solver :: Solver, ?debug :: Bool, ?assumeLiterals :: AssumeLiterals) => ProgUnit Annotation -> State UnitEnv () Source
inferBlockUnits :: (?solver :: Solver, ?criticals :: Bool, ?debug :: Bool, ?assumeLiterals :: AssumeLiterals) => Block Annotation -> Maybe ProcedureNames -> State UnitEnv () Source
reduceRows :: Col -> LinearSystem -> LinearSystem Source
reduceRows is a core part of the polymorphic unit checking for procedures.
It is essentially an "optimiation" of the Gaussian matrix (not in the sense of performance), that elimiantes rows in the system such that there are as few variables as possible. Within a function, assuming everything is consistent, then this should generate a linear constraint between the parameters and the return as a single row in the matrix. This is then used by the interprocedural constraints to hookup call-sites with definitions (in a parametrically polymorphic way- i.e. lambda abstraction is polymorphic in its units, different to say ML).
addProcedure :: Maybe ProcedureNames -> State UnitEnv () Source
Unit inference (main, over all AST)
enterDecls :: (?assumeLiterals :: AssumeLiterals) => Block Annotation -> Maybe ProcedureNames -> State UnitEnv (Block Annotation) Source
processVar :: (?assumeLiterals :: AssumeLiterals) => [UnitConstant] -> Maybe ProcedureNames -> (Expr Annotation, Expr Annotation) -> Type Annotation -> State UnitEnv (Expr Annotation, Expr Annotation) Source
inferDecl :: (?assumeLiterals :: AssumeLiterals) => Maybe ProcedureNames -> Decl Annotation -> State UnitEnv (Decl Annotation) Source
inferDecl - extract and record information from explicit unit declarations
extendConstraints :: [UnitConstant] -> State UnitEnv () Source
inferInterproceduralUnits :: (?solver :: Solver, ?criticals :: Bool, ?debug :: Bool, ?assumeLiterals :: AssumeLiterals) => Program Annotation -> State UnitEnv () Source
inferInterproceduralUnits' :: (?solver :: Solver, ?criticals :: Bool, ?debug :: Bool) => Program Annotation -> Bool -> LinearSystem -> State UnitEnv (Program Annotation) Source
class UpdateColInfo t where Source
updateColInfo :: Col -> Col -> t -> t Source
swapUnitVarCats :: Int -> Int -> [t] -> [t] Source
swapUnitVarCats' :: Int -> Int -> [t] -> [t] -> Int -> [t] Source
reorderVarCols :: State UnitEnv () Source
reorderVarCols puts any variable columns to the end of the Gaussian matrix (along with the associated information)
addInterproceduralConstraints :: (?debug :: Bool) => Program Annotation -> State UnitEnv () Source
inferLiteral :: (?assumeLiterals :: AssumeLiterals, PrintMaster t DefaultPP, Span t) => t -> StateT UnitEnv Identity VarCol Source
lookupCaseInsensitive :: String -> [(String, a)] -> Maybe a Source
lookupWithoutSrcSpan :: Variable -> [(VarBinder, a)] -> Maybe a Source
inferExprUnits :: (?assumeLiterals :: AssumeLiterals) => Expr Annotation -> State UnitEnv VarCol Source
inferExprSeqUnits :: (?assumeLiterals :: AssumeLiterals) => Expr Annotation -> State UnitEnv [VarCol] Source
handleExpr :: (?assumeLiterals :: AssumeLiterals) => Expr Annotation -> State UnitEnv (Expr Annotation) Source
inferForHeaderUnits :: (?assumeLiterals :: AssumeLiterals) => (Variable, Expr Annotation, Expr Annotation, Expr Annotation) -> State UnitEnv () Source
inferSpecUnits :: (?assumeLiterals :: AssumeLiterals) => [Spec Annotation] -> State UnitEnv () Source
inferStmtUnits :: (?assumeLiterals :: AssumeLiterals) => Fortran Annotation -> State UnitEnv () Source
inferStmtUnits, does what it says on the tin
mustEqual :: (?assumeLiterals :: AssumeLiterals) => Bool -> VarCol -> VarCol -> State UnitEnv VarCol Source
powerUnits :: (?assumeLiterals :: AssumeLiterals) => VarCol -> Expr Annotation -> State UnitEnv VarCol Source
debugInfoForNonZeros :: [Rational] -> State UnitEnv String Source
Print debug information for non-zero coefficients from the Gaussian matrix
errorMessage :: (?debug :: Bool) => Row -> UnitConstant -> [Rational] -> State UnitEnv String Source
An attempt at getting some useful user information. Needs position information
reportInconsistency :: (?debug :: Bool) => LinearSystem -> [Int] -> State UnitEnv () Source
checkUnderdetermined :: [UnitVarCategory] -> LinearSystem -> [Int] Source
criticalVars :: State UnitEnv [String] Source
criticalVars' :: VarColEnv -> [UnitVarCategory] -> Matrix Rational -> Row -> DebugInfo -> [String] Source
lookupVarsByColsFilterByArg :: Matrix Rational -> VarColEnv -> [UnitVarCategory] -> [Int] -> DebugInfo -> [String] Source
firstNonZeroCoeff :: Matrix Rational -> [UnitVarCategory] -> Row -> Col Source
checkUnderdetermined' :: [UnitVarCategory] -> LinearSystem -> Int -> [Int] Source
intrinsicsDict :: (?assumeLiterals :: AssumeLiterals) => [(String, String -> State UnitEnv ())] Source
addPlain1ArgIntrinsic :: (?assumeLiterals :: AssumeLiterals) => String -> State UnitEnv () Source
addPlain2ArgIntrinsic :: (?assumeLiterals :: AssumeLiterals) => String -> State UnitEnv () Source
addPlain1Arg1ExtraIntrinsic :: (?assumeLiterals :: AssumeLiterals) => String -> State UnitEnv () Source
addPlain2Arg1ExtraIntrinsic :: (?assumeLiterals :: AssumeLiterals) => String -> State UnitEnv () Source
addProductIntrinsic :: (?assumeLiterals :: AssumeLiterals) => String -> State UnitEnv () Source
addPowerIntrinsic :: (?assumeLiterals :: AssumeLiterals) => String -> State UnitEnv () Source
addUnitlessIntrinsic :: (?assumeLiterals :: AssumeLiterals) => String -> State UnitEnv () Source
addUnitlessSubIntrinsic :: (?assumeLiterals :: AssumeLiterals) => String -> State UnitEnv () Source
addUnitlessResult0ArgIntrinsic :: (?assumeLiterals :: AssumeLiterals) => String -> State UnitEnv () Source
addUnitlessResult1ArgIntrinsic :: (?assumeLiterals :: AssumeLiterals) => String -> State UnitEnv () Source
addUnitlessResult2AnyArgIntrinsic :: (?assumeLiterals :: AssumeLiterals) => String -> State UnitEnv () Source
addUnitlessResult2SameArgIntrinsic :: (?assumeLiterals :: AssumeLiterals) => String -> State UnitEnv () Source
debugGaussian :: State UnitEnv String Source
debugGaussian - a debugging routine which shose the Gaussian matrix with various peieces of info mainly used for development purposes
showExpr :: [UnitVarCategory] -> VarColEnv -> ProcedureEnv -> [(Int, (a, [Char]))] -> Int -> [Char] Source
showSrcLoc :: SrcLoc -> [Char] Source
showSrcSpan :: (SrcLoc, SrcLoc) -> [Char] Source
showSrcFile :: (SrcLoc, t) -> String Source
showExprLines :: [UnitVarCategory] -> VarColEnv -> ProcedureEnv -> [(Int, ((SrcLoc, SrcLoc), [Char]))] -> Int -> [Char] Source
showArgVars :: [UnitVarCategory] -> VarColEnv -> Int -> [Char] Source
showCat :: UnitVarCategory -> [Char] Source
lookupProcByArgCol :: ProcedureEnv -> [Int] -> [String] Source
lookupProcByCols :: ProcedureEnv -> [Int] -> [String] Source
lookupVarsByCols :: VarColEnv -> [Int] -> [Variable] Source
lookupVarBindersByCols :: VarColEnv -> [Int] -> [VarBinder] Source
convertUnits :: [(MeasureUnit, Fraction a)] -> State UnitEnv UnitConstant Source
fromFraction :: Fraction a -> Rational Source
extractUnit :: Attr a -> [State UnitEnv UnitConstant] Source
lookupUnit :: [UnitVarCategory] -> [Int] -> LinearSystem -> Col -> Maybe UnitConstant Source
lookupUnit' :: [UnitVarCategory] -> [Int] -> LinearSystem -> Int -> Int -> Maybe UnitConstant Source
insertUnits :: Decl Annotation -> State UnitEnv (Decl Annotation) Source
insertUnit :: (?num :: Int) => [UnitVarCategory] -> [Int] -> LinearSystem -> Type Annotation -> Int -> State UnitEnv (Type Annotation) Source
deleteUnit :: Type Annotation -> Type Annotation Source
insertUnitAttribute :: (?num :: Int) => Maybe UnitConstant -> [Attr Annotation] -> State UnitEnv [Attr Annotation] Source
updateAdded :: MonadState UnitEnv m => Int -> String -> m () Source
makeUnitSpec :: (?num :: Int) => UnitConstant -> State UnitEnv (MeasureUnitSpec Annotation) Source
formatUnits :: [(MeasureUnit, Rational)] -> [(MeasureUnit, Fraction Annotation)] Source