2010-07-29 15 views
5

Estoy tratando de escribir una función polimórfica, que necesita hacer algo ligeramente diferente según el tipo de parámetro. ¿Hay alguna manera de que pueda hacer una coincidencia de patrón en el tipo del objeto, usando los tipos integrados? Estoy pensando en algo parecido a esto:Coincidencia de patrón OCaml en tipos integrados

let to_string v = 
    match v with 
    | string -> v 
    | int -> string_of_int v 
    | _ -> "" 

pero este no parece ser un programa OCaml válido.

He visto this question, pero eso tampoco responde mi pregunta. Preferiría preferiría para usar los tipos incorporados estándar en lugar de construir nuevos tipos para esto (aunque puedo hacerlo si ese es el único camino).

Respuesta

3

En realidad esa respuesta se aplica completamente a usted. Solo puede coincidir con una clase de tipo, y el tipo definido por la unión de int, string, float, ... no existe y debe crearse (como en la respuesta anterior). 'a opera en un tipo particular, pero no representa una unión de todos los tipos.

que podría ser capaz de hacer lo que desee con una función de C externo (18.3), aunque, echando un vistazo a la sección de etiquetas atómica, no estoy seguro de que serás capaz de diferenciar char y int.

+0

:(- eso es lo que tenía miedo. Bueno, supongo que mi programa no se verá tan bien. –

+0

¿Por qué intentas hacer algo como esto? Probablemente hay una manera mejor. – nlucaroni

+0

Pensé que Podría escribir una función polimórfica de esta manera, con anulaciones para los diferentes tipos que necesito, pero pensándolo un poco más, probablemente necesite usar variantes de todos modos, ya que terminaré haciendo un paso lexing también. –

Cuestiones relacionadas