【问题标题】:Haskell - No instance for (Eq (Int -> Int)) arising from a use of ‘==’Haskell - 没有因使用“==”而产生 (Eq (Int -> Int)) 的实例
【发布时间】:2018-04-08 19:39:38
【问题描述】:

我目前正在研究 Haskell。我知道我必须使数据类型成为 Eq 的实例才能比较它们。 但是 Int 应该已经可以比较了吧?所以我不知道如何处理以下错误:

• 没有因使用“==”而导致 (Eq (Int -> Int)) 的实例 (也许您没有将函数应用于足够多的参数?)

我的代码如下:

myRandomList = [1,2,3,4,5,6,7,8,9,10]


myFilterList :: [Int] -> [Int]
myFilterList [] = []
myFilterList (x:xs)
        | mod x == 0 = x : myFilterList xs
        | otherwise = myFilterList xs


myDotFunc = map (+ 1) . myFilterList . myRandomList  

Ps:我什至不确定,如果我的代码可以在没有这个错误的情况下运行,请记住我刚刚开始使用 haskell :)

【问题讨论】:

  • 好吧mod x 不是数字,你需要提供一个额外的参数。
  • 不是说位置更多吗?
  • 而且myRandomList不是函数,myDotFunc应该是myDotFunc = map (+1) . myFilterList
  • 为什么这被否决了?这不是一个坏问题。

标签: haskell instance equals comparable


【解决方案1】:

你只给了mod 一个参数,在这一行:

        | mod x == 0 = x : myFilterList xs
--        ^^^^^ HERE

所以看起来您正在尝试比较函数。您可能会注意到 GHC 在错误中告诉您这一点:

没有因使用“==”而产生 (Eq (Int -> Int)) 的实例(也许您没有将函数应用于足够的参数?)

我应该是mod x y,其中y 是模数(“除法器”)。不过,我不知道你想要 y 是什么,所以我无法更正你的代码。

【讨论】:

  • 哦该死的:(你是对的!我也是stackoverflow的新手,我应该删除我的问题吗?非常感谢!
  • @NikBerlin 不,不要在回答后删除它。这将阻止回答者获得任何声誉。事实上,我相信,当有一个赞成的答案时,SO 甚至不允许你删除它。 (当没有发布答案时,如果您意识到该问题对您和/或其他人没有价值,则可以删除。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-29
  • 1970-01-01
相关资源
最近更新 更多