Hugs (Haskell User's Gofer System) és un intèrpret bytecode per al llenguatge funcional Haskell. Ofereix compilació ràpida i una velocitat d'execució acceptable. A més, inclou una llibreria gràfica simple. Hugs és una bona eina per a tota aquell que està aprenent les bases de Haskell, la qual cosa no implica que sigui una "implementació de joguina". Actualment l'intèrpret GHCi supera la capacitat de Hugs i més des que la versió 7.4 de GHCi admet tota mena de declaracions a nivell de mòdul.Notes de la versió 7.4.1 - GHCi
Llista de diferències amb l'estàndard Haskell 98 aquí.Diferències amb l'estàndard H98 Malgrat que diu que no suporta Unicode (només codif. Latin-1), al Linux amb codificació UTF-8 els accents funcionen tant a les cadenes de text com als identificadors.
Hugs és un programa de codi obert que disposa de versions per als sistemes operatius més difosos tals com Linux, BSD, Microsoft Windows o Mac OS X.
Per començar Al GNU/Linux Ubuntu forma part de la distribució.Paquets de Hugs a l'Ubuntu Per a Windows hi ha WinHugs.WinHugs per a Windows
Activació de Hugs amb extensions pròpies Buscant l'extensió TRex (registres extensibles)Extensió TRex de l'intèrpret Hugs que molta gent troba a faltar a GHC.Propostes per aconseguir registres extensibles a GHC Després de fer una mica d'arqueologia (pel nom TRex i lo amagat de l'activació), cal desactivar la compatibilitat amb Haskell98 (opció +98) canviant-la de signe -98:manual de Hugs - Hugs options # per possibilitar els registres extensibles cal importar el mòdul corresp.
hugs -98 Hugs.Trex
Hugs.Trex> (a=True, b="Hello", c=12::Int | (b1="World")) (a = True, b = "Hello", b1 = "World", c = 12) Hugs.Trex> exemple: -- fitxer prova.hs amb extensions específiques Hugs module Main where
import Hugs.Trex
type Coord = Double type Punt2D = Rec (x::Coord, y::Coord) type Punt3D = Rec (x::Coord, y::Coord, z::Coord)
punt2D = (x=1, y=1) :: Punt2D
-- emptyRec :: Rec EmptyRow -- registre buit predefinit -- (x=1 | (y=1)) -- extensió de registres -- (x=v | rec) -- patró de descomposició per encaix de valors de registres -- (x::tipus | rec) -- patró de descomposició per encaix de tipus de registres
-- (rec \ z) al context vol dir ''rec'' no conté el camp ''z''
-- afegeix un camp z del mateix tipus que el camp x afegeixCoordZ :: (r\z, r\x) => t -> Rec (x::t | r) -> Rec (x::t, z::t | r) afegeixCoordZ z (x = x | resta_de_camps) = (x = x, z = z | resta_de_camps)
punt3D = afegeixCoordZ 3 punt2D :: Punt3D
-- accepta registres que continguin camps (x, y, ...) que implementin ''Show'' imprimeixXY :: (Show t, r\x, r\y) => Rec (x::t, y::t | r) -> IO () imprimeixXY punt = putStrLn xy where xy = show (#x punt) ++", "++ show (#y punt)
incrementaX :: (Num t, r\x) => Rec (x::t | r) -> Rec (x::t | r) incrementaX (x=v | resta_de_camps) = (x=v+1 | resta_de_camps)
main = do let punt3D' = incrementaX punt3D imprimeixXY punt2D imprimeixXY punt3D' Executant amb compatibilitat H98 desactivada per activar les extensions de llenguatge: runhugs -98 prova.hs
Referències
Enllaços externs Pàgina oficial de Hugs
Categoria:Llenguatge de programació Haskell Categoria:Programari lliure Categoria:Eines de programació