1
我正在使用parsec來解析輸入,並且將解析的字符存儲到一個函數中,然後在case表達式中調用該函數,其中將解析的字符串與一組關鍵字。 這是我對這個代碼:在上下文中將字符串與Haskell中的常規字符串進行比較
import Text.Parsec.Prim
import Text.Parsec.Char
import Text.Parsec.Error
import Text.Parsec.String
import Text.Parsec.Combinator
tokenize :: Parser String
tokenize =do op <- many1 $ letter <|>
char '+' <|>
char '^' <|>
char '-' <|>
char '>' <|>
char '*'
return op
curveOpt inval = case tokenize of
(Parser "++") ->
(do c <- curve
curveOpt $ Connect inval c)
我從編譯器得到的錯誤是:
Couldn't match type `[Char]'
with `ParsecT String() Data.Functor.Identity.Identity String'
Expected type: Parser String
Actual type: [Char]
In the pattern: "++"
In a case alternative:
"++"
-> (do { c <- curve;
curveOpt $ Connect inval c })
In the expression:
case tokenize of {
"++"
-> (do { c <- curve;
curveOpt $ Connect inval c }) }
從我瞭解的是,我試圖比較解析器字符串,字符串。如何比較這兩種不同類型? 我是否應該改變標記大小的類型,如果是的話,怎麼樣?
在此先感謝。
/Attoparsec你導入的哪個變種秒差距? – Arnon 2014-09-21 10:30:59
再次檢查問題。只是添加了進口 – sokras 2014-09-21 10:39:30