package scalaz


trait Compos[A] {
  def compos[F[_]:Applicative](a: A)(f: A => F[A]): F[A]
  def visit[F[_]](a: A)(f: PartialFunction[A,F[A]])(implicit F:Applicative[F]): F[A] =
    if (f isDefinedAt a) f(a)
    else F.pure(a)
}