2017-10-24 11 views
0

Elm(0.18)のMsgの値をさまざまな種類に分割しようとしています。私はそれがタイピングのこの種に適合したいと思います:elmの入力に余分な変数を持つメッセージ

type MsgSession 
    = LogIn 
    | LogOut 


type MsgSettings 
    = SetUsername String 
    = SetPassword String 

type Msg 
    = SessionMsg MsgSession 
    | SettingsMsg MsgSettings 
    ... 

私の更新機能は、次のようになります。私は子供が同様に更新定義する必要があることを意味

update : Msg -> Model -> (Model, Cmd Msg) 
update msg model = 
    case msg of 
     SessionMsg sessionMsg -> 
      sessionUpdate sessionMsg model 

     SettingsMsg settingsMsg -> 
      settingsUpdate settingsMsg model 
     ... 

を...。 ..

sessionUpdate : MsgSession -> Model -> (Model, Cmd Msg) 
sessionUpdate msg model = 
    case msg of 
     LogIn -> 
      -- do stuff 
     LogOut -> 
      -- do stuff 

マイログアウトイベントは次のようになりますし、正常に動作します:

button [onClick (SessionMsg LogOut)] [text "Log Out"] 

しかし、イベントに関連する変数があれば、それは機能しません。私はsettingsUpdateのための同様のセットアップがあります。

settingsUpdate : MsgSettings -> Model -> (Model, Cmd Msg) 
settingsUpdate msg model = 
    case msg of 
     SetUsername string -> 
      ... 
     SetPassword string -> 
      ... 

をしかし、私は、変数として送信するonInputを取得することはできません。たとえば、このコード

input [onInput SettingsMsg SetUsername] [] 

はこのエラーを得られます。

Function `onInput` is expecting 1 argument, but was given 2. 
483|         onInput SettingsMsg SetUsername 

括弧も動作しません。私はこの仕事をするためにonInputに合格しなければならないのは何

input [onInput (SettingsMsg SetUsername)] [] 

利回り

The argument to function `SettingsMsg` is causing a mismatch. 
483|           SettingsMsg SetUsername) 
                  ^^^^^^^^^^^ 
Function `SettingsMsg` is expecting the argument to be: 
    MsgSettings 
But it is: 
    String -> MsgSettings 

答えて

1

あなたが組成物を使用することができるはずです。

input [onInput (\name -> SettingsMsg (SetUsername name))] [] 
:明示的なラムダをより快適にしている場合は、次のようになり、

input [onInput (SettingsMsg << SetUsername)] [] 

関連する問題