2012-05-18 12 views
6

estoy tratando de reducir mi confusión acerca de la sintaxis de Haskell y me gustaría averiguar cuáles son los espacios de nombres separados están en Haskell.¿Qué espacios de nombres de símbolos hay en Haskell?

espacios de nombres que significan espacios de nombres sintácticos correspondientes a las tablas varios símbolos gestiona el compilador, no el nombre ámbitos definidos en el código.

Por ejemplo:

  • Nombres de valor (como nombres de función)
  • constructores de datos
  • constructores de tipo
  • parámetros de tipo (en las definiciones de tipos)
  • instancias?
  • ...?

Me interesa porque estoy teniendo problemas para leer el código Haskell (sin duda más que con cualquier otro idioma) porque con frecuencia tienen un tiempo difícil averiguar lo que es exactamente lo que estoy buscando en (sobre todo con los datos/type constructors/type declarations).

Haskell parece volver a utilizar un puñado de construcciones sintácticas (esp <name> <name> ....) En muchos lugares y se basa en contexto - sólo resulta que el compilador es mucho mejor en esto que yo ...

Respuesta

13

The Haskell Report §1.4 says

Hay seis tipos de nombres en Haskell: aquellas para las variables y constructores valores denotan; aquellos para variables de tipo, tipo constructores y clases de tipo se refieren a entidades relacionadas con el tipo sistema; y nombres de módulo se refieren a los módulos. Hay dos limitaciones en nombrar:

  1. nombres de las variables y el tipo de variables son identificadores que comienzan con las letras en minúscula o un guión; los otros cuatro tipos de nombres son identificadores que comienzan con letras mayúsculas.
  2. Un identificador no debe ser utilizado como el nombre de un constructor de tipos y una clase en el mismo ámbito.

Estas son las únicas limitaciones; por ejemplo, Int puede ser simultáneamente el nombre de un módulo, clase y constructor dentro de un único ámbito.

+3

También hay nombres infijas a nivel de valor y tipo. Para las variables (en ambos niveles), se componen de símbolos y comienzan con cualquier carácter, excepto un ':'. Para los constructores (en ambos niveles) se componen de símbolos y comienzan con un ':'. Los constructores tipo Infix son como solo recuerdo una extensión GHC. – sclv

+0

¡Esa es la respuesta que estaba buscando, gracias! – Martin

+0

Lo que añade a mi confusión eran empalmes de alto nivel de la plantilla Haskell, que acaba de ver como las definiciones de funciones con el '=' falta y también no tener una regla de capitalización (y de nuevo vuelve a utilizar el '' patrón ...) . Para referencia http://www.haskell.org/ghc/docs/latest/html/users_guide/template-haskell.html – Martin

5

La confusión se puede evitar si se asegura de que entiende lo que está leyendo:

  1. una expresión: aquí cada nombre en mayúsculas es un constructor de datos o una variable cualificado o constructor mientras que en minúsculas son valores
  2. un tipo: aquí cada nombre en mayúsculas es un constructor tipo o nombre de la clase, mientras que los nombres en minúscula son variables de tipo.