【发布时间】:2015-04-01 15:09:06
【问题描述】:
我一直在努力尝试理解这一点,并且更努力地努力会损害我与 OCaml 的关系,所以我想我会寻求帮助。
我有一个来自this site的简单函数
let line_stream_of_channel channel =
Stream.from
(fun _ ->
try Some (input_line channel) with End_of_file -> None);;
好吧,很酷,从它下面的签名可以清楚地看出:
val line_stream_of_channel : in_channel -> string Stream.t = <fun>
in_channel 是参数,Stream.t 是返回值。
现在为什么在 OCaml 中我不能这样做:
Stream string
而我必须这样做
string Stream.t
看着the type signature of Stream 也没有真正让我有所收获。我注意到与列表之类的东西相同的语法怪异,你必须做不自然的事情
string list
而不是自然
list string
但特别奇怪的是上面 Stream 类型的“.t”部分。
谁能解释一下这里发生了什么以及为什么会这样?我在 OCaml 中搜索了关于显式类型签名、类型等的教程,一般来说,它们会回到这里提出对我没有真正帮助的非常具体的问题。
谢谢!
【问题讨论】: