为列表中的类型变体创建条件

Create condition on type variants in a list

所以我在列表中有一些类型变体:

type VariableType
    = BooleanVariable
    | ContinuousVariable
    | CategoricalVariable
    | Incorrect

mylistone = [ContinuousVariable, ContinuousVariable, ContinuousVariable]
mylisttwo = [ContinuousVariable, ContinuousVariable, CategoricalVariable]

我需要定义一个函数:

listtype : List VariableType -> VariableType
listtype list =
    -- if (List.all isBooleanVariable list) then 
        BooleanVariable
    -- else if (List.all isContinuousVariable list) then 
        ContinuousVariable
    -- else
        CategoricalVariable

所以上面定义的这两个列表的输出应该是:

listtype mylistone -- ContinuousVariable
listtype mylisttwo -- CategoricalVariable

但我读到编译类型后无法检查类型,因为类型擦除。如何定义 isBooleanVariableisContinuousVariable

BooleanVariableContinuousVariable 等都是自定义类型 VariableType 的变体,产生或表示值。所以你实际上并没有试图检查它们的类型,它们都具有 VariableType 类型,只是它们的值。这可以用相等运算符来完成,就像任何其他可比较的值一样:

listtype : List VariableType -> VariableType
listtype list =
    if (List.all (\v -> v == BooleanVariable) list) then 
        BooleanVariable
    else if (List.all ((==) ContinuousVariable) list) then 
        ContinuousVariable
    else
        CategoricalVariable