Нужна помощь по началу использования purescript на NixOS

Я пытаюсь настроить проект hello world с purescript на NixOs и у меня есть пара вопросов,

  1. Official purescript website recommend installation via npm but there is no nixos.nodePackages.purescript, instead there are at least 2 variants I found in nixpkgs
    • nixos.purescript
    • nixos.haskellPackages.purescript

Чем они отличаются?

  1. Официальный сайт рекомендует pulp и bower через npm, но доступен только nodePackages.bower и есть недокументированный psc-package.

Каким должен быть nix способ обработки пакетов purescript?

  1. Пример кода на официальном сайте (см. hello.purs ниже) даже не компилируется,

с этими ошибками.

$ purs compile hello.purs

Error found:
at hello.purs line 1, column 1 - line 1, column 1

Unable to parse module:
unexpected "import"
expecting "module"

Я добавляю module Hello в код, но все равно не получается.

$ purs compile hello.purs 
Error 1 of 2:

  in module Hello
  at hello.purs line 2, column 1 - line 2, column 15

    Module Prelude was not found.
    Make sure the source file exists, and that it has been provided as an input to psc.


  See https://github.com/purescript/documentation/blob/master/errors/ModuleNotFound.md for more information,
  or to contribute content related to this error.

Error 2 of 2:

  in module Hello
  at hello.purs line 3, column 1 - line 3, column 39

    Module Control.Monad.Eff.Console was not found.
    Make sure the source file exists, and that it has been provided as an input to psc.


  See https://github.com/purescript/documentation/blob/master/errors/ModuleNotFound.md for more information,
  or to contribute content related to this error.

Каким должен быть правильный рабочий процесс?


Цель состоит в том, чтобы иметь минимальный пример проекта с одним hello.purs, работающим в веб-браузере.

Это hello.purs

module Hello where
import Prelude
import Control.Monad.Eff.Console (log)

greet :: String -> String
greet name = "Hello, " <> name <> "!"

main = log (greet "World")

Было бы очень полезно, если бы вы также могли указать shell.nix для nix-shell или default.nix для nix-build.

Нашел эту двухлетнюю гильдию , Я пытаюсь это сделать, но у меня до сих пор нет ответа на все мои вопросы.


person wizzup    schedule 07.09.2017    source источник
comment
Проект Джастина Ву easy-purescript-nix также может быть полезен, вот его объявление.   -  person toraritte    schedule 22.04.2019


Ответы (1)


  1. nixos.purescript — это просто статические исполняемые файлы для nixos.haskellPackages.purescript; это пропускает сборку/установку PureScript как библиотеки Haskell
  2. Вы можете установить Pulp через npm install pulp — бинарник будет установлен на node_modules/.bin/pulp
  3. Пример кода не компилируется, потому что вы не загрузили зависимости через Bower. Вы можете установить их через bower install purescript-prelude purescript-console.

Но node_modules/.bin/pulp init даст вам файл Bower, и вы можете запустить bower install, чтобы получить базовый проект. Затем вы можете сделать node_modules/.bin/pulp run, чтобы выполнить его с помощью node.js, но вы, вероятно, захотите, чтобы pulp browserify --to example.js получил файл, который вы можете поместить в тег <script> в HTML.

person Brian McKenna    schedule 12.09.2017
comment
Привет @Brian - Спасибо за ответ! Я новичок в NixOS (только что скачал образ ;-)), поэтому хочу добавить еще несколько вопросов: Что вы думаете об этом проекте: github.com/ElvishJerricco/nix-purescriptPackages ? У меня есть еще один более общий вопрос: как вы думаете, кодирование в Purescript на NixOS (как вы описали его выше) имеет какие-либо преимущества по сравнению с разработкой на других ОС? - person paluh; 13.09.2017
comment
NixOS не имеет большой поддержки PureScript, поэтому вы не получите огромных преимуществ, если будете работать только с библиотеками и инструментами PureScript. Я мог бы быть намного лучше, но нам нужно потратить время на написание кода Nix для хорошей поддержки PureScript. Я не использовал его, но purescriptPackages - правильное направление :) - person Brian McKenna; 14.09.2017