Me gustaría eliminar las palabras clave if ... then ... else ...
, porque estoy incrustando un lenguaje/DSL en Haskell. if
, then
y else
transmiten mucho significado en muchos dominios, y sería genial si pudiera redefinirlos (o dejarlos sin definir) para reflejar la naturaleza del idioma/dominio.¿Cómo podría eliminar las palabras clave "if ... then ... else ..." en Haskell (GHC)?
He buscado en Google y stackoverflow, pero no he encontrado nada. (Lo que encontrar un viejo hilo sobre por qué if ... then ... else ...
se incluyó como palabras clave en Haskell.)
Mi IDE está en Leksah, y, si las palabras clave se pueden quitar, también sería bueno tener un ajuste para cambiar el if ... then ... else ...
las palabras clave vuelven a su fuente/color/desenfoque normal.
Ya he probado una convención de nomenclatura de if'
para if
y así sucesivamente. No siente tan bueno, especialmente cuando quiero definir if
y if'
, y tienen que definir if'
y if''
su lugar, o if1
y if2
. La presencia de if'
y if
también puede ser confusa. (La confusión no es un problema tan grave en mi situación ya que los usuarios de DSL son programadores de Haskell, pero supongo que puede ayudar en otras situaciones).
Resumiendo las respuestas hasta la fecha:
- utilizar la extensión
RebindableSyntax
a GHC. No es tan general como eliminar las palabras clave: se conserva la sintaxis de if-then-else de Haskell. (Frerich Raabe) - Solución: use palabras/nombres muy similares, usando
data Conditional b a = If b (Then a) (Else a)
(solo aplicable en algunos contextos). (C. A. McCann)
Si RebindableSyntax
es una característica relativamente nueva, entonces es poco probable que encontrar una manera más general, al menos no hasta la próxima versión de GHC.
¿Desea _remove_ palabras clave de un idioma para que el compilador pueda tratarlas como variables? – eternalmatt
Si su DSL es lo suficientemente distinta del Haskell circundante y funciona construyendo algún tipo de estructura de datos que represente expresiones en el DSL, también podría usar un tipo de datos. por ejemplo, algo como 'datos Condicional b a = Si b (Entonces a) (Else a)'. –
Debe recordar que no debe diseñar sus DSL para que el código parezca inglés, debe diseñarlos para que sea más fácil ver si el código no funciona. – Anonymous