1

提案どおりに VM をインストールし、今この記事を読んでいます。今、私は最初にFFIの例を見ています。ffi.jsexe/フォルダー ( 内)が見つからないghcjs-examples/weblog/ffiので、自分でコンパイルしようとしました。しかし、次のエラーで失敗します:

setTimeout($c, $1);: invalid placeholder, check function type: "$c"

にあるものを簡単に思い出してffi.hsください:

{-# LANGUAGE JavaScriptFFI, CPP #-}

module Main where

#ifdef __GHCJS__
foreign import javascript unsafe "document.write($1+'<br/>');" writeNumber :: Int -> IO ()
foreign import javascript safe   "setTimeout($c, $1);"         delay       :: Int -> IO ()
#else
writeNumber = error "writeNumber: only available from JavaScript"
delay = error "delay: only available from JavaScript"
#endif

main :: IO ()
main = mapM_ (\x -> writeNumber x >> delay 1000) [1..1000]

申し訳ありませんが、私は Haskell と FP にまったく慣れていないので、今のところ魔法のようなものがあります。それ自体には引数が 1 つしかないため意味があり、実行されるコードがないため、 に置き換えまし$cた。コンパイルはできますが、ブラウザで開くと、すべての数値が即座に出力されます。また、少し前の質問があります。何らかのハンドラー (整数値) を返し、コールバック関数とミリ秒単位の時間を受け取りますよね? では、なぜ、たとえば ではなく、この型シグネチャを持っているのでしょうか?nulldelaysetTimeoutdelayInt -> IO ()IO () -> Int -> IO Int

主な問題は、なぜコンパイルを拒否するのかということです。この例は時代遅れで、何かが変更されていghcjsますか?

GHC   7.7.2
GHCJS 0.1.0
4

1 に答える 1

4

現在の VM では、interruptible代わりsafeに外部インポートに書き込むと機能します。

于 2014-01-30T20:12:54.893 に答える