Неисчерпывающий паттерн в функции в Haskell

У меня есть класс Evol и я хочу, чтобы экземпляр distanceMatrix был применен к списку моего типа MolSeq. Функция molseqDistMat работает как нужно, но я не могу понять ошибку, которую я получаю при попытке запустить distanceMatrix [Molseq]. Я понимаю, что говорит ошибка, но не могу найти исключение. Это ошибка.

*F2> distanceMatrix l
*** Exception: lab2.hs:79:3-43: Non-exhaustive patterns in function 
distanceMatrix

Это код.

class Evol a where
  distanceMatrix :: [a] -> [(String, String, Double)]

instance Evol MolSeq where
  distanceMatrix [a] = molseqDistMat [a] [] -- <- Line 79

molseqDistMat :: [MolSeq] -> [(String, String, Double)] -> [(String, 
String, Double)]
molseqDistMat todo res
  | null (tail todo) = res
  | otherwise = molseqDistMat (tail todo) (res++(doRow (head todo) (tail 
todo) []))

doRow :: MolSeq -> [MolSeq] -> [(String, String, Double)] -> [(String, 
String, Double)]
doRow mol rest result
  | null rest = reverse result
  | otherwise = doRow mol (tail rest) ((name mol, name (head rest), 
distance mol (head rest)):result)

1 ответ

Решение

Вы, вероятно, хотите:

distanceMatrix xs = molseqDistMat xs [] -- <- Line 79

[a] это шаблон, который соответствует списку ровно одного элемента.

Другие вопросы по тегам