1 -- LML original: Sandra Foubister, 1990 2 -- Haskell translation: Colin Runciman, May 1991 3 4 module Interstate(inter) where 5 6 inter :: (a->[b]) -> (a->c->Bool) -> (a->c->([b],a,c)) -> (a->c->[b]) 7 inter prompt endp transact = 8 interprog 9 where 10 interprog state inpt = 11 prompt state ++ 12 if endp state inpt then [] 13 else response ++ interprog newstate restofinput 14 where 15 (response,newstate,restofinput) = transact state inpt 16 17 18