Efficient way to perform independent processing of list from IO?

Thomas Hallgren [email protected]
Wed, 29 Aug 2001 13:43:12 -0700


[email protected] 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 ']'"