
I'm fairly new, so I can't fully explain the behavior you got, but I know at least one thing you did wrong: prad wrote:
i have this:
main = do
c <- readFile "test.txt" let tleP = "<title>\n(.*)\n</title>" let tle = c=~tleP::[[String]] putStrLn $ tle!!0!!1
let g = xtract tleP c putStrLn $ show g
xtract p c = do let r = c=~p::[[String]] return r!!0!!0!!1
You probably mean to write
xtract p c = r !! 0 !! 1 where r = c=~p::[[String]]
You used do-notation when you meant to write a simple function. The use of "return" in do-notation is one point of confusion with beginners. It does not operate like "return" in an imperative language. I'm not sure what your 'xtract' did, but the compiler probably accepted the do-notation because it specified a list monad of some sort. I recommend you pay close attention to introductory examples, noticing in particular when they are unlike imperative languages. Find some tutorials on monads and the do-notation. Best, Mike