matryoshka icon indicating copy to clipboard operation
matryoshka copied to clipboard

implicitly[Recursive[Fix[Option]]] ambiguity between recursiveTRecursive and birecursiveTBirecursive

Open klaeufer opened this issue 8 years ago • 4 comments

Symptoms

cata and other recursion patterns unavailable for Fix and related types.

scalaVersion := "2.11.8"
"com.slamdata"  %% "matryoshka-core" % "0.16.4",

Causes

Ambiguity between recursiveTRecursive and birecursiveTBirecursive, apparently in top-level package object.

How to reproduce

import matryoshka._
import matryoshka.implicits._
import matryoshka.data.Fix
implicitly[Recursive[Fix[Option]]]

<console>:19: error: ambiguous implicit values:
 both method recursiveTRecursive in package matryoshka of type [T[_[_]], F[_]](implicit evidence$81: matryoshka.RecursiveT[T])matryoshka.Recursive.Aux[T[F],F]
 and method birecursiveTBirecursive in package matryoshka of type [T[_[_]], F[_]](implicit evidence$83: matryoshka.BirecursiveT[T])matryoshka.Birecursive.Aux[T[F],F]
 match expected type matryoshka.Recursive[matryoshka.data.Fix[Option]]
       implicitly[Recursive[Fix[Option]]]
                 ^

Same problem for Mu and Nu.

Workaround

def r(implicit r: BirecursiveT[Fix]) = matryoshka.birecursiveTBirecursive(r)

klaeufer avatar Jan 22 '17 01:01 klaeufer

Thanks, @klaeufer. Currently, this isn’t much of a problem in practice, because it’s rare that you can actually resolve Recursive[T], usually you need Recursive.Aux[T, F], and (unfortunately) you can’t get there from Birecursive.

This is still a problem, though, and will be worse once we get the type class hierarchy working as intended. Prioritizing the implicits should fix it. I’ll do that soon.

sellout avatar Jan 22 '17 15:01 sellout

Thanks, @sellout, I'll keep using the workaround until the prioritized implicits are in place.

klaeufer avatar Jan 22 '17 20:01 klaeufer

@sellout This problem went away after I upgraded to Scala 2.12.1 and enabled -Ypartial-unification.

klaeufer avatar Feb 22 '17 19:02 klaeufer

I just ran into this, which reminded me of this issue, and so I’ll actually fix it now 😆 (Although I hope it’s not gotten in your way in the mean time.)

sellout avatar Apr 26 '17 03:04 sellout