シーケンスとリストの違い

動かしてみてよくわかりました。

シーケンス

let seq1 = 
seq { for i in 1..3 do
printfn "generating... %d" i
yield i }

let seq2 =
seq1
|> Seq.map (fun x -> printfn "1st map %d" x ; x)
|> Seq.map (fun x -> printfn "2nd map %d" x;x)

let seq3 = Seq.map (fun x -> printfn "3rd map %d" x ; x) seq2

let seq4 = Seq.map (fun x -> printfn "4th map %d" x; x) seq3

Seq.iter ignore seq4

出力結果
generating... 1
1st map 1
2nd map 1
3rd map 1
4th map 1
generating... 2
1st map 2
2nd map 2
3rd map 2
4th map 2
generating... 3
1st map 3
2nd map 3
3rd map 3
4th map 3

各要素について生成からmap関数の適用までをひと続きに行い、ある要素を処理し終わってから次の要素を処理しています。実際に処理が出力が行われるのは、この例だと一番最後のSeq.iterを実行したときです。

リスト

let list1 =
[for i in 1..3 do
printfn "generating... %d" i
yield i ]

let list2 =
list1
|> List.map (fun x -> printfn "1st map %d" x ; x)
|> List.map (fun x -> printfn "2nd map %d" x;x)

let list3 = List.map (fun x -> printfn "3rd map %d" x ; x) list2

let list4 = List.map (fun x -> printfn "4th map %d" x; x) list3

出力結果
generating... 1
generating... 2
generating... 3
1st map 1
1st map 2
1st map 3
2nd map 1
2nd map 2
2nd map 3
3rd map 1
3rd map 2
3rd map 3
4th map 1
4th map 2
4th map 3

全要素について生成し終わった後に、map関数をそれぞれ適用しています。