Hugs ( Haskell User's Gofer System ), también Hugs 98 , es un intérprete de código de bytes para el lenguaje de programación funcional Haskell . Hugs es el sucesor de Gofer y se derivó originalmente de la versión 2.30b de Gofer. [1] Hugs and Gofer fueron desarrollados originalmente por Mark P. Jones, ahora profesor en la Universidad Estatal de Portland .
Desarrollador (es) | Mark P. Jones, otros |
---|---|
Lanzamiento final | Septiembre de 2006/21 de septiembre de 2006 |
Sistema operativo | Multiplataforma |
Predecesor | Gofer |
Tipo | Compilador |
Licencia | BSD |
Sitio web | www |
Hugs viene con una biblioteca de gráficos simple. Como una implementación completa de Haskell que es portátil y fácil de instalar, a veces se recomienda Hugs para los nuevos usuarios de Haskell.
Hugs se desvía de la especificación Haskell 98 [2] en varias formas menores. [3] Por ejemplo, Hugs no admite módulos recursivos entre sí. Existe una lista de diferencias. [4]
El indicador Hugs (un REPL de Haskell ) acepta expresiones para evaluación, pero no definiciones de módulos, tipos o funciones. Los abrazos pueden cargar módulos Haskell al inicio. [5]
Ejemplos de
Registros extensibles
Un ejemplo de "Registros mecanografiados con extensibilidad", una característica no estándar exclusiva de Hugs. [6]
módulo Principal dondeimport Hugs.Trextipo Coord = Tipo doble Point2D = Rec ( x :: Coord , y :: Coord ) tipo Point3D = Rec ( x :: Coord , y :: Coord , z :: Coord ) punto2D = ( x = 1 , y = 1 ) :: Punto2D- emptyRec :: Rec EmptyRow - predefinido- (x = 1 | (y = 1)) - rec. extensión - (x = v | rec) - descomposición del valor del registro, los campos del patrón no deben estar vacíos - (x :: type | rec) - descomposición del tipo de registro- (rec \ z) en el contexto significa que '' rec '' no contiene el campo '' z '' - agregue un campo z con el mismo tipo que el campo x addZCoord :: ( r \ z , r \ x ) => t -> Rec ( x :: t | r ) -> Rec ( x :: t , z : : t | r ) addZCoord z ( x = x | otro ) = ( x = x , z = z | otro )point3D = addZCoord 3 point2D - :: Point3D- admitir cualquier registro con campos '' mostrables '' xey printXY :: ( Mostrar t , r \ x , r \ y ) => Rec ( x :: t , y :: t | r ) -> IO ( ) printXY point = putStrLn xy - con descriptores de acceso de campo de estilo SML (prefijo '#') donde xy = show ( # punto x ) ++ "," ++ show ( # punto y ) incrementoX :: ( Num t , r \ x ) => Rec ( x :: t | r ) -> Rec ( x :: t | r ) incrementoX ( x = v | descanso ) = ( x = v + 1 | descanso )principales = no permiten Point3D ' = incrementX Point3D printXY POINT2D printXY Point3D'
Se ejecuta con la compatibilidad con H98 desactivada para activar las extensiones de idioma: [7]
runhugs -98 test.hs
Referencias
- ^ "Preguntas frecuentes sobre abrazos" . Consultado el 4 de agosto de 2006 .
- ^ Simon Peyton Jones (editor) (diciembre de 2002). "Bibliotecas y lenguaje Haskell 98: el informe revisado" . Consultado el 3 de agosto de 2006 .CS1 maint: texto adicional: lista de autores ( enlace )
- ^ "Incumplimiento de Haskell 98" . La guía del usuario de Hugs 98 . Consultado el 4 de agosto de 2006 .
- ^ "Lista de diferencias con el estándar H98" .
- ^ "Carga y edición de archivos del módulo Haskell" . La guía del usuario de Hugs 98 . Consultado el 4 de agosto de 2006 .
- ^ "Extensiones de idioma específicas para abrazos" . www.haskell.org .
- ^ "Cambiando el comportamiento de los abrazos" . www.haskell.org .