我不确定如何充分使用OCaml Websocket库.我希望有人可以通过一个简单的例子来帮助我.我试图在websocket.org上测试库.我只是想发送一条消息,然后打印响应.我很困惑如何使用/访问返回的函数ws_conn.我以为我可以做类似的事情let push,print = ws_conn in,let push,print = Websocket.open_connection ~tls:false ws_addr in但这似乎不正确.这是我到目前为止所拥有的.
#require "websocket";;
(* Set up the websocket uri address *)
let ws_addr = Uri.of_string "ws://echo.websocket.org"
(* Set up the websocket connection *)
let ws_conn = Websocket.open_connection ~tls:false ws_addr
(* Set up a frame *)
let ws_frame = Websocket.Frame.of_string "Rock it with HTML5 WebSocket"
(* Function to handle replies *)
let with_reply s =
match s with
| Some x ->
let line …Run Code Online (Sandbox Code Playgroud) 我正在尝试了解有关OCaml扩展点的更多信息,并且我无法跟踪AST中记录类型的表示.
我在这篇博客文章中窃取了以下示例:
http://whitequark.org/blog/2014/04/16/a-guide-to-extension-points-in-ocaml/
使用源文件(foo.ml):
let _ = [%getenv "USER"]
Run Code Online (Sandbox Code Playgroud)
并输出ocamlc -dparsetree fool.ml:
[
structure_item (test.ml[1,0+0]..[1,0+24])
Pstr_eval
expression (test.ml[1,0+8]..[1,0+24])
Pexp_extension "getenv"
[
structure_item (test.ml[1,0+17]..[1,0+23])
Pstr_eval
expression (test.ml[1,0+17]..[1,0+23])
Pexp_constant Const_string("USER",None)
]
]
Run Code Online (Sandbox Code Playgroud)
从asttypes.mli和parsetree.mli我可以遵循该行的解析树模式匹配
Pexp_constant Const_string("USER",None)
Run Code Online (Sandbox Code Playgroud)
但是,当解析树表示记录类型时,我无法再跟踪发生的情况.似乎记录字段的表示顺序与它们在类型定义中出现的顺序不同,并且解析树中不需要(或显示)所有字段.
来自parsetree.mli:
type expression = {
pexp_desc: expression_desc;
pexp_loc: Location.t;
pexp_attributes: attributes;
}
Run Code Online (Sandbox Code Playgroud)
解析树输出似乎只显示位置和有效负载,但我可能读错了.
如何正确读取记录类型的AST?对于类型表达式应该是:
(* record type declaration and pexp_loc field *)
expression (test.ml[1,0+8]..[1,0+24])
(* pexp_desc field *)
Pexp_extension "getenv"
[
...
]
Run Code Online (Sandbox Code Playgroud) 我以前通过opam安装任何OCaml软件包都没有问题.但是我无法安装Cryptokit.
我正在使用命令:
$ opam install cryptokit
Run Code Online (Sandbox Code Playgroud)
并且我收到以下错误消息(我不确定它们的含义,并且找不到有关错误的任何文档):
[ERROR] The compilation of cryptokit.1.9 failed.
Removing cryptokit.1.9.
ocamlfind remove cryptokit
===== ERROR while installing cryptokit.1.9 =====
# opam-version 1.1.0
# os linux
# command make
# path /home/alpha/.opam/system/build/cryptokit.1.9
# compiler system (4.01.0)
# exit-code 2
# env-file /home/alpha/.opam/system/build/cryptokit.1.9/cryptokit-9111-ffb3fd.env
# stdout-file /home/alpha/.opam/system/build/cryptokit.1.9/cryptokit-9111-ffb3fd.out
# stderr-file /home/alpha/.opam/system/build/cryptokit.1.9/cryptokit-9111-ffb3fd.err
### stdout ###
# ...[truncated]
# mv stubs-md5.o src/stubs-md5.o
# ocamlfind ocamlc -ccopt -O -ccopt -DHAVE_ZLIB -c src/stubs-misc.c
# mv stubs-misc.o src/stubs-misc.o
# ocamlfind ocamlc -ccopt -O -ccopt …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 OCaml 的 Url 和 Cohttp 模块来访问 API 并检索 JSON 数据。我不想以异步方式执行此操作。我没有网络/网络编程经验,所有模块文档都只是提供类型和方法的签名(对我没有太大帮助,因为我不知道它们是做什么的)。我正在尝试访问 bitstamp API 并检索比特币的出价。到目前为止我只知道如何声明一个URI
let bitstamp_uri = Uri.of_string "http://www.bitstamp.net/api/ticker/";;
Run Code Online (Sandbox Code Playgroud)
但我现在知道如何调用 uri 来检索 json 数据。我如何使用现有的库来实现这一目标?我已经知道如何将 json 数据解析为我需要的类型。
我已经下载了多个OCaml IDE /插件,其中没有一个可以工作.如果我有目录问题或者其他问题出错,我不知道.我可以通过cygwin访问OCaml控制台,但它对于处理较大的文件并不是很有用.我是一个完整的OCaml菜鸟,不知道如何解决我的问题.我一直在阅读OCaml上的每一篇文章,没有任何帮助.我希望有人可以帮助我,因为这非常令人沮丧!感谢所有回复的人.
可以使用Lwt.return作为递归函数的最终调用吗?
我有一个编译正常但功能不正常的函数,它看起来像f下面的函数.请假设g在此示例中提供的任何功能都没有问题,我基本上只是试图找出是否可以使用以下形式的函数,或者是否有更好/更简单(和Lwt兼容)的方式做以下事情:
let rec f (x : string list) (g : string -> unit Lwt.t) =
match List.length x with
| 0 -> Lwt.return ()
| _ -> g (List.hd x) >>= fun () -> f (List.tl x) g
;;
val f : string list -> (string -> unit Lwt.t) -> unit Lwt.t = <fun>
Run Code Online (Sandbox Code Playgroud)
我很确定我做错了.但是我使用的实际功能比这个例子复杂得多,所以我很难调试它.