M
Size: a a a
M
AH
M
AH
M
AS
def taggedEncoder[T: Encoder, U]: Encoder[T @@ U] =
Encoder[T].@@@[U]
def taggedDecoder[T: Decoder, U]: Decoder[T @@ U] =
Decoder.instance(_.as[T].@@@[U])
def taggedTypeEncoder[T: Encoder](taggedType: TaggedType[T]): Encoder[taggedType.Type] =
taggedEncoder[T, taggedType.Tag]
def taggedTypeDecoder[T: Decoder](taggedType: TaggedType[T]): Decoder[taggedType.Type] =
taggedDecoder[T, taggedType.Tag]
def taggedCodec[T: Encoder : Decoder, U]: Codec[T @@ U] =
Codec.from(taggedDecoder[T, U], taggedEncoder[T, U])
def taggedTypeCodec[T: Encoder : Decoder](taggedType: TaggedType[T]): Codec[taggedType.Type] =
Codec.from(taggedTypeDecoder(taggedType), taggedTypeEncoder(taggedType))
AH
M
import types._ не нужен, в автоскоупе будет. Но если енкодеры в отдельный пакет пихать будешь, то конечно там доп импорт будетλ
AH
M
M
λ
AH
AH
M
._ и импортится liftAnyF - который этого лифтера подхватывает. Но так лучше не делать, это бэд кейсλ
M
variable.value vs variable . Ну да, ну да)λ
λ