有什么问题:
partin a = [floor a, a-floor a]
错误:
<interactive>:342:1: error:
• Ambiguous type variable ‘a0’ arising from a use of ‘print’
prevents the constraint ‘(Show a0)’ from being solved.
Probable fix: use a type annotation to specify what ‘a0’ should be.
These potential instances exist:
instance Show Ordering -- Defined in ‘GHC.Show’
instance Show Integer -- Defined in ‘GHC.Show’
instance Show a => Show (Maybe a) -- Defined in ‘GHC.Show’
...plus 22 others
...plus 16 instances involving out-of-scope types
(use -fprint-potential-instances to see them all)
• In a stmt of an interactive GHCi command: print it
答案 0 :(得分:7)
如果没有看到你正在做的事情的全部范围,我无法给出一个完整的答案,但这是一个几乎肯定会涉及到的明确问题。你写了
partin a = [floor a, a-floor a]
floor
的类型是
floor :: (RealFrac a, Integral b) => a -> b
(-)
的类型是
(-) :: Num a => a -> a -> a
由于您使用的是a - floor a
,因此您强制a
的类型为的实例 RealFrac
类和 Integral
类。但是,标准库中没有这种类型(并且它没有多大意义)。因此,GHC肯定无法从其非常有限的默认集合中为您选择类型。如果您使用
partin a = [fromIntegral (floor a), a - fromIntegral (floor a :: Int)]
但请注意,这里有一个 list 并没有多大意义,因为你试图将一个数字分成两个不同类型的组件。
你可能会更好partin a = (floor a, a - fromIntegral (floor a :: Int))