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

问题描述 投票:0回答:2

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

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

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

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

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 中类型类的实例有名称呢?

typeclass purescript
2个回答
8
投票

根据书PureScript by Example,这是因为:

在 PureScript 中,类型类实例的命名是为了帮助生成的 JavaScript 的可读性。

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


0
投票

从 PureScript 版本 0.15 开始 名称对于类型类实例是可选的,如果您不给出名称,则由编译器生成。

© www.soinside.com 2019 - 2024. All rights reserved.