Generics 如何在F#中构建几个通用构造函数的树(AST)?

Generics 如何在F#中构建几个通用构造函数的树(AST)?,generics,f#,interpreter,algebraic-data-types,Generics,F#,Interpreter,Algebraic Data Types,我正在构建一个小数组语言,并努力了解如何使用泛型对数组进行编码: type Shape<'T> = | Col of array<'T> | Rel of array<Shape<'T>> let makeArray (value:array<'T>) = Col value type ExprC = | BoolC of bool array | StrC of string array

我正在构建一个小数组语言,并努力了解如何使用泛型对数组进行编码:

type Shape<'T> =
    | Col of array<'T>
    | Rel of array<Shape<'T>>

let makeArray (value:array<'T>) =  Col value

type ExprC = 
    | BoolC of bool array
    | StrC of string array
    | IntC of int array

# Here is ExprC -> Shape<bool>
let eval (ast : ExprC) = 
    match ast with
    | BoolC(v) -> makeArray v
    | StrC(v) -> makeArray v
    | IntC(v) -> makeArray v
类型形状
|数组的Rel)=列值
类型ExprC=
|bool阵列的BoolC
|字符串数组的StrC
|int数组的IntC
#这里是ExprC->Shape
let eval(ast:ExprC)=
匹配
|BoolC(v)->makeArray v
|StrC(v)->makeArray v
|IntC(v)->makeArray v

我想找到一种方法,将任何.NET对象编码为数组,但又能用lang解释它。

我想你有点被困在这里,你需要一种类型更高的语言。

我想你有点被困在这里,你需要一种类型更高的语言。

我不太清楚这个问题。你能提供更多的信息,或者是一个你打算如何使用这段代码的示例吗。我想避免对所有值进行装箱/取消装箱,因此,我想知道是否存在一种使
eval
变成
ExprC->Shape的方法。我对这个问题不太清楚。你能提供更多的信息,或者举个例子说明你打算如何使用这个代码。我想避免将所有的值装箱/取消装箱,所以我想知道是否存在一种使
eval
变成
ExprC->Shape的方法