Я портирую некоторый код на Haskell на F #, но немного запутался из-за доступных коллекций и их подписей в F #. Насколько я понимаю, элементы в списках заключены между [], последовательностями между {} и массивами между [| |]. В F # Interactive я получаю следующее, когда создаю каждый контейнер с 5 дюймами.
// List
> [1..5]
val it : int list = [1; 2; 3; 4; 5]
// Seq
> {1..5}
val it : seq<int> = seq [1; 2; 3; 4; ...]
// Array
> [|1..5|]
val it : int [] = [|1; 2; 3; 4; 5|]
Что меня смущает, так это то, что сигнатура типа для массивов int []
. Может быть, тип int array
или int [||]
будет менее запутанным? Глядя на сигнатуру типа, я склонен думать, что это список, особенно потому, что пустой список также представлен как [].
Один вопрос здесь: почему тип последовательности seq<int>
, а не int seq
. Я предполагаю, что это может быть синтаксическим сахаром, но, возможно, за этим стоит что-то еще.
Теперь создаем новые типы, используя коллекцию:
type T1 = T1 of int list
type T2 = T2 of int seq // becomes type T2 = T2 of seq<int>
type T3 = T3 of int array
type T4 = T4 of int []
Т3 и Т4 - это одно и то же?