Haskell和Scala的互操作性

5

我是一名Scala初学者,来自面向对象的编程范式。在理解Scala的函数式编程部分时,我被引导到了Haskell - 纯函数式编程语言。

通过探索SO问题和答案,我发现Java - Haskell具有互操作性。

我很好奇是否存在类似的Scala-Haskell互操作性?

一个用Haskell编写的函数库能否在Scala应用程序中使用?

根据Don Stewart所给出的答案:这是可能的。

将Haskell函数库集成到Scala应用程序中会很简单还是需要复杂的调整?

使用集成的Haskell函数库,Scala应用程序将在JVM上运行还是需要不同的安排?


1
如果有Java-Haskell互操作性,那么在Haskell中使用Scala与使用Java没有什么不同。Scala编译成常规的Java类,尽管还有一些来自Scala“内建”支持的额外运行时支持。 - Asherah
2个回答

4
可以做到,但我不知道有任何例子。

4
如果您尝试将JVM和GHC RTS链接在一起,那么这将变得非常复杂。如果您通过协议(例如JSON)进行通信,则会变得更加容易。 - Don Stewart
某种程度上,我的意思是...我几乎想问一下是否将C--等编译为Java字节码会更容易,但重新链接运行时系统(RTS)会使事情变得有趣。 - Louis Wasserman

4
我发现Java和Haskell之间存在互操作性。我很好奇Scala和Haskell之间是否也存在互操作性?
鉴于互操作性是可传递的,而且(hj_interop:Haskell <-> Java)和(js_interop:Java <-> Scala),我们因此得出结论:Haskell<->Scala。
如果你想要Haskell -> Scala,则只需从hj_interop中取出Haskell -> Java,从js_interop中取出Java -> Scala。如果你想要Scala -> Haskell,则只需从js_interop中取出Scala -> Java,从hj_interop中取出Java -> Haskell。
这并不是一个非常详细的解释如何实现Haskell - Scala互操作性,但是鉴于现有的互操作性,您只需按照明显的方式组合它们。据我所知,Scala没有提供任何直接方便的与Haskell互操作的方法,除了提供scalaz以为Scala增加一种类似于Haskell的感觉。Haskell也没有提供任何直接方便的与Scala互操作的方法。

如果使用Scala -> Java(通过js_interop)和Java -> Haskell(通过hs_interop)实现Scala -> Haskell,可能会出现哪些性能问题?这里的主要目的是利用Haskell强大的函数式编程优势。 - Optimight
Scala和Java之间的互操作实际上几乎没有成本。话虽如此,如果你想在Scala中编写类似于Haskell的代码,只需安装Scalaz并编写更多的类型签名即可。 :) - Edward Kmett
你可能会对Frege项目(http://code.google.com/p/frege/)感兴趣,它在JVM上提供了一个非常类似Haskell的语言。我承认Java的互操作性仍有改进的空间,但已经内置,并且编译器会生成非常有趣的Java 文件。 - Landei

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接