open Types let rec filter instream snos = if snos = [] then [< >] else match instream with parser | [< 'page ; rest >] -> if List.exists (fun a -> a = page.serialno) snos then begin let snos2 = if page.eos then List.filter (fun a -> a != page.serialno) snos else snos in [< 'page ; filter rest snos2 >] end else [< filter rest snos >] | [< >] -> [< >]