Hugs
From Wikipedia, the free encyclopedia
Remove ads
Hugs (Sistemul Gofer al utilizatorului Haskell), de asemenea, Hugs 98, este un interpret bytecode pentru limbaj de programare funcțională Haskell. Hugs este succesorul lui Gofer și a fost inițial derivat din Gofer versiunea 2.30b[3]. Hugs și Gofer au fost inițial dezvoltate de Mark P. Jones, acum profesor la Portland State University.
Hugs vine cu o bibliotecă simplă de grafică. Ca o implementare completă Haskell, care este portabilă și ușor de instalat, Hugs este uneori recomandat pentru noii utilizatori Haskell.
Hugs se abate de la specificația Haskell 98[4] în câteva moduri minore[5]. De exemplu, Hugs nu acceptă module reciproc recursive. Există o listă de diferențe[6].
Interfața Hugs (un Haskell REPL) acceptă expresii pentru evaluare, dar nu definiții de module, tip sau funcții. Îmbrățișările pot încărca modulele Haskell la pornire[7].
Remove ads
Exemple
Înregistrări extinse
Un exemplu de "înregistrări tipărite cu extensibilitate", o caracteristică non-standard unică pentru Hugs[8].
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'
Rularea cu compatibilitatea H98 oprită pentru a activa extensiile de limbă:[9]
runhugs -98 test.hs
Remove ads
Note
Legături externe
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads