package scalaz

sealed trait Function0W[T] {
  val k: () => T

  import Scalaz._

  def throws: Validation[Throwable, T] = try {success(k())} catch {case e => failure(e)}
}

trait Function0s {
  implicit def Function0To[T](f: () => T): Function0W[T] = new Function0W[T] {
    val k = f
  }

  implicit def Function0From[T](f: Function0W[T]): () => T = f.k
}