请输入您要查询的百科知识:

 

词条 Hugs
释义

  1. Examples

      Extensible records  

  2. References

  3. External links

{{about|the Haskell interpreter|the affectionate physical gesture|Hug|the confectionery|Hershey's Hugs}}{{Infobox Software
|name = Hugs 98
|developer = Mark P. Jones, others
|latest_release_version = September 2006
|latest_release_date = {{release_date|2006|09|21}}
|status = Inactive[1]
|operating_system = Cross-platform
|genre = Compiler
|license = BSD
|website = Hugs 98 homepage
}}{{Portal|Free and open-source software}}

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.[2] 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[3] in several minor ways.[4] For example, Hugs does not support mutually recursive modules. A list of differences exists.[5]

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.[6]

Examples

Extensible records

An example of "Typed records with extensibility", a non standard feature unique to Hugs.[7]

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:[8]

runhugs -98 test.hs

References

1. ^{{cite web|url=https://www.haskell.org/hugs/|title=Hugs 98|website=www.haskell.org}}
2. ^{{cite web|url=http://www.haskell.org/hugs/pages/users_guide/faq.html|title=Frequently Asked Questions about Hugs|accessdate=2006-08-04}}
3. ^{{cite web|url=http://haskell.org/onlinereport/|title=Haskell 98 Language and Libraries: The Revised Report|accessdate=2006-08-03|date=December 2002|author=Simon Peyton Jones (editor)|authorlink=Simon Peyton Jones}}
4. ^{{cite web|url=http://www.haskell.org/hugs/pages/users_guide/haskell98.html#BUGS-HASKELL98|title=Haskell 98 non-compliance|work=The Hugs 98 User's Guide|accessdate=2006-08-04}}
5. ^{{cite web|url=http://www.haskell.org/hugs/pages/hugsman/diffs.html|title=List of differences with H98 standard|publisher=}}
6. ^{{cite web|url=http://www.haskell.org/hugs/pages/users_guide/module-commands.html|title=Loading and editing Haskell module files|work=The Hugs 98 User's Guide|accessdate=2006-08-04}}
7. ^{{cite web|url=http://www.haskell.org/hugs/pages/users_guide/hugs-only.html#TREX|title=Hugs-specific language extensions|website=www.haskell.org}}
8. ^{{cite web|url=http://www.haskell.org/hugs/pages/users_guide/options.html#OPTIONS-LANGUAGE|title=Changing the behaviour of Hugs|website=www.haskell.org}}

External links

  • {{official website|http://www.haskell.org/hugs}}

1 : Free Haskell implementations

随便看

 

开放百科全书收录14589846条英语、德语、日语等多语种百科知识,基本涵盖了大多数领域的百科知识,是一部内容自由、开放的电子版国际百科全书。

 

Copyright © 2023 OENC.NET All Rights Reserved
京ICP备2021023879号 更新时间:2024/9/25 6:32:03