let sa = [ 1 .. 10 ]

let iter2 fs xs =
    let apply1thenn fs  = 
        let last = ref Unchecked.defaultof<_>
        let unforget fs = 
            seq { for x in fs do last := x; yield x }
        let rec forever f = seq { yield f; yield! forever f}

        seq { yield! unforget fs
              yield! forever !last} 

    let fs = (apply1thenn fs)
    Seq.zip fs xs |> Seq.iter(fun (f,e) -> f e)

sa |> iter2 [(fun x -> printfn "%A" x); (fun x -> printfn "another %A" x)]