【发布时间】:2012-03-13 01:23:27
【问题描述】:
我正在将一些 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 []
T3 和 T4 是一回事吗?
【问题讨论】:
标签: collections types f# f#-interactive