def kleisliCompose[A, B, C](                                                                                                         
  f: (B) => Maybe[C],                                                                                                                
  g: (A) => Maybe[B]):
(A) => Maybe[C] = {
  a: A =>
  for (b <- g(a); c <- f(b)) yield c
}