問題タブ [constraint-kinds]

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 に答える
1523 参照

haskell - GHC 7.4.1の制約の種類の構文は何ですか?

Constraint簡単な例を書こうとすると、範囲外のエラーが発生します。

エラーは、

制約の同義語は期待どおりに機能しているようですが、

前もって感謝します。

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

haskell - Numeric.AD 関数で許容される型

adパッケージに含まれる型の基本的な配管に頭を悩ませることにほとんど成功していません。たとえば、次のコードは完全に機能します。

gradタイプは次のとおりです。

extoの型シグネチャを変更し[Double] -> Doubleて同じことを試すと、

をインスタンス化Doubleする種類の一見任意の型コンストラクターに置き換えると、同じ動作が発生します。 *Num

がリストの場合Traversable f、 の最初の引数は、許容されるgrad型(たとえば. しかし明らかに、 のユーザーは、コンストラクターや を直接処理する必要はありません。これらの内部を覗いてみると、私は少し混乱しました。具体的には、との使用の違いについて、種類/型の軌跡をたどることができません。 [AD s a] -> AD s aModeReversegradADModeNum a => [a] -> a[Double] -> Double

[Double] -> Double型シグネチャが で問題を引き起こすのはなぜgradですか? そして、単純な古いライブラリの使用に関して: の[Double] -> Doubleバージョンを使用する方法はありますかex、それともポリモーフィック バージョンが必要ですか?

(この同様の質問に触発されたタイトル)

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

haskell - ConstraintKindsを使用してすべての基本型クラスを一般化して制約を許可するライブラリはありますか?

拡張ConstraintKindsを使用して、基本型クラスの機能を拡張し、制約を許可できます。たとえば、ボックス化されていないベクトルをファンクターにすることができます。

(詳細については、これらのブログ 投稿を参照してください)。

この新しいスタイルで基本ライブラリ型クラスのかなりの部分を実装していることに気づきました(基本的に、ボックス化されていないベクトルとリストの間で交換可能に作業できるようにしたい)、このためのライブラリがすでに存在するかどうか疑問に思っています。 、または私が肉付けしてハッキングに追加する必要がある場合。


編集:また、これをベースに直接追加する計画はありますか?クラス定義を直接更新するだけでは、他に何も壊してはならないようです。

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

haskell - 「制限された」制約で制約の種類と型ファミリを使用する

実行を「表示」するためのモノイドを含むアプリケーションファンクターに取り組んでいます。ただし、この部分がまったく気にならない場合もあるため、モノイドの選択は、決して消費されないため意味がありません。私が持っているものを単純化しました:

Renderaさまざまなを単一のに変換するために使用されbます。Merge私の実際のファンクターを大幅に単純化したものですが、要点は、型ファミリー/制約が含まれていることであり、その意図はRenderMerge必要なものを正確に指定することです。

ここで、 を「実行」したいかもしれませんが、Merge次のようなビューを破棄します。

しかし、これは次の理由で失敗します。

(Renderer a ())の使用から生じると推測できませんでしたmerge

()forallaのインスタンスがあるため、モノイドとして選択しましたRender a ()。したがって、それがMerge a単にコレクションのRender制約を意味すると言う方法があれば、これはうまく機能します。もちろん、Merge aそれよりも一般的です-コンパイルエラーを説明する任意の制約を追加できます。

の署名を変更せに、私が望むものを達成する方法はありrunFooますか?

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

haskell - 制約付きのタイプリスト

タイプレベルでリストを作成しようとしていますが、制約を適用する方法を理解するのに問題があります。

私のベースコードは次のとおりです。

q上記のsは素数冪を表すと考えることができます。また、sの型リストを使用して合成数を表現したいと思いqiます。私は次のようなものを想像しています:

データで

(Head q)対応する必要があり、に対応する必要がqiあります。のパラメータは(必然的に)aではなく、のリストであることに注意してください。(これは私が提起している設計上の問題の1つであるため、このリストについてこれ以上具体化したくありません)。私は「モジュラスワイズ」で作業したいと思います:(Tail q)qsqFList(Qux q)(Qux qi)FList

これらのコードスニペットをGHCで一緒にコンパイルすると、(モジュロ転写、抽象化、および入力エラー)が発生します。

その後

このエラーが発生する理由はわかりますが、修正方法はわかりません。

具体的には、とのタイプを期待していますFList c q。もちろん、私のリスト、すべてのレベルですべてのBCtx制約を満たします。c~Foo zq~QCons q1 (QCons q2 QNil)

これらの特定のエラーを修正するとコードがコンパイルされるかどうかはわかりませんが、それは始まりです。Barクラス全体は基本的に固定されています(Constraintの種類が必要であり、Barのインスタンスの種類は*-> *である必要があります)。qiパラメータにアクセスする必要があるため、実存型を使用してジェネリックオブジェクトのリストを作成できるとは思いません。種類を変更してFListバーのコレクションでモジュラス単位で作業QListできるようにします。

御時間ありがとうございます!

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

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 つの欠陥のあるソリューションを知っています。

  1. STArrayボックス化されたs または単に非モナドs の問題を回避しArray、おそらくseqand bang パターンを使用して、結果として生じるメモリの問題を緩和します。
  2. unsafeFreezeとを使用して型システムを壊します。unsafePerformIOこれには、ひどい制約が正常にMArray IOUArray e IO機能します。
  3. タイプクラスを使用し、すべての「ボックス化できない」タイプのインスタンスを作成する同様の問題に対するこのソリューション。
  4. これは GHC 書き換えルールを使用して、各タイプ (および汎用STArrayバージョン) ごとに異なる関数を選択します。

ConstraintKindsただし、最新の言語拡張により、元のコードの意図を表現できるようになることを期待して、この質問をしていforall s. MArray (STUArray s) e (ST s)ます。

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

haskell - 制約の種類: 複数の制約を渡す

Haskell で次のようなデータ型がある場合:

次に、特定のクラスの型の値に作用する関数をこのデータ型に入れることができます。

しかし、複数の制約を持つ関数をこのデータ型に入れることは可能ですか? 私はこれを試しました:

したがって、これは機能しません。どうすればやりたいことができるのか、それとも不可能なのか? 「ダミー」データ型と型ファミリを使用することが 1 つの解決策であることはわかっていますが、複雑なため別の方法がある場合はそうしたくありません。また、この例では succ の代わりに (+1) を使用することもできましたが、1 つのクラスだけに変換できない複雑なケースもあります。

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

haskell - ConstraintKind の矛盾?

カスタム制約を使用して、組み合わせの爆発を抑制したいと考えています。


カスタム制約を使用すると、このコードはコンパイルに失敗します:


しかし、代わりに制約を手動で書き出すと、次のようにコンパイルされます。

これはバグですか、それとも何か不足していますか?

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

haskell - 「自明な制約」または「オブジェクトクラス」の標準実装はありますか?

私はただ欲しい

Haskell 98 では制約を省略できるので、これはもちろん役に立ちません。しかし、ConstraintKinds明示的に必要な種類の引数を持つことができます* -> Constraint。理想的には、これを「匿名型レベル関数」として定義したいのです\type a -> ()が、それは明らかに不可能です。

どうすればいいですか、定義済みのものを使用するか、必要な場所でそのクラスをローカルに定義するだけです(インスタンスはユニバーサルであるため、誰もアクセスする必要がないため、それもまったく問題ないようです)?