runhugs
[option
...] file
[argument
...]
The runhugs command is an interpreter for an executable Hugs
script.
The first non-option should be the name of a file containing a Haskell
Main
module.
The runhugs command will invoke the
the main
function in this module, with any subsequent
arguments available through the getArgs
action.
For example, suppose we have a file echo.hs
containing
module Main where import System.Environment main = do args <- getArgs putStrLn (unwords args)
Then we can run this program with the command
runhugs echo.hs a b c
We can also test the program from within the interpreter
using the withArgs
function from the
System.Environment
module:
Main> withArgs ["a", "b", "c"] main a b c
On Unix systems, it is possible for an executable file to specify which program is used to run it. To do this we need to make the module a literate script, like the following:
#! /usr/local/bin/runhugs +l > module Main where > import System.Environment > main = do > args <- getArgs > putStrLn (unwords args)
If this file is called myecho
, and is executable,
we can say
myecho a b c
This invokes the command
/usr/local/bin/runhugs +l myecho a b c
The +l
option tells
runhugs that myecho
contains a
literate script,
even though its name does not end in “.lhs
”.
Unfortunately, the #!
feature passes additional arguments
(if any) to the program as a single argument: if the first line were
#! /usr/local/bin/runhugs +l -98
then the first argument to runhugs would be
“+l -98
”.
You can get around this using the
-X
option,
which asks for the string to be split into options:
#! /usr/local/bin/runhugs -X +l -98
Then the program will read and act on both the +l
and
-98
options.