所以我在列表中有一些类型变体:
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
但是我读到由于类型擦除,在编译类型之后检查类型是不可能的。我怎样才能定义isBooleanVariable
和isContinuousVariable
?
BooleanVariable
,ContinuousVariable
等是自定义类型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