f# - 我可以在它自己的类型定义中使用一个类型吗?

标签 f# ocaml

我正在尝试定义以下类型:

type lToken =
  LInt of int 
| LString of string 
| LList of lToken list
| LFunction of string * LList

但我收到错误“LList”未定义。

有没有办法做我想做的事情 - 即使用我在他们自己的类型定义中定义的类型?

谢谢

最佳答案

正如其他人指出的那样,LList不是类型的名称,而只是可区分联合的构造函数的名称。在 F# 中,区分联合的情况恰好被编译为 .NET 类型,但这只是一个实现细节,您不能引用生成的类型。

如果要申报LFunction作为由 string 组成的类型转换和一个 LList然后你可以扩展定义(如 Brian 和 Marcelo 所建议的)或声明一个新类型(使用 type .. and 来声明递归类型):

type List = Token list 
and Token = 
  | LInt of int  
  | LString of string  
  | LList of List
  | LFunction of string * List 

PS:如果您正在编写 F#,那么我建议您遵循标准命名指南并使用 PascalCase为类型名称提供更具描述性的名称。 “我”代表什么?你能扩展它吗(由于类型推断,你不需要写类型名称)。

关于f# - 我可以在它自己的类型定义中使用一个类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4303130/

相关文章:

f# - 有人拥有或知道 F# 中可用的持久前缀特里树吗?

Ocaml中可变变量的哈希表

c++ - 我的编译器在 C/C++、OCaml 和 F# 之间犹豫不决

f# - 这个 F# 运算符 <*> 的典型定义/含义是什么

java - "Error during linking"表示用 Ocaml 编写的 Java 编译器

java - 用于 Ocaml 应用程序的 Java GUI

mysql - OCaml - ocaml-mysql 的时间戳字段异常

ocaml - 如何在 ppx_deriving 中使用 jbuild 和 ppx_driver

f# - websharper F# endpoints - 捕获所有页面处理程序和页面重定向

linq-to-sql - F# 中的 FirstOrDefault