簡體   English   中英

Haskell 解析遞歸和可能

[英]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)

(通過firstData.BifunctorControl.Arrow導入,可以寫成fmap (first (char:)) (parseString rest) ,但這並不重要。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM