gpt4 book ai didi

haskell - 为什么 Haskell 函数不能返回一个列表

转载 作者:行者123 更新时间:2023-12-01 01:25:49 25 4
gpt4 key购买 nike

这有什么问题:

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

最佳答案

如果不了解您正在做的事情的全部内容,我无法给出完整的答案,但这里有一个几乎肯定涉及的明确问题。你写

partin a = [floor a, a-floor a]

floor 的类型是

floor :: (RealFrac a, Integral b) => a -> b

(-)的类型是

(-) :: Num a => a -> a -> a

由于您使用了 a - floor a,因此您强制 a 的类型成为 both 的实例RealFrac Integral 类。但是,标准库中没有这样的类型(而且它没有多大意义)。因此,GHC 肯定无法从其非常有限的默认值集合中为您选择类型。如果你使用,事情可能会好很多

partin a = [fromIntegral (floor a), a - fromIntegral (floor a :: Int)]

但请注意,这里有一个列表并没有多大意义,因为您正试图将一个数字分成两个不同类型的部分。你可能会过得更好

partin a = (floor a, a - fromIntegral (floor a :: Int))

关于haskell - 为什么 Haskell 函数不能返回一个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46572775/

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