Chapter 8. Frequently Asked Questions about Hugs

These are some frequently asked questions about Hugs 98, and their answers.

8.1. What is the correct name for Hugs?
8.2. What is the relationship between Hugs and Gofer?
8.3. Who is responsible for Hugs?
8.4. How do I report a bug?
8.5. How do I enter function definitions?
8.6. How can I access more than one module at once?
8.7. Why are non-exported names accessible at the command prompt?
8.8. What happened to isAlpha, toInt, etc?
8.9. Does Hugs implement everything in Haskell 98?
8.10. Can I create executable programs with Hugs or do I always have to run programs from the development environment?

8.1. What is the correct name for Hugs?

We use "Hugs" as a generic name for the interpreters we build.

We use a name like "Hugs 1.3", "Hugs 1.4", or "Hugs 98" if we want to identify a version of Hugs that is based on a specific version of Haskell like "Haskell 1.3", "Haskell 1.4", or "Haskell 98". So please note that the "1.4" part in a name like "Hugs 1.4" refers to the version of Haskell, and not to the version of Hugs.

We use release dates to identify specific Hugs releases. For example, if you report a bug in the most recent release, be sure to mention that you observed the problem with the "Hugs 98, Sep 1999" release.

8.2. What is the relationship between Hugs and Gofer?

Hugs is the successor to Gofer, and was originally derived from Gofer version 2.30b. But Hugs incorporates many changes and substantial enhancements, and offers much greater compatibility with Haskell.

8.3. Who is responsible for Hugs?

Mark P Jones (currently at OGI) wrote the original version of Hugs and wrote much of the code in the current distribution. Other Haskell teams have also contributed to Hugs; the current distribution owes much to other groups. See the latest Hugs news to find out who is doing what.

8.4. How do I report a bug?

First, check the list of known deviations and bugs (see Chapter 5).

Please report bugs either by using the bug tracking system on the Hugs development page or by sending a report to the hugs-bugs@haskell.org mailing list. If you send the bug report to an individual, you run the risk that that person is on vacation, is rushing to meet a deadline or just accidentally deletes your mail.

Please say which version of Hugs you are using, on which platform, and give us enough information to duplicate the problem. Like all maintainers, we greatly appreciate short error cases.

8.5. How do I enter function definitions?

The Hugs prompt only accepts expressions for evaluation. You can create a file containing a Haskell module, and load that (see Section 2.2 for details).

8.6. How can I access more than one module at once?

Hugs has only one current module at any time, but you can edit a module containing several imports.

8.7. Why are non-exported names accessible at the command prompt?

When you evaluate an expression in the interpreter, it has to use some symbol table for looking up the ids you use. What symbol table does it use? The only credible alternatives are:

  • The export list of the "current module" (see Section 2.2)

  • The symbol table of the "current module"

Hugs uses the latter (which seems more useful) but you might reasonably expect Hugs to use the export list and wonder why Hugs doesn't seem to implement abstract data types correctly when you do experiments from the command line.

8.8. What happened to isAlpha, toInt, etc?

The Prelude now conforms to Haskell 98, whereas in older versions it exported some additional names. To use character functions like isAlpha, you must load or import the Char module. Non-standard functions like toInt are no longer available.

8.9. Does Hugs implement everything in Haskell 98?

Not quite. Mutually recursive modules are not supported yet, and there are a few other minor discrepancies (see Section 5.1 for details).

8.10. Can I create executable programs with Hugs or do I always have to run programs from the development environment?

The distribution includes a stand-alone version of Hugs which will "load and go" as well as handle command line arguments (see Section 4.1 for details).