Edison: A Library of Efficient Data Structures (Haskell Version 1.1) December 20, 1999 This release updates Edison from Haskell 1.4 to Haskell 98, and removes most of the GHC specific code. Edison should now run under both GHC and Hugs (at least). Note that Edison is still not fully Haskell 98 compliant because of the use of multi-parameter type classes and the occasional use of GHC/Hugs libraries such as Bits. See docs/users.{dvi,ps} for more extensive documentation. Basic instructions for using Edison with GHC or Hugs are included below. See the User's Guide for more discussion about portability. In its current state, Edison is still mostly a framework. That is, I provide signatures, but not yet very many implementations. I intend to populate this framework over time, adding a new module every few weeks. Thus, the library is extremely unstable in the sense that I will continually be modifying existing data structures and adding new ones. However, I hope that the signatures will remain fairly stable over time, making these changes to the implementations mostly transparent to users of the library. If you wish to request a particular data structure or volunteer to provide an implementation, or if you have any other comments or suggestions, send me email at cdo@cs.columbia.edu. Chris Okasaki USING EDISON WITH GHC --------------------- To begin using Edison with GHC, first run make depend make all I recommend using GHC 4.04 or higher (I used GHC 4.04 for testing). To compile a file Foo.hs that uses Edison, type something like ghc -c -fglasgow-exts -iEDHOME/Import Foo.hs where EDHOME should be replaced with the correct path to the Edison home directory. To compile and link, type something like ghc -fglasgow-exts -iEDHOME/Import -LEDHOME/Lib -ledison Foo.hs USING EDISON WITH HUGS ---------------------- To use Edison under Hugs, simply add the Edison directories to the Hugs search path, as in hugs -98 -PEDHOME:EDHOME/Seq:EDHOME/Coll:EDHOME/Assoc: Foo.hs where EDHOME should be replaced with the correct path to the Edison home directory. I do this by aliasing "ehugs" to "hugs -98 -PEDHOME:EDHOME/Seq:EDHOME/Coll:EDHOME/Assoc:" and then typing ehugs Foo.hs There is a problem with this approach in that the built-in Hugs libraries already contain a Sequence module, which is now being shadowed by Edison's Sequence module. It is unlikely that any of your code depends on this built-in module directly, but it may depend on it indirectly through the HugsLibs module. Here is the easiest way to fix the problem. 1. Go the the .../share/hugs/lib/hugs directory. 2. Rename Sequence.hs to HugsSequence.hs. 3. Edit HugsSequence.hs, replacing the line module Sequence( with module HugsSequence( 4. Edit HugsLibs.hs, replacing the line import Sequence with import HugsSequence These directions were tested under the November 1999 release of Hugs. It is likely that the next release of Hugs will rename or eliminate the built-in Sequence module.