So I was reading Wes' latest post about Monad's a while back (which incidentally is well worth a read, it is the first good explanation of Monad's I've seen that uses a language I am comfortable with in it's examples, namely C#).
Well one thing Wes kind of brushes over is the fact that he ends up using a LINQ query against something that DOES NOT implement IEnumerable.
I for one didn't know you could do that.
It turns out that to be used as LINQ datasource a variable either needs to implement IEnumerable, IEnumerable<T> or have an appropriate SelectMany(...) method.
The Maybe<T> class that Wes introduces in his Monad walk thru, is an example of a datasource/class that doesn't implement IEnumerable<T> but instead has the right SelectMany(...) method:
var z = from x in 5.ToMaybe()
from y in Maybe<int>.Nothing
select x / y;
I'll leave it to you to ponder the possibilities...