scala shapeless

¿Cuáles son las características importantes de la API sin forma(en Scala) y qué hacen?



shapeless (1)

Estoy tratando de aprender sin forma (2.0.0). Parece una herramienta increíble y estoy muy entusiasmado con ella, pero tengo problemas para avanzar. Debido a que aún no hay mucha documentación, he estado revisando ejemplos y el código fuente. Estoy teniendo dificultades porque la mayoría de los ejemplos utilizan múltiples conceptos sin forma y, en el código fuente, un tipo sin forma a menudo hará uso de los demás, así que termino por el agujero de conejo sin forma, por así decirlo. Creo que sería útil tener una lista de las características importantes de la API sin forma junto con una descripción simple de lo que hace cada una. Como claramente no estoy calificado para hacer esa lista, ¡les estoy preguntando a ustedes, los humanos de Stack Overflow!

Para cada función, incluya tanto como pueda de lo siguiente:

  1. El nombre de la característica y cómo importarlo.

  2. Una breve y sencilla descripción de lo que hace.

  3. ¿Por qué es importante esta característica / por qué alguien se molestaría en usarla?

  4. Un ejemplo simple que utiliza la menor cantidad posible de otros conceptos de Scala avanzados o sin forma.

Por una característica de la API, me refiero a una sola cosa (por ejemplo, un tipo, una función, un objeto, etc.), o un pequeño conjunto de tales cosas estrechamente acopladas, que se define mediante 2.0 sin forma y que se puede importar y usar en un programa. No me refiero a conceptos generales como el polimorfismo de orden superior o la recursión a nivel de tipo. Y por favor solo incluye una característica por respuesta. Tal vez si hay suficientes respuestas y suficientes otras personas también usan esta lista, podemos usar los votos en las respuestas para clasificar la importancia de las diferentes características.

Nota: Soy consciente de esta lista de características . Creo que es genial, y me ha ayudado mucho. Sin embargo, estoy buscando algo más similar a la documentación de la API que una lista de cosas que puedes hacer. Puedo entender muchos de los ejemplos e inferir los propósitos de algunas características de ellos, pero a menudo me tropezaré con alguna pieza en particular y no podré averiguar su función.


HList

Una lista HL es una estructura de datos similar a una lista que puede contener objetos de varios tipos. HList es en realidad un rasgo. Una lista HL dada tendrá un tipo más específico que especifica completamente los tipos de su contenido. Las listas son inmutables. La forma habitual de importar la funcionalidad HList es a través de

import shapeless._

Las listas HL son útiles cuando necesitas una colección inmutable de objetos heterogéneos que no es una tupla.

Las listas HL se construyen utilizando HNil, que es la lista vacía H, y el operador ::. El siguiente ejemplo muestra cómo crear una lista HL que cuenta para "cat":

val hl = 1 :: 2 :: "cat" :: HNil

El tipo de hl anterior incluye dos tipos Int y un tipo String. Shapeless incluye muchas operaciones útiles en HLists, que deberían ser objeto de otras respuestas.