suave.io 中奇怪的 f# 列表表示法
strange f# list notation in suave.io
在 suave.io 中,我们可以使用具有 Types.WebPart list -> Types.WebPart
类型的 choose
组合子。
他们网站上的例子表明我可以像这样使用这个组合器:
choose
[ path "/hello" >>= OK "Hello GET"
path "/goodbye" >>= OK "Good bye GET" ]
这个列表符号看起来很奇怪,因为它不需要用分号分隔元素。然而,我无法在不同的上下文中以这种方式使用它。
所以以下工作:
> choose
[OK ""
OK ""];;
val it : Types.WebPart = <fun:choose@47>'
以及
> choose [OK "" ;OK ""];;
val it : Types.WebPart = <fun:choose@47>
但以下不编译:
>choose [OK "" OK ""];; //ERROR
> [OK ""
OK ""];; //ERROR
那么,这个符号是如何工作的?
如果你看看你的最后一个例子
[OK ""
OK ""]
你应该看到最后一行:OK ""
不在上一行 OK
的正下方:[OK ""
(它是左边的一个)
这应该会给你一个提示 ;)
你只需对齐同一列中的元素(推荐:只使用空格)
这就是你通常写作的原因
[
OK ""
OK ""
]
而不是在 [
之后开始第一个元素 - 或者类似
[ OK ""
; OK "" ]
也是,但我认为这不是 F# 的惯用语。
备注
这也适用于记录语法:
{
surname = "Smith"
givenname = "Adam"
}
在 suave.io 中,我们可以使用具有 Types.WebPart list -> Types.WebPart
类型的 choose
组合子。
他们网站上的例子表明我可以像这样使用这个组合器:
choose
[ path "/hello" >>= OK "Hello GET"
path "/goodbye" >>= OK "Good bye GET" ]
这个列表符号看起来很奇怪,因为它不需要用分号分隔元素。然而,我无法在不同的上下文中以这种方式使用它。 所以以下工作:
> choose
[OK ""
OK ""];;
val it : Types.WebPart = <fun:choose@47>'
以及
> choose [OK "" ;OK ""];;
val it : Types.WebPart = <fun:choose@47>
但以下不编译:
>choose [OK "" OK ""];; //ERROR
> [OK ""
OK ""];; //ERROR
那么,这个符号是如何工作的?
如果你看看你的最后一个例子
[OK ""
OK ""]
你应该看到最后一行:OK ""
不在上一行 OK
的正下方:[OK ""
(它是左边的一个)
这应该会给你一个提示 ;)
你只需对齐同一列中的元素(推荐:只使用空格)
这就是你通常写作的原因
[
OK ""
OK ""
]
而不是在 [
之后开始第一个元素 - 或者类似
[ OK ""
; OK "" ]
也是,但我认为这不是 F# 的惯用语。
备注
这也适用于记录语法:
{
surname = "Smith"
givenname = "Adam"
}