Haskell (Русский) - ArchWiki

# Haskell (Русский)

From ArchWiki
Jump to navigation Jump to search

Haskell — чистый функциональный язык программирования общего назначения.

## Установка

### Компилятор

Чтобы собрать исходный код Haskell в машинный код, необходимо установить компилятор. Доступно несколько реализаций, но наиболее используемая (которая теперь фактически является стандартом) - это GHC (Glasgow Haskell Compiler). Он доступен в официальных репозиториях как ghc.

Вы можете попробовать его, создав следующий файл:

    Main.hs

    main = putStrLn "Hello, World"

и запустив:

    $ ghc -dynamic Main.hs
    $ ./Main

    Hello, World

## Проблемы со связыванием

Начиная с версии 8.0.2-1, пакет ghc больше не устанавливает статически связываемые версии библиотек GHC по умолчанию, как и пакеты haskell-* в community. Поэтому для успешного связывания необходимо указывать GHC флаг `-dynamic`, так как по умолчанию оно статическое. Для Cabal необходима следующая конфигурация:

    cabal configure --disable-library-vanilla --enable-shared --enable-executable-dynamic --ghc-options=-dynamic

- `--disable-library-vanilla` подавляет создание статически связываемых библиотек (если Ваш проект содержит библиотеку).
- `--enable-shared` позволяет создавать разделяемые библиотеки (если Ваш проект содержит библиотеку).
- `--enable-executable-dynamic` позволяет использовать динамическое связывание для исполняемых файлов (если Ваш проект содержит исполняемые файлы).
- `--ghc-options=-dynamic` добавляет флаг `-dynamic` к каждому вызову GHC (если, например, у пакета нетривиальный `Setup.hs`).

Также можно установить эти флаги в `~/.cabal/config`, чтобы они применялись к каждому проекту по умолчанию:

    ~/.cabal/config

    library-vanilla: False
    shared: True
    executable-dynamic: True
    program-default-options
      ghc-options:
        -dynamic

Учтите, что если Вы использовали gchup для установки cabal, вносить эти изменения в `~/.cabal/config` нельзя. Это может привести к таким ошибкам, как `dieVerbatim: user error (cabal: '/home/user/.ghcup/bin/ghc'`.

Динамическое связывание используется для большинства модулей Haskell, доступных через pacman и некоторых пакетов в AUR. Поскольку GHC не предоставляет ABI совместимость между релизами компилятора, статическое связывание часто является предпочтительным решением для разработки вне системы пакетов.

Примечание: В контексте этой статьи статическое связывание не означает генерацию полностью статических бинарных файлов ELF. Только код на Haskell будет статически связан в один бинарный файл ELF, который может быть динамически связан с другими системными библиотеками, такими как glibc.

### Статическое связывание

### Сборка статически связанных пакетов с помощью Cabal (без использования разделяемых библиотек)

### Средства разработки Haskell

## Управление пакетами Haskell

### Плюсы / минусы различных методов

### Репозиторий ArchHaskell

### cabal-install

#### Подготовка и $PATH

#### Установка пакетов user-wide

#### Песочницы

#### Удаление пакетов

### stack

## Смотрите также

Category:

- Programming languages (Русский)