Haskell 使用回力棒解析整数列表

Haskell 使用回力棒解析整数列表,haskell,routes,web-routes-boomerang,Haskell,Routes,Web Routes Boomerang,我正在尝试解析表单的URL /123/456/789 使用以下代码: {-# LANGUAGE OverloadedStrings, TemplateHaskell, TypeOperators #-} import Prelude hiding ((.), id) import Control.Category ((.), id) import Text.Boomerang.TH (derivePrinterParsers) import Web.Routes.Boomerang dat

我正在尝试解析表单的URL

/123/456/789
使用以下代码:

{-# LANGUAGE OverloadedStrings, TemplateHaskell, TypeOperators #-}

import Prelude hiding ((.), id)
import Control.Category ((.), id)
import Text.Boomerang.TH (derivePrinterParsers)
import Web.Routes.Boomerang

data Indices = Indices [Integer]
$(derivePrinterParsers ''Indices)

sitemap :: Router () (Sitemap :- ())
sitemap = rIndices . rList (integer . eos)
不幸的是,尝试使用

> parse sitemap ["0", "1"]
导致无限循环


有什么简单的方法可以解析斜杠分隔的整数列表吗?

似乎在
Text.Boomerang.Text
中的某个地方有一个bug

{-# LANGUAGE OverloadedStrings #-}

import Prelude hiding ((.))
import Control.Category ((.))

import Text.Boomerang
import Text.Boomerang.Strings as S
import Text.Boomerang.Texts as T

test1 = parseStrings (rList (S.integer . S.eos)) ["0", "1"]
test2 = parseTexts   (rList (T.integer . T.eos)) ["0", "1"]
test1
返回预期结果,但
test2
永远循环,尽管它们在语义上应该是等价的

*Main> test1
Right [0,1]
*Main> test2
^CInterrupted.
这在包含
Text.boomerang.Text
模块1.3.2和1.3.3的两个版本的回飞棒上都是可以复制的

回到解析URL。如果您不介意完全摆脱回飞棒包,您可以这样做:

import Data.Text (Text)                                                                                                                                                                       
import qualified Data.Text as T
import qualified Data.Text.Read as T

parseURL :: Text -> Either String [Int]
parseURL = fmap (map fst) . mapM T.decimal . T.splitOn "/"
下面是一个测试用例:

*Main> parseURL "123/456/789"
Right [123,456,789]
*Main> parseURL "123/456/789/"
Left "input does not start with a digit"

抱歉耽搁了!我在沙漠里做那件事。这确实是一个错误。我上传了boomerang-1.3.4,其中包含以下更改:

hunk ./Text/Boomerang/Texts.hs 193
-digits = rText digit
+digits = rText1 digit
使用该修复程序,
文本
版本的行为类似于
字符串
版本。谢谢你的报道

谢谢——我已经向维护人员致谢了。