提案どおりに 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
た。コンパイルはできますが、ブラウザで開くと、すべての数値が即座に出力されます。また、少し前の質問があります。何らかのハンドラー (整数値) を返し、コールバック関数とミリ秒単位の時間を受け取りますよね? では、なぜ、たとえば ではなく、この型シグネチャを持っているのでしょうか?null
delay
setTimeout
delay
Int -> IO ()
IO () -> Int -> IO Int
主な問題は、なぜコンパイルを拒否するのかということです。この例は時代遅れで、何かが変更されていghcjs
ますか?
GHC 7.7.2
GHCJS 0.1.0