Подтвердить что ты не робот

Все совпадения регулярного выражения в Haskell

В соответствии с рядом обучающих программ (в том числе Real World Haskell) можно, используя ghci, сделать следующие

ghci > :m Text.Regex.Posix
ghci > "foo foo foo" =~ "foo" :: [String]
["foo","foo","foo"]

Тем не менее, когда я пытаюсь это сделать, он дает

No instance for (RegexContext Regex [Char] [String])
  arising from a use of `=~'
Possible fix:
  add an instance declaration for
  (RegexContext Regex [Char] [String])
In the expression: "abc" =~ "ab" :: [String]
In an equation for `it': it = "abc" =~ "ab" :: [String]

Каков правильный способ получения списка всех совпадений в haskell?

4b9b3361

Ответ 1

Библиотеки регулярных выражений могут быть несколько запутанными с их перегруженными типами возврата, но для получения всех совпадений вам просто нужно, чтобы тип возврата AllTextMatches, например:

Prelude> :m + Text.Regex.Posix
Prelude Text.Regex.Posix> getAllTextMatches $ "foo foo foo" =~ "foo" :: [String]
["foo","foo","foo"]