Closed
Description
When you run our current SplitLaw
for Kleisli[Either[String, ?], ?, ?]
it fails the splitInterchange
law.
@fthomas already mentioned in #232 that he wasn't sure that it was sound.
If you add the following to KleisliTests
you can see it fail.
{
type StringOr[A] = Either[String, A]
// SI 2712 workarounds
implicit val EqFAA = implicitly[Eq[Kleisli[StringOr,Int,Int]]]
implicit val EqFACB = implicitly[Eq[Kleisli[StringOr,(Int, Int),Int]]]
implicit val EqFACBC = implicitly[Eq[Kleisli[StringOr,(Int, Int),(Int, Int)]]]
implicit val EqFACDBCD = implicitly[Eq[Kleisli[StringOr,((Int, Int), Int),(Int, (Int, Int))]]]
implicit val invariant = Kleisli.catsDataFunctorForKleisli[StringOr, Int]
implicit val iso = CartesianTests.Isomorphisms.invariant[Kleisli[StringOr, Int, ?]]
implicit val ArbFAB = implicitly[org.scalacheck.Arbitrary[Kleisli[StringOr,Int,Int]]]
implicit val catsDataArrowForKleisli = Kleisli.catsDataSplitForKleisli[StringOr]
checkAll("Kleisli[Either[String, ?], Int, Int]", SplitTests[Kleisli[StringOr, ?, ?]].split[Int, Int, Int, Int, Int, Int])
}
I looked at it with @diesalbla and the law only seems to hold for commutative arrows.
Metadata
Metadata
Assignees
Labels
No labels