【发布时间】:2021-08-17 22:00:44
【问题描述】:
学习 OCaml,并想知道为什么编译器认为我向单参数类型构造函数提供零参数。
这个 OCaml:
open Core
module Json = Yojson.Safe.Util
type ticker = Ticker of string
let ticker_of_yojson s =
s |> Json.to_string |> Ticker |> Result.Ok
产生这个错误:
The constructor Ticker expects 1 argument(s)
but is applied here to 0 argument(s).
如果我把它改成这个,将构造函数调用包装在 lambdas 中,
let ticker_of_yojson s =
s |> Json.to_string |> (fun x -> Ticker x) |> (fun x -> Result.Ok x)
它编译。如果我只将 Ticker 构造函数调用包装在 lambda 中,我会得到与 Result.Ok 相同的零参数错误。
用 lambda 代替的编译器在这里缺少什么来解决?还有什么我可以添加的东西,以便没有 lambda 的原始版本可以工作吗?
我看到了另一个类似问题的 SO 帖子,但我无法将这两种情况联系起来:ocaml type constructor arguments
感谢您的宝贵时间 - 感谢您的帮助。
【问题讨论】:
标签: ocaml