我正在尝试读取另一个进程的基地址的值并将其输出。
我正在像这样处理:
handle <- openProcess 0x0010 False PID
然后尝试像这样result <- peekP handle BASE_ADDRESS
但是这显然是错误的,因为它不知道应该读取哪种类型,所以我得到了:
Ambiguous type variable `a0' arising from a use of `peekP' prevents the constraint `(Storable a0)' from being solved.`
我相信我应该以某种方式使用::
来指定我要使用的可存储类型,但是找不到任何解释该操作的地方。
如果有人可以告诉我该怎么做,那就太好了。
很抱歉,如果这是一个愚蠢的问题,将不胜感激。
答案 0 :(得分:1)
根据peekP Documentation,@Component({
selector: 'my-slider',
templateUrl: './my-slider.html'
})
export class MySlider extends ControlWrapper {
public options: Options = {
animate: false,
step: 1
};
@Input()
public set min(v: number) {
this.options = {
...this.options,
floor: v
};
}
@Input()
public set max(v: number) {
this.options = {
...this.options,
ceil: v
};
}
constructor(
@Optional()
@Self()
public ngControl: NgControl,
private changeDetector: ChangeDetectorRef
) {
super();
this.ngControl.valueAccessor = this;
}
public onChange() {
this.changeDetector.detectChanges();
}
}
的签名是
peekP
所以它在返回类型中是多态的。
如果编译器无法推断出所使用的具体类型,而是类型变量peekP :: Storable a => PHANDLE -> ForeignAddress -> IO a
,则会发出您看到的此类(或类似的)错误消息。
如您所建议,您可以帮助编译器以及类型注释,例如
a
还有一个peekProcessMemory,我猜它的名字应该更合适。