scala f# typeclass higher-kinded-types

Tipos de tipo más alto: ¿por qué es posible Scala pero no F#?



typeclass higher-kinded-types (2)

¿Mejor? Posiblemente.

La única diferencia que conozco es una característica de los genéricos llamada "especialización". Y está disponible bajo el control del programador en Scala. Entonces ... Debo decir que se puede decir que Scala es "mejor".

Dado que la implementación de CLR genéricos admite más funciones que las JVM, como la reificación, y los genéricos de JVM son un simple "truco de compilación" de Java, ¿por qué no son posibles los tipos de tipo superior en F # pero son posibles en Scala? ¿La implementación de los genéricos de CLR de alguna manera se interpone en el camino de las cosas, mientras que la falta de una JVM le permite ir más allá de lo que pretendían los diseñadores; ¿Algo así como los lenguajes dinámicos te permiten hacer trucos que un compilador fuertemente tipificado haría imposible?


En principio, no estoy seguro de que haya algo que impida que F # incluya tipos de tipo más alto; El CLR no los admite de forma nativa, por lo que sería necesario utilizar una estrategia de compilación más indirecta, pero ese es el caso de Scala en la JVM también. Puede o no puede ser más complicado hacer esto por encima de los genéricos reificados de CLR, pero sospecho que la razón por la que F # no los incluye es más filosófica. Si bien los tipos de tipos más altos serían agradables, el diseño de F # tiende a favorecer características simples que interactúan bien con otros lenguajes .NET; los tipos mejorados probablemente requerirían un esfuerzo significativo para agregar al lenguaje, complicaría la inferencia de tipos y otras partes del lenguaje y definitivamente no interoperaría bien con C # y otros lenguajes .NET, por lo que los costos (incluidos los costos de oportunidad) probablemente se percibieron como Superan los beneficios.