使用 mfix 避免无限递归

gio*_*ida 5 recursion haskell

让:

{-# LANGUAGE RecursiveDo #-}

test :: [a] -> Maybe Int
test []       = Just 0
test (_ : xs) = mdo
    unless (i == 0) Nothing -- 1
    i <- test xs            -- 2
    Just i
Run Code Online (Sandbox Code Playgroud)

我正在寻找解释为什么调用 eg 会test "hey"导致无限循环,以及通常如何在处理mfix. 另外,有没有办法在不交换(1)和(2)的顺序的情况下纠正前面的玩具示例?