2012-01-28 35 views
21

Theo một số hướng dẫn (bao gồm cả Real World Haskell) người ta có thể sử dụng ghci thực hiện như sauTất cả các trận đấu của regex trong Haskell

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

Tuy nhiên, khi tôi cố gắng này, nó mang lại

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] 

Cách chính xác để có danh sách tất cả các kết quả phù hợp trong haskell là gì?

+2

thể trùng lặp của [ "= ~ "nâng cao" Không có cá thể nào cho (RegexContext Regex \ [Char \] \ [String \]) "] (http://stackoverflow.com/questions/7636447/raise-no-instance-for-regexcontext-regex-char- string) – ehird

Trả lời

23

Các thư viện regex có thể hơi khó hiểu với kiểu trả về quá tải của họ, nhưng để có được tất cả các trận đấu bạn chỉ cần đảm bảo rằng các kiểu trả về là AllTextMatches, ví dụ:

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

Vâng, nó hoạt động. Cảm ơn bạn. Bạn có bất kỳ ý tưởng tại sao điều này dường như không được đề cập trong hướng dẫn? – archgoon

+8

Giao diện regex đã được cập nhật kể từ khi RWH xuất hiện. – ehird

+0

@ehird Tôi có thể tìm thấy tài liệu tham khảo cập nhật ở đâu? – ApproachingDarknessFish

Các vấn đề liên quan