正規表現では、\d{1,5}
のような何かを行うことで範囲を取得することができます。これは数字を1〜5回貪欲に解析します。または、怠け者にするには\d{1,5}?
を実行します。Haskell Text Parser範囲を正確に解析するコンビネータ
ハスケルのText.ParserCombinators.ReadPでこれをどうやって行いますか?
あなたはrangeParse (satisfy isDigit) ([5,4..1])
のようにそれを行う場合は5回に桁1の貪欲解析を実行します
rangeParse :: Read a => ReadP a -> [Int] -> ReadP [a]
rangeParse parse ranges = foldr1 (<++) $ fmap (\n -> count n $ parse) ranges
を:
私の試みはこれを与えました。数字を[1..5]
にスワップすると、怠惰な解析が行われます。
パーサーコンビネータでこれを行う方が良いか慣用的な方法がありますか?