Search code examples
typeclasspurescript

Why do instances in PureScript have names?


I'm now working with PureScript on a project and came across instances (I'm a newbie, and am learning as I do). Basically I had to create an instance in order to overload a function with different types.

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

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

(I know, this is weird one, but just for an example). This can be written using a type class as far as I understand.

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

This is how we do. As far as I know, there is no need to have a name to an instance, as the compiler automatically figures it out. I even tested it out of curiosity, and it worked for any name I gave it.

So why do instances of type classes in PureScript have names?


Solution

  • According to the book PureScript by Example, it is because:

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

    But I think you are correct and the name has no meaning whatsoever, and could arguably be generated by the compiler.