nicer errors for Pipeline phase

This just makes it easier to debug errors in the Pipeline phase. For example:

```
[info] x plan filter with between
[error]    'Left(Function RANGE cannot be compiled to a pipeline op
[error]      func: RANGE
[error]      args:
[error]        Int(10)
[error]          selector: None
[error]          expr:     Some(Literal(Int64(10)))
[error]          pipeline: \/-(None)
[error]        Int(100)
[error]          selector: None
[error]          expr:     Some(Literal(Int64(100)))
[error]          pipeline: \/-(None)
[error]    java.lang.Thread.getStackTrace(Thread.java:1551)
[error]    slamdata.engine.Error$class.$init$(errors.scala:10)
[error]    slamdata.engine.PlannerError$InternalError.<init>(errors.scala:106)
[error]    slamdata.engine.physical.mongodb.MongoDbPlanner$.slamdata$engine$physical$mongodb$MongoDbPlanner$$funcError$1(p```
That doesn’t work because I’m passing three different lambdas, each with a different “B". This really feels like too much work for such a small thing. Am I going about this the wrong way?

On Jun 24, 2014, at 16:13, John A. De Goes <notifications@github.com> wrote:

> In src/main/scala/slamdata/engine/physical/mongodb/planner.scala:
> 
> > @@ -610,6 +610,21 @@ object MongoDbPlanner extends Planner[Workflow] {
> >      }
> >  
> >      def invoke(func: Func, args: List[Attr[LogicalPlan, (Input, Output)]]): Output = {
> > +      // FIXME: this fxn is generic, could go in fixplate.scala?
> > +      def funcFormatter[A](func: Func, args: List[Attr[LogicalPlan, A]])(anns: List[(String, A => Any)]): (String => String) = {
> 
> You defined a show for workflow task or pipeline which used Any.
> 
> Instead of toString, use a generic type parameter B and require the Show constraint.
> 
> —
> Reply to this email directly or view it on GitHub.
>