Elm の初心者だが長年の Haskeller から、簡単な質問です。
目的: 指定された位置に町が描かれた地図があり、ユーザーがクリックした町に近いかどうかを確認し、その町を特定したいと考えています。
だから、私はいつものように信号を収集します:
clickPositionsSignal = sampleOn Mouse.clicks Mouse.position
これにより、Tuple が得られます。これを 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
その行は、私がまだ解釈するのに十分な経験がない複数のタイプエラーをスローします