Haskell 没有因使用“print';
我试图实现一个基本的lambda函数,但遇到了一些错误,在这里的问题之间搜索后,我无法找到解决方案。我的代码是:Haskell 没有因使用“print';,haskell,lambda,Haskell,Lambda,我试图实现一个基本的lambda函数,但遇到了一些错误,在这里的问题之间搜索后,我无法找到解决方案。我的代码是: myMap :: (a -> b) -> [a] -> [b] myMap addSomething [] = [] myMap addSomething (x:xs) = addSomething x : myMap addSomething xs -- instance Show (a -> b) where -- show a = "
myMap :: (a -> b) -> [a] -> [b]
myMap addSomething [] = []
myMap addSomething (x:xs) = addSomething x : myMap addSomething xs
-- instance Show (a -> b) where
-- show a = "funcion"
list = [0..4]
listTwo = [(5 :: Int)..9]
addSomething :: Int -> Int
addSomething x = x + 1
addSomethingTwo :: Num a => a -> a-> a
addSomethingTwo x = (\x->x+1)
main = do
print $ myMap addSomething list
print $ myMap addSomethingTwo listTwo
这是我收到的错误信息
No instance for (Show (Int -> Int)) arising from a use of `print'
Possible fix: add an instance declaration for (Show (Int -> Int))
In the expression: print
In a stmt of a 'do' block: print $ myMap addSomethingTwo listTwo
In the expression:
do { print $ myMap addSomething list;
print $ myMap addSomethingTwo listTwo }
如果我取消这些行的注释
instance Show (a -> b) where
show a = "function"
我得到了这个奇怪的结果
[1,2,3,4,5]
[function,function,function,function,function]
[Finished in 0.4s]
提前谢谢大家,,
TamasaddSomethingTwo作为结果有一个函数(Int->Int),而不是Int 您需要函数定义为
addSomethingTwo x = (\x->x+1) x
或者,要清除lambda中的x和函数参数中的x是不同的变量(它们在不同的范围内):
addSomethingTwo的结果是有一个函数(Int->Int),而不是Int 您需要函数定义为
addSomethingTwo x = (\x->x+1) x
或者,要清除lambda中的x和函数参数中的x是不同的变量(它们在不同的范围内):
myMap addSomethingTwo listTwo
生成函数列表。它有类型[Int->Int]
,因为addSomethingTwo
是一个二进制函数a->(a->a)
(提供了Num a
),这意味着它需要一个类型a
的数字,并返回一个数值函数a->a
,这要归功于currying。那些函数a->a
通过map
放在列表中
默认情况下无法打印函数,因为错误消息报告:“noShow
instance forInt->Int
。您注释的Show
实例允许将函数打印为“function
”
我不知道您实际想要实现什么。
myMap addSomethingTwo listTwo
生成一个函数列表。它的类型为[Int->Int]
,因为addSomethingTwo
是一个二进制函数a->(a->a)
(提供Num a
),这意味着它接受一个类型为a
的数字,并返回一个数值函数a->a
,这要归功于currying。这些函数a->a
通过map
放在列表中
默认情况下无法打印函数,因为错误消息报告:“noShow
实例forInt->Int
。您注释的Show
实例允许将函数打印为“function
”
我不知道你到底想达到什么目的