1

戻り値の型によっては、Signal (Int, Int) は (Int, Int) のタプルとして認識されません。

次のコードを検討してください。

import Graphics.Element exposing (..)
import Mouse


relativeMouseElement : (Int, Int) -> Element
relativeMouseElement mp = show (fst mp - 1000, snd mp - 1000)


relativeMouseTuple : (Int, Int) -> (Int, Int)
relativeMouseTuple mp = (fst mp - 1000, snd mp - 1000)

main =
--  Signal.map relativeMouse Mouse.position
    relativeMouseTuple Mouse.position

Signal.map relativeMouse Mouse.position正常に動作し、ブラウザーに (-1000、-1000) が表示され、マウスの動きに応じて値が調整されます。

relativeMouseTuple Mouse.positionただし、これは機能しません。私が得る複雑なエラーは次のとおりです。

Function `relativeMouseTuple` is expecting the argument to be:

    ( Int, Int )

But it is:

    Signal ( Int, Int )

これは非常に奇妙だと思います。どちらの場合も、最初の引数は Signal (Int, Int) で、2 番目の場合は型エラーになります。

何か案は?

4

1 に答える 1

5

ただし、ニレの経験はまったくありません。

Signal.map関数をシグナルにマップします。これは、関数がSignalパラメーターとして呼び出されることを意味するのではなく、シグナルの引数をパラメーターとして呼び出されることを意味します。たとえば、引数としてSignal(Int, Int)受け取る関数をマップし(Int, Int)ます。

したがって、次の場合は問題ありません

Signal.map relativeMouse Mouse.position

ただし、次の場合、間違っ(Int, Int)た引数で期待する関数を呼び出します。Signal(Int, Int)

relativeMouseTuple Mouse.position

あなたがすべきことは、おそらく次のように関数をシグナルにマップすることです:

Signal.map relativeMouseTuple Mouse.position
于 2015-12-10T13:43:47.850 に答える