У меня есть код:Как исправить эту ошибку в моем 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 a => Num (Stream a) where
(+) (ia:&a) (ib :& b) = (ia + ib) :& ((+) a b)
(-) (ia :& a) (ib :& b) = ((-) ia ib) :& (-) a b
(*) (ia :& a) (ib :& b) = ((*) ia ib) :& (*) a b
negate (i1 :& a) = negate i1 :& negate a
abs (i1 :& a) = abs i1 :& abs a
signum (i1 :& a) = signum i1 :& signum a
fromInteger (i1 :& a) = fromInteger i1 :& fromInteger a
и есть 2 ошибки:
Task5.hs:20:18:
Couldn't match expected type `Integer'
with actual type `Stream Integer'
In the pattern: i1 :& a
In an equation for `fromInteger':
fromInteger (i1 :& a) = fromInteger i1 :& fromInteger a
In the instance declaration for `Num (Stream a)'
Task5.hs:20:59:
Couldn't match expected type `Integer'
with actual type `Stream Integer'
In the first argument of `fromInteger', namely `a'
In the second argument of `(:&)', namely `fromInteger a'
In the expression: fromInteger i1 :& fromInteger a
Failed, modules loaded: none.
Я не понимаю, как исправить эту проблему, так как правильно эта проблема?)) А что вы можете посоветовать мне прочитать для изучения haskell?
fromInteger имеет тип Integer -> a, поэтому аргумент к нему должен быть целым числом, а не потоком. Он предназначен для преобразования целого числа в ваш экземпляр num. –
* «И что вы можете посоветовать мне прочитать для изучения haskell?» * [RWH] (http://book.realworldhaskell.org/read/), [LYAH] (http://learnyouahaskell.com/chapters), [wikibook] (https://en.wikibooks.org/wiki/Haskell), но самое главное: __проводить подписи функций, которые вы используете, когда вы сталкиваетесь с ошибками. – Zeta