Несколько совпадений с регулярным выражением не являются [String] в Haskell - PullRequest
0 голосов
/ 29 декабря 2018

Я смотрю учебник RWH здесь , который предлагает, но имеет ошибку, при использовании [String] для возврата нескольких результатов.Как вы можете видеть:

"I'd like to group by word breaks" =~ "\\S+" :: Bool
"I'd like to group by word breaks" =~ "\\S+" :: String
"I'd like to group by word breaks" =~ "\\S+" :: [[String]]

производит

True
"I'd"
[["I'd"],["like"],["to"],["group"],["by"],["word"],["breaks"]]

соответственно.

Но рекомендуемый [String] нет, и вместо этого есть ошибка:

"I'd like to group by word breaks" =~ "\\S+" :: [String]

<interactive>:1:1: error:
    • No instance for (RegexContext Regex String [String]) arising from a use of ‘=~’
    • In the expression: "I'd like to group by word breaks" =~ "\\S+" :: [String]
      In an equation for ‘it’: it = "I'd like to group by word breaks" =~ "\\S+" :: [String]

Как я могу попросить пропущенное [String] -подобное предложение типа, которое обеспечит то, что я ищу, а именно:

["I'd","like","to","group","by","word","breaks"]

без необходимости постобработки?Кроме того, интересно, что это кажется естественным в контексте других успешных преобразований типов, и это даже работало таким образом в один момент, когда книга была написана, и больше не работает.Чем объясняется изменение?

1 Ответ

0 голосов
/ 29 декабря 2018

Похоже, из комментариев к этому, рекомендации либо:

Prelude Text.Regex.PCRE> getAllTextMatches ("I'd like to group by word breaks" =~ "\\S+") :: [String]
["I'd","like","to","group","by","word","breaks"]

или

Prelude Text.Regex.PCRE> concat $ "I'd like to group by word breaks" =~ "\\S+" :: [String]
["I'd","like","to","group","by","word","breaks"]

Ни один из них не так чист, как это раньше работало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...