2016-07-18 4 views
1

Я пытаюсь взять полиномиальное представление в виде списка (например, [3, 2, 1] - 3x^2 + 2x + 1) и оценить его, выполнив применить к полиному и число для x. Полином оценивается для x.Ожидаемый тип, но «Num a» имеет вид «GHC.Prim.Constraint»

Это мой код:

newtype Poly a = P [a] 

apply :: Num a => Poly a -> Num a -> Num a 
apply (P p) x = if (i > 0) then (x * ((head p)^i)) + (apply (P (tail p)) x) else p 
    where i = length p 

Проблема, когда я пытаюсь скомпилировать этот код, я получаю сообщение об ошибке, что я не понимаю:

Ожидаемый тип, но ' Num а»имеет вид 'GHC.Prim.Constraint'
В сигнатуре типа для 'применить':
применяются :: Num а => Poly а -> Num А -> Num

ответ

7

Когда вы пишете

apply :: Num a => Poly a -> Num a -> Num a 

первый экземпляр Num a является ограничение, которое означает, что тип a должен соответствовать Num класса типов. Однако, как только вы указали это ограничение, вам больше не нужно делать это. Проблема, с которой вы сталкиваетесь, заключается в том, что вы используете ограничение Num a еще пару раз на этой строке, когда вы должны просто использовать типa. Измените тип apply на следующее:

apply :: Num a => Poly a -> a -> a 
+0

Спасибо, это было !, плохо согласен, когда это позволяет мне –

 Смежные вопросы

  • Нет связанных вопросов^_^