using System.Collections.Generic;
public static void Main()
var result = "Hello World!".ToIdentity()
.Bind(b =>(new DateTime(2010, 1, 11))
.Bind(c =>(a + ", " + b.ToString() + ", " + c.ToShortDateString())
Console.WriteLine(result.Value);
public T Value { get; private set; }
public static Identity<T> ToIdentity<T>(this T value)
return new Identity<T>(value);
public static Identity<B> Bind<A, B>(this Identity<A> a, Func<A, Identity<B>> func)