Haskell "No instance for" error
Haskell Error: "No instance for (Enum [Int])
Function definition problems (No instance for … arising from)
No instance for Num String arising from the literal `1'
我是Haskell的新手,以及一般的函数式编程。另外,我知道上面的问题非常相似,但我无法在任何地方找到解决问题的方法。以下代码用于查找数字输入的因子:
fc4 :: Double -> IO ()
check :: Double -> Double -> IO ()
fc4 a = check a (sqrt a)
check a b = if rem a b == 0 then print (b, div a b) else print () >> if b > 1 then check a (b-1) else putStrLn ("Done.")
我尝试从Double
切换到Integer
并返回每个可能的组合,但每个都失败并出现同样的错误:
No instance for (Integral Double) arising from a use of 'rem'
我还尝试在fromIntegral
的参数上明确使用toInteger
和rem
,但我尝试过的任何组合都没有避免此问题。我还在文档中看到rem
的类型为Integral a => a -> a -> a
,因此似乎使用a
和b
的相同类型始终有效,无论是Double
或Integer
。
我能做点什么吗?我犯了一些可怕的菜鸟错误吗?作为参考,here是我希望实现的C ++版本。提前谢谢!
答案 0 :(得分:6)
您只需在类型签名中将Double
替换为Integer
,因为您需要使用其类型为Integral
类型类的实例的值,该类定义{{1} }和div
。但是,rem
仅返回作为sqrt
类型类实例的值,并且不存在任何类型的实例。
简单的解决方案是使用Floating
获取略大于ceiling
的整数值,这不会影响算法的正确性。
sqrt n