問題タブ [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 投票する
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 にアップグレードする予定です)

0 投票する
3 に答える
1661 参照

scala - 共通の特性を実装するケースクラスのフィールドを更新することは可能ですか?

共通の特性 Model があると仮定しましょう。

そして、この特性を拡張する 2 つのケース クラスがあります。

モデルをパラメーターとして取り、更新されたフィールドの更新された値を含むコピーを返す、以下のようなユーティリティ関数を作成することは可能ですか?

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

scala - Scala で異なるパラメーター リストを持つ場合のパス依存型の連鎖とインスタンス化

簡単なカードゲームを実装することで、より静的にタイプセーフなコードを書く実験をしています。このゲームにはいくつかのユニークなカードがあり、各カードにはカード固有の効果があり、追加のパラメーター (効果のターゲットなど) が必要になる場合があります。プレイヤーは 2 枚のカードを持っており、自分のターンにそのうちの 1 枚をプレイすることを選択すると、そのカードの効果が発生します。

注: この投稿の詳細のほとんどは、REPL で試したものです。静的ではない型安全な実装を書いていますが、完全に飛び込む前に、必要なものが実現可能であることを確認したいと思います。

関連する定義を次に示します。

どのカードをプレイするかの選択を何らかの戦略に委任して、さまざまな戦略を比較する方法を確認したいと考えています。これは私が立ち往生している場所です: 返すことができるカードをHand、パラメーターで渡されたオブジェクトのカードに制限したいと思います。これは、次のように入力することで実行できますhand.CardInHand

ただし、追加のパラメーターも渡したいと考えています。たとえば、あるカードでは 1 人のプレイヤーのみを対象にすることができます (例: ターンをスキップする) が、別のカードでは 2 人を対象にすることができます (例: カードを入れ替える)。これらは によってモデル化されていCardEffectParamsます。hand.CardsInHandだから私は両方を返したいし、私が返すインスタンスはcardInHand.card.Paramsどこにあるのか、次のようなものです:cardInHand

最初の質問は、これができるかどうかです。この関係をどのように表現しますか?

また、サブクラスをインスタンス化する方法にもこだわっていますCardEffectParams。サブクラスごとに異なるパラメーター リストがある可能性があるためです。最初に考えたのはパターン マッチを行うことですが、マッチ ブロックの型がすべての可能な結果の共通の祖先であるため、これは失敗します。

私の現在のアイデアは、正しい型を生成する引数の hlist を取る各カード オブジェクト内にファクトリ メソッドを定義することです。

そこから次のことができますか?

しかし、うさぎの穴に行き過ぎたような気がします。私が達成したいことは可能ですか?それは必要ですか?静的な型の安全性を確保するために型付けを深く掘り下げる必要がありますか、それとも本当に初歩的なことを見逃していますか?

0 投票する
2 に答える
1133 参照

scala - 型のリストに対する型レベルのマップ

私はこのヘルパー関数を持っています:

私は現在このように使用しています:

ただし、ここには重複があります。私はそれが好きです(疑似コード):

ここでのオプションは何ですか? 私はそれをそのままにしておくことができますが、これを乾かすのに簡単なものがあれば、それについて聞くのが大好きです.

0 投票する
2 に答える
1479 参照

scala - クロージャを持つ Scala ユニオン型

この Miles Sabin のブログ投稿で定義されている Scala の共用体型を試しています。

http://www.chuusai.com/2011/06/09/scala-union-types-curry-howard/

また、

「型分離」(共用体型) を定義するには?

そこで定義された単純なケースでは問題なく動作しますが、私がしようとしているのは、それらを使用して Play Framework で特定の値 (String、Boolean、Int、Undefined) のみを受け入れ、それらを正常に渡す汎用 JSON パーサーを作成することです。 .

これが私のコードです:

次に、この方法で使用したいと思います。

しかし、私の withValue 関数はコンパイル エラーを出します:

T は Some[String] を受け入れる必要がある UpdateType であってはなりませんか、それともここで得られないものがありますか?

これらを機能させるためにここで何ができるか、それとも可能ですか? 私は Scala のより高度な型と型ラムダにまったく慣れていませんが、より型安全なコードを作成するためにそれらがどのように機能するかを学ぼうとしています。

また、Miles Sabin には Shapeless ( https://github.com/milessabin/shapeless ) という名前のライブラリがあり、これを調べていましたが、私が達成しようとしているのと同じことを行うものは見つかりませんでした。ここ。

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

scala - shapeless を使用して、HList を使用して Future のタプルをタプルの Future に変換する

タイプのタプル (Future[A]、Future[B]、Future[C]、...、Future[N]) を Future[(A, B, C, ..., N)]?これは、タプル内の要素数が未定義であることを前提としています。

タプルを HList に変換しようとしましたが、Future.sequence で行われたように、foldLeft と理解のために同様のトリックを試みましたが、フォールドに渡された型を扱う運はありませんでした。再帰関数で同じことを試しました。ただし、HList.head、HList.tail がないため、このコードはまだコンパイルされません。コードは次のようになります。

このコードは Future[HList] を返す必要があり、これを tupled 関数でタプルに戻すことができます。理想的には、タプルに含まれる要素が 3 つ未満であることを確認する必要があります。ただし、この演習では、入力がサイズ 3 以上の HList であると仮定します。

私は Shapeless 1.2.4 を使用していますが、他の依存関係のためにまだ移動できません。

前もって感謝します!