xs
также соответствует пустому списку, поэтому safetailpatter []
никогда не будет вызываться, если вы поставите safetailpatter xs
первым.
Я довольно новичок в Haskell, но я думаю, что это то, что происходит.
Итак, когда вы сначала помещаете safetailpatter xs
, а затем вызываете его с пустым списком, вы пытаетесь вызвать tail
в пустом списке, и вы получаете исключение.
Что касается
Pattern match is redundant
In an equation for ‘safetailpatter’: safetailpatter [] = ...
Я думаю, что это в основном означает то, что я описал выше, жалуется, что объявление является избыточным, потому что safetailpatter []
уже покрыто safetailpatter xs
, когда вы ставите последнее первым.
По этой причине вы всегда должны ставить _
в конце определений соответствия шаблону, иначе вам не будут вызываться остальные шаблоны:
myF (x:xs) = -- ....
myF _ = -- ... -> Right
myF _ = -- ... -> Wrong, now no the bellow definition will never get called
myF (x:xs) = -- ....