問題タブ [shapeless]
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 - クラス本体が暗黙の解決に影響するのはなぜですか?
抽象クラスを試していたときに、偶然この問題に遭遇しました。次のコード:
次のメッセージが表示されてコンパイルに失敗します。
ただし、単純に{}
からその部分を削除するnew A((1, 'b')) {}
と、問題なく暗黙的であることがわかります。
これは Scala のバグですか、それとも何か不足していますか?
scala - shapeless API (Scala) の重要な機能は何ですか? また、それらは何をしますか?
shapeless (2.0.0) を学習しようとしています。素晴らしいツールのようで、とても楽しみにしていますが、先に進むには問題があります。ドキュメントがまだあまりないので、サンプルとソース コードを調べてみました。ほとんどの例では複数の形状のない概念が使用されており、ソース コードでは 1 つの形状のない型が他の型を使用することが多いため、いわば形状のないウサギの穴に落ちてしまうため、私は苦労しています。shapeless API の重要な機能のリストと、それぞれの機能の簡単な説明があると便利だと思います。私は明らかにそのようなリストを作成する資格がないので、スタック オーバーフローの人間の皆さんにお願いします!
各機能について、次の情報をできるだけ多く含めてください。
機能の名前とインポート方法。
それが何をするかについての短くて簡単な説明。
なぜこの機能が重要なのですか / なぜ誰かがわざわざそれを使用するのですか?
形のない、または高度な Scala の概念を可能な限り使用しない単純な例。
API の機能とは、shapeless 2.0 で定義され、インポートして使用できる単一のもの (型、関数、オブジェクトなど)、または密接に結合されたそのようなものの小さなセットを意味します。プログラム。高次ポリモーフィズムや型レベルの再帰などの一般的な概念について言及しているわけではありません。また、回答ごとに 1 つの機能のみを含めてください。おそらく、十分な回答があり、他の十分な数の人もこのリストを使用している場合、回答に対する投票を使用して、さまざまな機能の重要性をランク付けできます.
注: 私はこの機能リストを認識しています。私はそれが素晴らしいと思います、そしてそれは私を大いに助けてくれました. ただし、できることのリストよりも API ドキュメントに似たものを探しています。私は多くの例を理解し、それらからいくつかの機能の目的を推測することができますが、特定の部分につまずいてその機能を理解できないことがよくあります.
scala - shapeless マッピングにおけるサブタイプ多型
私は以下を構築しました:
上記のコードはうまく機能し、素晴らしいです。しかし、私はまだもっと欲しいです。HList にリストが含まれるように指定するのではなく、任意の Iterable を許可したいと考えています。このような:
この 2 番目のバージョンはコンパイルに失敗し、「パラメーター マッパーの暗黙的な値が見つかりませんでした: shapeless.ops.hlist.Mapper[iterateOverHList.type,shapeless.::[List[Int],shapeless.::[List[String]」というメッセージが表示されます。 ],shapeless.HNil]]]". Iterable で機能する関数が List で機能するはずであるという、私がここで期待しているサブタイプのポリモーフィズムは、何らかの理由で失敗しています。何故ですか?この問題を回避する方法はありますか?
scala - shapeless (scala) の「at」とは何ですか?
「at」と呼ばれるオブジェクト (おそらく関数) が、shapeless ソース全体と shapeless を使用するコードに散りばめられているのを見てきました。特に、この他の質問への回答で使用されます。コード スニペットは次のとおりです。
~> 型の apply メソッドに関連しているという手がかりがありました。「at」は具体的に何をし、どこで定義されていますか?
scala - 区切られた文字列をケースクラスにデシリアライズする慣用的な Scala の方法
次のような単純なコロン区切りのテキスト プロトコルを扱っているとします。
各行をケース クラスのインスタンスとしてデシリアライズしたいのですが、タイプ セーフな方法で行います。私の最初の試みでは、型クラスを使用して、遭遇する可能性のある型ごとに「読み取り」メソッドを定義し、さらにケースクラスの「タプル」メソッドを使用して、引数のタプルに適用できる関数を取得します。以下:
ただし問題は、タプルと関数アリティごとに create メソッドを定義する必要があることです。つまり、最大 22 のバージョンの create が必要になるということです。さらに、これは検証や破損したデータの受信を処理しません。
scala - shapeless では、一方が他方の型クラスを含むように 2 つのリストを用意します。
shapeless では、2 つの HList を取り、次のプロパティを示す任意の長さの関数を作成しようとしていl1
ますl2
。
- との長さは
l1
同じl2
です。 l2
の正確な型が含まれておりl1
、定数の外側の型コンストラクターにラップされています。
だから、だっl1
たら
l2
になり得る
とを使用するUnaryTCConstraint
とLengthAux
、長さを制約し、 の静的外部コンストラクターを必要としますが、l2
それらを適合させることが問題になりました。
どうすればそれを実行できるかについてのアイデアはありますか?
scala - 派生トレイトを使用するトレイトを返す
HList と派生 HList を返す方法を知っている型クラスを作成したいと思います。理想的には、次のような構造になります。
そして次のように実装されます
問題は、型を特定するのに十分な情報があるにもかかわらず、scala が型を具体化していないため、コンパイル中に、次のエラーが発生することです。
関心のある情報を正しくコンパイルする方法で表現するにはどうすればよいですか?
scala - ShapelessにおけるNat型の限界
shapeless では、Nat 型は型レベルで自然数をエンコードする方法を表します。これは、固定サイズのリストなどに使用されます。型レベルで計算を行うこともできます。たとえば、要素のリストをN
要素のリストに追加しK
、コンパイル時にN+K
要素を持つことがわかっているリストを取得します。
1000000
この表現は2 53などの大きな数を表すことができますか、それとも Scala コンパイラーがあきらめる原因になりますか?