我使用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
答案 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)))
现在,所有类型都会解决。
希望这有帮助!