generics - 如何在类型参数中使用可区分联合分支?

标签 generics f# discriminated-union

假设我在 F# 中有一个这样的类型:

type public Expression =
    | Identifier of string
    | BooleanConstant of bool
    | StringConstant of string
    | IntegerConstant of int
    | Vector of Expression list
    // etc...

现在我想使用这种类型来构建 map :
definitions : Map<Identifier, Expression>

但是,这给出了错误:

The type 'identifier' is not defined



如何使用我的类型大小写作为类型参数?

最佳答案

Identifier是一个 case 构造函数,而不是一个类型。它实际上是一个类型为 string -> Expression 的函数.案例类型为string ,因此您可以定义 definitions作为

type definitions : Map<string, Expression>

关于generics - 如何在类型参数中使用可区分联合分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40502674/

相关文章:

java - 有什么方法可以指定扩展多个类中任意一个的 java 泛型类型变量吗?

java - 如何使用寺庙方法或泛型方法或其他方法优化我的代码?现在我必须编写类似的代码三遍

C#,访问类中不同列表的通用方法

f# - f# 中的神秘类型检查错误(当出现 ?12345 :> ISomething) 时丢失

haskell - 受歧视类型工会

Java:具有泛型类的方法类型参数的工厂

f# - 避免通用使用返回两个函数的函数的值限制错误

f# - 用于类型提供程序开发的 FSharp.TypeProviders.Templates nuget

带有默认值和类型推断的 TypeScript 判别联合类型

reflection - F# 类型提供程序引用自定义类型