让:
{-# 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)的顺序的情况下纠正前面的玩具示例?