Hi everyone,
I suggest to add such thing to Monoid object. Basically it gives you a 
monoid for a tagged type, given a monoid for this type. I found it quite 
useful,
and if you think that it makes sense, I can make PR.



implicit def monoidOfTagged[T, A](implicit M0: Monoid[A]): Monoid[A @@ T] = new 
Monoid[@@[A, T]] {

  override def zero: @@[A, T] = Tag.of[T](M0.zero)

  override def append(f1: @@[A, T], f2: ⇒ @@[A, T]): @@[A, T] =
    Tag.of[T](M0.append(Tag.unwrap(f1), Tag.unwrap(f2)))
}




And one more suggestion.
You can always take out function from Monad - if it returns the value 
inside this Monad:

def ???[A, B, F[_]: Monad](f: F[A ⇒ F[B]]): A ⇒ F[B] = a ⇒ {
  Monad[F].bind(f)(ff ⇒ ff(a))
}


It just feels a bit weird to have such high level function laying in the 
Utils. I did not find such thing in scalaZ, so may be it makes sense to add 
it as well.


Thanks for a great library!
Cheers,
Gleb




-- 
You received this message because you are subscribed to the Google Groups 
"scalaz" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to scalaz+unsubscr...@googlegroups.com.
To post to this group, send email to scalaz@googlegroups.com.
Visit this group at https://groups.google.com/group/scalaz.
For more options, visit https://groups.google.com/d/optout.

Reply via email to