在Elm中生成随机数所需的最小代码是多少?

时间:2016-10-23 19:11:16

标签: random elm

我只是想看一个随机数。所以这里是随机库的an example straight out of the docs。我希望Random.generate接受生成器和种子并返回包含随机值和新种子的元组,如:

generate : Generator a -> Seed -> (a, Seed)

-- Main.elm

import Random

seed0 = Random.initialSeed 31415
randomNumber = Random.generate (Random.int 0 10) seed0
main = 
  -- print result of randomNumber here

编译器错误显示两种类型不匹配:

-- TYPE MISMATCH ---------------------------------------------------- -----------

The 2nd argument to function `generate` is causing a mismatch.

5|        Random.generate (Random.int 0 10) seed0
                                        ^^^^^
Function `generate` is expecting the 2nd argument to be:

    Random.Generator a

But it is:

    Random.Seed


The 1st argument to function `generate` is causing a mismatch.

5|        Random.generate (Random.int 0 10) seed0
                       ^^^^^^^^^^^^^^^
Function `generate` is expecting the 1st argument to be:

    a -> b

But it is:

    Random.Generator Int

我在这里缺少什么?

2 个答案:

答案 0 :(得分:4)

您引用的文档版本是Core 1.0.0,它已经过时了。 Core的当前版本是4.0.5。 (docs for Random here

您正在寻找的签名功能现在名为step

step : Generator a -> Seed -> (a, Seed)

所以你的重构代码看起来像这样:

import Html exposing (text)
import Random

seed0 = Random.initialSeed 31415
(randomNumber, nextSeed) = Random.step (Random.int 0 10) seed0

main =
  text <| toString randomNumber

答案 1 :(得分:3)

这是我能想到的最短的例子。 因为它给出一个常量种子,它将返回相同的布尔值。

如果您需要在运行时生成随机数,那么您  必须使用生成Random.generate的{​​{1}}  这样elm运行时就可以获得随机性。 在这种情况下,某种形式的Cmd 是必需的,因为它是运行Platform.Program的唯一方法。

Cmd