gpt4 book ai didi

haskell - 为什么 Haskell 无法解析 "overloaded"运算符?

转载 作者:行者123 更新时间:2023-12-02 16:10:41 27 4
gpt4 key购买 nike

This post提出了 !! 情况的问题。接受的答案告诉我们,您实际上正在做的是创建一个新函数 !!,然后您应该避免导入标准函数。

但是,如果新函数要应用于与标准函数不同的类型,为什么要这样做呢?编译器不是可以根据参数选择合适的吗?是否有任何编译器标志允许这样做?

例如,如果 * 没有为 [Float] * Float 定义

为什么编译器会哭

>  Ambiguous occurrence *>  It could refer to either `Main.*', defined at Vec.hs:4:1>                          or `Prelude.*',

for this code:

(*) :: [Float] -> Float -> [Float]
(*) as k = map (\a -> a*k) as -- here: clearly Float*Float


r = [1.0, 2.0, 3.0] :: [Float]

s = r * 2.0 -- here: clearly [Float] * Float

main = do
print r
print s

最佳答案

允许编译器根据函数的类型选择正确的函数实现是类型类的目的。没有他们这是不可能的。

要了解这种方法的合理性,您可以阅读介绍它们的论文:How to make ad-hoc polymorphism less ad hoc [PDF]。

关于haskell - 为什么 Haskell 无法解析 "overloaded"运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33177019/

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