如何在我的haskell代码中更正此错误:
我有一个密码:如何在我的haskell代码中更正此错误:,haskell,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) :& ((+
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的
类型是
Num a => Integer -> a
因此,它用于将整数
转换为Num
类型。因此,fromInteger
的第一个参数应该是整数,但是在您的实现中:
fromInteger (i1 :& a) = fromInteger i1 :& fromInteger a
它是一个流
一个可能的实现是创建一个无限的转换整数值流,例如
fromInteger i = (fromInteger i) :& (fromInteger i)
fromInteger的类型为
Num a => Integer -> a
因此,它用于将整数
转换为Num
类型。因此,fromInteger
的第一个参数应该是整数,但是在您的实现中:
fromInteger (i1 :& a) = fromInteger i1 :& fromInteger a
它是一个流
一个可能的实现是创建一个无限的转换整数值流,例如
fromInteger i = (fromInteger i) :& (fromInteger i)
fromInteger的类型为
Num a => Integer -> a
因此,它用于将整数
转换为Num
类型。因此,fromInteger
的第一个参数应该是整数,但是在您的实现中:
fromInteger (i1 :& a) = fromInteger i1 :& fromInteger a
它是一个流
一个可能的实现是创建一个无限的转换整数值流,例如
fromInteger i = (fromInteger i) :& (fromInteger i)
fromInteger的类型为
Num a => Integer -> a
因此,它用于将整数
转换为Num
类型。因此,fromInteger
的第一个参数应该是整数,但是在您的实现中:
fromInteger (i1 :& a) = fromInteger i1 :& fromInteger a
它是一个流
一个可能的实现是创建一个无限的转换整数值流,例如
fromInteger i = (fromInteger i) :& (fromInteger i)
fromInteger的类型为Integer->a,因此它的参数应该是整数,而不是流。它用于将整数转换为num实例。“那么您可以建议我读些什么来学习haskell?”,最重要的是:在遇到错误时读取您正在使用的函数的签名。fromInteger的类型为integer->a,因此它的参数应该是整数,而不是流。它用于将整数转换为num实例。“那么您可以建议我读些什么来学习haskell?”,最重要的是:在遇到错误时读取您正在使用的函数的签名。fromInteger的类型为integer->a,因此它的参数应该是整数,而不是流。它用于将整数转换为num实例。“那么您可以建议我读些什么来学习haskell?”,最重要的是:在遇到错误时读取您正在使用的函数的签名。fromInteger的类型为integer->a,因此它的参数应该是整数,而不是流。它用于将整数转换为num实例。“您能建议我读些什么来学习haskell?”,最重要的,但最重要的是:当您遇到错误时,请阅读您正在使用的函数的签名。@gyok您希望您的fromInteger
方法做什么?您似乎希望它获取一个流,并对其每个元素执行底层num类型的fromInteger
操作。正如Lee所说,您不能这样做,因为fromInteger
接受一个整数。所以你可以通过让fromInteger
做一些其他的事情来“修复”它,这些事情实际上是对一个整数进行操作的。是的,anderstand,但我想知道流是否有整数元素,比如(5&:6&:7…)fromInteger可以处理it@gyok问题是:当用户编写类似于42::Stream Int
的内容时,您希望发生什么?此时将调用fromInteger
(Integer42
作为参数)。类似于fromInteger(5&:6&:7…)
将不合法,因为fromInteger
的参数始终是一个整数。@gyok-我添加了一个可能的实现。我可以建议用fromInteger I=keepGoing手动打结,其中singleValue=fromInteger I
keepGoing=singleValue:&keepGoing
,避免重新评估(来自整数i)
。(最后一行中不需要括号。)@gyok您想让fromInteger
方法做什么?您似乎希望它获取一个流,并对其每个元素执行底层num类型的fromInteger
操作。正如Lee所说,您不能这样做,因为fromInteger
接受一个整数。所以你可以通过让fromInteger
做一些其他的事情来“修复”它,这些事情实际上是对一个整数进行操作的。是的,anderstand,但我想知道流是否有整数元素,比如(5&:6&:7…)fromInteger可以处理it@gyok问题是:当用户编写类似于42::Stream Int
的内容时,您希望发生什么?此时将调用fromInteger
(Integer42
作为参数)。类似于fromInteger(5&:6&:7…)
将不合法,因为fromInteger
的参数始终是一个整数。@gyok-我添加了一个可能的实现。我可以建议用fromInteger I=keepGoing手动打结,其中singleValue=fromInteger I
keepGoing=singleValue:&keepGoing
,避免重新评估(来自整数i)
。(最后一行中不需要括号。)@gyok您想让fromInteger
方法做什么?您似乎希望它获取一个流,并对其每个元素执行底层num类型的fromInteger
操作。正如Lee所说,您不能这样做,因为fromInteger
接受一个整数。所以你们可以通过让fromInteger
做一些其他的事情来“修复”它,这些事情实际上是对一个整数进行操作的