/* 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 } } }