Types 视图列表中的Elm不匹配

Types 视图列表中的Elm不匹配,types,elm,Types,Elm,。。。Elm中的where列表需要同质,但我不明白的是为什么Html(YouTubeUrl->Msg)是urlInput的类型签名。我想这与我在Submit上使用的有关 我是个榆树新手,所以我不确定我做错了什么。没有任何类似于我看到的Html(a->Msg)的类型示例 elm 0.18问题源于您对的使用,其签名如下: onSubmit:msg->Attribute msg 您正在向它传递一个构造函数,UpdateYouTubeUrl,它接受一个参数。要使用UpdateYouTubeUrl生成

。。。Elm中的where列表需要同质,但我不明白的是为什么
Html(YouTubeUrl->Msg)
urlInput
的类型签名。我想这与我在Submit上使用的
有关

我是个榆树新手,所以我不确定我做错了什么。没有任何类似于我看到的
Html(a->Msg)
的类型示例



elm 0.18

问题源于您对的使用,其签名如下:

onSubmit:msg->Attribute msg
您正在向它传递一个构造函数,
UpdateYouTubeUrl
,它接受一个参数。要使用
UpdateYouTubeUrl
生成
Msg
,必须传递类型为
YouTubeUrl
的参数。没有传递该参数,因此Elm的编译器告诉您,
urlement
函数需要一个
YouTubeUrl
参数

我的直觉是您打算使用
onInput
,它接受字符串值作为输入,您可以通过获取输入的targetValue来使用它。另外,
onSubmit
通常在包装输入的表单元素上运行


在大多数情况下,如果Elm编译器告诉您它正在寻找返回值为
Html(a->msg)
的视图函数,这可能意味着您错过了函数中的某个参数,因为您的视图通常应为
Html msg
类型(当然,更高级的情况除外)。

Ahh,我现在明白了。我打算把
onSubmit
包装成一个表单,因为我不想启动
onInput
,而是要按Enter键;我想最简单的方法就是挂接
onSubmit
。你介意发布一个如何使用
onSubmit
的示例吗?
type Msg
    = NoOp
    | RequestDate
    | ReceiveDate Date
    | UpdateYouTubeUrl YouTubeUrl

-- -

root : Maybe YouTubeUrl -> Html Msg
root youTubeUrl =
    case youTubeUrl of
        Just youTubeUrl ->
            div []
                [ player youTubeUrl
                , urlInput
                ]

        Nothing ->
            urlInput


player : YouTubeUrl -> Html Msg
player youTubeUrl =
    h1 [] [ text ("YouTube player for " ++ youTubeUrl ++ " goes here") ]


urlInput : Html (YouTubeUrl -> Msg)
urlInput =
    input
        [ placeholder "(Enter a YouTube embed URL and hit <Enter>)"
        , onSubmit UpdateYouTubeUrl
        ]
        []
-- TYPE MISMATCH ---------------------------------- ./src/YouTubePlayer/View.elm

The 1st and 2nd entries in this list are different types of values.

28|                 [ player youTubeUrl
29|>                , urlInput
30|                 ]

The 1st entry has this type:

    Html (Msg)

But the 2nd is:

    Html (YouTubeUrl -> Msg)

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

Hint: Every entry in a list needs to be the same type of value. This way you
never run into unexpected values partway through. To mix different types in a
single list, create a "union type" as described in:
<http://guide.elm-lang.org/types/union_types.html>

Detected errors in 1 module. 
[ Html Msg
, Html (YouTubeUrl -> Msg)
]