1

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

その行は、私がまだ解釈するのに十分な経験がない複数のタイプエラーをスローします

4

1 に答える 1