12.5.1 声明计算类型
在这个示例中的计算类型(在 Haskell 术语中的一元类型)称为 ValueWrapper<T>,它只是存储泛型类型参数 t 的值,并不会为这个类型增加任何其他功能。这意味着,这个计算只处理标准值,但是,我们能够写代码(来增加功能),用 C# 中的查询表达式, F# 中的计算表达式。
清单 12.17 显示了在 C# 和 F# 中的类型声明。在 C# 中,我们创建简单的类,在 F# 中,将使用一个简单的只有一种情况的差别联合。
Listing 12.17 Value of the computation in C# and F#
// C# class declaration
class ValueWrapper<T> {
public ValueWrapper(T value) {
this.Value = value;
}
public T Value { get; private set; }
}
// F# discriminated union type
type ValueWrapper<'a> =
| Value of 'a
C# 的类是一个简单的不可变类型,存储了类型 T 的值。在 F# 中,只有一种情况的差别联合的使用也是有趣的,它可以创建命名类型,以方便使用。我们很快就会看到,可以使用模式匹配(使用 Value 识别器)来访问这个值。有这个类型的模式匹配永远也不会失败,因为,只有一种情况。这可以直接在值绑定的内部使用,这一点非常有用,当我们实现计算算法时。首先,我们看一下,用这个新类型来写计算的种类。