static Nullable<int> ApplyFunction(Nullable<int> nullable, Func<int, int> function)
{
if (nullable.HasValue)
{
int unwrapped = nullable.Value;
int result = function(unwrapped);
return new Nullable<int>(result);
}
else
{
return new Nullable<int>();
}
}


    static Nullable<int> AddOne(Nullable<int> nullable)
{
return ApplyFunction(nullable, x => x + 1);
}


    static Nullable<T> ApplyFunction<T>(Nullable<T> nullable, Func<T, T> function)
{
if (nullable.HasValue)
{
T unwrapped = nullable.Value;
T result = function(unwrapped);
return new Nullable<T>(result);
}
else
{
return new Nullable<T>();
}
}


    static Nullable<R> ApplyFunction<A, R>(Nullable<A> nullable, Func<A, R> function)
{
if (nullable.HasValue)
{
A unwrapped = nullable.Value;
R result = function(unwrapped);
return new Nullable<R>(result);
}
else
{
return new Nullable<R>();
}
}


    static M<R> ApplyFunction<A, R>(M<A> monadic, Func<A, R> function)


1. 原文: then we should be able to make an operation on an “amplified” int that produces an “amplified” double，鉴于用"aimplified"实在是容易让人迷惑(这个词具体表达什么意思在第二篇有讲解，基本就是指"扩充这个类型本身的能力"，比如Nullable<byte>扩充了byte本身，让他具有了可空的能力，就可以说Nullable<byte>是一个"amplified" byte)，这次直接用Monadic(作者所说的"amplified type"就是monadic type的一种描述，详见第一篇)，如未指明，下文中所有的"aimplified"都会直接译作"monadic"，如果你觉得这种翻译不合适或者有合理的意见，欢迎在评论区提出 ↩︎

E ti amerò comunque lo so, anche se non sei con me