Hello Under the hood PCRE.regex uses withCStringLen which has the type: withCStringLen :: String -> (CStringLen -> IO a) -> IO a You can see the code here: http://hackage.haskell.org/packages/archive/regex-pcre-builtin/0.94.2.1.7.7/... So the implementation is impure - it is built on impure code. In the Real Word Haskell book, there is another implementation of a PCRE interface, here the authors decided that their use of PCRE is pure. The functions they have that use side effects - allocating memory and freeing it - use the side effects entirely locally inside each function body and the side effects never leak out of any function. http://book.realworldhaskell.org/read/interfacing-with-c-the-ffi.html The implementation from the book is here: http://hackage.haskell.org/package/pcre-light Potentially the author of Text.Regex.PCRE could have decided that the use of PCRE was pure and gone some way to hiding the IO type of withCStringLen and similar functions (withCStringLen already encapsulates its side effects). But as a design decision - if you are using IO it is entirely reasonable to keep within IO even if what you are doing appears pure (and personally I would choose to use the IO version as I like to know when a library I'm using is performing side effects). Best wishes Stephen 2009/12/19 Volkan YAZICI <yazicivo@ttmail.com>:
Hi,
I'm trying to implement FixStyle[1] program of PLEAC[2] for Haskell. (It's missing in the Haskell version of PLEAC.) For this purpose, I needed regular expressions. (Now, I have two problems!) Despite, my code is, IMHO, quite purely functional, Regex.PCRE.String functions totally mess up the design with impure functions they introduce even for really simple string matching stuff.
If you'd check out the sources[3], you'll see below impure functions.
transDictRegex :: IO PCRE.Regex matchRegex :: String -> IO (String, String, String) translate :: String -> IO String
However, if I'm not mistaken, above functions _should_ be absolutely pure. Is it possible to encapsulate impure PCRE functions into their pure equivalents?
BTW, why are PCRE functions impure?
Regards.
[1] http://pleac.sourceforge.net/pleac_perl/strings.html [2] http://pleac.sourceforge.net/ [3] http://hpaste.org/fastcgi/hpaste.fcgi/view?id=14422 _______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners