Я читал некоторые вещи о программировании уровня Scala. В основном блог Apocalisp, а также выступление Александра Лемана на youtube.
Я немного застрял на чем-то, что, я думаю, вероятно, очень простое, что подразумевает использование неявно для сравнения двух типов, как показано ниже:
implicitly[Int =:= Int]
В блоге Apocalisp отмечается:
Это полезно для захвата неявного значения, которое находится в области видимости и имеет тип T.
Я получаю, как сделать эту работу, но я действительно не знаю, почему она работает, и поэтому не хочу двигаться дальше.
В вышеприведенном случае существует неявный тип "Int" в области видимости, который "неявно" вырывается из эфира, позволяя компилировать код? Как это соотносится с возвращаемым типом функции function1?
res0: =:=[Int,Int] = <function1>
Кроме того, откуда это подразумевается? Как насчет в случае с моей чертой "Foo", почему
implicitly[Foo =:= Foo]
компилировать? Где в этом случае подразумевается "Foo"?
Извините заранее, если это очень глупый вопрос и спасибо за любую помощь!