![](/img/trans.png)
[英]How to Parse a floating number in Haskell (Parsec.Combinator)
[英]Parse letter or number with Parsec
我正在嘗試為諸如x
、 A
(即單個字母)、 657
和0
(即 integer 正數)之類的字符串編寫解析器。 這是我寫的代碼。
import Text.Parsec
data Expression = String String | Number Int
value = letter <|> many1 digit
但是我收到以下錯誤。
Couldn't match type ‘[Char]’ with ‘Char’
Char -> String
?value
的類型注釋應該是什么? letter
只解析一個字母並返回一個Char
。 你想解析一個String
,即[Char]
(它是同一件事),所以我猜你想解析many letter
?
但是,如果您只想將單個字母解析為String
,則可以利用Parsec _ _
具有Functor
實例的事實,以便對其結果進行 map 並將其打包到列表中:
value :: Parsec s u String
value = fmap (:[]) letter <|> many1 digit
編輯后我猜你想解析你提供給我們的Expression
,所以你需要一些更花哨的 fmapping 來將結果包裝在適當的構造函數中:
value :: Parsec s u Expression
value = fmap (String . (:[])) letter
<|> fmap (Number . read) (many1 digit)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.