метод lift сделан по разному?
В NewType0 нет type member Raw, чтобы не ограничивать в каком виде оно будет представлено, поэтому этот Raw указан как тайп параметр для метода lift. А NewType - конкретно вырожденная версия, в которой все известно и это просто сокращенная версия, чтобы не писать при вызове метода. В остальном одно и то же
А как мне тогда применить lift в NewType0? Вот есть у меня инстанс Monad для типа, хочу его лифтануть в ньютайп.
Возможно стоило бы в NewType0 написать lift0, чтобы можно было в наследниках сокращенные версии привычным образом добавлять
MyNewtype.lift[F, MyNewtype.Raw] - примерно так. Но я думаю, что действительно стоит переименовать в lift0 и обновить сегодня.
А если у меня Raw вида Raw[F, A] и я хочу лифтануть lift[Monad, Raw[F, *]]? Так вообще можно, или только конкретизируя A?
В теории можно, если Raw[F,*] является для тебя конкретным типом, но точно потеряется инфа об A в готовом ньютайпе. Надо пробовать, если не получится - напиши похожий скасти, подумаю
https://scastie.scala-lang.org/LMnet/thofyXs1RY6DYQeyEJUwFg/5
Тут собака в `type Kokoko[F[_]] = EitherT[WriterT[F, List[String], *], String, *] type Λ$ takes type parameters ` Что-то много дырок. Выглядит переусложнением, но я подумаю.
Ну не совсем же, ведь type Raw[F[_], A] = EitherT[WriterT[F, List[String], *], String, A]
Это у тебя, но я про то, в чем реальный затык компилятора и кайнд-прожектора.
Обсуждают сегодня