Создать условие для вариантов типа в списке - PullRequest
3 голосов
/ 13 апреля 2019

Итак, у меня есть несколько вариантов типов в списке:

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?

1 Ответ

6 голосов
/ 13 апреля 2019

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
...