Node.js 需要来自nodejs的fay代码

Node.js 需要来自nodejs的fay代码,node.js,fay,Node.js,Fay,在nodejs服务器端是否可能需要fay编译的来自其他简单javascript文件的模块?那太好了。也许编译器中有一些选项可以生成与commonjs兼容的模块 可以使用javascript中的fay代码,但目前有点冗长,需要使用完全限定名并手动强制函数调用 var m = new Main(); document.body.innerHTML = "The 10th fibonacci number is : " + m._(m.Main$fibN(9)); 目前,Main内部的一切都是扁平的

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

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

var m = new Main();
document.body.innerHTML = "The 10th fibonacci number is : " + m._(m.Main$fibN(9));
目前,Main内部的一切都是扁平的,我们希望将每个模块的编译分开,这样每个模块都可以单独输出。(然后我们也可以迁移到)

然后,我们需要输出一个包装器,该包装器对每个模块进行强制和类型转换,这样在从JavaScript调用时就不需要手动进行转换


以下是一些相关的问题:,

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

注意以下几点:

  • 不管编译模块的名称如何,fay都会实例化到变量
    main
  • 在node.js下,
    require
    的返回值是模块的
    modules.export
    (它最初是与
    export
    相同的对象,但不一定保持这种状态)
  • 变量可以在使用
    var
    声明其作用域之前使用。引用的变量相同。它不关心源代码的顺序,也不关心运行时发生的一切
  • 默认情况下,Fay(即没有
    --库
    )可以实例化一个对象并执行
    main
值得注意的是,这意味着我们可以在
main
中修改
module.exports
exports
以导出fay代码。当然,我们必须使用外国金融机构,但这是一件相当简单的事情;在某种程度上,以下在编译时没有使用
--library
(是的,这有点违反直觉,并且确实证实了这是一个令人讨厌的黑客行为的假设,不是吗):

import FFI

main :: Fay ()
main = ffi "module.exports = main"
require
'd来自节点时,返回的对象是

{ 'Main$main': 
   { forced: true,
     value: { value: [Circular] } },
  _: [Function: Fay$$_],
  '$': [Function: Fay$$$],
  '$fayToJs': [Function: Fay$$fayToJs],
  '$jsToFay': [Function: Fay$$jsToFay] }
有了Fay内部表示的实用知识,就有可能(尽管可能太费劲)为所有thunk强制等编写javascript包装


(我们可以做得更多——事实上,再多做一点ffi工作,我们就可以把所有绑定都写成ffi代码。不过这有点傻。)

谢谢你的回复。目前,我有很多代码是用coffeescript编写的,并在服务器上的node.js环境中执行。由于缺乏良好的类型检查系统和haskell的其他优点,我想尝试在faylang中重写一些单独的模块。现在,我不知道如何从我的旧代码中与这些模块交互。如何导出此主功能?当您实例化模块时,将导出Fay源中主模块导出的所有内容<代码>var m=新主();m、 _uz(m.main)应该注意,tricknodejs不会让这种全局范围的污染飞起来——fay编译的模块基本上都是文件范围的,这是一种无用的包含。啊,是的,当然。新模块的生成已经基本完成,因此应该添加一个--node标志或类似标志,以便为所有模块生成导出语句。聪明:)编写包装器是一项工作,但使用新的代码生成器应该不会太难。有了一个标志,编译器可以为每个Fay模块生成严格的模块,这些模块可以适当地强制和转码。