在Haskell中, f $ g a = f (g a) Unison中有这样的右关联运算符吗?
f $ g a
f (g a)
有几个选择。
您可以使用 let 例如, f let g a 与 f (g a) 这是因为 让 打开a block ,这是一系列语句。在这种情况下,块中唯一的语句是表达式 g a 该值成为块返回的值。所以你可以写例如。
let
f let g a
让
g a
isSome let head let List.map increment [1,2,3]
有一个函数应用程序运算符:
(base.Function.<|) : (a ->{e} b) -> a ->{e} b
这样你就可以写作了 f <| g a 。但是,Unison没有任何运算符优先级规则,因此 所有操作员都在左边 。所以,如果你想做嵌套应用程序,比如
f <| g a
isSome <| (head <| List.map increment [1,2,3])
无论如何,你都需要使用括号。但是,由于所有运算符都关联到左侧,因此您可以只使用 |> 操作员改为:
|>
(base.Function.|>) : a -> (a ->{e} b) ->{e} b
然后你可以写(翻转函数的顺序):
[1,2,3] |> List.map increment |> head |> isSome
您可以使用函数组合:
(base.Function.<<) : (b ->{e} c) -> (a ->{e} b) -> a ->{e} c
这可以让你写作
isSome << head << List.map increment <| [1,2,3]
这相当于Haskell表达式:
isJust . listToMaybe . map (+1) $ [1,2,3]