問題タブ [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 - 2つのHListからすべてのペアのHListを作成する
Scalaでshapelessを使用していますが、2つのHListを受け取り、要素のすべてのペアのHListを返す関数allPairsを作成したいと思います。例えば:
これを行う方法はありますか?
また、インライン化されたコードブロックではなく、関数を探していることを強調したいと思います。
scala - 何かをコンパイルしてはならないというアサーションのテスト
問題
型レベルのプログラミングをサポートするライブラリを使用しているとき、次のようなコメントを書いている自分に気付くことがよくあります ( Strange Loop 2012 で Paul Snivelyによって提示された例から):
これは、これらのメソッドの動作に関する事実を示すための非常に大雑把な方法であり、これらのアサーションをより正式なものにすることを想像することができます-ユニットまたは回帰テストなどのために.
Shapeless のようなライブラリのコンテキストでこれが役立つ理由の具体例を示すために、数日前に、この質問に対する最初の簡単な回答として、次のように書きました。
これがコンパイルされることを意図している場合:
これはしませんが:
unique
この型レベルの forの実装がHList
うまくいかないことに驚いたのFilterAux
は、後者の場合、Shapeless は喜んでインスタンスを見つけるからです。言い換えれば、おそらくコンパイルされないと予想される場合でも、次のコードはコンパイルされます。
この場合、私が見たのはバグ、または少なくともバグのようなものであり、その後修正されました.
より一般的には、単体テストのようなものでどのように機能するFilterAux
かについての私の期待に暗示されている種類の不変条件をチェックしたいことを想像できます。型とテストの相対的なメリットに関する最近の議論。
私の質問
問題は、プログラマーが何かをコンパイルしてはならないことを主張できるようにするテスト フレームワーク (プラットフォームを問わない) を私が知らないことです。
この場合に想像できる 1 つのアプローチはFilterAux
、古いImplicit-argument-with-null-default トリックを使用することです。
これにより、単体テストで次のように記述できます。
ただし、次の例は、はるかに便利で表現力豊かです。
これ欲しい。私の質問は、このようなものをリモートでサポートするテスト ライブラリまたはフレームワークを誰かが知っているかどうかです。
scala - Scala でタプルに要素を追加または先頭に追加する方法
タプルがあり、型の安全性を失うことなく要素を追加したいと考えています。これは私が達成したいことです:
scala - ネストされたデータの深いリーフで groupBy する FP またはタイプレベル ツール?
深くネストされたデータ構造を取得しました。
Try.isFailure で groupBy を行う機能的な方法はありますか?
ここで見られるように、Shapeless を使用すると、任意のネストされたデータ構造を検索できます。しかし、見つけることは私の問題の一部にすぎません。私はジッパーとレンズを見ました、それらは素晴らしいですが、ここでは適切なツールではありません.
参考までに、データはいくつかのテスト コードの結果を表します。レイヤーは次のとおりです。構成の順列 => テストされたコンポーネント => データの変更 => コードのテスト。文字列は説明、long は各コンポーネントのテストが完了するまでにかかった時間です。私は 2 つのリストを作成したいと考えています。1 つはすべての失敗が発生したすべての情報を保持し、例外を情報として保持します。もう 1 つは成功に対応します。
すでに解決策はありますか?
注: その特定のケースに対する最も賢明なアプローチは、2 つのリスト、1 つの失敗リスト、1 つの成功リストが最初から作成されるようにテストコードを再設計することです。それでも、知りたいです。この種の問題は珍しいことではないようです。
scala - HList のマップは、Scala および Shapeless のジェネリック型のサブタイプで失敗します
次のクラスといくつかの値があるとします (Scala で):
さらに、次の多相関数値を定義します (shapeless を使用)。
これで、次のように呼び出すことができます。
これはすべて成功します(そして私見です)。でも:
私が期待していた場所:
これが機能することに注意してください:
アップデート
それぞれのケースを個別に指定すれば問題ないようです。
ただし、これを少し賢く表現しようとしてもうまくいきません (単純なアプリケーションでも):
scala - HList にマップするための追加の引数を提供する
私はこのようなことをしたいと思います:
私のユースケースでは、サブジェクトは実際Subject[T]
にはあり、結果にはタイプセーフなバージョンが必要T
です。ので、私は持っています:
ただし、この投稿testFun
によると、シングルトン型が必要な構成を渡すことができません。
オプションは次のとおりです。
しかし、HList
現在、手術はありませんfill
。ヒントはありますか?
scala - scala で形状のない概念の学習を開始するにはどうすればよいですか
Scala のポリタイプの概念について学びたいと思っています。シェイプレス ライブラリを見つけて、シェイプレスを学習して適用するための最良の出発点となるものを見つけました。
scala - Shapeless: 多相関数の型制約のチェック
私は、タイプを使用して、エンティティの単位をチェックする経済モデルの小さなライブラリに取り組んでいval apples = 2.0
ますval apples = GoodsAmount[KG, Apples](2.0)
。商品のバンドルを作成するために、シェイプレス ライブラリの HLists を使用しようとしています。これは問題なく動作しますが、場合によっては、私が好むほど汎用的なコードにすることはできません。たとえば、次の問題を参照してください。
何をシェイプレスに持ち上げたいかを説明する簡単なコードから始めます。Km、その他のマイルを表す 2 つのクラスを作成します。Km クラスは追加できますが、マイルは追加できません。抽象型 T を使用する主な動機は、より複雑なライブラリです。そして、'+' 関数の間接的な呼び出しは、形状のないケースの後ろに似たものが必要なためです。
これは意図したとおりに機能します。ただし、「add」関数で型制約チェックを行う必要があります。これを HLists に拡張する私の試みは次のようになります。
しかし、これは次のエラーメッセージを生成します (Scala 2.10.2 を使用):
type Constraint を caseTuple 関数に追加できた場合、最初のエラーを修正する必要がありますが、正直なところ、at 関数がどのように機能しているか、暗黙の証拠パラメーターをどこに追加できるかを理解していません。また、マッパーが暗黙の値を見つけるために何をしなければならないかもわかりません。
caseTuple 関数を次のように置き換えます。
正常に動作しますが、多くの冗長なコードを記述する必要があります (わかりました、このソリューションは、タプルを使用する現在のソリューションよりも優れています)。誰かがこの問題を解決する方法を教えてもらえますか?
ありがとう、クリンケ
scala - Map Scala のさまざまな型
さまざまなタイプの値 (Double、String、Int など) を入れる Map が必要です。キーは String にすることができます。
これを行う方法はありますかmap.apply(k)
?
私はすでにジェネリック型で試しました
Container
しかし、パラメータを取るので不可能です。これに対する解決策はありますか?
scala - 大文字と小文字を形状のない変数と一致させるにはどうすればよいですか?
case を shapeless variable と一致させるにはどうすればよいですか?
次のタイプの変数があるとしましょうshapeless.::[String,shapeless.::[String,shapeless.HNil]]
現在、私はこれをしなければなりません
String :: String :: HNil
別のステートメントで行う必要がないように、どういうわけか文字列ペアに巻き戻すことはできますか?