問題タブ [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.

0 投票する
1 に答える
329 参照

haskell - Yesod - サーバーとクライアント間で型を共有する

私は Dart での作業に慣れています。Dart では、関連するパッケージをプロジェクトにインポートするのと同じくらい簡単に、サーバーとクライアントの間でタイプを共有できます。

Yesod/Haskell で同様のことを実現できますか? クライアントに GHCJS を使用する必要がありますか? もしかしてエルム?目標は、サーバーとクライアント間の転送中にデータが破損することを心配する必要がなく、JS を 1 行も記述する必要がないことです。:o)

Haskell を使用してこの課題に最もうまく取り組む方法について、初心者向けの適切なドキュメントを見つけることができませんでした。適切な場所を調べていないだけだと思います。どんな助けでも大歓迎です。

0 投票する
1 に答える
63 参照

haskell - NodeList を実際のリスト (ghcjs-dom) に変換する組み込み関数はありますか?

Element.querySelectorAll body "h1"whichの結果を に変換するにはどうすればよいですIO NodeListIO (List Node)。私は自分で関数を書くことができることを知っています。組み込み関数はありますか?

0 投票する
1 に答える
72 参照

haskell - ghcjs-dom で [Node] を [Element] にフィルターする

私はghcjs-domを使用しています。ノードの配列から要素を除外するにはどうすればよいですか?

また

0 投票する
1 に答える
85 参照

haskell - Webkit からの documentCreateElement 関数のインポート

documentGetElementByIdで使用する関数をインポートしようとしていますReflex FRP。以下のインポートを試みましたが、関数が見つかりません (ハックによると、そこにあるはずです):

これを解決するための助けに感謝します。ghc 8.0.1Webkitが現在動作しているMacで最新のReflexプラットフォームビルドを実行しています。Linux でも同じ問題が発生します。したがって、プラットフォーム固有ではないようです。

githubコード検索も行いましghcjs-domdocumentGetElementByIdが、表示されません。ということは、もしかしたら別の場所に移されたのではないでしょうか?

0 投票する
0 に答える
154 参照

haskell - getCurrentTime は GHCJS の下でどのように機能しますか?

GHCJS の下では、どのように機能しgetCurrentTimeますか? timeライブラリ自体では、これはFFIを使用して実装され、オペレーティング システムによって提供される関数を呼び出します。timeただし、次で始まる行はありません。

shimsGHCJS がライブラリにパッチを当てるために使用するリポジトリを確認しました。タイムゾーン取得機能にパッチを当てていますが、getCurrentTime. リモートで近いことがわかったのは、次のパッチが適用されている だけでしghcjs-bootold-time

しかし、これには2つの問題があります。1つは、それが適切なライブラリではないことです(のold-time代わりにtime)。もう 1 つは、まだ C FFI を使用していることです。GHCJS でコンパイルしているときに、C FFI を使用するとどのように機能するのかわかりません。

では、getCurrentTimeGHCJS はどこに組み込まれているのでしょうか?

ghcjs ソースの grep に関するコメントに応えて、GHCJSgetTimeのソースで (使用されている JavaScript 関数であると思われる) を検索しても、基本的に何も得られません。しかし、all.jsを使用するプロジェクト用に GHCJS によって作成されたファイルをgrep すると、次のgetCurrentTimeようになります。

後の 3 つは、ある種のファイルシステム shim からのものです。

生成されたJavaScriptでこれを見つけました:

しかし、これがどのようにリンクされたのかという問題は残っています。

0 投票する
0 に答える
460 参照

haskell - Haskell スタック 1.2、nix、および ghcjs の使用方法

最新バージョンのスタックでこのレポをビルドしようとすると:

次のエラーが表示されます。

これは、私の stack.yaml が次のようになっているためです。

私が使用していた方法のサポートが削除されたのは非常に残念です。stack、nix、および ghcjs を使用する他の方法はありますか? cabal の使用に戻る必要がありますか?

0 投票する
1 に答える
528 参照

haskell - GHCJS テキストデータコンストラクタ

私はreflexプラットフォームでnixを使用して、GHCJS 8.0.1でhaskellをjavascriptにコンパイルしています。ライブラリ内の内部モジュールに依存するいくつかの関数を作成しましたtext: Data.Text.Internal. これから必要なのは、次のデータ コンストラクターだけですText

しかし、GHCJS でこのデータ コンストラクタを使用するコードをコンパイルしようとすると失敗します。エラーメッセージは、どういうわけか、どこかで、のデータコンストラクターTextが次のものに置き換えられたことを明確にしています。

#ifdefこれを回避するために、コード ブロックの周りに sを配置できることを理解しています。ただし、このデータ コンストラクターの置き換えがどのように行われたかはわかりません。これは のどこにも言及されていませんghcjs-shims。それも言及されていませんghcjs。さらに奇妙なのはghcjs-base、 に通常のデータ コンストラクターを使用する関数があることですText。誰かがこの交換のソースを教えてくれれば幸いです。

編集:これは質問とは関係ありませんが、の内部を使用する必要がある理由は、TextIPv4 アドレスや MAC アドレスなどを効率的にエンコードするためです。以前の質問に含めた私のベンチマークでは、パブリック API を使用した最速の IPv4 エンコーディングtextが約 450ns かかることがわかりました。内部を使用して (そして可変配列に直接書き込み)、約 35ns でこれを実行できます。これは、少なくとも 10 倍のパフォーマンスの向上です。

EDIT 2:私が覚えている他の何か(おそらく質問に関連している)は、コードの別の場所で、Data.Text.Lazy.Builder.Inthexadecimalから使用したことです。ただし、ghcjs では、この関数はこのモジュールによってエクスポートされません。アップストリームのどこかに貢献できればうれしいのですが、すべてのモジュールがどのように取り除かれているのか理解できないため、適切なアップストリームがどこにあるのかわかりません。これが達成された特定のファイルを誰かが教えてくれれば幸いです。text

0 投票する
1 に答える
328 参照

haskell - Websocket を介した GHCJS コードの最も効率的なワイヤ形式

私は、GHCJS でコンパイルされたブラウザーで実行されている Haskell アプリケーションに取り組んでいます。これは、websocket を介して、同じく Haskell で記述されたサーバーと通信します。どちらのプログラムも同じ Haskell データ型定義を共有しているため、シリアル化形式を「選択するだけ」で済みます。

現時点では、簡単にするために、プログラムはReadShowで実行されます。これは機能しますが、明らかに理想的ではありません。

一方で、高速シリアライゼーションの通常の候補であるcerealライブラリーなどで動作するByteStringsものが GHCJS で実際に効率的であるかどうかは不明です。さらに、GHCJS の API は、Websockets への JavaScript バインディングが提供するByteStringsバイナリー型と対話することを困難にしているようです。Blob

汎用コード生成 (を使用GHC.Generics) がいいでしょう。

以前にこの問題を解決した人はいますか? GHCJS でさまざまなシリアライゼーションのバリアントをベンチマークした可能性もありますか?

0 投票する
1 に答える
255 参照

haskell - ghcjs をパスに追加するにはどうすればよいですか?

ghcjsをインストールするために、Ubuntu 16.04 にアップグレードしました

要件に問題はありません。 alexそしてhappy自動的にインストールされた場所。それで:

ただし、端末からghcjsを呼び出すことはできません。おそらくそれはPATHにありませんか?

パスに追加するにはどうすればよいですか?