How to write a lazy variant ?

Dmitry Astapov
04 Dec 2001 16:28:59 +0200

Consider the following functions:

readRecFile fname =
    do ifh <- openFile fname ReadMode
       readRecords ifh

readRecords ifh =
    do x <- decodeNextRecord ifh
       more  <- isEof ifh
       if (more == False) 
         then return [x]
         else do rest <- readRecords ifh
                 return (x:rest)

They allow me to read contest of file fname into a list of data
structures. But "do rest <- readRecords ifh ; return (x:rest)" part makes
them behave non-lazily. Maybe I'm just too tired right now, but it escapes
me how can I write a lazy variant of those functions, so that they will
behave like getContents. Does anyone have a clue?

Dmitry Astapov //ADEpt                               E-mail:
GPG KeyID/fprint: F5D7639D/CA36 E6C4 815D 434D 0498  2B08 7867 4860 F5D7 639D