Проверка утверждения о том, что что-то не должно компилироваться

Эта проблема

Когда я'я работаю с библиотеками, которые поддерживают программирование на уровне типов, я часто пишу комментарии, подобные следующим (изпример представленныйПол Снайвли на Странной Петле 2012):

// But these invalid sequences don't compile:
// isValid(_3 :: _1 :: _5 :: _8 :: _8 :: _2 :: _8 :: _6 :: _5 :: HNil)
// isValid(_3 :: _4 :: _5 :: _8 :: _8 :: _2 :: _8 :: _6 :: HNil)

Или это изпример вбесформенный репозиторий:

/**
 * If we wanted to confirm that the list uniquely contains `Foo` or any
 * subtype of `Foo`, we could first use `unifySubtypes` to upcast any
 * subtypes of `Foo` in the list to `Foo`.
 *
 * The following would not compile, for example:
 */
 //stuff.unifySubtypes[Foo].unique[Foo]

Это очень грубый способ указать на некоторые факты о поведении этих методов, и мы можем представить, что хотим сделать эти утверждения более формальными -для блочного или регрессионного тестирования и т. д.

Чтобы привести конкретный пример того, почему это может быть полезно в контексте такой библиотеки, как Shapeless, несколько дней назад я написал следующее в качестве быстрой первой попытки ответа наэтот вопрос:

import shapeless._

implicit class Uniqueable[L 

Ответы на вопрос(5)

Ваш ответ на вопрос