0

我正在尝试制作一个返回随机值的通用函数。我可以让一个为浮点数工作,然后另一个为整数工作......像这样:

randomFloat :: StdGen -> Float-> Float-> (Float, StdGen)
randomFloat rndGen min max = randomR (min, max) rndGen :: (Float, StdGen)

randomInt :: StdGen -> Int-> Int-> (Int, StdGen)
randomInt rndGen min max = randomR (min, max) rndGen :: (Int, StdGen)

但我希望有一个适用于任何相关的变量类型。我该怎么做?到目前为止,我有这个,但这不起作用:

randomNbr :: (Random a) => StdGen -> a -> a -> (a, StdGen)
randomNbr rndGen min max = randomR (min, max) rndGen :: (a, StdGen)
4

1 回答 1

4

您的ain:: (a, StdGen)a您的函数类型签名中的不同。只需删除:: (a, StdGen)它就会起作用。

更一般地说,如果您想/需要在这样的表达式的注释中使用类型变量,则需要启用GHC 的ScopedTypeVariables扩展

于 2014-08-21T22:47:51.167 回答