如何比较榆树中的随机数

时间:2014-11-15 07:16:03

标签: random elm

我使用float : Signal a -> Signal Float生成随机数。

我想将此生成的数字与Float进行比较,我该怎么做?

main = lift asText ((Random.float (fps 24)) < 0.3)

这是错误的,错误消息:

    (Random.float (fps 24)) < 0.3

    Expected Type: Bool
    Actual Type: Signal.Signal a

1 个答案:

答案 0 :(得分:2)

调试此类事物的最佳方法是遵循类型。将每个部分分成一个单独的部分,检查类型并解决类型错误。

我们在这里有一些事情:

lift : (a -> b) -> Signal a -> Signal b
asText : a -> Element
Random.float : Signal a -> Signal Float
fps : number -> Signal Time
(<) : number -> number -> Bool

好的,让我们开始插入值并解决类型:

fps 24 : Signal Time
Random.float (fps 24) : Signal Float
(Random.float (fps 24)) < 0.3 : ???

这是我们的类型错误来自的地方。我们正在尝试传递信号,但(<)运算符只接受number。所以,我们真正想要的是一个函数,用于比较Signal中的值,看它是否为< 0.3

foo : Float -> Bool
foo n = n < 0.3

现在,我们可以抬起foo并将信号传递给它:

lift foo (Random.float (fps 24))

然后将其重新插入原始表达式:

main = list asText (lift foo (Random.float (fps 24)))

现在,所有类型都会解决。

希望这有帮助!