Shapeless ライブラリの用途を誰か説明してもらえますか? [closed] 質問する

Shapeless ライブラリの用途を誰か説明してもらえますか? [closed] 質問する

Shapeless ライブラリの目的を簡単に説明してくれる人はいますか?

Scala にはジェネリックと継承機能があるので、Shapeless の用途が少しわかりません。

おそらく、物事を明確にするためのユースケースが役立つでしょう。

ベストアンサー1

shapelessにはさまざまな機能があるため、説明するのは少し難しいです。「変数が何のためにあるのかを、簡単に説明する」方が簡単だと思います。まずは、機能の概要

大まかに言えば、shapeless は型を使ったプログラミングに関するものです。通常は実行時に行われるようなことをコンパイル時に実行したり、リスト内の各要素の型を正確に追跡したり、タプルから HList やケース クラスに変換したり、(メソッドではなく) 多態的な関数を作成したりします。

典型的な使用シナリオは次のようになります。

  • どこかから大量の値を読み込み、List
  • それを型安全にキャストしListHList
  • HList例えば値を正規化する多態的関数を使ってそれをマップする
  • 3番目の要素(静的に であることがわかっているInt)を0で埋められた文字列に変換する
  • HListの値を使用してケースクラスを構築する

参考までに、HList正確な型、例えばInt :: String :: Boolean :: HNil(そう、それは本当にすべてが固定され、サイズが固定されている単一の型です。そのため、コンパイル時に HList に何が格納されるかを正確に把握するか、型安全なキャストが必要になります。

tailこのような HList の を取得するとが得られString :: Boolean :: HNil、コンパイル時にそのヘッドが になることが保証Stringされます。ヘッドの先頭に値を付加すると、同様に、関連するすべての型が保持されます。

Shapelessには、Generic型クラスでは、タプルやケース クラスでも HList 操作を使用できます。

私がよく使う他の機能は次のとおりです。

  • CoproductsStringを使用すると、たとえば「 、DoubleまたはInt、それ以外はなし」などの値を静的に型指定できます( とよく似ていますEitherが、2 つの可能性だけに限定されません)。

  • Lensesこれにより、ネストされたケース クラスの操作が簡素化されます。

おすすめ記事