首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要nodejs中的fay代码

需要nodejs中的fay代码
EN

Stack Overflow用户
提问于 2013-06-23 06:00:33
回答 2查看 185关注 0票数 4

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-20 10:00:55

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

请注意以下几点:

无论编译的模块的名称是什么,fay都会实例化到变量main.

  • Under

  • 中,require的返回值是模块的modules.export (它最初是与export相同的对象--但不一定保持原样)。

  • 变量可以在使用var声明其作用域之前使用。引用的变量是相同的。main.

不关心它的源顺序,也不关心运行时发生的一切。

  • Fay默认情况下(即没有--library)可以实例化一个对象并执行它

值得注意的是,这意味着我们可以在main中修改module.exportsexports以导出fay代码。当然,我们必须使用ffi,但这是一件相当简单的事情;以下代码在没有--library的情况下编译(是的,这有点违反直觉,确实证明了这是一个令人讨厌的黑客攻击的假设,不是吗):

代码语言:javascript
复制
import FFI

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

require'd from node时,返回的对象是

代码语言:javascript
复制
{ 'Main$main': 
   { forced: true,
     value: { value: [Circular] } },
  _: [Function: Fay$$_],
  '$': [Function: Fay$$$],
  '$fayToJs': [Function: Fay$$fayToJs],
  '$jsToFay': [Function: Fay$$jsToFay] }

有了Fay内部表示的工作知识,就有可能(尽管可能太费力了)为所有强制thunk之类的东西编写一个javascript包装器。

(我们可以做更多的工作--实际上,只要多做一点ffi工作,我们就可以把所有的绑定都写成ffi代码。不过,这可能有点傻。)

票数 1
EN

Stack Overflow用户

发布于 2013-06-23 18:50:19

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

代码语言:javascript
复制
var m = new Main();
document.body.innerHTML = "The 10th fibonacci number is : " + m._(m.Main$fibN(9));

目前一切都在Main内部,我们想要分离每个模块的编译,这样每个模块都可以单独输出。(然后我们也可以迁移到haskell-packages)

然后,我们需要能够输出一个包装器,该包装器为每个模块执行强制和类型转换,因此当从JavaScript调用时,您不需要手动执行此操作。

这里有一些相关的票证:#279260

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17255718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档