Создание пользовательских элементов управления клавиатурой [Elm]

Я пытаюсь создать пользовательские элементы управления клавиатурой для игры для 4 игроков. Прямо сейчас ключи предопределены так:

type Orient = { x:Int, y:Int }
type GameInput = { space:Bool, delta:Time, so1:Orient, so2:Orient, so3:Orient, 
                   so4:Orient, amount:Int }


gameInput : Signal GameInput
gameInput = 
             let sampledInput = sampleOn delta 
                                <| GameInput <~ Keyboard.space
                                              ~ delta
                                              ~ Keyboard.arrows
                                              ~ Keyboard.wasd
                                              ~ Keyboard.directions (toCode 'O')
                                                                    (toCode 'L')
                                                                    (toCode 'K')
                                                                    (toCode 'M')
                                              ~ Keyboard.directions (toCode 'Y')
                                                                    (toCode 'H')
                                                                    (toCode 'G')
                                                                    (toCode 'J')
                                              ~ amountPlayers.signal
             in  lift (Debug.watch "input") sampledInput

Я создал (для каждого игрока) ввод формы:

type CustomKeys = { up:Char, down:Char, left:Char, right:Char }

customKeys2 : Signal CustomKeys
customKeys2 = CustomKeys <~ ck2up.signal 
                          ~ ck2down.signal 
                          ~ ck2left.signal 
                          ~ ck2right.signal

ck2up : Input Char
ck2up = input 'W'

ck2down : Input Char
ck2down = input 'S'

ck2left : Input Char
ck2left = input 'A'

ck2right : Input Char
ck2right = input 'D'

Обработчик в другом месте будет корректировать значения ввода в соответствии с потребностями игрока. Но мне трудно понять, как вставить эти значения в аргументы дляKeyboard.directions.

Я пытался поднять аргументы вKeyboard.directions непосредственно:

~ Keyboard.directions <~ ...

Любой результат станет Сигналом Сигнала, который нельзя поднять наGameInput (правильно).

Я попытался передать символы в качестве аргументов вgameInput:

gameInput2 : Signal GameInput
gameInput2 = gameInput <~ customKeys2

gameInput : CustomKeys -> Signal GameInput
gameInput { up,down,left,right } = GameInput <~ Keyboard.directions (toCode up)
                                                                    (toCode down)
                                                                    (toCode left)
                                                                    (toCode right)

СейчасgameInput2 будет иметь в результате сигнал сигнала.

Моя последняя идея - объединить сигналы, но это не кажется мне вариантом, поскольку я хочу, чтобы один сигнал зависел от другого.

Ответы на вопрос(1)

Ваш ответ на вопрос