Skip to content

derived Traverse fails on case objects #72

Open
@ceedubs

Description

Consider the following Option-like ADT:

@deriveTraverse
sealed abstract class MyExprF[+A] extends Product with Serializable

object MyExprF {
  final case class Const[+A](value: A) extends MyExprF[A]
  case object Noll extends MyExprF[Nothing]
}

The derived traverse method in the Traverse instance throws a MatchError on the Noll case:

scala> import cats.implicits._
import cats.implicits._

scala> val c: MyExprF[Int] = Const(3)
c: qq.droste.examples.MyExprF[Int] = Const(3)

scala> c.traverse(Option.apply) // expected output
res0: Option[qq.droste.examples.MyExprF[Int]] = Some(Const(3))

scala> val n: MyExprF[Int] = Noll
n: qq.droste.examples.MyExprF[Int] = Noll

scala> n.traverse(Option.apply) // I would expect Some(Noll)
scala.MatchError: Noll (of class qq.droste.examples.MyExprF$Noll$)
  at qq.droste.examples.MyExprF$$anon$1.traverse(TestExpr.scala:6)
  at qq.droste.examples.MyExprF$$anon$1.traverse(TestExpr.scala:6)
  at cats.Traverse$Ops.traverse(Traverse.scala:19)
  at cats.Traverse$Ops.traverse$(Traverse.scala:19)
  at cats.Traverse$ToTraverseOps$$anon$3.traverse(Traverse.scala:19)
  ... 36 elided

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions