frankern
frankern

Reputation: 103

onInput argument failure (by Elm n00b)

I am experimenting with Elm based on their tutorial, and is encountering a problem with function argument declaration.

Basically I just extracted a function within the tutorial code. It works fine without function declaration, but fails when I include it.

The essence of the code is:

type Msg
  = Name String
  | Password String

view : Model -> Html Msg
view model =
  div []
    [ myInput "text" "Name" Name
    ]

myInput : String -> String -> Msg -> Html Msg
myInput type__ label handle =
  input [ type_ type__, placeholder label, onInput Name ] []

And the error message is:


The 3rd argument to function myInput is causing a mismatch.

47| myInput "text" "Name" Name Function myInput is expecting the 3rd argument to be:

Msg

But it is:

String -> Msg

Hint: It looks like a function needs 1 more argument.


Ideally I would also like the argument to onInput be the argument called "handle", declared in myInput.

Upvotes: 0

Views: 199

Answers (1)

Chad Gilbert
Chad Gilbert

Reputation: 36385

The type signature for myInput is incorrect. The constructor Name has a single argument, which means when used as a function its signature is (String -> Msg). That is what you should use for the annotation of the handle parameter.

myInput : String -> String -> (String -> Msg) -> Html Msg
myInput type__ label handle =
    input [ type_ type__, placeholder label, onInput handle ] []

Upvotes: 4

Related Questions