我正在嘗試爲自定義文件格式創建解析器。在我與工作的格式,某些字段關閉標籤,像這樣:Parsec返回[Char]而不是文本
<SOL>
<DATE>0517
<YEAR>86
</SOL>
我試圖抓住</
和>
之間的值,並把它作爲更大的解析器的一部分。
我已經拿出下面的代碼。麻煩的是,解析器返回[Char]
而不是Text
。我可以通過執行fmap pack $ return r
來打包每個Char
以獲得文本值,但我希望類型推斷可以使我無需執行此操作。有人可以暗示爲什麼我回來[Char]
而不是Text
,以及我如何可以取回Text
而不必手動打包值?
{-# LANGUAGE NoMonomorphismRestriction #-}
{-# LANGUAGE OverloadedStrings #-}
import Data.Text
import Text.Parsec
import Text.Parsec.Text
-- |A closing tag is on its own line and is a "</" followed by some uppercase characters
-- followed by some '>'
closingTag = do
_ <- char '\n'
r <- between (string "</") (char '>') (many upper)
return r
我認爲'many upper'比'string'更有意義,因爲'between'只返回第三個解析器參數的結果。 –
我看到'許多上層'的類型是'ParsecT sum [Char]' 我的印象是,如果OverloadedStrings擴展名可以用'[Char]'值作爲'Text'而不必手動打包它們打開了? – Arnob
OverloadedString是一個語法擴展,而不是類型系統擴展。特別是,它將字符串文字(引號中的內容)讀入IsString類中。 – nomen