Higher kinded типов для Scala List, Функции и других сложных типов
Я все еще учусь Scala - Так что, пожалуйста, простите меня, если это очень просто сделать. Я также не очень свободно говорю с Scalaz или Shapeless - я только начинаю изучать эти библиотеки. Я ищу простой трактата, где-то что объясняет мне, как я могу сделать что-то вроде
trait AmazingMalini[F[G[_]]] {
def fMap[A,B](aa: F[G[A]])(f : A => F[G[B]]) : F[G[B]]
}
И тогда я хочу быть в состоянии сделать что-то вроде этого -
trait SomeCrazyMagicWithList extends AmazingMalini[Option[List]]{
def fMap[A,B](aa: Option[List[A]])(f : A => Option[List[B]]) :Option[List[B]] = ???
}
Заметьте, что опция или типы списка - это просто примеры. У меня есть несколько типов контейнеров, которые я бы заменил там (построив небольшой трафик, например DSL для приложения).
Я не уверен, если это правильное решение, но, похоже, работает: 'trait AmazingMalini [F [G], G [_]]', 'trait SomeCrazyMagicWithList расширяет AmazingMalini [Option, List]'. Остальная часть кода не изменилась. –
Я бы не использовал один и тот же идентификатор 'G' для разных вещей, это довольно запутанно. Другими словами, было бы лучше просто «AmazingMalini [F [_], G [_]]» –