Es ist etwas schwer zu erklären, da formlos eine Vielzahl von Funktionen bietet. Ich würde es wahrscheinlich einfacher finden, "in einfachen Worten zu erklären, wofür Variablen sind". Sie möchten auf jeden Fall mit der Funktionsübersicht beginnen .
Im Großen und Ganzen geht es bei Shapeless um das Programmieren mit Typen. Arbeiten zur Kompilierungszeit, die üblicherweise zur Laufzeit ausgeführt werden, genaue Verfolgung des Typs jedes Elements in einer Liste, Übersetzen von Tupeln über HListen in Fallklassen, Erstellen polymorpher Funktionen (im Gegensatz zu Methoden), usw.
Ein typisches Nutzungsszenario würde ungefähr so aussehen:
- Lesen Sie eine Reihe von Werten von irgendwo in ein
List
- Führen Sie eine typsichere Besetzung davon
List
in eineHList
- Abbildung darüber
HList
mit einer polymorphen Funktion, die z. B. Werte normalisiert
- konvertiere das 3. Element (das statisch als ein bekannt ist
Int
) in eine 0-aufgefüllte Zeichenfolge
- Erstellen Sie eine Fallklasse mit Werten aus der HList
Als Referenz wird ein HList
wird eine genaue Art, wie Int :: String :: Boolean :: HNil
(ja, das wirklich ist ein einziger Typ) , wo alles festgenagelt und die Größe festgelegt ist. Sie müssen also entweder zur Kompilierungszeit genau wissen, was in Ihre HList aufgenommen wird, oder Sie benötigen die typsichere Besetzung.
Wenn Sie eine tail
solche HList verwenden, erhalten Sie eine String :: Boolean :: HNil
Garantie und eine Garantiezeit für die Kompilierung, dass der Leiter dieser Liste eine sein wird String
. Wenn Sie dem Kopf einen Wert voranstellen, bleiben in ähnlicher Weise alle beteiligten Typen erhalten.
Shapeless wird auch mit der Generic
Typklasse geliefert, sodass Sie HList-Operationen auch für Tupel und Fallklassen verwenden können.
Die anderen Funktionen, die ich normalerweise benutze, sind:
Coproducts
, Mit denen Sie statisch „ein Wert als zB geben String
, Double
oder Int
, aber sonst nichts“ (ähnlich wie Either
, aber nicht beschränkt auf nur zwei Möglichkeiten)
Lenses
, die das Arbeiten mit verschachtelten Fallklassen vereinfachen.