Hugs ( система Gofer пользователя Haskell ), также Hugs 98 , представляет собой интерпретатор байт-кода для языка функционального программирования Haskell . Hugs является преемником Gofer и изначально был производным от Gofer версии 2.30b. [1] Hugs и Gofer изначально были разработаны Марком П. Джонсом, ныне профессором Портлендского государственного университета .
Разработчики) | Марк П. Джонс, другие |
---|---|
Окончательный релиз | Сентябрь 2006 г. / 21 сентября 2006 г. |
Операционная система | Кроссплатформенность |
Предшественник | Гофер |
Тип | Компилятор |
Лицензия | BSD |
Веб-сайт | www |
Hugs поставляется с простой графической библиотекой. В качестве полной реализации Haskell, переносимой и простой в установке, Hugs иногда рекомендуется новым пользователям Haskell.
Hugs отклоняется от спецификации Haskell 98 [2] по нескольким незначительным причинам. [3] Например, Hugs не поддерживает взаимно рекурсивные модули. Список отличий существует. [4]
Приглашение Hugs (Haskell REPL ) принимает выражения для оценки, но не определения модулей, типов или функций. Hugs могут загружать модули Haskell при запуске. [5]
Примеры
Расширяемые записи
Пример «Типизированных записей с расширяемостью», нестандартной функции, уникальной для Hugs. [6]
модуль Main гдеимпорт Hugs.Trexтип Coord = Двойной тип Point2D = Rec ( x :: Coord , y :: Coord ) тип Point3D = Rec ( x :: Coord , y :: Coord , z :: Coord ) point2D = ( x = 1 , y = 1 ) :: Point2D- emptyRec :: Rec EmptyRow - предопределено- (x = 1 | (y = 1)) - рек. extension - (x = v | rec) - декомпозиция значения записи, поля шаблона должны быть непустыми - (x :: type | rec) - декомпозиция по типу записи- (rec \ z) в контексте означает, что rec не содержит поля z - добавить поле z того же типа, что и поле 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- допускать любую запись с '' показываемыми '' полями x и y printXY :: ( Show t , r \ x , r \ y ) => Rec ( x :: t , y :: t | r ) -> IO ( ) printXY point = putStrLn xy - со средствами доступа к полям в стиле SML (префикс '#'), где 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'
Запуск с отключенной совместимостью с H98 для активации языковых расширений: [7]
runhugs -98 test.hs
Рекомендации
- ^ «Часто задаваемые вопросы об объятиях» . Проверено 4 августа 2006 .
- ^ Саймон Пейтон Джонс (редактор) (декабрь 2002 г.). «Язык и библиотеки Haskell 98: исправленный отчет» . Проверено 3 августа 2006 .CS1 maint: дополнительный текст: список авторов ( ссылка )
- ^ «Несоответствие Haskell 98» . Руководство пользователя Hugs 98 . Проверено 4 августа 2006 .
- ^ «Список отличий от стандарта H98» .
- ^ «Загрузка и редактирование файлов модуля Haskell» . Руководство пользователя Hugs 98 . Проверено 4 августа 2006 .
- ^ «Расширения языка, специфичные для Hugs» . www.haskell.org .
- ^ «Изменение поведения объятий» . www.haskell.org .