問題タブ [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 - Yesod - サーバーとクライアント間で型を共有する
私は Dart での作業に慣れています。Dart では、関連するパッケージをプロジェクトにインポートするのと同じくらい簡単に、サーバーとクライアントの間でタイプを共有できます。
Yesod/Haskell で同様のことを実現できますか? クライアントに GHCJS を使用する必要がありますか? もしかしてエルム?目標は、サーバーとクライアント間の転送中にデータが破損することを心配する必要がなく、JS を 1 行も記述する必要がないことです。:o)
Haskell を使用してこの課題に最もうまく取り組む方法について、初心者向けの適切なドキュメントを見つけることができませんでした。適切な場所を調べていないだけだと思います。どんな助けでも大歓迎です。
haskell - NodeList を実際のリスト (ghcjs-dom) に変換する組み込み関数はありますか?
Element.querySelectorAll body "h1"
whichの結果を に変換するにはどうすればよいですIO NodeList
かIO (List Node)
。私は自分で関数を書くことができることを知っています。組み込み関数はありますか?
haskell - ghcjs-dom で [Node] を [Element] にフィルターする
私はghcjs-domを使用しています。ノードの配列から要素を除外するにはどうすればよいですか?
また
haskell - Webkit からの documentCreateElement 関数のインポート
documentGetElementById
で使用する関数をインポートしようとしていますReflex FRP
。以下のインポートを試みましたが、関数が見つかりません (ハックによると、そこにあるはずです):
これを解決するための助けに感謝します。ghc 8.0.1
Webkitが現在動作しているMacで最新のReflexプラットフォームビルドを実行しています。Linux でも同じ問題が発生します。したがって、プラットフォーム固有ではないようです。
githubコード検索も行いましghcjs-dom
たdocumentGetElementById
が、表示されません。ということは、もしかしたら別の場所に移されたのではないでしょうか?
haskell - getCurrentTime は GHCJS の下でどのように機能しますか?
GHCJS の下では、どのように機能しgetCurrentTime
ますか? time
ライブラリ自体では、これはFFIを使用して実装され、オペレーティング システムによって提供される関数を呼び出します。time
ただし、次で始まる行はありません。
shims
GHCJS がライブラリにパッチを当てるために使用するリポジトリを確認しました。タイムゾーン取得機能にパッチを当てていますが、getCurrentTime
. リモートで近いことがわかったのは、次のパッチが適用されている だけでしghcjs-boot
たold-time
。
しかし、これには2つの問題があります。1つは、それが適切なライブラリではないことです(のold-time
代わりにtime
)。もう 1 つは、まだ C FFI を使用していることです。GHCJS でコンパイルしているときに、C FFI を使用するとどのように機能するのかわかりません。
では、getCurrentTime
GHCJS はどこに組み込まれているのでしょうか?
ghcjs ソースの grep に関するコメントに応えて、GHCJSgetTime
のソースで (使用されている JavaScript 関数であると思われる) を検索しても、基本的に何も得られません。しかし、all.js
を使用するプロジェクト用に GHCJS によって作成されたファイルをgrep すると、次のgetCurrentTime
ようになります。
後の 3 つは、ある種のファイルシステム shim からのものです。
生成されたJavaScriptでこれを見つけました:
しかし、これがどのようにリンクされたのかという問題は残っています。
haskell - Haskell スタック 1.2、nix、および ghcjs の使用方法
最新バージョンのスタックでこのレポをビルドしようとすると:
次のエラーが表示されます。
これは、私の stack.yaml が次のようになっているためです。
私が使用していた方法のサポートが削除されたのは非常に残念です。stack、nix、および ghcjs を使用する他の方法はありますか? cabal の使用に戻る必要がありますか?
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
。誰かがこの交換のソースを教えてくれれば幸いです。
編集:これは質問とは関係ありませんが、の内部を使用する必要がある理由は、Text
IPv4 アドレスや MAC アドレスなどを効率的にエンコードするためです。以前の質問に含めた私のベンチマークでは、パブリック API を使用した最速の IPv4 エンコーディングtext
が約 450ns かかることがわかりました。内部を使用して (そして可変配列に直接書き込み)、約 35ns でこれを実行できます。これは、少なくとも 10 倍のパフォーマンスの向上です。
EDIT 2:私が覚えている他の何か(おそらく質問に関連している)は、コードの別の場所で、Data.Text.Lazy.Builder.Inthexadecimal
から使用したことです。ただし、ghcjs では、この関数はこのモジュールによってエクスポートされません。アップストリームのどこかに貢献できればうれしいのですが、すべてのモジュールがどのように取り除かれているのか理解できないため、適切なアップストリームがどこにあるのかわかりません。これが達成された特定のファイルを誰かが教えてくれれば幸いです。text
haskell - Websocket を介した GHCJS コードの最も効率的なワイヤ形式
私は、GHCJS でコンパイルされたブラウザーで実行されている Haskell アプリケーションに取り組んでいます。これは、websocket を介して、同じく Haskell で記述されたサーバーと通信します。どちらのプログラムも同じ Haskell データ型定義を共有しているため、シリアル化形式を「選択するだけ」で済みます。
現時点では、簡単にするために、プログラムはRead
とShow
で実行されます。これは機能しますが、明らかに理想的ではありません。
一方で、高速シリアライゼーションの通常の候補であるcereal
ライブラリーなどで動作するByteStrings
ものが GHCJS で実際に効率的であるかどうかは不明です。さらに、GHCJS の API は、Websockets への JavaScript バインディングが提供するByteStrings
バイナリー型と対話することを困難にしているようです。Blob
汎用コード生成 (を使用GHC.Generics
) がいいでしょう。
以前にこの問題を解決した人はいますか? GHCJS でさまざまなシリアライゼーションのバリアントをベンチマークした可能性もありますか?
haskell - ghcjs をパスに追加するにはどうすればよいですか?
ghcjsをインストールするために、Ubuntu 16.04 にアップグレードしました
要件に問題はありません。 alex
そしてhappy
自動的にインストールされた場所。それで:
ただし、端末からghcjsを呼び出すことはできません。おそらくそれはPATHにありませんか?
パスに追加するにはどうすればよいですか?