Así que tener un tipo de datos algo así como:prueba si la variable Haskell coincide con la opción de tipo de datos definido por el usuario
data Token = NUM Int | ID String | EOF
y tengo una función algo así como:
doStuff list = let
(token, rest) = getToken list
in
....
Así que lo que quiero hacer en la parte ...
es prueba si el token que obtuve es un NUM
o INT
o EOF
. Puedo decir token==EOF
para probar ese caso, pero no puedo encontrar una manera de probar si el token es NUM
o INT
usando un condicional, ya que token==(NUM n)
y token==NUM
ambos producen errores. Sé que podría escribir una función auxiliar para hacer las cosas en el ...
y aprovechar la coincidencia de patrones, pero eso realmente daña la legibilidad de lo que estoy haciendo, y parece que debería haber una forma de hacer este control. Alguien sabe como?
¿Cómo se obtienen los valores? Parece que los tiras aquí ... – mergeconflict
@mergeconflict Si quieres los valores, no usas este truco, por supuesto. =) Pero sonaba a la pregunta como si solo quisiera verificar qué constructor se usó. –
@mergeconflict puede obtener selectivamente los valores de esta manera: 'data Token = NUM {n, m :: Int}' --- 'case tokenVal of Num {n = n '} -> foo n'' –