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: January 2006

Summary of exported operations:

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])   

Exported operations:

main :: 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)   

Further infos:
  • partially defined

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

funcsOfProg :: Prog -> [FuncDecl]   

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

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

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

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