Новичок в Haskell здесь. (ОС: WSL Debian, установлен официальный пакет ghc)
Я хочу настроить sdl2, чтобы можно было скомпилировать sdl2 с помощью Haskell.
Когда я впервые попытался скомпилировать с помощью SDL2, я получил эту ошибку:
$ cat sdl2_test.hs
import SDL
main :: IO ()
main = do
...
$ ghc sdl2_test.hs -lsdl2
[1 of 2] Compiling Main ( sdl2_test.hs, sdl2_test.o )
sdl2_test.hs:1:1: error:
Could not find module ‘SDL’
Use -v (or `:set -v` in ghci) to see a list of the files searched for.
|
1 | import SDL
| ^^^^^^^^^^
Когда я компилирую программу на C, включающую SDL2, она работает автоматически, но не работает в Haskell.
Затем я узнал, что мне нужно импортировать другой модуль для SDL2 для компиляции с Haskell, но для этого требуется «кабал».
Как я могу скомпилировать файл Haskell с помощью sdl2 без использования Cabal?
Если вы не использовали какой-нибудь менеджер пакетов (например, dpkg), он также не работал автоматически в C.
Вам необходимо указать флаги для GHC: -package SDL -package-db PATH-TO-PKGDB-WITH-SDL





Примечание. В следующем ответе предполагается, что вы используете официальный пакет Debian ghc. Если нет, обновите свой вопрос, указав некоторую информацию о том, как вы установили Haskell (например, с помощью GHCup или каким-либо другим методом).
В любом случае, если вы используете пакет Debian ghc для установки Haskell, то проще всего будет установить совместимый пакет libghc-sdl2-dev Debian. Сюда входит отсутствующий модуль SDL, а также будут установлены все необходимые вам библиотеки (хотя большинство из них уже должно быть установлено, если у вас установлен libsdl2-dev).
В новой установке книжного червя Debian я установил ghc и libghc-sdl2-dev, а затем собирался запустить ghci и импортировать модуль SDL:
$ apt install ghc libghc-sdl2-dev
...
$ ghci
GHCi, version 9.0.2: https://www.haskell.org/ghc/ :? for help
ghci> import SDL
ghci>
Я также скомпилировал тестовый файл:
$ cat sdl2_test.hs
import SDL
main :: IO ()
main = initializeAll
$ ghc sdl2_test.hs
[1 of 1] Compiling Main ( sdl2_test.hs, sdl2_test.o)
Linking sdl2_test ...
$ ./sdl2_test
$
ВНИМАНИЕ: не следует добавлять -lsdl2 в командную строку ghc. (Это просто вызовет ошибку.) GHC автоматически свяжется с нужной библиотекой благодаря строке import SDL в вашей программе.
Вам необходимо загрузить и собрать модуль Haskell SDL самостоятельно.