【发布时间】:2018-05-07 15:30:06
【问题描述】:
为什么我需要在第一行添加类型注释?
c.get[List[String]]("primary-group") 在flatMap 之后是Decoder.Result[List[String]],它应该保持顶部类型并且是Decoder.Result[String],但它会更改为Either[DecodingFailure, String]。为什么?是dependent type的问题吗?
case class JWTPayload(primaryGroup: Group, groupMember: List[Group], name: String, pid: String)
implicit val jwtPayloadDecoder: Decoder[JWTPayload] = Decoder.instance(c =>
(
c.get[List[String]]("primary-group").flatMap(l => if(l.size == 1) l.head.asRight else DecodingFailure("", c.history).asLeft) : Decoder.Result[String],
c.get[List[String]]("group-member"),
c.get[String]("name"),
c.get[String]("pid")
).map4(
JWTPayload
)
)
没有: Decoder.Result[String我得到
Error:(43, 7) value map4 is not a member of (scala.util.Either[io.circe.DecodingFailure,String], io.circe.Decoder.Result[List[String]], io.circe.Decoder.Result[String], io.circe.Decoder.Result[String])
possible cause: maybe a semicolon is missing before `value map4'?
).map4(
谢谢
【问题讨论】:
标签: scala scala-cats circe