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)