すべての要素が型クラスのインスタンスであるHListにマップするにはどうすればよいですか?

スライス

私がこのような型クラスを持っているとしましょう:

trait Select[A] {
  def select(selector: String): Set[A]
}

タイプクラスは、「セレクター文字列が与えられた場合、Aオブジェクトのセットを提供する」機能を提供しますただし、これを複数回行う必要がある場合は、すぐに疲れます。

val setOfGrapes = Select[Grape].select("red-seedless")
val setOfApples = Select[Apple].select("fuji-apple")
// and so on...

私のプログラムでは、ユーザーが複数のセレクターを含む文字列を入力できるため、これはすべて実行時に行われます。

これをより簡潔にするために、このように使用できる関数を作成するためにシェイプレスを使用するにはどうすればよいですか?

val setOfGrapes :: setOfApples :: HNil =
  selectMultiple("red-seedless, fuji")(Select[Grape] :: Select[Apple] :: HNil)

動機は、複数Selectをすばやく連鎖させることができることです。本質的に、私はからメソッドを実行するSelect[Grape] :: Select[Apple] :: HNilことSet[Grape] :: Set[Apple] :: HNilによってに行きSelectます。

文字列処理(コンマ、グロブなどの処理)を無視して、これを実装するにはどうすればよいですか?

私はこれを試しました:

object fun extends Poly1 {
  implicit def selectCase[A] = at[Select[A]](_.select(""))
}

def mapFun[H <: HList](inputs: H) = inputs map fun

コンパイラは私に、を教えてくれcould not find implicit value for parameter mapper: shapeless.ops.hlist.Mapper[fun.type,H]ます。これは、HListのすべての要素がであるとは保証できないためだと思いSelect[A]ます。コンパイラにこれを伝えるにはどうすればよいですか?

私はshapeless.UnaryTCConstraint[H, Select]このように指定しようとしました

def mapFun[H <: HList](inputs: H)(implicit ev: shapeless.UnaryTCConstraint[H, Select]) = inputs map fun

しかし、同じエラーが発生します。

友人が私の使用をお勧めしますComappedMapper~>私はこれを試してみましたので、:

object mapper extends (Select ~> Set) {
  override def apply[A](s: Select[A]): Set[A] = s.select(???)
}

def mapFun[II <: HList, OO <: HList](inputs: II)(
  implicit ev: Comapped.Aux[II, Select, OO],
  ev2: Mapper.Aux[mapper.type, II, OO]
): OO = input map fun

しかし、コンパイラcould not find implicit value for parameter mapper: shapeless.ops.hlist.Mapper[ammonite.$sess.cmd8.fun.type,II]

ジャスパー-M

基本的に、必要な暗黙の証拠をmapFunメソッドに追加するだけです

object fun extends Poly1 {
  implicit def selectCase[A] = at[Select[A]](_.select(""))
}

def mapFun[H <: HList](inputs: H)(implicit m: Mapper[fun.type, H]) = inputs map fun
scala> mapFun(Select[Apple] :: Select[Grape] :: Select[Apple] :: HNil)
val res1: scala.collection.immutable.Set[Apple] :: scala.collection.immutable.Set[Grape] :: scala.collection.immutable.Set[Apple] :: shapeless.HNil = Set(Apple@44ebbbe8) :: Set(Grape@76eae32c) :: Set(Apple@666f67b6) :: HNil

好みのAPIを取得するには、次のような「手動カリー化」関数を導入できます。

class SelectMultipleApply(selector: String) {
  def apply[H <: HList](inputs: H)(implicit m: Mapper[fun.type, H]) = inputs map fun

  object fun extends Poly1 {
    implicit def selectCase[A] = at[Select[A]](_.select(selector))
  }
}

def selectMultiple(selector: String) = new SelectMultipleApply(selector)
scala> selectMultiple("red-seedless, fuji")(Select[Grape] :: Select[Apple] :: HNil)
val res5: scala.collection.immutable.Set[Grape] :: scala.collection.immutable.Set[Apple] :: shapeless.HNil = Set(Grape@63c81efa) :: Set(Apple@29dbae38) :: HNil

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

C#でgenric型の静的クラスのすべての「インスタンス」を収集するにはどうすればよいですか?

分類Dev

異種リストのすべての要素がすべて同じクラスのインスタンスである場合、それらに関数を適用するにはどうすればよいですか?

分類Dev

特定のタイプのクラスインスタンスのすべてのメンバーを取得するにはどうすればよいですか?

分類Dev

インデックスの左側にあるすべての要素を削除するにはどうすればよいですか?

分類Dev

コマンドラインで開いているすべてのプルリクエストを表示するにはどうすればよいですか?

分類Dev

デスクトップのすべてのインスタンスを非表示にするにはどうすればよいですか?

分類Dev

ghcが特定の型クラスインスタンスを探している理由を特定するにはどうすればよいですか?

分類Dev

ghcが特定の型クラスインスタンスを探している理由を特定するにはどうすればよいですか?

分類Dev

RDF クラスのすべてのインスタンスですべてを選択するにはどうすればよいですか?

分類Dev

タプルの可変インデックスにある要素にアクセスするにはどうすればよいですか?

分類Dev

すべての要素に特定のクラスがある場合、要素にクラスを追加するにはどうすればよいですか?

分類Dev

あるクラスのメソッドを使用して、Javaで別のインスタンスを作成するにはどうすればよいですか?

分類Dev

Gradleで、すべてのタスクが完了した後にタイムスタンプを出力するにはどうすればよいですか?

分類Dev

コンピューターのクラスターがありますが、ntpdをセットアップして、すべてがほぼ同じクロックになるようにするにはどうすればよいですか?

分類Dev

スーパークラスタイプのコレクションがある場合、特定のサブクラスタイプのすべてのアイテムを取得するにはどうすればよいですか?

分類Dev

PowerMockとMockitoを使用して列挙型クラスのインスタンスをモックするにはどうすればよいですか?

分類Dev

Firestore-マップのすべてのエントリに複合インデックスを作成するにはどうすればよいですか?

分類Dev

Firestore-マップのすべてのエントリに複合インデックスを作成するにはどうすればよいですか?

分類Dev

ベクトルに格納されているインデックスのすべての要素を取得するにはどうすればよいですか?

分類Dev

Goでスライスに特定のインデックスがあるかどうかを確認するにはどうすればよいですか?

分類Dev

クラスから変数のすべてのインスタンスのリストを取得するにはどうすればよいですか?

分類Dev

マスターマシンで分散テストログのすべてのステップを取得するにはどうすればよいですか?

分類Dev

クラス名が親/他のすべてのクラス名の上にある要素を検出するにはどうすればよいですか?

分類Dev

Listクラスにすべてのタイプを含めるにはどうすればよいですか?

分類Dev

値が特定のクラスのインスタンスであるかどうかをチェックするカスタムタイプガードを作成するにはどうすればよいですか?

分類Dev

現在のインスタンスのすべてのスーパークラスを取得するにはどうすればよいですか?

分類Dev

コマンドラインでアクセスしたすべてのURLをキャプチャするにはどうすればよいですか?

分類Dev

特定のクラスのすべての要素を異なるクラスにラップするにはどうすればよいですか?

分類Dev

Modelmapperを使用して、default / no-argsコンストラクターのないクラスにマップするにはどうすればよいですか?

Related 関連記事

  1. 1

    C#でgenric型の静的クラスのすべての「インスタンス」を収集するにはどうすればよいですか?

  2. 2

    異種リストのすべての要素がすべて同じクラスのインスタンスである場合、それらに関数を適用するにはどうすればよいですか?

  3. 3

    特定のタイプのクラスインスタンスのすべてのメンバーを取得するにはどうすればよいですか?

  4. 4

    インデックスの左側にあるすべての要素を削除するにはどうすればよいですか?

  5. 5

    コマンドラインで開いているすべてのプルリクエストを表示するにはどうすればよいですか?

  6. 6

    デスクトップのすべてのインスタンスを非表示にするにはどうすればよいですか?

  7. 7

    ghcが特定の型クラスインスタンスを探している理由を特定するにはどうすればよいですか?

  8. 8

    ghcが特定の型クラスインスタンスを探している理由を特定するにはどうすればよいですか?

  9. 9

    RDF クラスのすべてのインスタンスですべてを選択するにはどうすればよいですか?

  10. 10

    タプルの可変インデックスにある要素にアクセスするにはどうすればよいですか?

  11. 11

    すべての要素に特定のクラスがある場合、要素にクラスを追加するにはどうすればよいですか?

  12. 12

    あるクラスのメソッドを使用して、Javaで別のインスタンスを作成するにはどうすればよいですか?

  13. 13

    Gradleで、すべてのタスクが完了した後にタイムスタンプを出力するにはどうすればよいですか?

  14. 14

    コンピューターのクラスターがありますが、ntpdをセットアップして、すべてがほぼ同じクロックになるようにするにはどうすればよいですか?

  15. 15

    スーパークラスタイプのコレクションがある場合、特定のサブクラスタイプのすべてのアイテムを取得するにはどうすればよいですか?

  16. 16

    PowerMockとMockitoを使用して列挙型クラスのインスタンスをモックするにはどうすればよいですか?

  17. 17

    Firestore-マップのすべてのエントリに複合インデックスを作成するにはどうすればよいですか?

  18. 18

    Firestore-マップのすべてのエントリに複合インデックスを作成するにはどうすればよいですか?

  19. 19

    ベクトルに格納されているインデックスのすべての要素を取得するにはどうすればよいですか?

  20. 20

    Goでスライスに特定のインデックスがあるかどうかを確認するにはどうすればよいですか?

  21. 21

    クラスから変数のすべてのインスタンスのリストを取得するにはどうすればよいですか?

  22. 22

    マスターマシンで分散テストログのすべてのステップを取得するにはどうすればよいですか?

  23. 23

    クラス名が親/他のすべてのクラス名の上にある要素を検出するにはどうすればよいですか?

  24. 24

    Listクラスにすべてのタイプを含めるにはどうすればよいですか?

  25. 25

    値が特定のクラスのインスタンスであるかどうかをチェックするカスタムタイプガードを作成するにはどうすればよいですか?

  26. 26

    現在のインスタンスのすべてのスーパークラスを取得するにはどうすればよいですか?

  27. 27

    コマンドラインでアクセスしたすべてのURLをキャプチャするにはどうすればよいですか?

  28. 28

    特定のクラスのすべての要素を異なるクラスにラップするにはどうすればよいですか?

  29. 29

    Modelmapperを使用して、default / no-argsコンストラクターのないクラスにマップするにはどうすればよいですか?

ホットタグ

アーカイブ