2014-02-25 50 views
0

我一直在嘗試使用Javascript haskell-js庫,但我偶然發現了coffeescript REPL的奇怪行爲。haskell-js coffeescript REPL中的示例中斷,但從文件或節點REPL

隨着節點,下面的例子中按預期工作:

$ node 
require('haskell'); 
> [1,2,3].map('+1'); 
[ 2, 3, 4 ] 

但隨着CoffeeScript的,它失敗:

$ coffee -v 
CoffeeScript version 1.6.1 
$ coffee 
require 'haskell' 
[1,2,3].map('+1') 
TypeError: +1 is not a function 
at Array.map (native) 
at repl:3:15 
at REPLServer.replDefaults.eval (/usr/local/lib/node_modules/coffee-script/lib/coffee-script/repl.js:27:28) 
at repl.js:239:12 
at Interface.<anonymous> (/usr/local/lib/node_modules/coffee-script/lib/coffee-script/repl.js:55:9) 
at Interface.EventEmitter.emit (events.js:95:17) 
at Interface._onLine (readline.js:202:10) 
at Interface._line (readline.js:531:8) 
at Interface._ttyWrite (readline.js:760:14) 
at ReadStream.onkeypress (readline.js:99:10) 

然而,它的作品當我再次從文件中運行它:

$ cat test.coffee 
require 'haskell' 
console.log([1,2,3].map('+1')) 

$ coffee test.coffee 
[ 2, 3, 4 ] 

編譯爲test.js會導致以下文件:

$ coffee -c test.coffee && cat test.js 
// Generated by CoffeeScript 1.6.1 
(function() { 
    require('haskell'); 
    console.log([1, 2, 3].map('+1')); 
}).call(this); 

現在我很困惑。這不是我測試的嗎? (console.log包裝在REPL中也沒有任何區別。)

你能幫我理解爲什麼它在coffeescript REPL中不起作用嗎?

回答

2

當我使用nesh外殼重複你的情況,我得到了同樣的錯誤

1800:~/myjs$ nesh -c 
CoffeeScript 1.7.1 on Node v0.10.1 
.... 
coffee> [1,2,3].map('+1') 
TypeError: +1 is not a function 

但是,當我直接用coffee REPL運行,它工作正常

1802:~/myjs$ coffee -v 
CoffeeScript version 1.7.1 
1802:~/myjs$ coffee 
coffee> require 'haskell' 
... 
coffee> [1,2,3].map('+1') 
[ 2, 3, 4 ] 

的情況下它作品

coffee> console.log [1,2,3].map.toString() 
function() { 
     var args, fn; 

     fn = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : []; 
     return _method.call.apply(_method, [this, fn.toFunction()].concat(__slice.call(args))); 
     } 

它不是:

coffee> [1,2,3].map.toString() 
'function map() { [native code] }' 

換句話說,所述haskell版本的.map並沒有取代天然之一。所以我們需要檢查如何加載haskellnesh沒有coffee覆蓋也有這個負載問題。我敢打賭,更新你的Coffeescript將解決這個問題。

編輯:

haskell通過修改global自行安裝。

有咖啡拉入請求大約6個月前(1.6.3和1.7.0之間),https://github.com/jashkenas/coffee-script/pull/3150 ,解決使用中的REPL 「全球」背景下的「讓REPL使用全局上下文與節點REPL保持一致。「

+0

可能,我的咖啡文本版本是1.6.1(我編輯了我的文章)。當我有權訪問更新的coffeescript版本時,我會試一試。 –

+0

'haskell'的'package.json'指定''coffee-script':「〜1.6.2」,'。它是用咖啡寫的。 https://github.com/arthur-xavier/haskell-js – hpaulj

+0

確認。它適用於更新的咖啡腳本版本。 –