Как использовать Ядро Джейн Стрит с разумом?

Я новичок в OCaml и пытаюсь попробовать (: P) синтаксис Facebook Reason. Я не могу найти способ сделать эту компиляцию, потому что если не могу найти модуль Core (уже установленный с opam).

Я пытаюсь скомпилировать пример программы из Real World OCaml

open Core.Std;

let rec read_and_accumulate accum => {
  let line = In_channel.input_line In_channel.stdin;
  switch line {
    | None => accum
    | Some x => read_and_accumulate (accum +. Float.of_string x)
  }
};

let () = printf "Total: %F\n" (read_and_accumulate 0.);

Это команда, которую я использую для компиляции: rebuild accum.native.

Когда у меня это есть в _tags (из инструкций в https://janestreet.github.io/installation.html < / а>)

true: package(core,ppx_jane)
true: thread,debug

Моя ошибка изменилась, но я все еще не знаю, что делать:

File "_tags", line 1, characters 6-28:
Warning: tag "package" does not expect a parameter, but is used with parameter "core,ppx_jane"
File "_tags", line 1, characters 6-28:
Warning: the tag "package(core,ppx_jane)" is not used in any flag or dependency declaration, so it will have no effect; it may be a typo. Otherwise you can use `mark_tag_used` in your myocamlbuild.ml to disable this warning.
+ /Users/David/.opam/4.02.3/bin/ocamldep.opt -modules -pp refmt -impl accum2.re | tee accum2.re.depends accum2.ml.depends
accum2.re: Core Float In_channel
+ /Users/David/.opam/4.02.3/bin/ocamlc.opt -c -g -thread -pp '-g -thread' -pp refmt -o accum2.cmo -intf-suffix .rei -impl accum2.re
File "accum2.re", line 1, characters 5-13:
Error: Unbound module Core
Command exited with code 2.
Compilation unsuccessful after building 2 targets (0 cached) in 00:00:00.

Что мне нужно сделать, чтобы использовать Core с Reason?

Принять синтаксис довольно просто, я читал всего пару часов, но нет никаких документов о том, как использовать Reason для пользователей, не являющихся пользователями OCaml.


person David Pelaez    schedule 28.05.2016    source источник
comment
Вы достигли компиляции с тех пор, как задали этот вопрос? В настоящее время я борюсь с той же проблемой.   -  person Seneca    schedule 29.05.2016
comment
Я не боюсь. По-прежнему придерживаюсь того же шага. Без более глубокого знания инструментов OCaml это невозможно. Это имеет какое-то отношение к тому, что это перекомпоновано, но это сценарий bash, который делает много вещей вокруг ocamlbuild, поэтому я даже не понимаю, что означает большая часть вывода. :(   -  person David Pelaez    schedule 30.05.2016


Ответы (3)


Обычно теги, указанные в https://janestreet.github.io/installation.html, должны быть добавил плюс еще три флага и значения, используемые для этого случая:

  • -linkpkg для статической ссылки, я полагаю
  • -pp refmt с указанием препроцессора ReasonML
  • -impl file.re, чтобы указать, какой файл читать

Итак, если файл называется accum.re, его можно скомпилировать в собственный двоичный файл с помощью:

ocamlfind ocamlc -g -thread -package ppx_jane -package core -pp refmt -linkpkg -o accum.native -impl accum.re

person David Pelaez    schedule 30.05.2016

Похоже, что в репозитории Reason недавно было исправление ошибки проблемы. По сути, поскольку rebuild оказывается оболочкой для reasonbuild, можно обойти ошибку, запустив reasonbuild напрямую:

env OCAMLFIND_COMMANDS="ocamlc=$(which reopt)" reasonbuild -use-ocamlfind accum.native

На самом деле reasonbuild -use-ocamlfind accum.native здесь тоже работает.

person Mikhail    schedule 21.07.2016
comment
это из головы? или это в стабильной? В 0.6 думаю все равно не работает - person David Pelaez; 23.07.2016
comment
Из репозитория GitHub кажется, что это в настоящее время только в мастере, можно установить причину из этого коммита с OPAM, например. opam pin add -y reason 'https://github.com/facebook/reason.git#44aa9f4695e14c247c29c4fbc98ca10dcf332eab', но поскольку это не выпуск, это, вероятно, не рекомендуется - person Mikhail; 25.07.2016

Думаю, rebuild - это оболочка для ocamlbuild. Просто вызовите его с параметром -use-ocamlfind.

person Drup    schedule 29.05.2016
comment
Это действительно то, что я думаю, но это вряд ли решение. Если бы вы могли помочь с реальными показаниями, я был бы очень признателен. Я пробовал с -pkg core, но безуспешно использовал -use-ocamlfind. - person David Pelaez; 30.05.2016