所以我在列表中有一些类型变量:
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
?
答案 0 :(得分:6)
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