2014-07-01 3 views
0

Почему я получаю эту ошибку в моем коде: код:Почему я получаю эту ошибку в моем Haskell кода

module Task5 where 

import Prelude 

data Stream a = a :& Stream a 

infixl 4 :& 

add :: Num a => a -> a -> a 
add a b = a + b 

instance Num (Stream a) where 
    (+) (ia:&a) (ib :& b) = (ia + ib) :& ((+) a b) 

ошибка:

Task5.hs:14:33: 
    No instance for (Num a) arising from a use of `+' 
    Possible fix: 
     add (Num a) to the context of the instance declaration 
    In the first argument of `(:&)', namely `(ia + ib)' 
    In the expression: (ia + ib) :& ((+) a b) 
    In an equation for `+': 
     + (ia :& a) (ib :& b) = (ia + ib) :& ((+) a b) 

Я не понимаю, как это исправить, Я пробовал его всю неделю, но не нашел никакого решения. Итак, можете ли вы сказать мне, что я должен исправить?

ответ

4

Как следует ошибка, вам нужно добавить Num a в «контекст» ваш экземпляр декларации:

instance Num a => Num (Stream a) where 

ia + ib В противном случае операция не имеет никаких (+) операций доступны, как действует на отдельных участников потока.

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