2016-05-28 5 views
6

Ich bin neu zu OCaml und ich versuche (Facebook) Reason Syntax zu versuchen. Ich kann keinen Weg finden, diese Kompilierung zu machen, wenn ich das Core-Modul nicht finden kann (bereits installiert mit opam).Wie benutzt man Jane Street's Core mit Reason?

Ich versuche, ein Beispielprogramm von 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.); 

Dies ist der Befehl verwende ich für die Kompilierung zu kompilieren: rebuild accum.native.

Als ich diese haben in _tags (von den Anweisungen in https://janestreet.github.io/installation.html)

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

Mein Fehler ändert, aber ich weiß noch nicht, was zu tun ist:

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. 

Was habe ich zu Tun Sie Core mit Reason?

Die Syntax zu übernehmen ist ziemlich einfach und ich habe nur ein paar Stunden gelesen, aber es gibt keine Dokumente darüber, wie Reason für Nicht-OCaml-Benutzer zu verwenden ist.

+0

Haben Sie die Kompilation seit dem Stellen dieser Frage erreicht? Ich kämpfe gerade mit dem gleichen Problem. – Seneca

+0

Ich fürchte nicht. Immer noch mit dem gleichen Schritt. Ohne tiefere Kenntnisse in OCaml Tooling ist es unmöglich. Das hat etwas damit zu tun, was das neu erstellt, aber es ist ein Bash-Skript, das viele Dinge um ocamlbuild herum macht, also habe ich keine Ahnung, was die meisten Ausgaben überhaupt bedeuten. :( –

Antwort

0

Ich denke, rebuild ist ein Wrapper um ocamlbuild. Einfach mit dem Parameter -use-ocamlfind aufrufen.

+0

Das ist in der Tat, was ich denke es ist, aber es ist kaum eine Lösung. Wenn Sie mit echten Indikationen helfen könnte, die sehr geschätzt werden würde. Ich versuchte mit '-pkg Kern' auch mit '-use-ocamlfind' ohne Glück. –

1

Grundsätzlich ist die in https://janestreet.github.io/installation.html angegebenen Tags müssen Plus drei weitere Flaggen und Werte für diesen Fall verwendet hinzugefügt:

  • -linkpkg für statisch Linken
  • -pp refmt Ich gehe davon aus, die den ReasonML Präprozessor
  • -impl file.re zu sagen, welche Datei zu lesen ist

Also, wenn die Datei mit dem Namen der accum.re es kann mit zu einem nativen binären kompiliert werden:

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

2

Es scheint, hat es einen letzten bug fix des Problems in der Begründung Repo. Im Grunde genommen, da rebuild stellt sich heraus, ein Wrapper sein um reasonbuild es möglich ist, um den Fehler zu umgehen, indem reasonbuild direkt ausgeführt wird:

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

Tatsächlich reasonbuild -use-ocamlfind accum.native auch hier funktioniert.

+0

ist das vom Kopf? oder ist das stabil? In 0.6 Ich denke, es funktioniert immer noch nicht –

+0

Aus dem GitHub Repo scheint dies derzeit nur in Master, ist es möglich, Grund von diesem Commit mit OPAM, z. 'opam pin add -y Grund 'https: // github.com/facebook/reason.git # 44aa9f4695e14c247c29c4fbc98ca10dcf332eab'', aber da dies keine Veröffentlichung ist, wird dies wahrscheinlich nicht empfohlen – Mikhail