Cómo codificar métodos guarded en OCaml con testigos de igualdad de tipos

Fuentes: Guarded methods in OCaml

Los métodos guarded permiten asociar restricciones al receptor (self) únicamente a métodos concretos, de modo que solo puedan invocarse cuando el receptor cumpla dichas restricciones. OCaml no admite esta construcción de forma nativa en su sintaxis, pero el artículo muestra cómo codificarla mediante un testigo de igualdad de tipos ("type equality witness"). El texto parte de la motivación habitual: en lenguajes con polimorfismo paramétrico como Java o Kotlin, las restricciones sobre variables de tipo suelen aplicarse al ámbito de toda la clase, lo que resulta demasiado rígido. El ejemplo canónico es una clase MyList y un método flatten que solo tendría sentido cuando los elementos sean a su vez listas. Para resolverlo se revisan tres enfoques: sacar el método al contexto estático, usar métodos de extensión al estilo de Kotlin o C#, y finalmente los propios métodos guarded. Tras señalar que ningún lenguaje mainstream los implementa directamente, el autor explica la sintaxis imaginaria propuesta por Gabriel Scherer en su charla sobre la simetría entre programación orientada a objetos y funcional, y describe cómo reproducir esa idea en OCaml apoyándose en los GADT introducidos en la versión 4.14. Se trata, en definitiva, de una nota divulgativa y práctica dirigida a programadores familiarizados con el sistema de tipos de OCaml que quieran imponer restricciones locales a métodos sin alterar la sintaxis del lenguaje.