Если отбросить чисто синтаксическую ошибку - в последней строке лишний пробел в начале - у вас в программе бесконечный цикл, так как условия остановки функции helper не определены.
Правильный код:
seqA :: Integer -> Integer
seqA n
| n == 0 = 1
| n == 1 = 2
| n == 2 = 3
| otherwise = seqA(n-1) + seqA(n-2) - 2*seqA(n-3)
Однако он страшно неэффективен, я даже не рискну предположить его вычислительную сложность, но вычисление 30-го члена последовательности уже занимает несколько секунд. Вычисления 50-го и тем более 100-го я не дождался.
Для более эффективного вычисления, вы можете попробовать вот такой код:
seqA :: Num a => [a]
seqA = 1:2:3:(f 1 2 3) where f x y z = let n=z+y-2*x in n:(f y z n)
Тогда
take 100 seqA
выведет Вам первые 100 членов последовательности, а seqA !! n - любой n-ый элемент последовательности.
Failed test #1. Run time error: main: <>
– anon Oct 01 '15 at 14:00