Вот некоторые определения типов в моей программе FYI:
type BitString -> String
type Plateau -> [BitString]
У меня есть функция с именем:
--Extract will take a list of lists, and return the inner list of the most items. Empty list should return ["00000"]
extract::[Plateau]->Plateau
extract _ = ["00000"]
extract (x:xs)
|x==maximumBy(compare `on` length)xs=x --thanks SOF
|otherwise = extract (xs)
Проблема в том, что независимо от того, что я делаю, извлечение возвращает ["00000"]
Вот некоторые выходы из GHCI, которые работают:
>plateau graycodes
[["01000"],["01010","11010","10010"],["00101"],["01101","01001"]]
это ожидается и имеет форму [Plateau]
, так как это список списков строк.
>maximumBy(compare `on` length)(plateau graycodes)
["01010","11010","10010"]
>extract (plateau graycodes)
["00000"]
в этом случае я точно знаю, что extract будет вызываться с непустым [Plateau]
. Но часть функции _
возвращается.
Я пробовал также:
extract (x:xs)
|x==[]=["00000"]
|x==[""]=["00000"]
|x==maximumBy(compare `on` length)xs=x --thanks SOF
|otherwise = extract (xs)
error: List.maximumBy: Empty list