2012-06-22 97 views
5

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

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

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

在Scala应用程序中可以使用Haskell编写的函数库吗?

根据唐斯图尔特给出的答案:这是可能的。

Haskell函数库在Scala应用程序中的集成将是直接和容易的,或将需要复杂的调整?

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

+1

如果有Java-Haskell互操作,那么在Haskell中使用Scala应该与使用Java没有区别。 Scala编译为常规Java类,尽管Scala“builtins”提供了额外的运行时支持。 – Ashe

回答

4

我发现Java-Haskell具有互操作性。我很想知道Scala-Haskell的互操作性是否存在?

那么考虑到互操作性是传递的,并考虑到(hj_interop : Haskell <-> Java)(js_interop : Java <-> Scala),我们可以得出结论Haskell <-> Scala

如果你想Haskell -> Scala,然后只取Haskell -> Javahj_interop,并Java -> Scalajs_interop。如果您需要Scala -> Haskell,那么只需从js_interop中获取Scala -> Java,然后从hj_interop中获取Java -> Haskell

这并不是对如何完成Haskell-Scala互操作性的非常直白的解释,但考虑到现有的互操作性,您只需以明显的方式编写它们即可。除了提供scalaz为Scala添加额外的Haskell-y感觉之外,Scala不提供与Haskell的任何直接,方便的互操作性。 Haskell不提供任何直接,方便的与我意识到的Scala的互操作性。

+0

如果Scala - > Haskell是通过使用Scala来实现的 - >来自js_interop的Java,以及来自hs_interop的Java - > Haskell,那么性能问题会是什么。这里的主要目的是为了获得Haskell强大的Functionall编程优势。 – Optimight

+0

scala <-> java interop有效地实现了零成本。所有这一切,如果你想在Scala中编写类似Haskell的代码,只需安装scalaz并编写更多的类型签名。 :) –

+0

您可能对Frege项目感兴趣(http://code.google。com/p/frege /),它在JVM上放置了一种非常类似Haskell的语言。我承认Java的互操作性还有待改进,但是内置了,编译器发出了非常有趣的Java *源*文件。 – Landei

4

这是可能的,但我不知道有任何例子。

+4

如果您尝试将JVM和GHC rts连接在一起,会很复杂。如果你通过协议进行通信,例如JSON。 –

+0

我的意思是...在某些方面,我几乎想问一下,如果将C等编译成Java字节码会更容易,但将RTS链接回来会让事情变得有趣。 –