2012-10-09 3 views
2

J'ai un Data.Sequence que je dois parcourir. Le problème est que son état, et la séquence peut se développer à la suite de ladite itération. Donc, je le fais avec une récursivité explicite, mais il semble clunkky. En outre, cela semble être une chose commune à faire. Quelle structure de contrôle monadique commune ai-je réinventé, mal?itérer monadique sur une Data.Sequence

+0

N'êtes-vous pas travailler à l'intérieur monade de l'État? – Satvik

+1

Si la séquence change seulement en ajoutant des choses, et tout ce que vous faites avec la séquence est la recherche que vous avez montrée, alors vous avez réinventé la recherche de largeur en premier (mal). Prenez une implémentation de file d'attente de Hackage et profitez-en. –

+0

+ Satvik, oui, je travaille dans la monade de l'Etat. + Daniel Wagner, oui, la séquence n'est changée qu'en ajoutant. Y a-t-il une implémentation de file d'attente que je devrais utiliser à la place de Data.Sequence? Data.Queue dit qu'il est déprécié en faveur de Data.Sequence – nont

Répondre

2

Pour répondre à la question initiale, vous « réinventé » la monade de l'Etat dans le monade de l'Etat lui-même! Vous pouvez déplacer les éléments que vous enfoncez explicitement dans votre état pour éviter de les transmettre directement. D'un autre côté, pour des choses simples comme celle-ci, je n'ai aucun problème à passer des choses explicitement, et je trouve souvent que c'est plus propre.

Enfin, comme le fait remarquer Daniel Wagner, vous devriez pousser et sauter du haut, autant que possible, par souci d'efficacité.