Это не идеальное первое введение в Elm, так как оно захватывает вас в нескольких сложных зонах Вяма: почтовых ящиках и библиотеке Graphics.Input. Кроме того, нет ввода данных с простым в развертывании, поэтому я применил только раскрывающийся список; вы должны использовать Graphics.Input.Field (который может стать особенно рискованным).
Почтовый ящик - это в основном сигнал о том, что выпадающий вход может отправить сообщение. Я выбрал для этого сообщения функцию, в частности, как создать новое состояние из старого. Мы определяем состояние как тип записи (например, Python с именем tuple), поэтому сохранение направления предполагает сохранение нового направления в записи.
Текст визуализируется с использованием функции удобства, которая делает ее monospace
. Есть целый text library, который вы можете использовать, но Elm 0.15 не имеет строковой интерполяции, поэтому вы застряли с довольно уродливыми дополнениями.
И, наконец, в сообществе Elm не так много, но вы можете присоединиться к mailing list, где такие вопросы приветствуются. При этом вам следует попытаться погрузиться в Вяз и изучить основы, чтобы вы могли задать более конкретный вопрос. Это касается практически любого языка, библиотеки или структуры - перед тем, как написать «полезный» код, вам нужно выполнить некоторые основные упражнения.
import Graphics.Input as Input
import Graphics.Element as Element exposing (Element)
mailbox = Signal.mailbox identity
type Direction = Short | Long
type alias State = {entry : Float, swing : Float, atr : Float, dir : Direction}
initialState : State
initialState = State 0 0 0 Short
dropdown : Element
dropdown =
Input.dropDown
(\dir -> Signal.message mailbox.address (\state -> {state| dir <- dir}))
[("Short", Short), ("Long", Long)]
state : Signal State
state = Signal.foldp (<|) initialState mailbox.signal
render : State -> Element
render state =
dropdown `Element.above`
Element.show ("For "++(toString state.dir)++" on an entry of "++(toString state.entry) ++
", SL="++(toString (sl state))++" and TP="++(toString (tp state)))
main = Signal.map render state
-- the good news: these are separate, pure functions
sl {entry, swing, atr, dir} =
case dir of
Long -> swing - atr
Short -> swing + atr
tp {entry, swing, atr, dir} =
case dir of
Long -> entry + (2*atr)
Short -> entry - (2*atr)
Обновление: Я написал an essay на почтовые ящики и как использовать их.
Итак, в чем вопрос? – Apanatshka