Types 不理解Ocaml类型签名
我一直在努力理解这一点,在这方面再努力就会损害我与OCaml的关系,所以我想我会寻求帮助 我有一个简单的函数 好的,很酷,从下面的签名可以明显看出:Types 不理解Ocaml类型签名,types,ocaml,signature,Types,Ocaml,Signature,我一直在努力理解这一点,在这方面再努力就会损害我与OCaml的关系,所以我想我会寻求帮助 我有一个简单的函数 好的,很酷,从下面的签名可以明显看出: val line_stream_of_channel : in_channel -> string Stream.t = <fun> 相反,我必须这样做 string Stream.t 看着你也没能让我有什么收获。我已经注意到了类似列表这样的东西的语法奇怪,你必须做一些不自然的事情 string list 而不是自然的 li
val line_stream_of_channel : in_channel -> string Stream.t = <fun>
相反,我必须这样做
string Stream.t
看着你也没能让我有什么收获。我已经注意到了类似列表这样的东西的语法奇怪,你必须做一些不自然的事情
string list
而不是自然的
list string
但特别奇怪的是上面流类型的“.t”部分
有人能解释一下这里发生了什么,为什么事情是这样做的吗?我在谷歌上搜索了OCaml中关于显式类型签名、类型等的教程,一般来说,这些教程会引出一些对我没有帮助的非常具体的问题
谢谢大家! 在OCaml的参数化类型中,类型构造函数名称位于参数名称之后。这就是它的工作方式。有些语言(如Haskell)使用其他顺序 我喜欢OCaml订单,我没有问题。我对其他订单也没有问题 名称
t
在流
模块中定义为参数化类型。没有什么比这更棘手的了
但是,请注意,通道的line\u stream\u的返回类型是string stream.t
,而不仅仅是stream.t
Stream.t本身不是一种类型。(它是类型级别的函数或类型构造函数。)
类型在OCaml中可以是参数化的。例如,int list
是一个用类型int
参数化的列表,基本上对应于一些其他语言中的list
。奇怪吗?这取决于你的背景。我个人认为字符串列表
更自然,然后列表字符串
参数化类型的语法为
。所以这两个组件都应该是类型<代码>流
不是类型,而是模块名称。符号代码>允许您处理在模块中定义的定义。例如,可以定义类型别名:
type 'a stream = 'a Stream.t
然后使用它
type string_stream = string stream
注意,stream\u string
听起来很奇怪,不是吗
$ ocaml
OCaml version 4.01.0
# Some 3;;
- : int option = Some 3
# ^D
$ ghci
GHCi, version 7.4.2: http://www.haskell.org/ghc/ :? for help
Prelude> :t Just (3 :: Integer)
Just (3 :: Integer) :: Maybe Integer
type 'a stream = 'a Stream.t
type string_stream = string stream