Module NonStrictOpt

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

Summary of exported operations:

main :: IO ()  Non-deterministic 
optimizeNonstrictEqualityInModuleIfNecessary :: String -> IO ()  Non-deterministic 
optimizeNonstrictEqualityInModule :: String -> IO ()  Non-deterministic 
storeOptimizedModule :: (Data a, Show b, Show c) => String -> ([(String,String)],c,b,a) -> IO ()  Deterministic 
hasCommentOption :: String -> String -> IO Bool  Deterministic 
readWordsInFirstCommentLine :: String -> IO [String]  Deterministic 
getCommentString :: Handle -> IO String  Deterministic 
getCommentString' :: Handle -> IO String  Deterministic 
optimizeNonstrictEquality :: [FuncDecl] -> Prog -> ([(String,String)],Int,Int,Prog)  Deterministic 
optimizeFun :: [((String,String),[(String,String)])] -> [((String,String),Bool)] -> FuncDecl -> (Maybe (String,String),Int,Int,FuncDecl)  Deterministic 
isDependent :: [((String,String),[(String,String)])] -> (String,String) -> (String,String) -> Bool  Deterministic 
optimizeExp :: ((String,String) -> Bool,[((String,String),Bool)]) -> Expr -> (Bool,Int,Int,Expr)  Deterministic 
onlyLinearFunctions :: [((String,String),Bool)] -> Expr -> Bool  Deterministic 
funcsOfProg :: Prog -> [FuncDecl]  Deterministic 
sum :: Num a => [a] -> a  Deterministic 
unzip4 :: [(a,b,c,d)] -> ([a],[b],[c],[d])  Deterministic 

Exported operations:

main :: IO ()  Non-deterministic 

optimizeNonstrictEqualityInModule :: String -> IO ()  Non-deterministic 

storeOptimizedModule :: (Data a, Show b, Show c) => String -> ([(String,String)],c,b,a) -> IO ()  Deterministic 

hasCommentOption :: String -> String -> IO Bool  Deterministic 

readWordsInFirstCommentLine :: String -> IO [String]  Deterministic 

getCommentString :: Handle -> IO String  Deterministic 

getCommentString' :: Handle -> IO String  Deterministic 

optimizeNonstrictEquality :: [FuncDecl] -> Prog -> ([(String,String)],Int,Int,Prog)  Deterministic 

optimizeFun :: [((String,String),[(String,String)])] -> [((String,String),Bool)] -> FuncDecl -> (Maybe (String,String),Int,Int,FuncDecl)  Deterministic 

isDependent :: [((String,String),[(String,String)])] -> (String,String) -> (String,String) -> Bool  Deterministic 

optimizeExp :: ((String,String) -> Bool,[((String,String),Bool)]) -> Expr -> (Bool,Int,Int,Expr)  Deterministic 

Further infos:
  • partially defined

onlyLinearFunctions :: [((String,String),Bool)] -> Expr -> Bool  Deterministic 

funcsOfProg :: Prog -> [FuncDecl]  Deterministic 

Further infos:
  • solution complete, i.e., able to compute all solutions

sum :: Num a => [a] -> a  Deterministic 

unzip4 :: [(a,b,c,d)] -> ([a],[b],[c],[d])  Deterministic 

Further infos:
  • solution complete, i.e., able to compute all solutions