/* sbt -- Simple Build Tool * Copyright 2010 Mark Harrah */ package sbt import Types._ // Used to emulate ~> literals trait Param[A[_], B[_]] { type T def in: A[T] def ret(out: B[T]) def ret: B[T] } object Param { implicit def pToT[A[_], B[_]](p: Param[A,B] => Unit): A~>B = new (A ~> B) { def apply[s](a: A[s]): B[s] = { val v: Param[A,B] { type T = s} = new Param[A,B] { type T = s def in = a private var r: B[T] = _ def ret(b: B[T]) {r = b} def ret: B[T] = r } p(v) v.ret } } }