問題タブ [parametric-polymorphism]

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

java - Eclipse は、Long は Comparable ではないことを教えてくれます

私はここで奇妙な状況に陥っています。つまり、Eclipse は、Long が「境界付きパラメーターの有効な代替ではない」ことを教えてくれます<T extends Comparable<? super T>>。何が原因である可能性があるかについての提案はありますか? 関連するコードを以下に貼り付けます

抽象ペア:



コンクリートペア:


抽象クラスヘッダーを次のように変更しようとしました:

これは役に立ちませんでした。

しかし、具体的なクラスでは、型パラメーターを に変更する必要があることを示唆する通知を受け取ります<Comparable, Object>

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

scala - Scala: lambda は関数に渡され、Runnable にラップされ、その後実行されません - 何が起こっているのですか?

次のコードを検討してください ( Ideoneで直接実行できます)。

これa c d eは、最初のラムダが に正常に渡されfooたが、 を呼び出したときに実行されなかったことを意味しますx.run()。ただし、2 つ目は正常に実行されます。

そのラッピングを削除してRunnableこれらのラムダを直接実行すると、両方とも機能します。Java ライブラリの Scala バインディングを使用していたときに、この動作に遭遇しました。

ここで何が起こっているのですか?に何が起こったxのですか。正しい値があるのに何もしないのはなぜですか?

0 投票する
5 に答える
318 参照

haskell - Haskell の「派生」に対する私の期待は何ですか?

初心者の質問で申し訳ありませんが、これに関する有用な情報を見つけるのに苦労しました。私は「Learn You Haskell for Great Good」に取り組んでいて、派生キーワードを理解しようとしています。これは、Java の実装のように見えますが、カテゴリ理論などのためにクールな自動コード生成を使用していると思われます。次のような2ベクトルのデータ構造を宣言します

次に、次のようなことに使用できます

今私がやりたいのは、ベクトルの加算とスカラーの乗算です。

しかし、私がしようとすると

コンパイラはプリミティブ型のデカルト積を表示する方法を見つけましたが、足し算は難しすぎますか? Num は派生するのに適切な型クラスではないのでしょうか? 独自の show 関数を作成する必要がなかったのと同じように、型クラスを派生させ、追加の作業なしで機能するコードを取得できる頻度はどれくらいでしょうか?

どうもありがとう、

ジョン

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

scala - Scalaのパラメータ化された型の宣言で中置記法は許可されていますか?

この投稿で尋ねられた質問に対する回答を理解しようとしています。

以下のコードは、受け入れられた回答で提案されたソリューションを再現しています。

暗黙的が次のように定義されている場合、私はそれを理解します

しかし、代わりに、中置表記のように見えるもので定義されています。DefaultsTo[T, Node]型が のように書けるとは知りませんでしたT DefaultsTo Node。これは何が起こっているのですか?

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

haskell - forall がデータ定義で多相型を持つ必要があるのはなぜですか?

forallデータ定義でパラメトリック型を持つように明示的に言う必要があるようです。たとえば、これ

この間に動作します

しません。

あまりにも明白なことを尋ねているのかもしれませんが、他のほとんどの場合forall、パラメトリック型を明示的に指定する必要がないため、その理由は私には明らかではありません。コンパイラが代わりにそれを行います。では、ここでの違いは何ですか?

0 投票する
5 に答える
746 参照

haskell - forall はなぜ a. a は Int のサブタイプとは見なされませんが、forall a 型の式を使用できます。Int型のどこかが期待されていますか?

型チェッカーを通過する次の関数定義のペアを考えてみましょう。

つまり、forall a. a型の式が期待される場所で、型の式を使用できますInt。これはサブタイピングによく似ているように思えますが、Haskell の型システムにはサブタイピングがないと言われています。これらの代替可能性の形態はどのように異なるのでしょうか?

この質問は に固有のものではありませんforall a. a。その他の例は次のとおりです。

0 投票する
3 に答える
3218 参照

polymorphism - OCaml のポリモーフィズム - アドホック、パラメトリック、包含/サブタイピング

特にOCamlに関して、さまざまなタイプのポリモーフィズムを理解するのに問題があります。ポリモーフィズムにより、OCaml で 'a として示される複数のタイプが許可されることは理解していますが、さまざまなタイプのポリモーフィズムが何であるかはわかりません。
誰かが比較的低レベルな言葉で説明してくれたら最高です! アドホック、パラメトリック、包含/サブタイピング

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

agda - Set₀ でのシステム F のパラメトリック多形性のモデル化

システム F では、ポリモーフィック型の種類は*(とにかくシステム F ではそれが唯一の種類であるため...)、たとえば次の閉じた型の場合:

Agda で System F を表現し*たいと考えていSetます。のようなもの

ただし、Agda にはポリモーフィック型がないため、Agda では上記の型は (大きい!) Π 型である必要があります。

これは Set₀ にないことを意味します:

これを回避する方法はありますか、それとも System F はこの意味で Agda に組み込むことはできませんか?

0 投票する
2 に答える
749 参照

haskell - haskell ポリモーフィック型関数

Haskell で、多相型を取り、多相型を返すことができる関数を持つことは可能ですか?

たとえば、値を取り、値が型の場合は Int を返し、型のFoo場合は Stringを返す関数が必要です。Bar

このようなことは可能ですか?そうでない場合、タイプに基づいて別の関数にルーティングするためのベスト プラクティスは何ですか?