Rup*_*ord 2 functional-programming elm
我有一个功能
f : a -> b -> ( a, c )
Run Code Online (Sandbox Code Playgroud)
并且我需要申请, whilef的列表累积并附加到列表中,获取. 我想我想做的签名是bac( a, List c )
(a -> b -> ( a, c )) -> a -> List b -> ( a, List c )
Run Code Online (Sandbox Code Playgroud)
这里的真实情况是我有
getThing : Model -> Thing -> ( Model, Cmd Msg )
Run Code Online (Sandbox Code Playgroud)
并且需要getThing在 的列表上运行Thing,将 传递Model给每个调用getThing并返回模型和所有Cmd要在Platform.Cmd.batch.
我认为这个问题应该分解成多个部分,但我不确定从哪里开始。感觉使用折叠适合Model,但我需要Cmd零件的地图。
您只需要getThing在折叠的每次迭代中将返回的元组解包,然后将其打包,并将添加到累积命令列表中的命令作为累加器。
mapThings : (a -> b -> ( a, c )) -> a -> List b -> ( a, List c )
mapThings getThing initialModel things =
List.foldl
(\thing ( model, cmds ) ->
let
( newModel, cmd ) =
getThing model thing
in
( newModel, cmd :: cmds )
)
( initialModel, [] )
things
Run Code Online (Sandbox Code Playgroud)
此处的命名非常有助于助记符,但只需使用更通用的变量名称即可轻松推广。
| 归档时间: |
|
| 查看次数: |
138 次 |
| 最近记录: |