The topic of this article may not meet Wikipedia's general notability guideline. (November 2023)
|Developer(s)||Mark P. Jones, others|
September 2006 / September 21, 2006
Hugs (Haskell User's Gofer System), also Hugs 98, is a bytecode interpreter for the functional programming language Haskell. Hugs is the successor to Gofer, and was originally derived from Gofer version 2.30b. Hugs and Gofer were originally developed by Mark P. Jones, now a professor at Portland State University.
Hugs comes with a simple graphics library. As a complete Haskell implementation that is portable and simple to install, Hugs is sometimes recommended for new Haskell users.
An example of "Typed records with extensibility", a non standard feature unique to Hugs.
module Main where import Hugs.Trex type Coord = Double type Point2D = Rec (x::Coord, y::Coord) type Point3D = Rec (x::Coord, y::Coord, z::Coord) point2D = (x=1, y=1) :: Point2D -- emptyRec :: Rec EmptyRow -- predefined -- (x=1 | (y=1)) -- rec. extension -- (x=v | rec) -- record value decomposition, pattern fields must be non empty -- (x::type | rec) -- record type decomposition -- (rec\z) in the context means ''rec'' does not contain field ''z'' -- add a field z with the same type as field x addZCoord :: (r\z, r\x) => t -> Rec ( x::t | r) -> Rec ( x::t, z::t | r) addZCoord z ( x = x | other) = (x = x, z = z | other) point3D = addZCoord 3 point2D -- :: Point3D -- admit any record with ''showable'' fields x and y printXY :: (Show t, r\x, r\y) => Rec (x::t, y::t | r) -> IO () printXY point = putStrLn xy -- with SML style field accessors ('#' prefix) where xy = show (#x point) ++", "++ show (#y point) incrementX :: (Num t, r\x) => Rec (x::t | r) -> Rec (x::t | r) incrementX (x=v | rest) = (x=v+1 | rest) main = do let point3D' = incrementX point3D printXY point2D printXY point3D'
Running with H98 compatibility turned off to activate language extensions:
runhugs -98 test.hs
- "Frequently Asked Questions about Hugs". Retrieved 2006-08-04.
- Peyton Jones, Simon, ed. (December 2002). Haskell 98 Language and Libraries: The Revised Report (Report). Retrieved 2006-08-03.
- "Haskell 98 non-compliance". The Hugs 98 User's Guide. Retrieved 2006-08-04.
- "List of differences with H98 standard".
- "Loading and editing Haskell module files". The Hugs 98 User's Guide. Retrieved 2006-08-04.
- "Hugs-specific language extensions". www.haskell.org.
- "Changing the behaviour of Hugs". www.haskell.org.