¿Hay alguna lista completa de caracteres permitidos en alguna parte, o una regla que determina qué se puede usar en un identificador frente a un operador?¿Qué caracteres están permitidos para los operadores de Haskell?
Respuesta
Lo que estaba buscando era la lista completa de caracteres.Según las otras respuestas, la lista completa es;
Unicode Puntuacion:
- http://www.fileformat.info/info/unicode/category/Pc/list.htm
- http://www.fileformat.info/info/unicode/category/Pd/list.htm
- http://www.fileformat.info/info/unicode/category/Pe/list.htm
- http://www.fileformat.info/info/unicode/category/Pf/list.htm
- http://www.fileformat.info/info/unicode/category/Pi/list.htm
- http://www.fileformat.info/info/unicode/category/Po/list.htm
- http://www.fileformat.info/info/unicode/category/Ps/list.htm
símbolos Unicode:
- http://www.fileformat.info/info/unicode/category/Sc/list.htm
- http://www.fileformat.info/info/unicode/category/Sk/list.htm
- http://www.fileformat.info/info/unicode/category/Sm/list.htm
- http://www.fileformat.info/info/unicode/category/So/list.htm
Pero excluyendo los siguientes caracteres con un significado especial en Haskell:
(),;[]`{}_:"'
De los Haskell 2010 Report §2.4:
símbolos de operador se forman a partir de uno o más caracteres de símbolos ...
§2.2 define los caracteres de símbolos como cualquiera de !#$%&*+./<=>[email protected]\^|-~:
o "cualquier [ non-ascii] Símbolo o puntuación Unicode ".
Interesante que puede utilizar Unicode arbitrario. Entonces, por ejemplo, λ o ⊗ serían operadores Haskell válidos? –
No, 'λ' es una letra Unicode, no un símbolo Unicode o un carácter de puntuación Unicode. Por lo tanto, no puede usarlo como parte de un nombre de operador (pero puede usarlo como parte de un identificador ordinario). – dave4420
Espero que puedas usar '⊗' como operador de Haskell, pero no estoy seguro. – dave4420
Desde el haskell report, esta es la sintaxis para los símbolos permitidos:
special -> (|) | , | ; | [ | ] | `| { | }
symbol -> ascSymbol | uniSymbol<special | _ | : | " | '>
ascSymbol -> ! | # | $ | % | & | * | + | . |/| < | = | > | ? | @
\ |^| | | - | ~
uniSymbol -> any Unicode symbol or punctuation
Así, los símbolos son símbolos ASCII o símbolos Unicode a excepción de los de special | _ | : | " | '
, los cuales están reservados (aquí a | b
significa "puede ser a
o b
", y a<b>
significa" puede ser todo en a
excepto b
"). Unos pocos párrafos siguientes, el informe da la definición completa para los operadores Haskell:
varsym -> (symbol {symbol | :})<reservedop | dashes>
consym -> (: {symbol | :})<reservedop>
reservedop -> .. | : | :: | = | \ | | | <- | -> | @ | ~ | =>
símbolos de operador se forman a partir de uno o más caracteres de símbolos, como definido anteriormente, y se distinguen léxicamente en dos espacios de nombres (Sección 1.4):
- Un símbolo de operador que comienza con dos puntos es un constructor.
- Un símbolo de operador que comienza con cualquier otro carácter es un identificador ordinario.
Observe que un dos puntos por sí mismo, ":", está reservado únicamente para el uso como Haskell list constructor; esto hace que su tratamiento sea uniforme con otras partes de sintaxis de lista, como "[]" y "[a, b]".
Aparte de la sintaxis especial para la negación de prefijo, todos los operadores son infijo, aunque cada operador infijo se puede utilizar en una sección para producir operadores parcialmente aplicados (ver Sección 3.5). Todos los operadores de infijo estándar son solo símbolos predefinidos y pueden recuperarse.
Probablemente debería estar citando el informe [haskell2010] (http://www.haskell.org/onlinereport/haskell2010/haskellch2.html#x7-180002.4) en lugar del informe haskell98 en estos días (aunque en este caso dicen lo mismo , por lo que puedo ver). –
- 1. ¿Qué caracteres están permitidos en los identificadores de Perl?
- 2. ¿Qué caracteres están permitidos en un nombre de atributo HTML?
- 3. ¿Qué caracteres inusuales además de $ están permitidos en los identificadores de JavaScript?
- 4. ¿Qué caracteres "especiales" están permitidos en los campos varchar de SQL Server?
- 5. ¿Qué caracteres NO están permitidos en los nombres de campo MongoDB?
- 6. HTTP URL - caracteres permitidos en los nombres de los parámetros
- 7. ¿Qué caracteres están permitidos en el atributo Nombre de HTML dentro de la etiqueta de entrada?
- 8. ¿Qué caracteres especiales están permitidos en el nombre de la columna T-SQL?
- 9. ¿Qué caracteres Unicode están permitidos en las etiquetas de host IDN?
- 10. ¿Qué caracteres están permitidos en una clave de Google App Engine?
- 11. ¿Cuáles son los caracteres legales/permitidos para los nombres de los archivos del servidor web?
- 12. ¿Por qué los inicializadores de matrices solo están permitidos para matrices?
- 13. ¿Por qué los tipos de parámetros contravariantes en Java no están permitidos para la anulación?
- 14. ¿Qué permiso de reflexión están permitidos en Medium Trust?
- 15. ¿Por qué los enlaces duros no están permitidos en los directorios de UNIX/Linux
- 16. Caracteres permitidos en una URL
- 17. ¿Por qué los tipos de datos algebraicos Haskell "están cerrados"?
- 18. ¿Cuáles son los caracteres permitidos en un subdominio?
- 19. ¿Qué hacen los operadores '& =' y '= &'?
- 20. ¿Cuántos subdominios están permitidos para una ID de correo electrónico?
- 21. Caracteres permitidos en el nombre de archivo
- 22. ¿Por qué los tipos de datos primitivos no están permitidos en java.util.ArrayList?
- 23. ¿Cuáles son los caracteres permitidos en una palabra clave Clojure?
- 24. Algunos caracteres utf8 permitidos en la fuente python, algunos no
- 25. ¿Qué caracteres NO están presentes en Unicode?
- 26. ¿Qué son los operadores levantados?
- 27. son caracteres # o & permitidos en xml?
- 28. error: valores de asignación no están permitidos aquí
- 29. ¿Por qué algunos comandos de git no están permitidos en el directorio .git?
- 30. ¿Qué tipos de idiomas están permitidos en la etiqueta de secuencia de comandos HTML?
Upvoted, pero con una advertencia: ':' * is * permitido en los nombres de los operadores. Si es el primer carácter, entonces el operador nombra un constructor, de lo contrario nombra una función como normal. – dave4420
¡No sabía de eso! –
¡Esto es completamente loco! Es genial que sea posible utilizar símbolos Unicode, pero desafortunadamente suelen ser muy difíciles de escribir en los teclados actuales. – Qqwy