需要来自nodejs的fay代码

是否有可能要求从nodejs服务器端的其他简单的JavaScript文件的Fay编译模块? 那太好了。 也许在编译器中有一些选项可以生成commonjs兼容的模块?

这可能是一个坏主意,因为它很大程度上取决于fay生成的代码的特性。

请注意以下几点:

  • 无论编译模块的名称如何,实例化到variablesmain
  • 在node.js下,来自require的返回值是模块的modules.export (最初与export对象相同 – 但不一定保持这种方式)。
  • 在用var声明范围之前,可以使用一个variables。 引用的variables是相同的。 它不关心它的源代码sorting,以及运行时发生的一切。
  • Fay默认情况下(即没有 – 库)可以实例化一个对象并执行main

值得注意的是,这意味着我们可以在main中修改module.exportsexports来导出fay代码。 当然,我们必须使用ffi,但这是一件相当简单的事情。 以下是没有 – --library (这是,是轻微的违反直觉,真的可以证实这是一个讨厌的黑客的假设,编译),在某种程度上工作:

 import FFI main :: Fay () main = ffi "module.exports = main" 

当从节点require时,返回的对象是有效的

 { 'Main$main': { forced: true, value: { value: [Circular] } }, _: [Function: Fay$$_], '$': [Function: Fay$$$], '$fayToJs': [Function: Fay$$fayToJs], '$jsToFay': [Function: Fay$$jsToFay] } 

有了Fay的内部表示方法的工作知识,就可以(尽pipe也许是太多的努力)为所有的thunk-forcing等编写一个javascript包装器。

(我们可以做更多的事情 – 事实上,如果有更多的工作,我们可以把所有的绑定书写成ffi代码,但是这将会是微不足道的。

可以使用javascript中的fay代码,但目前有点冗长,您需要使用完全限定名称并手动强制调用函数。

 var m = new Main(); document.body.innerHTML = "The 10th fibonacci number is : " + m._(m.Main$fibN(9)); 

现在Main里面的东西都是平的,我们要把每个模块的编译分开,这样每个模块都可以单独输出。 (那么我们也可以迁移到haskell-packages )

然后,我们需要输出一个包装器,它可以为每个模块强制转换并input转换types,所以当你从JavaScript调用时不需要手动转换。

这里有一些相关的门票: #279,260

Interesting Posts