Para mi mini-lenguaje de transcripción musical pensaba primero que la cadena con el valor de la nota usara un solo caracter por nota; así nada más tendría que recibirlos con (x:xs) y serían fáciles de procesar. A lo mejor era buena idea pero no lo voy a hacer así. Voy a hacer cadenas del tipo “^a,B_b’c” etc. con el entendimiento de que un (o ningún, o dos) “^” o “_” inicia un token, y ningún o un o varios “\’” o “,” lo terminan. Para eso necesito parsear la cadena. Se puede hacer con un autómata finito, pero Haskell (dicen) incluye un excelente mecanismo de parseo.
Presentando a Parsec. He oído críticas muy favorables en la red y vale la pena probarlo. Toma un rato encontrarle el modo, pero ya tengo una función que toma cadenas como el ejemplo de arriba y las convierte en listas de cadenas, separadas por token. Está algo ingenuo, no verifica que la entrada sea correcta, seguro se debe poder mejorar mucho, pero se entiende y funciona.