gpt4 book ai didi

elm - 如何很好地格式化嵌套的延续

转载 作者:行者123 更新时间:2023-12-04 21:20:04 25 4
gpt4 key购买 nike

我正在编写很多如下代码:

popStack groupTail
|> andThen
(\( parentGroup, parentTail ) ->
addChild currentGroup sibling
|> andThen
(\updatedParent ->
case sibling of

SingleExercise _ ->
workHelp siblingIndent (updatedParent :: parentTail)

WorkGroup _ _ ->
workHelp siblingIndent (sibling :: (updatedParent :: parentTail))
)
)

所有嵌套的 andThen 调用感觉很像回调 hell ,我想知道是否有惯用的方法来使用不同类型的函数应用程序来避免所有嵌套。

最佳答案

@Reactormonk 提供了一个有用的链接,但是 Elm 不是 Haskell。否则,我们可以使用 Maybe monaddo-notation 提供的语法糖。像这样的东西:

do
(parentGroup, parentTail) <- popStack groupTail
updatedParent <- addChild currentGroup sibling
case sibling of
SingleExercise _ ->
workHelp siblingIndent (updatedParent : parentTail)
WorkGroup _ _ ->
workHelp siblingIndent (sibling : (updatedParent : parentTail))

但在 Elm 中,我最终会将逻辑移动到单独的函数中:

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)

由于您可以在更高级别访问 currentGroupsibling,因此可以通过减少函数的数量来重构此代码(而不仅仅是通过此)。

我只是想指出最小化缩进级别的想法,这确实让人想起回调 hell 。

关于elm - 如何很好地格式化嵌套的延续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45270409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com