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

问题描述 投票:3回答:1

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

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

elm
1个回答
6
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.