在scalaz中更像haskell的应用语法

Kon*_*tov 5 scala scalaz

我正在尝试使用scalaz.我尝试在应用代码中编写代码.我写了这样的代码:

val max: Option[Int] = (a |@| b) { math.max(_, _) }
Run Code Online (Sandbox Code Playgroud)

我非常不喜欢这段代码.我想编码更接近Haskell风格的代码,如下所示:

val max: Option[Int] = { math.max(_, _) } <$> a <*> b
Run Code Online (Sandbox Code Playgroud)

这可能吗.为什么scalaz没有这样实现呢?

Did*_*ont 7

Scala的类型推断比Haskell更有限(标识符重载,其中JVM是其中一个原因).推理从左向右流动,并且函数的参数类型可以从先前的上下文推导出来(如果在定义的位置,预期具有arg类型A的函数),而不是从它们如何在定义.Scalaz语法使参数类型可用.反转它会在大多数情况下迫使你编写函数参数类型,例如

{math.max(_: Int, _: Int) } <$> a <*> b
Run Code Online (Sandbox Code Playgroud)