問題タブ [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.

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

scala - shapeless Generic を使用して単一の引数を HList に変換する

私は次の方法を持っています:

そして、2つ以上の引数を渡すと完全に機能します:

しかし、単一の引数を渡すと、暗黙的に解決できません:

の一般的な暗黙が見つかりません[String, Nothing]。他の場合に機能するのはなぜですか?

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

scala - 裸の型パラメーターを使用して形状のない多態性関数を作成する

ここに記載されているように

タプルを複数のタプルに分割するタイプセーフな方法

次のシグネチャを持つメソッドがあります

Slickデータベース セッションSessionはどこにありますか。このメソッドの基本的な実装は

(ここでdbは Slick Database) と、ロギング、キャッシング、マルチスレッドなどを追加する他の実装を使用します。特に、マルチスレッド実装では、funs.grouped(ceil(funs.size / threadCount)).map(funs => Future {})複数のスレッド間で関数を分割するために使用されます。

さまざまな型の値を返すことができるように、関数のタプルを受け入れるメソッドのバージョンを作成したいと思います-上記のリンクされた質問で説明されているように、タプルをより小さなものに分割する良い方法を知りませんでしたタプルを作成し、マルチスレッドの場合の結果を再結合しますが、その質問に対する答えはShapelessライブラリのHListsを使用すること(Session) => Tでした。私が見たポリモーフィック関数の例では、ラップされた型パラメーターを使用しています。たとえば(Set ~> Option)、それぞれが polymorphic をラップしていますが、が不変で、ポリモーフィックがorでラップされていない関数Tを作成しようとしています。(Session ~> T)SessionTSetOptionなど。Shapeless で十分な経験がないため、この問題を間違った方法で見ていることは間違いありません。

Shapeless を使用してdef execute(funs: Seq[(Session) => T]): Seq[T]関数のポリモーフィック バージョンを作成するにはどうすればよいですか?

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

scala - HList 要素の型レベルのラッパー

セットの HList の型にコンパクトな構文を提供する型レベル関数を作成することは可能ですか?

したがって、次の行:

次のように書き換えることができます。

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

scala - HList を使用して入力を検証する方法は?

私は Shapeless 2.0 を使用しており、HList を使用して入力を検証しようとしています — コンパイル時に可能な限り多くのチェックを実行します。

想定している入力の型を指定する HListspecがあり (型はコンパイル時にチェックする必要があります)、実行する実行時チェックも含めることができます (たとえば、数値が偶数か奇数かをテストするため)。

次の仕様を検討してください。

そして、さまざまなサンプル入力:

効果的に実行できる関数を作成するにはどうすればよいですか:

したがって、次のようになります。

0 投票する
0 に答える
154 参照

scala - HList、Scala でのオプション チェック

したがって、次hlistsのオプションがあります。

(TypeTags の) 一致するすべての型オブジェクトで構成される新しいリストを作成するには、liftA2関数 ( https://stackoverflow.com/a/14456938/1092399 ) を使用することができます (注意: 反復型と多くのHNilオブジェクトがあります結果ではありますが、それは問題ではありません):

ここでの目的は、すべての空のオブジェクトをスキップするOptionことです (これができれば、一致するすべての空のOptionオブジェクトのリストを作成する機会があります)。次のようなものが必要です。

上記の関数は間違っています。型消去 (結果 ~ の型Product with Serializable with shapeless.HList) が発生するためです。質問: そのようなチェックを行う方法はありますか、それとも完全に非現実的ですか?

casepsこの状況では非常に興味深いタイプです。Product with Serializable with shapeless.HList

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

scala - ケースクラス属性の因数分解、ケースクラス拡張の制限を回避する方法はありますか?

ケースクラスのいくつかの一般的な属性、たとえば id やタイムスタンプを因数分解して、これらの汎用コードを記述したいと思います。以下は問題なく動作しますが、各ケース クラスですべての属性を繰り返す必要があります。

もう 1 つのオプションは、MetaData 型の単一のフィールドにこれらの共通フィールドを設定することです。

しかし、私はいつも .metadata.id を書くのはあまり好きではありません。また、これらのケース クラスを Slick を使用して DB に格納したいと考えています。このネストにより、テーブル定義に定型文が多数導入されます。次のようなものが欲しいです。

Client と Order の両方にこれらの id とタイムスタンプ (val) フィールドがあり、それに応じて適用/適用解除が定義されています。

shapeless/scalaz はここで私を助けてくれますか?

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

scala - scala shapeless レンズが機能しない

私のプロジェクトでは、ケース クラスのインスタンスである不変オブジェクトに対してネストされた更新を実行する必要がある状況に遭遇しました。

最初は、ケース クラスによって提供される関数を使用したかったcopyのですが、レンズに出くわしました。実装を調べてShapeless、のScalazレンズを使用しようと決めたShapelessので、依存関係を取得"com.chuusai" % "shapeless" % "2.0.0" cross CrossVersion.fullして自分に追加し、次build.sbtの入手可能な例に基づいて簡単なものを書き込もうとしましたGitHub: https://github.com/milesabin/shapeless/wiki /Feature-overview:-shapeless-2.0.0#boilerplate-free-lenses-for-arbitrary-case-classes .

しかし、コンパイル中に次のようなエラーが発生します。

wiki から例をコピーして貼り付けたので、おそらく明らかな何かが欠けています。

編集: Travis からのコメントの後、https://github.com/jrudolph/sbt-dependency-graphspray-routingを使用してプロジェクトの依存関係グラフを生成しましたが、既にshapelessライブラリが含まれていることがわかりました:

そこで、依存関係を削除し、https://github.com/milessabin/shapeless/blob/scala-2.9.x/examples/src/main/scala/shapeless/examples/lenses.scalaの例を試してみましたが、正しく動作するようになりました.

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

scala - Sized.unapply がありません

( object Sized"shapeless/sized.scala" 内) にはunapplySeq、残念ながら静的チェックを提供しない があります。たとえば、以下のコードは実行時に次のように失敗しますMatchError

unapply代わりに、タプルの Option を返すメソッドがあり、 Sized インスタンスのサイズに応じてタプルの具体的な形状が構築されるとよいでしょう。例えば:

その場合、前のコード スニペットはconstructor cannot be instantiated to expected type.

unapplyの実装を手伝ってくださいobject Sized。このメソッドはすでにどこかに実装されていますか?

前もって感謝します!

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

scala - 異なるタイプのケース クラス間でフィールドを安全にコピーする

次のようなケースクラスがあると仮定します

そして、次の変数を使用してクラスをインスタンス化します

メソッド (またはそれ以外)を使用して、.copyTest2 内の変数を Test1 に適用する方法はありますか?

これが純粋な scala では不可能な場合、Shapeless 1/2 ではどのように行われますか (現在のコードは Shapeless 1 にありますが、ある時点で Shapeless 2 にアップグレードする予定です)