Linq und Monaden: Semantik

Haskell:

class Monad m where
    (>>=) :: m a -> (a -> m b) -> m b
[1 .. 5] >>= \ x -> [ 1 .. x ]

Linq:

using System.Linq;
public static IEnumerable<TResult> 
  SelectMany<TSource, TResult>(
    this IEnumerable<TSource> source,
    Func<TSource, IEnumerable<TResult>> selector)

Enumerable.Range(1,5)
    .SelectMany(x => Enumerable.Range(1,x)



2009-11-20