Как исправить эту проблему с помощью простой функции HXT? - PullRequest
0 голосов
/ 15 марта 2012

Я запустил дружественное руководство по HXT для анализа XML-файла с помощью haskell.

На первой странице руководства мы пытаемся извлечь гостя из XML-файла.И для этого есть следующая функция:

data Guest = Guest {firstName, lastName :: String}
    deriving (Show, Eq)

getGuest = deep (isElem >>> hasName "guest") >>>                                
 proc x -> do                                                                   
    fname <- getText <<< getChildren <<< deep (hasName "fname") -< x            
    lname <- getText <<< getChildren <<< deep (hasName "lname") -< x            
    returnA -< Guest {firstName = fname, lastName = lname} 

, но когда я пытался загрузить файл в интерпретатор ghci.Я все еще получаю эту ошибку:

Prelude> :l hxt_tuto.hs
hxt_tuto.hs:15:37: parse error on input `->'
Failed, modules loaded: none.

указывает на тот факт, что оператор -> в выражении proc x -> do имеет ошибку синтаксического анализа, я пробовал много модификаций без посторонней помощи.как написать все это в одной строке

getGuest2 = deep (isElem >>> hasName "guest") >>> proc x -> do { fname <- getText <<< getChildren <<< deep (hasName "fname") -< x; lname <- getText <<< getChildren <<< deep (hasName "lname") -< x; returnA -< Guest {firstName = fname, lastName = lname }}

Может кто-нибудь помочь мне понять, что я пропустил?

спасибо за любой ответ!

1 Ответ

1 голос
/ 15 марта 2012

Вы помните, чтобы поставить

{-# LANGUAGE Arrows, NoMonomorphismRestriction #-}
import Text.XML.HXT.Core

вверху вашего файла?

...