Реализация `read `для левого -ассоциативного дерева в Haskell

Мне трудно реализовать Read для древовидной структуры. Я хочу взять левую -ассоциативную строку (со скобками ), например ABC(DE)F, и преобразовать ее в дерево. Этот конкретный пример соответствует дереву

tree.

Вот тип данных, который я использую (хотя я открыт для предложений):

data Tree = Branch Tree Tree | Leaf Char deriving (Eq)

Это конкретное дерево будет в Haskell:

example = Branch (Branch (Branch (Branch (Leaf 'A')
                                         (Leaf 'B'))
                                 (Leaf 'C'))
                         (Branch (Leaf 'D')
                                 (Leaf 'E')))
                 (Leaf 'F')

Моя showфункция выглядит так:

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]

Я хочу сделать readфункционировать так, чтобы

read "ABC(DE)F" == example

8
задан Snowball 2 May 2012 в 05:43
поделиться