[Haskell-cafe] striping non-alphanumericals

Joerg Fritsch fritsch at joerg.cc
Wed Dec 11 21:37:55 UTC 2013


I have the following code snippet:

import System.IO

import Data.String.Utils 

main = withFile "test.txt" ReadMode $ \handle -> do

           xs <- getwords handle

           sequence_ $ map putStrLn (escapeRe xs)

getwords :: Handle -> IO [String]

getwords h = hGetContents h >>= return . words

 

What I want to to there is to get i.e. "word," or "word!" etc. and arrive at
"word". I understand that escapeRe may do this. However, I always get some
sort of mismatch errors like this:

 

test.hs:6:38:

    Couldn't match type `Char' with `[Char]'

    Expected type: [String]

      Actual type: String

    In the return type of a call of `escapeRe'

    In the second argument of `map', namely `(escapeRe xs)'

    In the second argument of `($)', namely

      `map putStrLn (escapeRe xs)'

test.hs:6:47:

    Couldn't match type `[Char]' with `Char'

    Expected type: String

      Actual type: [String]

    In the first argument of `escapeRe', namely `xs'

    In the second argument of `map', namely `(escapeRe xs)'

    In the second argument of `($)', namely

      `map putStrLn (escapeRe xs)'

Now I have three questions:

1.      Is escapeRe the right function to use here?

2.      What do I do wrong?

3.      I read in the Real World Haskell book that actually all these
file/string operations are very very slow. The recommendation is to work
with bytestrings instead. Is there any (fast) way to strip
non-alphanumericals from bytestrings?

 

Thanks,

--Joerg

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20131211/98992b46/attachment.html>


More information about the Haskell-Cafe mailing list