F# 中括号的真正含义是什么?

Sco*_*rod 1 f#

我需要帮助理解以下陈述:

let dictionary = [ for i in 1..4 -> i, true ] |> Map.ofSeq
Run Code Online (Sandbox Code Playgroud)

具体来说,我对有关使用括号的规则感到困惑。

  1. F# 中括号的真正含义是什么?
  2. 括号内包含什么类型的集合/集合?(即数组、seq、列表等)
  3. 任何返回集合的表达式都可以在括号内使用吗?

笔记

我对 F# 一无所知。所以请原谅我的无知。

Fun*_*l_S 5

这些是 F# 中使用的括号

()

(1, 2)                      // Tuple (separator is a comma)
()                          // empty tuple, called unit
Run Code Online (Sandbox Code Playgroud)

[]

[  1; 2  ]                  // List
[]                          // List.empty 

[| 1; 2 |]                  // Array
[||]                        //  Array.empty
Run Code Online (Sandbox Code Playgroud)

{}

seq { yield 1; yield 2  }   // Sequence
Seq.empty                   // empty Sequence, not {} 

async { return 1 }          // Computation Expressions, e.g. async

type record =               // Record type definition
    { Name : string 
      Age  : int
    }
Run Code Online (Sandbox Code Playgroud)

<>

type A<'T> = A of 'T              
Run Code Online (Sandbox Code Playgroud)

类型可以轻松组合

let composition = 
    async { return
                [| 
                    [ ("A",1); ("B",2) ]
                    [ ("C",3) ] 
                |]
    }
// val composition : Async<(string * int) list []>
Run Code Online (Sandbox Code Playgroud)

  • 虽然 `()` 看起来是一个空元组,但 unit 是与 [`System.Tuple`](https://msdn.microsoft.com/en-us/library/system.tuple.aspx) 完全独立的类型 (没有类型参数)。鉴于语法重叠,这一点尚不清楚。 (2认同)