Elm 如何很好地设置嵌套连续体的格式
我写了很多代码,如下所示:Elm 如何很好地设置嵌套连续体的格式,elm,Elm,我写了很多代码,如下所示: popStack groupTail |> andThen (\( parentGroup, parentTail ) -> addChild currentGroup sibling |> andThen (\updatedParent -> case sibling of
popStack groupTail
|> andThen
(\( parentGroup, parentTail ) ->
addChild currentGroup sibling
|> andThen
(\updatedParent ->
case sibling of
SingleExercise _ ->
workHelp siblingIndent (updatedParent :: parentTail)
WorkGroup _ _ ->
workHelp siblingIndent (sibling :: (updatedParent :: parentTail))
)
)
对于所有嵌套的
和调用,感觉就像是回调地狱,我想知道是否有惯用的方法使用不同类型的函数应用程序来避免所有嵌套。@reactormank提供了一个有用的链接,但是Elm
不是Haskell
。否则,我们可以使用可能是monad
和do notation
提供的语法糖。比如:
do
(parentGroup, parentTail) <- popStack groupTail
updatedParent <- addChild currentGroup sibling
case sibling of
SingleExercise _ ->
workHelp siblingIndent (updatedParent : parentTail)
WorkGroup _ _ ->
workHelp siblingIndent (sibling : (updatedParent : parentTail))
由于可以在更高级别上访问currentGroup
和sibling
,因此可以通过减少函数的算术性来重构此代码(不仅仅是这样)
我只是想指出最小化缩进级别的想法,这确实提醒了我们。这不是答案,但可能很有启发性:
let
workHelpToSibling sibling ( parentTail, updatedParent ) =
case sibling of
SingleExercise ->
workHelp siblingIndent (updatedParent :: parentTail)
WorkGroup ->
workHelp siblingIndent (sibling :: (updatedParent :: parentTail))
addChildTo currentGroup sibling ( parentGroup, parentTail ) =
addChild currentGroup sibling
|> Maybe.map (\updatedParent -> ( parentTail, updatedParent ))
in
popStack groupTail
|> andThen (addChildTo currentGroup sibling)
|> andThen (workHelpToSibling sibling)