您如何迭代列表(也许一个)

jwe*_*nga 4 elm

我有以下graphQL结果:

[仅{详细信息=仅“ 33秒引擎故障和车辆丢失”,launch_year =仅“ 2006”,链接=仅{article_link =仅“ https://www.space.com/2196-spacex-inaugural-falcon -1-rocket-lost-launch.html “},mission_name = Just” FalconSat“}]

基于以下类型:

type alias Launch =
    { mission_name : Maybe String
    , details : Maybe String
    , launch_year : Maybe String
    , links : Maybe LaunchLinks
    }


type alias Launches =
    Maybe (List (Maybe Launch))


type alias LaunchLinks =
    { article_link : Maybe String
    }
Run Code Online (Sandbox Code Playgroud)

我想通过List.map并将结果显示在无序列表中。我从这个开始:

renderLaunch : Launches -> Html Msg
renderLaunch launches =
    div [] <|
        case launches of
            Nothing ->
                [ text "Nothing here" ]

            Just launch ->
                launch
                    |> List.map (\x -> x)
                    |> ul []
Run Code Online (Sandbox Code Playgroud)

但我不断收到此错误:

此函数无法处理通过(|>)管道发送的参数:

141 | 发射142 | |> List.map(\ x-> x)143 | |> ul [] ^^^^^参数为:

List (Maybe Launch)
Run Code Online (Sandbox Code Playgroud)

但是(|>)将它传递给以下函数:

List (Html msg)
Run Code Online (Sandbox Code Playgroud)

Cha*_*ert 6

问题是这种Just launch情况需要导致a,List (Html msg)但是代码会导致返回不同的类型。

使用时List.map (\x -> x),它本质上是无操作的。您正在遍历a List (Maybe Launch)并返回相同的东西。我建议创建另一个带有Maybe Launch值的函数并将其用作映射函数。例如:

displayLaunch : Maybe Launch -> Html Msg
displayLaunch launch =
    case launch of
        Nothing -> text "No launch"
        Just l -> text (Debug.toString l)
Run Code Online (Sandbox Code Playgroud)

现在,您可以将其插入到映射功能中:

Just launch ->
    launch
        |> List.map displayLaunch
        |> ul []
Run Code Online (Sandbox Code Playgroud)

但是,哎呀!现在,您将收到一个新错误,指示:

The 2nd branch is:

    Html Msg

But all the previous branches result in:

    List (Html msg)
Run Code Online (Sandbox Code Playgroud)

这里的问题是我们现在ulJust launch分支返回a ,并且我们需要返回html列表。您可以List.singleton用来创建仅包含一项的列表:

The 2nd branch is:

    Html Msg

But all the previous branches result in:

    List (Html msg)
Run Code Online (Sandbox Code Playgroud)