在nodejs的服务器端,有没有可能需要其他简单的javascript文件中的fay编译的模块?那就太好了。也许编译器中有一些选项可以生成与commonjs兼容的模块?
发布于 2013-07-20 10:00:55
这可能不是一个好主意,因为这在很大程度上取决于生成的代码的特性。
请注意以下几点:
无论编译的模块的名称是什么,fay都会实例化到变量main.
require的返回值是模块的modules.export (它最初是与export相同的对象--但不一定保持原样)。
var声明其作用域之前使用。引用的变量是相同的。main.不关心它的源顺序,也不关心运行时发生的一切。
--library)可以实例化一个对象并执行它值得注意的是,这意味着我们可以在main中修改module.exports或exports以导出fay代码。当然,我们必须使用ffi,但这是一件相当简单的事情;以下代码在没有--library的情况下编译(是的,这有点违反直觉,确实证明了这是一个令人讨厌的黑客攻击的假设,不是吗):
import FFI
main :: Fay ()
main = ffi "module.exports = main"当require'd from node时,返回的对象是
{ 'Main$main':
{ forced: true,
value: { value: [Circular] } },
_: [Function: Fay$$_],
'$': [Function: Fay$$$],
'$fayToJs': [Function: Fay$$fayToJs],
'$jsToFay': [Function: Fay$$jsToFay] }有了Fay内部表示的工作知识,就有可能(尽管可能太费力了)为所有强制thunk之类的东西编写一个javascript包装器。
(我们可以做更多的工作--实际上,只要多做一点ffi工作,我们就可以把所有的绑定都写成ffi代码。不过,这可能有点傻。)
发布于 2013-06-23 18:50:19
可以从javascript中使用fay代码,但目前它有点冗长,您需要使用完全限定名称并手动强制函数调用。
var m = new Main();
document.body.innerHTML = "The 10th fibonacci number is : " + m._(m.Main$fibN(9));目前一切都在Main内部,我们想要分离每个模块的编译,这样每个模块都可以单独输出。(然后我们也可以迁移到haskell-packages)
然后,我们需要能够输出一个包装器,该包装器为每个模块执行强制和类型转换,因此当从JavaScript调用时,您不需要手动执行此操作。
https://stackoverflow.com/questions/17255718
复制相似问题