6
votes

I'm trying to multi-partition a map based on a list of predicates.

I wrote the following function to do that:

def multipartition[A,B](map : Map[A,B], list : List[(A,B) => Boolean]) : List[Map[A,B]] = 
    list match {
        case Nil => 
            Nil
        case l :: ls => 
            val (a, b) = map partition l; // type mismatch; found (A,B) => Boolean, required: (A,B) => Boolean
            return a :: multipartition(b, ls)
}

The scala compiler (I'm running 2.9.1) fails at the indicated place with a "type mismatch; found (A,B) => Boolean, required: (A,B) => Boolean".

Has anyone ever seen anything like that? Any idea how to fix it?

Thanks,

LP

2

2 Answers

11
votes

partition expects Function[(A,B), Boolean], that is a function of one pair argument, not a function of two arguments (rather annoying that they are different)

So you need to write ((A,B)) => Boolean as the type of elements of your list

(The error message is not helpful at all, close to a minor bug)

7
votes

Complementing didierd's answer, you can solve it by writing it like this:

        val (a, b) = map partition l.tupled;