Haskell 没有因使用“print';

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 = "

我试图实现一个基本的lambda函数,但遇到了一些错误,在这里的问题之间搜索后,我无法找到解决方案。我的代码是:

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]
提前谢谢大家,,
Tamas

addSomethingTwo作为结果有一个函数(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
放在列表中

默认情况下无法打印函数,因为错误消息报告:“no
Show
instance for
Int->Int
。您注释的
Show
实例允许将函数打印为“
function


我不知道您实际想要实现什么。

myMap addSomethingTwo listTwo
生成一个函数列表。它的类型为
[Int->Int]
,因为
addSomethingTwo
是一个二进制函数
a->(a->a)
(提供
Num a
),这意味着它接受一个类型为
a
的数字,并返回一个数值函数
a->a
,这要归功于currying。这些函数
a->a
通过
map
放在列表中

默认情况下无法打印函数,因为错误消息报告:“no
Show
实例for
Int->Int
。您注释的
Show
实例允许将函数打印为“
function

我不知道你到底想达到什么目的