为什么 PureScript 中的实例有名称?

Why do instances in PureScript have names?

我现在在一个项目中使用 PureScript 并遇到了一些实例(我是新手,正在学习)。基本上我必须创建一个实例才能重载具有不同类型的函数。

public String toStr(Integer i) {
    return String.valueOf(i);
}

public String toStr(Float i) {
    return String.valueOf(i);
}

(我知道,这很奇怪,但只是举个例子)。据我所知,这可以使用 class 类型来编写。

foreign import unsafeToStr :: forall a. a -> String

class ToStr a where
    toStr :: a -> String

instance intToStr :: ToStr Int where
    toStr a = unsafeToStr a

instance numToStr :: ToStr Number where
    toStr a = unsafeToStr a

我们就是这样做的。据我所知,不需要为实例命名,因为编译器会自动计算出来。我什至出于好奇对其进行了测试,它适用于我给它的任何名称。

那么为什么 PureScript 中 classes 类型的实例有名字?

根据书上的说法PureScript by Example,是因为:

in PureScript, type class instances are named to aid the readability of the generated JavaScript.

但我认为你是对的,这个名字没有任何意义,可以说是由编译器生成的。