Подтвердить что ты не робот

Каковы важные особенности бесформенного API (в Scala) и что они делают?

Я пытаюсь узнать бесформенный (2.0.0). Кажется, это потрясающий инструмент, и я очень взволнован, но у меня проблемы с продвижением. Поскольку документации еще нет, я просматривал примеры и исходный код. У меня возникают трудности, потому что большинство примеров используют несколько бесформенных концепций, и в исходном коде один бесформенный тип часто использует других, поэтому я, в конечном итоге, спускаюсь с бесформенной дыры кролика. Я думаю, было бы полезно иметь список важных функций бесформенного API вместе с простым описанием того, что каждый из них делает. Поскольку я, безусловно, безусловный, чтобы составить такой список, я спрашиваю вас, людей из!

Для каждой функции, пожалуйста, укажите как можно больше:

  • Название функции и ее импорт.

  • Краткое описание того, что он делает.

  • Почему эта функция важна/почему кто-то хочет ее использовать?

  • Простой пример, который использует как можно больше других бесформенных или расширенных концепций Scala.

По признаку API я имею в виду одну вещь (например, тип, функцию, объект и т.д.) или небольшой набор тесно связанных вещей, которые определяются бесформенным 2.0 и могут быть импортированы и используется в программе. Я не имею в виду общие понятия, такие как полиморфизм более высокого порядка или рекурсия на уровне типа. И, пожалуйста, включите только одну функцию для каждого ответа. Возможно, если ответов достаточно, и достаточно других, то также используйте этот список, мы можем использовать голоса по ответам, чтобы оценить важность различных функций.

Примечание. Я знаю этот список функций. Я думаю, это здорово, и это очень помогло мне. Тем не менее, я ищу что-то более похожее на документацию API, чем список вещей, которые вы можете сделать. Я могу понять многие примеры и вывести цели из некоторых функций из них, но я часто буду споткнуться на какой-то конкретный фрагмент и не сможет определить его функцию.

4b9b3361

Ответ 1

HList

HList - это структура данных в виде списка, которая может содержать объекты нескольких типов. HList - на самом деле черта. Данный HList будет иметь более специфический тип, который полностью определяет типы его содержимого. HLists неизменяемы. Обычный способ импорта функциональности HList осуществляется через

import shapeless._

HLists полезны, когда вам нужна неизменная коллекция гетерогенных объектов, которая не является кортежем.

HLists построены с использованием HNil, который является пустым HList и оператором::. В следующем примере показано, как создать HList, который считается "cat":

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

Тип hl выше включает два типа Int и тип String. Shapeless включает в себя множество полезных операций над HLists, которые должны быть предметом других ответов.