Equivalencia de tipos de funciones con variables de tipo

Necesito una función con los siguientes atributos.

(c-> d) -> (a-> b-> c) -> a-> b-> d

mi función:

funktionD = (.). (.)

pero: t funktionD

funktionD :: (a -> b) -> (c -> d -> a) -> c -> d -> b

¿No es esto igual?

preguntado el 16 de mayo de 11 a las 17:05

¿Por qué no sustituye las variables de tipo usted mismo y pruébalo? -

También puedes escribir funktionD :: (c->d)->(a->b->c)->a->b->d por encima de la definición de su función, y si los tipos son incorrectos, el compilador se lo dirá. -

@MatrixFrog: Esa también es una excelente sugerencia. Nunca subestime el valor de discutir de manera preventiva con el compilador de Haskell. ¡El hecho de que siempre gane la discusión no significa que no puedas aprender algo en el proceso! -

2 Respuestas

Es. Las variables de tipo, escritas en minúsculas, son solo eso, variables. Puede renombrarlos todos los que quiera siempre que el patrón de los que sean la misma variable permanezca igual.

Además, esencialmente por la misma razón, para la firma de tipo que proporcionó, solo hay una función posible de ese tipo (es decir, excluyendo las funciones que se bloquean o entran en bucles infinitos). ¡Algo sobre lo que pensar!

contestado el 16 de mayo de 11 a las 22:05

Creo que es. Reemplaza a con c (y viceversa), luego reemplaza b con d (y viceversa) y son lo mismo.

contestado el 16 de mayo de 11 a las 21:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.