問題タブ [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 - shapeless Generic を使用して単一の引数を HList に変換する
私は次の方法を持っています:
そして、2つ以上の引数を渡すと完全に機能します:
しかし、単一の引数を渡すと、暗黙的に解決できません:
の一般的な暗黙が見つかりません[String, Nothing]
。他の場合に機能するのはなぜですか?
scala - 裸の型パラメーターを使用して形状のない多態性関数を作成する
ここに記載されているように
次のシグネチャを持つメソッドがあります
Slickデータベース セッションSession
はどこにありますか。このメソッドの基本的な実装は
(ここでdb
は Slick Database
) と、ロギング、キャッシング、マルチスレッドなどを追加する他の実装を使用します。特に、マルチスレッド実装では、funs.grouped(ceil(funs.size / threadCount)).map(funs => Future {})
複数のスレッド間で関数を分割するために使用されます。
さまざまな型の値を返すことができるように、関数のタプルを受け入れるメソッドのバージョンを作成したいと思います-上記のリンクされた質問で説明されているように、タプルをより小さなものに分割する良い方法を知りませんでしたタプルを作成し、マルチスレッドの場合の結果を再結合しますが、その質問に対する答えはShapelessライブラリのHList
sを使用すること(Session) => T
でした。私が見たポリモーフィック関数の例では、ラップされた型パラメーターを使用しています。たとえば(Set ~> Option)
、それぞれが polymorphic をラップしていますが、が不変で、ポリモーフィックがorでラップされていない関数T
を作成しようとしています。(Session ~> T)
Session
T
Set
Option
など。Shapeless で十分な経験がないため、この問題を間違った方法で見ていることは間違いありません。
Shapeless を使用してdef execute(funs: Seq[(Session) => T]): Seq[T]
関数のポリモーフィック バージョンを作成するにはどうすればよいですか?
scala - HList 要素の型レベルのラッパー
セットの HList の型にコンパクトな構文を提供する型レベル関数を作成することは可能ですか?
したがって、次の行:
次のように書き換えることができます。
scala - HList を使用して入力を検証する方法は?
私は Shapeless 2.0 を使用しており、HList を使用して入力を検証しようとしています — コンパイル時に可能な限り多くのチェックを実行します。
想定している入力の型を指定する HListspec
があり (型はコンパイル時にチェックする必要があります)、実行する実行時チェックも含めることができます (たとえば、数値が偶数か奇数かをテストするため)。
次の仕様を検討してください。
そして、さまざまなサンプル入力:
効果的に実行できる関数を作成するにはどうすればよいですか:
したがって、次のようになります。
scala - HList、Scala でのオプション チェック
したがって、次hlists
のオプションがあります。
(TypeTags の) 一致するすべての型オブジェクトで構成される新しいリストを作成するには、liftA2
関数 ( https://stackoverflow.com/a/14456938/1092399 ) を使用することができます (注意: 反復型と多くのHNil
オブジェクトがあります結果ではありますが、それは問題ではありません):
ここでの目的は、すべての空のオブジェクトをスキップするOption
ことです (これができれば、一致するすべての空のOption
オブジェクトのリストを作成する機会があります)。次のようなものが必要です。
上記の関数は間違っています。型消去 (結果 ~ の型Product with Serializable with shapeless.HList
) が発生するためです。質問: そのようなチェックを行う方法はありますか、それとも完全に非現実的ですか?
case
psこの状況では非常に興味深いタイプです。Product with Serializable with shapeless.HList
scala - ケースクラス属性の因数分解、ケースクラス拡張の制限を回避する方法はありますか?
ケースクラスのいくつかの一般的な属性、たとえば id やタイムスタンプを因数分解して、これらの汎用コードを記述したいと思います。以下は問題なく動作しますが、各ケース クラスですべての属性を繰り返す必要があります。
もう 1 つのオプションは、MetaData 型の単一のフィールドにこれらの共通フィールドを設定することです。
しかし、私はいつも .metadata.id を書くのはあまり好きではありません。また、これらのケース クラスを Slick を使用して DB に格納したいと考えています。このネストにより、テーブル定義に定型文が多数導入されます。次のようなものが欲しいです。
Client と Order の両方にこれらの id とタイムスタンプ (val) フィールドがあり、それに応じて適用/適用解除が定義されています。
shapeless/scalaz はここで私を助けてくれますか?
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の例を試してみましたが、正しく動作するようになりました.
scala - Sized.unapply がありません
( object Sized
"shapeless/sized.scala" 内) にはunapplySeq
、残念ながら静的チェックを提供しない があります。たとえば、以下のコードは実行時に次のように失敗しますMatchError
。
unapply
代わりに、タプルの Option を返すメソッドがあり、 Sized インスタンスのサイズに応じてタプルの具体的な形状が構築されるとよいでしょう。例えば:
その場合、前のコード スニペットはconstructor cannot be instantiated to expected type
.
unapply
の実装を手伝ってくださいobject Sized
。このメソッドはすでにどこかに実装されていますか?
前もって感謝します!
scala - 異なるタイプのケース クラス間でフィールドを安全にコピーする
次のようなケースクラスがあると仮定します
そして、次の変数を使用してクラスをインスタンス化します
メソッド (またはそれ以外)を使用して、.copy
Test2 内の変数を Test1 に適用する方法はありますか?
これが純粋な scala では不可能な場合、Shapeless 1/2 ではどのように行われますか (現在のコードは Shapeless 1 にありますが、ある時点で Shapeless 2 にアップグレードする予定です)