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