|
definition: |
checkFirstArg :: [String] -> [String] -> IO ()
checkFirstArg curryargs [] = do
-- no program argument provided, use remaining input as program:
putStrLn "Type in your program with an operation 'main':"
hFlush stdout
progname <- getNewProgramName
getContents >>= writeFile progname
execAndDeleteCurryProgram progname curryargs [] >>= exitWith
checkFirstArg curryargs (arg1:args) =
if takeExtension arg1 `elem` [".curry",".lcurry"]
then execCurryProgram arg1 curryargs args >>= exitWith
else do
isexec <- isExecutable arg1
if isexec
then do
-- argument is not a Curry file but it is an executable, hence, a script:
-- store it in a Curry program, where lines starting with '#' are removed
progname <- getNewProgramName
proginput <- readFile arg1
let (proglines, hashlines) = partition noHashLine (lines proginput)
progtext = unlines proglines
if any isHashJITOption hashlines
then execOrJIT arg1 progname progtext curryargs args >>= exitWith
else do
writeFile progname progtext
execAndDeleteCurryProgram progname curryargs args >>= exitWith
else checkFirstArg (curryargs ++ [arg1]) args
|
|
demand: |
argument 2 |
|
deterministic: |
deterministic operation |
|
documentation: |
Check whether runcurry is called in script mode, i.e., the argument is not a Curry program but an existing file: |
|
failfree: |
<FAILING> |
|
indeterministic: |
referentially transparent operation |
|
infix: |
no fixity defined |
|
iotype: |
{(_,{[]}) |-> _ || (_,{:}) |-> _}
|
|
name: |
checkFirstArg |
|
precedence: |
no precedence defined |
|
result-values: |
_ |
|
signature: |
[String] -> [String] -> Prelude.IO () |
|
solution-complete: |
operation might suspend on free variables |
|
terminating: |
possibly non-terminating |
|
totally-defined: |
possibly non-reducible on same data term |