Itens de rotulagem Haskell em função recursiva

Eu sou bastante novo em Haskell e em programação funcional em geral, então desculpe-me se a pergunta parecer direta ou boba.

Eu tenho um analisador para uma linguagem simples que produz uma árvore de sintaxe abstrata. Para achatar o AST (transformar instruções while e if em saltos), preciso colocar rótulos na árvore. O problema é que não sei qual deve ser o próximo rótulo (ainda estou pensando imperativamente, porque se eu tivesse estado, nada disso seria um problema).

A função que eu tenho até agora é a seguinte:

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)

No seu estado atual, a função "nivela" o AST, mas não tenta colocar os rótulos corretos (usa a mesma sequência para cada construção).

Basicamente, o problema é que, no caso de uma declaração seqüencial (e todo programa é uma declaração seqüencial), não consigo pensar em uma maneira de passar o próximo valor que deve ser usado nos rótulos.

Agradeço antecipadamente.

questionAnswers(1)

yourAnswerToTheQuestion