HOME

TheInfoList



OR:

Hugs (''Haskell User's Gofer System''), also Hugs 98, is a
bytecode Bytecode (also called portable code or p-code) is a form of instruction set designed for efficient execution by a software interpreter. Unlike human-readable source code, bytecodes are compact numeric codes, constants, and references (norma ...
interpreter for the functional
programming language A programming language is a system of notation for writing computer programs. Most programming languages are text-based formal languages, but they may also be graphical. They are a kind of computer language. The description of a programming l ...
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. Hugs deviates from the Haskell 98 specification in several minor ways. For example, Hugs does not support mutually recursive modules. A list of differences exists. The Hugs prompt (a Haskell REPL) accepts expressions for evaluation, but not module, type or function definitions. Hugs can load Haskell modules at start-up.


Examples


Extensible records

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


References


External links

* {{official website, http://www.haskell.org/hugs Free Haskell implementations Software using the BSD license