Implementando `read 'para un árbol asociativo a la izquierda en Haskell

Estoy teniendo dificultades para implementarLeer Para una estructura de árbol. Quiero tomar una cadena asociativa a la izquierda (con parens) comoABC(DE)F y convertirlo en un árbol. Ese ejemplo particular corresponde al árbol.

.

Aquí está el tipo de datos que estoy usando (aunque estoy abierto a sugerencias):

<code>data Tree = Branch Tree Tree | Leaf Char deriving (Eq)
</code>

Ese árbol en particular sería, en Haskell:

<code>example = Branch (Branch (Branch (Branch (Leaf 'A')
                                         (Leaf 'B'))
                                 (Leaf 'C'))
                         (Branch (Leaf 'D')
                                 (Leaf 'E')))
                 (Leaf 'F')
</code>

Mishow la función se ve como:

<code>instance Show Tree where
    show (Branch l r@(Branch _ _)) = show l ++ "(" ++ show r ++ ")"
    show (Branch l r) = show l ++ show r
    show (Leaf x) = [x]
</code>

Quiero hacer unread función para que

<code>read "ABC(DE)F" == example
</code>

Respuestas a la pregunta(3)

Su respuesta a la pregunta