为列表中的类型变体创建条件
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
但我读到编译类型后无法检查类型,因为类型擦除。如何定义 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
所以我在列表中有一些类型变体:
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