Объятия (переводчик)
![]() | Тема этой статьи может не соответствовать рекомендациям Википедии по известности продуктов и услуг . ( ноябрь 2023 г. ) |
Разработчик(и) | Марк П. Джонс и другие |
---|---|
Финальный выпуск | сентябрь 2006 г.
/ 21 сентября 2006 г |
Операционная система | Кросс-платформенный |
Предшественник | Гофер |
Тип | Компилятор |
Лицензия | БСД |
Веб-сайт | www |
Hugs ( Haskell User's Gofer System , также Hugs 98 — байт-кода интерпретатор функционального ) языка программирования Haskell . Hugs является преемником Gofer и изначально был создан на основе Gofer версии 2.30b. [1] Hugs и Gofer изначально были разработаны Марком П. Джонсом, ныне профессором Портлендского государственного университета .
Hugs поставляется с простой графической библиотекой. Hugs как полная реализация Haskell, переносимая и простая в установке, иногда рекомендуется новым пользователям Haskell.
Hugs отличается от спецификации Haskell 98 [2] несколькими незначительными способами. [3] Например, Hugs не поддерживает взаимно рекурсивные модули. Список различий существует. [4]
Приглашение Hugs представляет собой цикл чтения-оценки-печати Haskell (REPL). Он принимает выражения для оценки, но не определения модулей, типов или функций. Hugs может загружать модули Haskell при запуске. [5]
Примеры
[ редактировать ]Расширяемые записи
[ редактировать ]Пример «Типизированных записей с возможностью расширения», нестандартной функции, уникальной для Hugs. [6]
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'
Запуск с отключенной совместимостью H98 для активации языковых расширений: [7]
runhugs -98 test.hs
Ссылки
[ редактировать ]- ^ «Часто задаваемые вопросы об объятиях» . Проверено 4 августа 2006 г.
- ^ Пейтон Джонс, Саймон , изд. (декабрь 2002 г.). Язык Haskell 98 и библиотеки: Пересмотренный отчет (Отчет) . Проверено 3 августа 2006 г.
- ^ «Несоответствие Haskell 98» . Руководство пользователя Hugs 98 . Проверено 4 августа 2006 г.
- ^ «Список отличий от стандарта H98» .
- ^ «Загрузка и редактирование файлов модуля Haskell» . Руководство пользователя Hugs 98 . Проверено 4 августа 2006 г.
- ^ «Расширения языка, специфичные для объятий» . www.haskell.org .
- ^ «Изменение поведения Объятий» . www.haskell.org .