Elementos de etiquetado de Haskell en función recursiva
Soy bastante nuevo en Haskell y la programación funcional en general, así que discúlpeme si la pregunta parece sencilla o tonta.
Tengo un analizador para un lenguaje simple que produce un árbol de sintaxis abstracta. Para aplanar el AST (convertir las declaraciones while y if en saltos) necesito poner etiquetas en el árbol. El problema es que no sé cuál debería ser la próxima etiqueta (todavía estoy pensando imperativamente, porque si tuviera estado, nada de esto sería un problema).
La función que tengo hasta ahora es la siguiente:
transform :: Stmt -> FStmt
transform (Seq stmt) = FSeq (map transform stmt)
transform (Assign var val) = FAssign var val
transform (While cond stmt) = FWhile "label1" (Jumpf cond "label2") (transform stmt) (Jump "label1") "label2"
transform (If cond stmt1 stmt2) = FIf (Jumpf cond "label") (transform stmt1) "label" (transform stmt2)
En su estado actual, la función "aplana" el AST, pero no intenta colocar las etiquetas correctas (usa la misma cadena para cada construcción).
Básicamente, el problema es que en el caso de una declaración secuencial (y cada programa es una declaración secuencial) no puedo pensar en una forma de pasar el siguiente valor que debería usarse en las etiquetas.
Gracias de antemano.