mctague@one.net wrote:
Is there a more memory-efficient approach, perhaps exploiting laziness somehow?
The libraries supplied with HBC (*) include a function called readListLazily, which I have taken the liberty to enclose below. Hopefully, it will help you solve the problem. Regards, Thomas Hallgren (*) See http://www.haskell.org/implementations.html ------------------------------------------------------------------------ -- Copyright (c) 1982-1999 Lennart Augustsson, Thomas Johnsson -- See LICENSE for the full license. -- -- Read a list lazily (in contrast with reads which requires -- to see the ']' before returning the list. readListLazily :: (Read a) => String -> [a] readListLazily cs = case lex cs of [("[",cs)] -> readl' cs _ -> error "No leading '['" where readl' cs = case reads cs of [(x,cs)] -> x : readl cs [] -> error "No parse for list element" _ -> error "Ambigous parse for list element" readl cs = case lex cs of [("]",_)] -> [] [(",",cs)] -> readl' cs _ -> error "No ',' or ']'"