問題タブ [ghcjs]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
haskell - GHCJS/Haste は自分自身をコンパイルできますか?
もしそうなら、私のプロジェクトの (Haskell) 構成を変更して、人々に私のプロジェクトをいじってもらうことができます: ブラウザーで再コンパイルし、ブラウザーで再実行します。速度は気にしません。基本的にセットアップが難しいデスクトッププロジェクトをブラウザーでデモできるようにしたいだけです。そのため、新しいユーザーは、セットアップなしで数秒以内に気に入ったかどうかを確認できます。
それはなんてクールでしょう!
私が読んだことによると、GHCJS は STG を JavaScript にコンパイルします。GHC API を使用していると書かれているので、他の Haskell ライブラリと同様に、それを JavaScript にコンパイルできるはずです。(そうですか?) GHC ランタイムには C がたくさんありますが、コンパイラ自体は純粋な Haskell であるというのは本当ですか?
それで:
- GHCJS は自分自身を JavaScript にコンパイルできますか?
- Haste は自分自身を JavaScript にコンパイルできますか?
- これらのいずれかが実行されましたか? (それがhttp://haste-lang.org/try/の仕組みですか? ネットワークが必要なようです。)
haskell - .cabal ファイル内の異なるターゲットに対して 2 つの異なるコンパイラを使用する方法は?
実行するcabal build
と、Haskell コンパイラを使用して、実行可能ファイルやテスト スイートを .cabal ファイルにビルドします。
さまざまなターゲットにどのコンパイラを使用するかを制御できますか? 理想的には、同じ.cabal
ファイルで ghc と ghcjs を使用する個別のビルド ターゲットが必要です。誰かが同じプロジェクトでghcとhugsまたはghcの2つのバージョンを使いたいと思うかもしれません。これは現在可能ですか?
また、cabal は実行時に使用するコンパイラをどのように決定しcabal build
ますか? ~/.cabal/config
ファイルにコンパイラ オプションがあることを確認しましたが、それを からghc
に変更しghcjs
てコメントを外しても、機能が変わるようには見えませんでしたcabal build
。
haskell - Haskell で書かれたゲームをブラウザで実行することはできますか? (もしかしたらGHCJS経由?)
現在、Haskell でHelmまたは GHCJS を介してブラウザ上で動作する他のエンジンを使用してゲームを作成できるのでしょうか?
javascript - ghcjs を正しく使用していますか?
Haskell と ghcjs は初めてです。最初の「Hello, world!」から始めます。学ぶためのプログラム。
GHCJS wiki からコピーした私の Haskell プログラムは次のとおりです。
コマンドを使用しghcjs -o hello hello.hs
てjavascriptにコンパイルし、コマンドを使用してターミナルで実行しようとしましたnode hello.jsexe/all.js
が、生成されたファイル「index.html」を開こうとしたとき:
しかし、これを Chrome で開くと、ページが空白になります。ここで何が悪いのか誰か知っていますか?
haskell - GHCJSでJavascriptからHaskellを呼び出す方法
私はGHCJSで遊んでいます。FFI を使用して Haskell から JavaScript を呼び出すことができますが、その逆の方法がわかりません。Haskell で書いた非常に便利なユーティリティ関数があるとします。
Javascriptから呼び出すことができるように何かをすることは可能ですか? h$main(h$main2CMainzimain)
最も近いのは、Haskell のメイン関数をトリガーすることに気付くことです。
javascript - GHCJS FFI バインディングから JavaScript の import/require をトリガーする
出発点として Famo.us の例を使用します。
今、私はこれらの GHCJS FFI バインディングを持っています:
— ご覧のとおり、インライン JavaScript コードでは、通常famous.core.FOO
のように完全修飾名を使用するのではなく、完全修飾名を使用するなどのことを常に参照する必要があります。FOO
これらの FFI バインディングを使用した同等の Haskell スニペットを次に示します (わかりやすくするために、高レベルのラッパーの背後に隠されています)。
ここで質問があります: GHCJSに依存する FFI バインディングが使用されるたびに、GHCJS を自動生成し、出力された JavaScriptvar Engine = famous.core.Engine
をインポートすることは可能ですか? var Surface = famous.core.Surface
または、インラインJSで常に完全修飾名を使用するか、FFIバインディングごとに常に手動で名前をインポートする唯一のオプションですか?
haskell - reflex/reflex-dom を使用した XhrRequest
基本的な Ajax リクエストを実行したいだけです。
reflex
フロントエンドとバックエンドに使用しScotty
ます。Firefox Web コンソールに、リクエストが成功したことが示され、期待どおりの結果が表示されます。Just "default"
しかし、ウェブサイトはからNothing
ではなく に切り替わりますJust "success!"
。
完全な最小限の例を次に示します。
そしてそのScotty
部分:
デバッグツールはリクエストが成功したことを教えてくれるので、どこかにエラーdecodeXhrResponse
があるのではないかと思いますが、(読み取り不能な) Javascript にコンパイルされるだけなので、デバッグをどのように進めるべきか少し迷っています。
GitHub の try-reflex Nix スクリプトを使用してすべてをセットアップしghcjs hello.hs
、Nix 環境でコンパイルしました。
編集:の出力を追加curl
: