有没有办法可以概括这里的类型定义? 理想情况下,我希望能够更改“testInput”的类型,并且在编译时正确地推断出测试类型。
public static void Run()
{
var testInput = 3;
var test = ((Func<int, int>) Identity).Compose<int,int,int>(n => n)(testInput);
Console.WriteLine(test);
}
public static Func<T, V> Compose<T, U, V>(this Func<U, V> f, Func<T, U> g)
{
return x => f(g(x));
}
public static T Identity<T> (this T value)
{
return value;
}
更新: 我可以指定传递给Compose的函数类型,但这仍然在该行中指定了类型。
public static void Run()
{
var testInput = 3;
var identity = (Func<int, int>) Identity;
var test = identity.Compose((int n) => n)(testInput);
Console.WriteLine(test);
}
一些背景信息:我正在学习Wes Dyer的Monad奇迹。
注:Monad是一种编程范式,用于处理副作用和非确定性计算。