問題タブ [adhoc-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.
scala - アドホック ポリモーフィズム - 型クラス
私はscalaz のチュートリアルを見ました。
このリンクから、私は次のコードを理解しています:
しかし、私は次のコードを理解していません:
を考えるとList(1, 2, 3, 4)
、A
ですInt
。
では、どうやって と を in にできるA
のMonoid
でしょA
うInt
かdef sum[A: Monoid](xs: List[A]): A = {
?
ありがとうございました
f# - F#: 算術演算子とポリモーフィズムの喪失 (値制限?)
このコードはコンパイルされません:
ユニファイヤは、関連付けられている型パラメータを修正し、最初の出現を確認したf
と思います。g
このプロセスを支配するものは何ですか? これは「値の制限」に非常に似ていると思いますがf
、g
すでに eta 拡張されています! これは難しい問題です。
事前定義された演算子を整数型に対してアドホックなポリモーフィズムで入力することの背後には、何らかの黒魔術があることは確かに想像できますが、それは単なる私の推測です。任意の情報をいただければ幸いです。
haskell - 型推論は参照透過性を妨げます
Haskell 言語が参照透過性に関して提供する正確な約束/保証は何ですか? 少なくとも Haskell のレポートでは、この概念について言及されていません。
表現を考える
そして、この式が 1 かどうかを知りたいのです。安全のために、これを 2 回実行します。
(True,False)
GHCi 7.4.1で提供されるようになりました。
明らかに、この式は今や参照的に不透明です。プログラムがそのような動作の対象であるかどうかをどのように判断できますか? 私はプログラム全体を氾濫させることができます::
が、それは非常に読みやすいものにはなりません。私が見逃しているHaskellプログラムの他のクラスはありますか? それは完全に注釈付きのものと注釈なしのものの間ですか?
(私がSOで見つけた唯一の関連する質問とは別に、これには何か他のものがあるに違いありません)
string - Data.ByteString.Lazy.Internal.ByteString を StrLn に入れるにはどうすればよいですか?
私はencode
(JSON経由で文字列へのHaskellタイプ)を使用します:
文字列は (コンパイラからのエラー メッセージによると): Data.ByteString.Lazy.Internal.ByteString
.
どうすればStrLnに入れられますか?
理論的に言えば
私が探しているのは、アドホックなポリモーフィックです。つまり、特定の文字列のような型のセマンティクスputStrLn
の適切なインスタンスを探しています。putStrLn
コンパイラ メッセージ
誰かが興味を持っている場合のコンパイラ メッセージ:
こちらもご覧ください
同様の質問ですが、タイプが少し異なります: How do I putStrLn a Data.ByteString.Internal.ByteString? .
haskell - Haskell で「サブクラス」を宣言する
Haskell の次の単純なコードに問題があります。
ここで、最初の 2 つのインスタンス宣言は期待どおりに機能しますが、3 番目のインスタンス宣言は、フラグの組み合わせに応じてさまざまな種類のエラーを引き起こします。
Num a
よりも短くないことがわかっているICycle a
ため、コンパイラは型チェックを終了できません。例では、右辺をより大きな用語にするか、最初に目的のクラスを他のクラスのサブクラスとして宣言することで、これを回避できることを確認しました。ここでは逆に、既存のクラスを新しいクラスのサブクラスとして宣言したいと考えています。
このような型クラスの使用に異議があるのだろうか。または、自然な解決策がある場合。
python - Python でアドホック ポリモーフィズムを取得する方法はありますか?
多くの言語は、アドホック ポリモーフィズム(別名関数のオーバーロード) をすぐにサポートします。ただし、Python はそれをオプトアウトしたようです。それでも、Python でそれをやってのけることができるトリックまたはライブラリがあるかもしれないと想像できます。そのようなツールを知っている人はいますか?
たとえば、Haskell では、これを使用してさまざまなタイプのテスト データを生成できます。
genRandom
これの優れた点は、テスト ライブラリに触れることなく、独自のカスタム型を拡張できることです。
Pythonでこのようなことをどのように達成しますか?
polymorphism - OCaml のポリモーフィズム - アドホック、パラメトリック、包含/サブタイピング
特にOCamlに関して、さまざまなタイプのポリモーフィズムを理解するのに問題があります。ポリモーフィズムにより、OCaml で 'a として示される複数のタイプが許可されることは理解していますが、さまざまなタイプのポリモーフィズムが何であるかはわかりません。
誰かが比較的低レベルな言葉で説明してくれたら最高です! アドホック、パラメトリック、包含/サブタイピング
java - Java でのポリモーフィックな非カリー化メソッド呼び出し (アドホック ポリモーフィズム)
例から始めましょう。
抽象Vehicle
クラスがあるとします。
そして、この抽象クラスを継承するクラスCar
と。Bicycle
実際の型が実行時にしか決定できないride()
型のオブジェクトにメソッドを適用すると、JVM は正しいバージョンの を適用します。Vehicle
ride()
つまり、一種のカリー化されたメソッド呼び出しではv.ride()
、ポリモーフィズムが期待どおりに機能します。
Vehicle
しかし、引数として のサブタイプのみを受け入れるメソッドの形式で外部実装がある場合はどうなるでしょうか? では、repair(Bicycle b)
andrepair(Car c)
メソッドがある場合はどうなるでしょうか。カリー化されていないポリモーフィック メソッドの呼び出しrepair(v)
は機能しません。
例:
クラス名とダウンキャストを確認する必要があります。これに対するより良い解決策はありますか?
編集:私の実際の目的は、抽象構文ツリーをトラバースすることであり、たまたま二重ディスパッチが必要であることに気付きました。
Ast
Assign
、MethodCall
、またはReturnStmt
継承などの実際の AST ノードからの抽象クラスです。body
s の多相リストですAst
。
コードスニペット:
ダブルディスパッチを達成する唯一の可能性は、クラスをチェックしてダウンキャストするか、ビジターパターンを適切に実装することですよね?