为什么F#不能使用其类型缩写来支持扩展系统类型?

MiP

例如,如果我尝试用扩展intint不是类型的真实名称,则此代码将失败:

type int with
member this.IsEven = this % 2 = 0

我必须System.Int32改用:

type System.Int32 with
member this.IsEven = this % 2 = 0

//test
let i = 20
if i.IsEven then printfn "'%i' is even" i

为什么不能使用类型缩写int

v

我认为Will的glib答案基本上是正确的-默认情况下未实现功能。但是,另一个可能的原因是类型缩写的作用域是范围,因此,缩写的范围是否会影响扩展的范围尚不是很明显。例如:

module X =
    type t = int

module Y =
    // imagine we could hypothetically do this
    type X.t with
        member i.IsEven = i % 2 = 0

open Y
fun (x:System.Int32) -> x.IsEven // should this compile even though t isn't in scope here?

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如果我支持Fvoid类型,为什么需要在F#中使用单位类型?

为什么虚拟函数不能使用返回类型推导?

为什么不能使用long long int类型?C ++

为什么不能使用`Show a => [Something-> a]`类型?

为什么不能使用memcmp()函数比较浮点类型?

为什么我不能使用打字稿为我的自定义界面扩展 HTMLElement 类型?

为什么我们不能通过类型扩展来满足F#静态成员约束?

为什么我必须强制转换为类型参数,而不能使用受约束的类型?

为什么在类型族声明中不能使用约束类型?

为什么类型别名不能使用Rust中原始类型的关联常量?

为什么不能扩展通用类型

为什么不能在类型扩展的约束中使用通用类型参数?

为什么不能使用此构造函数参数构造此用户定义类型的对象?

为什么在Haskell的typeclass定义中不能使用类型构造函数?

为什么不能使用 typedef 类型来声明其父类的构造函数?

c ++:为什么不能使用模板来推断容器和元素类型?

为什么不能使用constexpr全局变量初始化constexpr引用类型?

为什么不能使用Void作为main方法的返回类型

为什么不能使用抽象类型的具体实现来推断ClassTag?

为什么我不能使用显式类型来传递函数

为什么不能使用“ new”运算符创建泛型类型的实例?

为什么不能使用impl trait返回多个/条件类型?

Java:为什么不能使用科学计数法声明整数类型?

为什么我不能使用AngularJS从输入类型打印值?

为什么我不能使用 switch 语句来缩小 Typescript 中的类类型?

C ++语法问题-为什么我不能使用逗号分隔不同类型的变量定义

为什么我不能使用 Reactive<UICollectionView> 类型的 model<T>(at indexPath: IndexPath) 方法?

为什么在返回类型为instancetype的方法上不能使用点语法?

为什么Scala的编译器不能使用继承类型的隐式转换?