let fibs = (1I, 1I) |> Seq.unfold (fun (a,b) -> Some (a, (b,a+b)))
What it does:
The bigint tuple (1I, 1I) is piped into the Seq.unfold function. Seq.unfold takes a function and a seed (the 2-tuple in this case.) The function you pass in should take in as an argument the same type as the seed, so it's the tuple (a,b) as above.
The function returns a 2-tuple option value. An option value is simple None or an actual value. Returning None at any stage will termiante the sequence.
The first value in the returned tuple is the value you want to yield in the sequence. The second value in the tuple is the new accumulator, to be passed into the function on the next iteration of the sequence. In our case, it will be the next iteration of fibonacci, (b, a+b).
F# sequences, obviously, are lazy evaluated. To access the nth value of the sequence, simply use
let nthfib = fibs |> Seq.nth n