首页 > 解决方案 > F# - 了解使用泛型的类型

问题描述

我将在 10 天内进行 F# 考试,并且由于我目前正在做旧的考试集,因此在理解泛型,尤其是具有两个多态参数的类型时遇到了问题。

这些问题应该很容易解决,但我不确定它在语法上是如何工作的。旧试题如下:

以下类型Sum<'a,'b>包含两种不同的值

type Sum<'a,'b> = 
| Left of 'a
| Right of 'b

现在我需要编写两个类型的值Sum<int list, bool option>,一个应该使用定义,另一个应该Left定义Right

如果您将let sum1 = Left "Hello World其定义为val sum1 : Sum<string,'a>,但我找不到创建方法Sum<int list, bool option>

你会怎么解决?

标签: genericsf#polymorphism

解决方案


如果你要写

let sum1 = Sum<string,int>.Left "Hello World"

你会得到一个Sum<string,int>

所以如果你需要一个Sum<int list, bool option>然后.....

(公平地说,在现实生活中,拥有 aSum<string,'a>并不是真正的问题,因为 'a 可以变成任何东西,如果它需要是 abool option或其他什么,类型推断通常会为你做艰苦的工作并限制 'a)。


推荐阅读