問題タブ [stuarray]
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 - ボックス化されていない可変配列インスタンスを作成する方法
次のタイプがあるとしましょう:
そのようなインスタンスのいずれかを作成する方法はありますか:
とりあえずWord8で全部保存して(ラップして)fromEnum/toEnumで変換してるけどなんか違和感。メモリ内で大規模なデータ構造 (>1.2Go) を使用していて、遅延ロードできないため、厳格さとボックス化解除が必要です。解決策が見つからない場合は、すべてを C++ で再実装しますが、現在のプロジェクトでは避けたいと考えています。
#haskell で質問しましたが、回答がありませんでした。質問するのに適切な時間ではなかったのかもしれません。
haskell - runST の適用時に「Could not deduce (MArray (STUArray s) Int (ST s)) from context ()」
私はhaskellを学習している最中で、この問題に遭遇しました:
使用するGlasgow Haskell Compiler, Version 6.10.4, for Haskell 98, stage 2 booted by GHC version 6.10.1
ファイルの共通先頭
STArray の使用 (動作)
STUArray の使用 (機能しません)
しかし、ボックス化されていないアレイに切り替えようとすると、エラー メッセージが表示されます。
エラーメッセージ
また:
型注釈をいじってからほぼ 2 時間後、誰かが私を正しい方向に向けてくれることを願っています。いったい何が間違っているのでしょうか?
お時間をいただきありがとうございます。
haskell - ポリモーフィックタイプのSTUArray
ST
モナドとsを使用してアルゴリズムを実装し、とデータSTUArray
の両方で機能できるようにしたい。Float
Double
より簡単な例の問題について説明します。メモ化されたものを計算しますscanl (+) 0
(例として使用するだけで、なしで解決できることはわかっていますSTUArray
)。
これは次の場合に失敗します。
提案された「可能な修正」を適用できません。(forall s. MArray (STUArray s) a (ST s))
コンテキストに似たようなものを追加する必要があるのですが、それは不可能です。
haskell - 制約の種類を持つポリモーフィック STUArray の再検討
スコア型に動的プログラミング アルゴリズム ポリモーフィックを実装したいと考えています。これは、境界条件のない単純化された 1D バージョンです。
制約は機能しません。
要約すると、Could not deduce (MArray (STUArray s) e (ST s)) from the context forall s. MArray (STUArray s) e (ST s i)
. に制約を追加するとresultArrayST
、問題が にプッシュされるだけであることに注意してくださいrunSTUArray
。
私は現在、4 つの欠陥のあるソリューションを知っています。
STArray
ボックス化されたs または単に非モナドs の問題を回避しArray
、おそらくseq
and bang パターンを使用して、結果として生じるメモリの問題を緩和します。unsafeFreeze
とを使用して型システムを壊します。unsafePerformIO
これには、ひどい制約が正常にMArray IOUArray e IO
機能します。- タイプクラスを使用し、すべての「ボックス化できない」タイプのインスタンスを作成する同様の問題に対するこのソリューション。
- これは GHC 書き換えルールを使用して、各タイプ (および汎用
STArray
バージョン) ごとに異なる関数を選択します。
ConstraintKinds
ただし、最新の言語拡張により、元のコードの意図を表現できるようになることを期待して、この質問をしていforall s. MArray (STUArray s) e (ST s)
ます。