【发布时间】:2014-11-03 06:26:15
【问题描述】:
来自 Elm 新手但长期使用 Haskeller,快速查询。
目的:有一张地图,上面指定位置有城镇,我想检查用户点击是否靠近城镇,并识别出那个城镇。
所以,我照常收集信号:
clickPositionsSignal = sampleOn Mouse.clicks Mouse.position
这给了我一个元组,我想把它变成一个 Int(表示最近城镇的编号)。城镇被指定为
positions : [Position]
type Position = {number : Int, x : Int, y : Int}
这样做的功能是:
whichTown : (Int,Int) -> Int
whichTown (x,y) =
let pz = map (\p -> getDistance p.x p.y x y) positions |> head
in pz.number
现在,我需要将此函数应用于我的 clickPositionsSignal。
查看各种示例,我修改了一些代码以......
whichLocationSignal : Signal Int
whichLocationSignal =
let wbl (x,y) = whichTown(x,y)
in wbl <~ clickPositionsSignal
....这行得通。我得到最近城镇的号码。
但这是无可救药的麻烦和重复。问题是为什么我不能简单地写:
whichLocationSignal = whichTown clickPositionsSignal
该行引发了多个类型错误,我还没有足够的经验来解释
【问题讨论】:
-
whichBoardPosition函数长什么样子? -
抱歉,忘记将最后 2 个代码块中的函数从“whichBoardPosition”重命名为“whichTown”。上面编辑过的代码。
-
啊。很简单:whichTown
-
是的,没错!就像你在 Haskell 中使用
whichTown <$> clickPositionsSignal一样,如果Signal是Functor。