I want to generalize a set of functions from lists to some functor type. I require the following three operation types.

  f a
  a -> f a
  f a -> f a -> f a

Should I choose MonadPlus and use these?

  mzero
  return
  mplus

Or should I choose Alternative and use these?

  empty
  pure
  (<|>)

Or should I make my own class? Or is there another option?

Thanks,
Sean