カスタムタイプがバインドされたシェイプレスマッピングとサブタイプポリモーフィズム

コトソカリス海岸

カスタムポリモーフィッククラスのHListをマップしようとすると、「パラメーターマッパーの暗黙的な値が見つかりませんでした」という恐ろしいエラーが発生します。コードサンプル:

import shapeless._

trait SubTrait
case class A() extends SubTrait
case class B() extends SubTrait

case class C[T <: SubTrait](x: T)

object TheMapper extends Poly1 {
  implicit def default[T <: SubTrait, L[T] <: C[T]] = at[L[T]](_.x)
}

val ab = C(A()) :: C(B()) :: HNil

println(ab.map(TheMapper))

これは、L [T]の境界がたとえば反復可能である場合に正常に機能します(この非常によく似た質問、解決策、およびコメントを参照してください)。何が足りないのですか?

ジャスパー-M

何らかの理由で、実際のエラーが飲み込まれます。REPLでこのステップバイステップでコンパイルすると、次のエラーが発生します。

error: type arguments [T] do not conform to class C's type parameter bounds [T <: SubTrait]
         implicit def default[T <: SubTrait, L[T] <: C[T]] = at[L[T]](_.x)
                                                     ^

問題は、TinL[T] <: C[T]T <: SubTrait。のinと同じはないことです。名前を変更すると、読みやすくなります。

scala> object TheMapper extends Poly1 {
     |   implicit def default[T <: SubTrait, L[x] <: C[x]] = at[L[T]](_.x)
     | }
<console>:18: error: type arguments [x] do not conform to class C's type parameter bounds [T <: SubTrait]
         implicit def default[T <: SubTrait, L[x] <: C[x]] = at[L[T]](_.x)
                                                     ^

解決策は、に限界を設けることxです。

scala> object TheMapper extends Poly1 {
     |   implicit def default[T <: SubTrait, L[x <: SubTrait] <: C[x]] = at[L[T]](_.x)
     | }
defined object TheMapper

scala> val ab = C(A()) :: C(B()) :: HNil
ab: shapeless.::[C[A],shapeless.::[C[B],shapeless.HNil]] = C(A()) :: C(B()) :: HNil

scala> println(ab.map(TheMapper))
A() :: B() :: HNil

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

レスポンシブカスタムシェイプdivフッター

分類Dev

タイプとしてインターフェースを備えた配列(インターフェースを備えたポリモーフィズム)

分類Dev

Jenkinsパイプラインのシェルスクリプトを介してansibleプレイブックを実行すると、エコー出力がバッファリングされ、リアルタイムで表示されません

分類Dev

カスタムグジャラート語フォント(GopikaTwo)は、Androidモバイルブラウザーおよびハイブリッドアプリケーションではサポートされていません

分類Dev

フォームでラップされたグリッドライブラリは、カスタムレンダラーが機能しないことをサポートします

分類Dev

グーグルマップカスタマイズされたピン

分類Dev

カスタマイズしたバーボタンアイテムでの「ナビゲーションアイテムでサポートされていないプレーンスタイル」の警告

分類Dev

エポックタイムスタンプを使用したタイムスタンプフィールドでのFirestoreコレクションクエリ

分類Dev

allauthのカスタマイズされたサインアップフォームからフィールドをカスタムユーザーモデルに保存するにはどうすればよいですか?

分類Dev

カスタマイズされたスタイルをサポートするVimフォーマッタープラグインはありますか?

分類Dev

simple_form gemを使用して作成されたデバイスのログインフォームとサインアップフォームをカスタマイズするにはどうすればよいですか?

分類Dev

アプリがバックグラウンドになると、リアルタイムマルチプレイヤーGooglePlayゲームサービスピアが切断されます

分類Dev

ノックアウトで再マッピングした後、カスタムプロパティがバインドされない

分類Dev

カスタムシンボルとポップアップを備えたリーフレットWFSポイントマップ

分類Dev

ネイティブ呼び出しとアプリケーションは、別のスレッド用にマーシャリングされたインターフェイスを呼び出しました

分類Dev

ポリモーフィックマッピングタイプ

分類Dev

スプリングブーツ2.0.0を使用したボイラープレートプロジェクトで、カスタムアクチュエータのエンドポイントが公開されていない

分類Dev

ブレークポイントを使用したカスタム QuickLook プラグインのデバッグ

分類Dev

ネストされたオブジェクトとカスタムプロパティタイプをサポートするためのAzureTableのITableEntityインターフェイスの実装

分類Dev

api.signuporsigninとカスタムポリシーを使用してサインアップページをカスタマイズします

分類Dev

プログレスバー(シークバー)の最後にあるモバイルフレンドリーな「ドットグラブ」をカスタムhtm5オーディオプレーヤーに追加します

分類Dev

「この Intel 汎用グラフィック ドライバーをインストールすると、コンピューター メーカー (OEM) からカスタマイズされたドライバーが上書きされます」

分類Dev

リポジトリインジェクションとEntityFrameworkを備えたカスタムメンバーシッププロバイダー

分類Dev

ワードプレスのカスタムテーマに基づいて構築されたウェブサイトのレスポンシブデザインを作成するにはどうすればよいですか?

分類Dev

タブ+スワイプジェスチャ、カスタムグリッドビュー、フラグメント

分類Dev

Laravelでカスタムパスワードリセットリンク(プレフィックス付きのカスタマイズされたリンク)を送信するにはどうすればよいですか?

分類Dev

忍者のフレームワークのエンドポイントは、カスタムオブジェクトにJSONをマップしようとすると500エラーがスローされます

分類Dev

インターフェイスのシミュレーション、メソッドのオーバーライド、ポリモーフィズム、およびCでオーバーライドされたスーパーメソッドの呼び出し

分類Dev

タイプスクリプトマップされたreduxレデューサーファクトリタイピングの問題

Related 関連記事

  1. 1

    レスポンシブカスタムシェイプdivフッター

  2. 2

    タイプとしてインターフェースを備えた配列(インターフェースを備えたポリモーフィズム)

  3. 3

    Jenkinsパイプラインのシェルスクリプトを介してansibleプレイブックを実行すると、エコー出力がバッファリングされ、リアルタイムで表示されません

  4. 4

    カスタムグジャラート語フォント(GopikaTwo)は、Androidモバイルブラウザーおよびハイブリッドアプリケーションではサポートされていません

  5. 5

    フォームでラップされたグリッドライブラリは、カスタムレンダラーが機能しないことをサポートします

  6. 6

    グーグルマップカスタマイズされたピン

  7. 7

    カスタマイズしたバーボタンアイテムでの「ナビゲーションアイテムでサポートされていないプレーンスタイル」の警告

  8. 8

    エポックタイムスタンプを使用したタイムスタンプフィールドでのFirestoreコレクションクエリ

  9. 9

    allauthのカスタマイズされたサインアップフォームからフィールドをカスタムユーザーモデルに保存するにはどうすればよいですか?

  10. 10

    カスタマイズされたスタイルをサポートするVimフォーマッタープラグインはありますか?

  11. 11

    simple_form gemを使用して作成されたデバイスのログインフォームとサインアップフォームをカスタマイズするにはどうすればよいですか?

  12. 12

    アプリがバックグラウンドになると、リアルタイムマルチプレイヤーGooglePlayゲームサービスピアが切断されます

  13. 13

    ノックアウトで再マッピングした後、カスタムプロパティがバインドされない

  14. 14

    カスタムシンボルとポップアップを備えたリーフレットWFSポイントマップ

  15. 15

    ネイティブ呼び出しとアプリケーションは、別のスレッド用にマーシャリングされたインターフェイスを呼び出しました

  16. 16

    ポリモーフィックマッピングタイプ

  17. 17

    スプリングブーツ2.0.0を使用したボイラープレートプロジェクトで、カスタムアクチュエータのエンドポイントが公開されていない

  18. 18

    ブレークポイントを使用したカスタム QuickLook プラグインのデバッグ

  19. 19

    ネストされたオブジェクトとカスタムプロパティタイプをサポートするためのAzureTableのITableEntityインターフェイスの実装

  20. 20

    api.signuporsigninとカスタムポリシーを使用してサインアップページをカスタマイズします

  21. 21

    プログレスバー(シークバー)の最後にあるモバイルフレンドリーな「ドットグラブ」をカスタムhtm5オーディオプレーヤーに追加します

  22. 22

    「この Intel 汎用グラフィック ドライバーをインストールすると、コンピューター メーカー (OEM) からカスタマイズされたドライバーが上書きされます」

  23. 23

    リポジトリインジェクションとEntityFrameworkを備えたカスタムメンバーシッププロバイダー

  24. 24

    ワードプレスのカスタムテーマに基づいて構築されたウェブサイトのレスポンシブデザインを作成するにはどうすればよいですか?

  25. 25

    タブ+スワイプジェスチャ、カスタムグリッドビュー、フラグメント

  26. 26

    Laravelでカスタムパスワードリセットリンク(プレフィックス付きのカスタマイズされたリンク)を送信するにはどうすればよいですか?

  27. 27

    忍者のフレームワークのエンドポイントは、カスタムオブジェクトにJSONをマップしようとすると500エラーがスローされます

  28. 28

    インターフェイスのシミュレーション、メソッドのオーバーライド、ポリモーフィズム、およびCでオーバーライドされたスーパーメソッドの呼び出し

  29. 29

    タイプスクリプトマップされたreduxレデューサーファクトリタイピングの問題

ホットタグ

アーカイブ