gpt4 book ai didi

haskell - 为什么不能将 take 的类型更改为使用任何 Integral?

转载 作者:行者123 更新时间:2023-12-03 15:11:32 25 4
gpt4 key购买 nike

take :: Int -> [a] -> [a]
genericTake :: Integral i => i -> [a] -> [a]

我读过 take 的不方便类型是由于历史原因,更改它可能会导致某些代码中断。

但是我不能替换 takegenericTake无处不在而不破坏任何东西?有什么问题?

最佳答案

破案

genericTake :: Integral i => i -> [a] -> [a]
genericTake n xs = take (fromIntegral n) xs

class Foo a where
bar :: a -> String

instance Foo Int where
bar _ = "int"

foo :: String -> [a] -> [a]
foo ns xs = let y = read ns
z = bar y
in take y xs

这将中断 genericTake .
No instance for (Foo i0) arising from a use of `bar'
The type variable `i0' is ambiguous

这是一个精心设计的示例,但您可以理解发生在 take 的第一个参数上的一些类型推断,假设它是 Int。 , 现在当您将类型更改为 Integral i => i可能会出现一些问题,如上。

关于haskell - 为什么不能将 take 的类型更改为使用任何 Integral?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17262875/

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