estoy leyendo Real World Haskell Pg 151, y he mirado en el siguiente pasaje de más de una hora:¿Cuál es el efecto de escribir sinónimos en instancias de clases de tipos? ¿Qué hace el pragma TypeSynonymInstances en GHC?
Recordemos que String es un sinónimo de [Char], que a su vez es el tipo [a] donde Char se sustituye por el parámetro tipo a. De acuerdo con las reglas de Haskell 98 , no se nos permite suministrar un tipo en lugar de un parámetro de tipo cuando escribimos una instancia. En otras palabras, sería legal para nosotros escribir una instancia para [a], pero no para [Char]. 16 comentarios 5335
Simplemente no se hunde en. Mirando el the (free not pirated) copy of RWH chapter 6veo un montón de otras personas realmente sufren con esto. Todavía no lo entiendo por los comentarios ...
En primer lugar, todo esto me confunde, así que si siente que puede explicar algo sobre este pasaje, o TypeSynonymInstances
, por favor.
Aquí está mi problema:
Int
es un constructor de datosString
es un constructor de datos Ysinónimo de tipo
ahora no puedo responde estas preguntas:
- ¿Por qué un sinónimo de tipo excluye el hecho de hacer que el tipo sea miembro de una clase de tipo (estoy buscando alguna razón que probablemente se relacione con la compilación o implimentation de un sinónimo de tipo)?
- ¿Por qué los diseñadores del lenguaje, no quieren esta sintaxis (estoy pidiendo razonamiento no extensa teoría o símbolos matemáticos Unicode).
- Veo esta línea "el tipo [a] donde Char se sustituye por el parámetro de tipo a", y quiero saber por qué no puedo sustituirlo por este "el tipo a donde se sustituye Int por el parámetro de tipo a ".
¡Gracias!
En mi propio código, he encontrado que el uso de las instancias de sinónimos significa que realmente quiero usar 'newtype' (y tal vez derivación de tipo nuevo generalizada) en lugar de' tipo'. Si no está familiarizado con la diferencia entre 'type' y' newtype', ese debería ser su primer paso. – jrockway