2012-01-28 12 views
21

Według liczby ćwiczeń (w tym Real World Haskell) można, za pomocą ghci wykonaj następujące czynnościWszystkie mecze regex w Haskell

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

Jednak gdy próbuję to, że daje

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] 

Jaki jest prawidłowy sposób uzyskania listy wszystkich meczów w haskell?

+2

możliwym duplikatu [ "= ~ "raise" Brak wystąpienia dla (RegexContext Regex \ [Char \] \ [String \]) "] (http://stackoverflow.com/questions/7636447/raise-no-instance-for-regexcontext-regex-char- string) – ehird

Odpowiedz

23

regex biblioteki mogą być nieco mylące z ich przeciążonych rodzajów powrotów, ale aby uzyskać wszystkie mecze po prostu trzeba upewnić się, że typ zwracany jest AllTextMatches, na przykład:

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

Cóż, to działa. Dziękuję Ci. Czy masz jakiś pomysł, dlaczego nie wspomina się o tym w tutorialach? – archgoon

+8

Interfejs regex został zaktualizowany od czasu pojawienia się RWH. – ehird

+0

@ehird Gdzie mogę znaleźć aktualne odniesienie? – ApproachingDarknessFish

Powiązane problemy