<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML ><HEAD ><TITLE >Other ways of running Hugs</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK REL="HOME" TITLE="The Hugs 98 User's Guide" HREF="index.html"><LINK REL="PREVIOUS" TITLE="Adding packages to a Hugs installation" HREF="packages.html"><LINK REL="NEXT" TITLE="Compiling modules that use the Foreign Function Interface" HREF="ffihugs.html"><LINK REL="STYLESHEET" TYPE="text/css" HREF="hugs-ug.css"></HEAD ><BODY CLASS="CHAPTER" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#840084" ALINK="#0000FF" ><DIV CLASS="NAVHEADER" ><TABLE SUMMARY="Header navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TH COLSPAN="3" ALIGN="center" >The Hugs 98 User's Guide</TH ></TR ><TR ><TD WIDTH="10%" ALIGN="left" VALIGN="bottom" ><A HREF="packages.html" ACCESSKEY="P" >Prev</A ></TD ><TD WIDTH="80%" ALIGN="center" VALIGN="bottom" ></TD ><TD WIDTH="10%" ALIGN="right" VALIGN="bottom" ><A HREF="ffihugs.html" ACCESSKEY="N" >Next</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><DIV CLASS="CHAPTER" ><H1 ><A NAME="OTHERS" ></A >Chapter 4. Other ways of running Hugs</H1 ><DIV CLASS="SECT1" ><H1 CLASS="SECT1" ><A NAME="RUNHUGS" >4.1. Running standalone Haskell programs</A ></H1 ><P ><B CLASS="COMMAND" >runhugs</B > [<TT CLASS="REPLACEABLE" ><I >option</I ></TT >...] <TT CLASS="REPLACEABLE" ><I >file</I ></TT > [<TT CLASS="REPLACEABLE" ><I >argument</I ></TT >...]</P ><P >The <B CLASS="COMMAND" >runhugs</B > command is an interpreter for an executable Hugs script. The first non-option should be the name of a file containing a Haskell <TT CLASS="LITERAL" >Main</TT > module. The <B CLASS="COMMAND" >runhugs</B > command will invoke the the <CODE CLASS="FUNCTION" >main</CODE > function in this module, with any subsequent arguments available through the <CODE CLASS="FUNCTION" >getArgs</CODE > action.</P ><P >For example, suppose we have a file <TT CLASS="FILENAME" >echo.hs</TT > containing <PRE CLASS="PROGRAMLISTING" >module Main where import System.Environment main = do args <- getArgs putStrLn (unwords args)</PRE > Then we can run this program with the command <PRE CLASS="SCREEN" >runhugs echo.hs a b c</PRE > We can also test the program from within the interpreter using the <CODE CLASS="FUNCTION" >withArgs</CODE > function from the <TT CLASS="LITERAL" >System.Environment</TT > module: <PRE CLASS="SCREEN" >Main> withArgs ["a", "b", "c"] main a b c</PRE ></P ><P >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: <PRE CLASS="PROGRAMLISTING" >#! /usr/local/bin/runhugs +l > module Main where > import System.Environment > main = do > args <- getArgs > putStrLn (unwords args)</PRE > If this file is called <TT CLASS="FILENAME" >myecho</TT >, and is executable, we can say <PRE CLASS="SCREEN" >myecho a b c</PRE > This invokes the command <PRE CLASS="SCREEN" >/usr/local/bin/runhugs +l myecho a b c</PRE > The <A HREF="options.html#OPTION-LITERATE" ><CODE CLASS="OPTION" >+l</CODE ></A > option tells <B CLASS="COMMAND" >runhugs</B > that <TT CLASS="FILENAME" >myecho</TT > contains a literate script, even though its name does not end in <SPAN CLASS="QUOTE" >"<TT CLASS="LITERAL" >.lhs</TT >"</SPAN >.</P ><DIV CLASS="NOTE" ><BLOCKQUOTE CLASS="NOTE" ><P ><B >Note: </B >Unfortunately, the <TT CLASS="LITERAL" >#!</TT > feature passes additional arguments (if any) to the program as a single argument: if the first line were <PRE CLASS="PROGRAMLISTING" >#! /usr/local/bin/runhugs +l -98</PRE > then the first argument to <B CLASS="COMMAND" >runhugs</B > would be <SPAN CLASS="QUOTE" >"<TT CLASS="LITERAL" >+l -98</TT >"</SPAN >. You can get around this using the <A HREF="options.html#OPTION-SPLIT-OPTIONS" ><CODE CLASS="OPTION" >-X</CODE ></A > option, which asks for the string to be split into options: <PRE CLASS="PROGRAMLISTING" >#! /usr/local/bin/runhugs -X +l -98</PRE > Then the program will read and act on both the <CODE CLASS="OPTION" >+l</CODE > and <CODE CLASS="OPTION" >-98</CODE > options.</P ></BLOCKQUOTE ></DIV ></DIV ></DIV ><DIV CLASS="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE SUMMARY="Footer navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><A HREF="packages.html" ACCESSKEY="P" >Prev</A ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="index.html" ACCESSKEY="H" >Home</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="ffihugs.html" ACCESSKEY="N" >Next</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" >Adding packages to a Hugs installation</TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" > </TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >Compiling modules that use the Foreign Function Interface</TD ></TR ></TABLE ></DIV ></BODY ></HTML >