Pracowałem nad pytaniem 67A of 99 Haskell Questions. Pytanie jest konstruowanie drzewa z danego łańcucha: "x(y,a(,b))" => Branch 'x' (Branch 'y' Empty Empty) (Branch 'a' Empty (Branch 'b' Empty Empty))
Jedno rozwiązanie używając Parsec
jest jak poniżej:nie można znaleźć modułów Parsec w 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)
Jednak moja GHCi mógł ani znaleźć Text.Parsec.String
ani Text.Parsec
. Czy te moduły są przestarzałe? Moja wersja GHCi jest 6.12.3
thx, jest skompilowany poprawnie po zainstalowaniu parsetu-3. Istnieje jednak "nieoczekiwany", "oczekujący" ("wyjątek podczas uruchamiania go teraz." – manuzhang
Wejście "x (y, a (, b))" nie może zostać przetworzone przez dany parser, który wymaga sztywnego formatu " x (y (,), a (, b (,))) "dla tego drzewa –
thx ponownie i mogę wysłać twoje rozwiązanie na 99 pytań Haskella .Jest to OK? Jeśli nie, natychmiast go usunęę – manuzhang