[英]*** Exception: Prelude.read: no parse in Haskell - Parsing, Expressions and Recursion
[英]Haskell Parsing Recursion and Maybe
我正在嘗試用 Haskell 編寫解析器。
這個解析器在參數中接受一個字符串(例如:“abc def”)並返回一個 Maybe (String, String)。
也許(字符串,字符串)
First String 獲取數字或字母時的字符。
第二個字符串得到其余的
在這個例子中,我想返回 Maybe ("abc", " def")。
parseString :: String -> Maybe (String, String)
parseString "" = Nothing
parseString expr = case isString expr of
Just (char, rest) -> fmap (char:) (parseString rest)
Nothing -> Just ("", expr)
isString 返回:
也許 (Char, String) -> Char = 第一個字符,String = rest / 如果不是字母或數字,則為空。
問題是,我可能無法返回字符串的其余部分。
問題似乎在
fmap (char:) (parseString rest)
現在, (char:)
是一個函數String -> String
,所以fmap (char:)
變成了Maybe String -> Maybe String
(或者它對另一個函子的泛化)。 然而, parseString rest
不是一個Maybe String
,它是一個Maybe (String, String)
。
因此,我們需要調整(char:)
以處理該對的第一個組件。 我會嘗試
fmap (\(res,rest2) -> (char:res, rest2)) (parseString rest)
(通過first
從Data.Bifunctor
或Control.Arrow
導入,可以寫成fmap (first (char:)) (parseString rest)
,但這並不重要。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.