gpt4 book ai didi

haskell - 如何解决 RandomGen 的 "rigid type variable bound by"错误?

转载 作者:行者123 更新时间:2023-12-02 12:29:00 26 4
gpt4 key购买 nike

我正在尝试生成一些随机数和新的随机数生成器。我还没有走得太远,但我遇到了这个错误,而且我不明白如何修复它。

我的代码是:

getGenerator :: RandomGen g => g
getGenerator = snd (next (mkStdGen 42))

我得到的错误是:

Couldn't match expected type ‘g’ with actual type ‘StdGen’
‘g’ is a rigid type variable bound by
the type signature

有人可以解释一下我做错了什么吗?我还尝试将 RandomGen 切换为 StdGen 但出现错误:

‘StdGen’ is applied to too many type arguments

我看到 mkStdGen 创建了一个 StdGen,但根据 wiki 页面,StdGen 是 RandomGen 的一个实例。有没有办法以某种方式将 StdGen 转换为 RandomGen?我现在真的很困惑。

最佳答案

问题在于您的声明比实际定义更笼统。您的声明声称 getGenerator 的类型可以是实现 RandomGen 类的任何类型。假设我有这样一个类型,MyRandomGen。那么我应该能够写出类似的东西

let v = getGenerator :: MyRandomGen

并将 v 绑定(bind)到 MyRandomGen 值。

但是,您的实际定义并不那么笼统。 snd (next (mkStdGen 42)) 的值始终StdGen 类型,而不是任意实例 g RandomGen

解决方案是诚实地了解 getGenerator 的计算结果。

getGenerator :: StdGen
getGenerator = snd (next (mkStdGen 42))

关于haskell - 如何解决 RandomGen 的 "rigid type variable bound by"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36633119/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com