gpt4 book ai didi

haskell - 没有因使用 `print' 而产生的 (Show (Int -> Int)) 实例

转载 作者:行者123 更新时间:2023-12-05 09:19:05 24 4
gpt4 key购买 nike

我尝试实现一个基本的 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]

提前谢谢你,塔玛斯

最佳答案

addSomethingTwo 结果是一个函数 (Int -> Int),而不是 Int

你需要函数定义为

addSomethingTwo x = (\x->x+1) x

或者,清除 lambda 中的 x 和函数参数中的 x 是不同的变量(它们在不同的范围内):

addSomethingTwo y = (\x->x+1) y

关于haskell - 没有因使用 `print' 而产生的 (Show (Int -> Int)) 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42457783/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com