Хорошее использование системы типов Котлина!

Думаю, стоит упомянуть, что вы могли бы еще больше обобщить понятие идентификатора. Вместо того, чтобы создавать отдельные классы для всех типов идентификаторов, которые вам нужны, вы можете создать общий класс Id следующим образом:

sealed class Id<out T>
data class ValidId<out T>(val id: Long) : Id<T>()
object InvalidId : Id<Nothing>()

И пользоваться им так же просто:

class Song(val id: Id<Song>)
class Playlist(val id: Id<Playlist>)

fun addSongToPlayList(song: Id<Song>, playlist: Id<Playlist>) = ...

fun main(args: Array<String>) {
    val song = Song(ValidId(1L))
    val playlist = Playlist(ValidId(2L))
    addSongToPlayList(song.id, playlist.id)
}