作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下函数来返回给定数字的因子对
factorPairs:: (RealFrac a, Floating a, Integral a) => a -> [(a, a)]
factorPairs n = map(\x -> (x, div n x)) [y | y <- [1..(ceiling $ sqrt n)], n `rem` y == 0]
factorPairs 18
中调用函数时我收到一个运行时错误
* Ambiguous type variable `a0' arising from a use of `it'
prevents the constraint `(Floating a0)' from being solved.
Probable fix: use a type annotation to specify what `a0' should be.
These potential instances exist:
instance Floating Double -- Defined in `GHC.Float'
instance Floating Float -- Defined in `GHC.Float'
* In the first argument of `print', namely `it'
In a stmt of an interactive GHCi command: print it
map(\x -> (x, div 18 x)) [y | y <- [1..(ceiling $ sqrt 18)], 18 `rem` y == 0]
并且没有任何问题,但我似乎无法弄清楚为什么我的功能失败了。我相信 ghci 试图告诉我它无法确定调用什么类型
print
但我正在努力寻找解决方案。
最佳答案
这与 Haskell 中数字文字重载的事实有关。当您键入 map(\x -> (x, div 18 x)) [y | y <- [1..(ceiling $ sqrt 18)], 18 `rem` y == 0]
进入 ghci
, 18
这是 sqrt
的参数默认为 Double
和其他人到Integer
s。
然而,当你写
factorPairs:: (RealFrac a, Floating a, Integral a) => a -> [(a, a)]
factorPairs n = map(\x -> (x, div n x)) [y | y <- [1..(ceiling $ sqrt n)], n `rem` y == 0]
n
的所有实例只有一种类型。然后,问题就变成了根本没有满足所有这些约束的默认数字类型(实际上我认为通常是数字类型),因此 GHC 会告诉您它尝试的“可能实例”。解决方法是添加
fromIntegral
并放松约束:
factorPairs:: Integral a => a -> [(a, a)]
factorPairs n = map(\x -> (x, div n x)) [y | y <- [1..(ceiling $ sqrt $ fromIntegral n)], n `rem` y == 0]
关于haskell - 使用 `a0' 引起的模糊类型变量 `it',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38531803/
我是一名优秀的程序员,十分优秀!