let cycle x = Seq.initInfinite (fun _ -> x) |> Seq.concat
let zipWith f xs ys = Seq.zip xs ys |> Seq.map (fun (x,y) -> f x y)
let numbers = seq [1 .. 100] |> Seq.map string
let fizz = seq ["";"";"fizz"] |> cycle
let buzz = seq ["";"";"";"";"buzz"] |> cycle
let fizzBuzz = zipWith (+) fizz buzz |> zipWith max numbers
let result = fizzBuzz |> Seq.take 100 |> Seq.toList
printfn "%A" result
|