2012-01-28 11 views
21

Secondo una serie di tutorial (compresa la Real World Haskell) si può, utilizzando ghci effettuare le seguenti operazionitutte le partite di espressione regolare a Haskell

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

Eppure, quando tento questo, produce

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] 

Qual è il modo corretto di ottenere un elenco di tutte le partite in haskell?

+2

possibile duplicato del [ "= ~ "raise" Nessuna istanza per (RegexContext Regex \ [Char \] \ [String \]) "] (http://stackoverflow.com/questions/7636447/raise-no-instance-for-regexcontext-regex-char- string) – ehird

risposta

23

Le librerie regex può essere un po 'di confusione con i loro tipi di ritorno sovraccarico, ma per ottenere tutte le partite Hai solo bisogno di assicurarsi che il tipo di ritorno è AllTextMatches, ad esempio:

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

Bene, questo funziona. Grazie. Hai idea del perché questo non sembra essere menzionato nei tutorial? – archgoon

+8

L'interfaccia regex è stata aggiornata dall'uscita di RWH. – ehird

+0

@ehird Dove posso trovare un riferimento aggiornato? – ApproachingDarknessFish

Problemi correlati