Distinción entre número entero en expresiones, y número entero en rangos
Hay una diferencia en el parseo de números enteros en base al contexto en el que se encuentran.
Cuando se parsea un número entero dentro de una expresión, se utiliza la función natural
que solo procesa números naturales (o mejor dicho, enteros sin signo).
Al mismo tiempo, al encontrarse en una expresión, se permite el uso de paréntesis.
A continuación algunos ejemplos:
parseString "-4"
I_1.1.1.2 (UOp Neg I_1.2.1.2 (Const I_1.2.1.2 (CInt 4)))
parseString "(-(4))"
I_1.1.1.6 (UOp Neg I_1.3.1.5 (Const I_1.4.1.4 (CInt 4)))
parseString " - 4 "
I_1.2.1.5 (UOp Neg I_1.5.1.5 (Const I_1.5.1.5 (CInt 4)))
Cuando se parsea un número entero dentro de un rango de un arreglo, se utiliza la función integer
que procesa números enteros.
Al ser un contexto mas restrictivo se limita lo que se puede especificar.
A continuación algunos ejemplos:
parseString "-4"
I (-4)
parseString "(-(4))"
*** Exception: "<stdin>" (line 1, column 1):
unexpected "("
expecting array bound
parseString " - 4 "
I (-4)