Я работаю над вопросом 67A of 99 Haskell Questions. Вопрос построения дерева из заданной строки: "x(y,a(,b))" => Branch 'x' (Branch 'y' Empty Empty) (Branch 'a' Empty (Branch 'b' Empty Empty))
Одно из решений с использованием Parsec
, как показано ниже:не удается найти модули Parsec в GHCi
import Text.Parsec.String
import Text.Parsec hiding (Empty)
pTree :: Parser (Tree Char)
pTree = do
pBranch <|> pEmpty
pBranch = do
a <- letter
char '('
t0 <- pTree
char ','
t1 <- pTree
char ')'
return $ Branch a t0 t1
pEmpty =
return Empty
stringToTree str =
case parse pTree "" str of
Right t -> t
Left e -> error (show e)
Однако мой GHCi не мог ни найти, ни Text.Parsec.String
Text.Parsec
. Являются ли эти модули устаревшими? Моя GHCi версия 6.12.3
thx, он скомпилирован после установки парсека-3. Тем не менее, существует «неожиданное», «ожидающее» («исключение при его запуске сейчас». – manuzhang
Вход «x (y, a (, b))» не может быть проанализирован данным синтаксическим анализатором, что требует жесткого формата " x (y (,), a (, b (,))) для этого дерева. –
thx снова, и я отправляю ваше решение по 99 вопросам Haskell. Это нормально? Если нет, я немедленно удалю его – manuzhang