|
Linearity optimizer for function patterns and non-strict unification
Replace occurrences of (fp =:<= x) by (fp =:<<= x) if the function pattern fp always evaluates to a linear term.
Author: Michael Hanus
Version: November 2020
main
:: IO ()
|
optimizeNonstrictEqualityInModuleIfNecessary
:: String -> IO ()
|
optimizeNonstrictEqualityInModule
:: String -> IO ()
|
storeOptimizedModule
:: (Show a, Show b) => String -> ([(String,String)],a,b,c) -> IO ()
|
hasCommentOption
:: String -> String -> IO Bool
|
readWordsInFirstCommentLine
:: String -> IO [String]
|
getCommentString
:: Handle -> IO String
|
getCommentString'
:: Handle -> IO String
|
optimizeNonstrictEquality
:: [FuncDecl] -> Prog -> ([(String,String)],Int,Int,Prog)
|
optimizeFun
:: [((String,String),[(String,String)])] -> [((String,String),Bool)] -> FuncDecl -> (Maybe (String,String),Int,Int,FuncDecl)
|
isDependent
:: [((String,String),[(String,String)])] -> (String,String) -> (String,String) -> Bool
|
optimizeExp
:: ((String,String) -> Bool,[((String,String),Bool)]) -> Expr -> (Bool,Int,Int,Expr)
|
onlyLinearFunctions
:: [((String,String),Bool)] -> Expr -> Bool
|
funcsOfProg
:: Prog -> [FuncDecl]
|
sum
:: Num a => [a] -> a
|
unzip4
:: [(a,b,c,d)] -> ([a],[b],[c],[d])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|