Haskell: profundidad para cada nodo en árbol binario usando Reader monad

Escribí el siguiente código. Está trabajando y usando elReader monada.

¿Podría darme algunas pistas sobre el estilo de código en Haskell? Principalmente, me refiero a mónadas, soy novato.

import Control.Monad.Reader

data Tree a = Node a (Tree a) (Tree a)
            | Empty

renumberM :: Tree a -> Reader Int (Tree Int)
renumberM (Node _ l r) = ask >>= (\x -> 
                         return (Node x (runReader (local (+1) (renumberM l)) x) 
                                        (runReader (local (+1) (renumberM r)) x)))
renumberM Empty = return Empty

renumber'' :: Tree a -> Tree Int
renumber'' t = runReader (renumberM t) 0

Respuestas a la pregunta(2)

Su respuesta a la pregunta