Comprehensions
List comprehensions are a syntactic construct for creating lists. Use [ .. ] for lists, [| .. |] for arrays, seq { .. } for sequences.
Example
// standard syntax
> [for i in 1..10 do yield i * i];;
val it : int list = [1; 4; 9; 16; 25; 36; 49; 64; 81; 100]
// shortcut for simple comprehensions
> [for i in 1..10 -> i * i];;
val it : int list = [1; 4; 9; 16; 25; 36; 49; 64; 81; 100]
> [for i in 1..10 do
if i % 2 = 0 then yield i * i];;
val it : int list = [4; 16; 36; 64; 100]
> [for i in 1 .. 3 do
for j in 1 .. 3 do yield i, j];;
val it : (int * int) list =
[(1, 1); (1, 2); (1, 3); (2, 1); (2, 2); (2, 3); (3, 1); (3, 2); (3, 3)]
// to_list + map + concat
// yield! yields the elements of a collection
> [for i in [|1; 4; 3|] do yield! [1..i]];;
val it : int list = [1; 1; 2; 3; 4; 1; 2; 3]
// That's infinite
> seq {while true do
yield 1
yield 2};;
val it : seq<int> = seq [1; 2; 1; 2; ...]
// filter
> seq {for i in 1..5 do if i <> 2 then yield i};;
val it : seq<int> = seq [1; 3; 4; 5]
> [for c in "hello" -> int c];;
val it : int list = [104; 101; 108; 108; 111]