Я хочу свое showStackHead функциональное взятие печать стека голова и возвращаю отдых, вот мой код - код
showStackHead xx
| xx == [] = return []
| otherwise = do putStrLn("result:" ++ (head xx))
return (tail xx)
когда я выполняю этот код, компилятор говорит мне, что существует ошибка анализа приблизительно второй возврат, поэтому что правильный путь состоит в том, чтобы записать этой функции?
Отступите 'return' на ту же глубину, что и 'putStrLn', примерно так:
showStackHead xs
| xs == [] = return []
| otherwise = do putStrLn ("result:" ++ (head xs))
return (tail xs)
Кстати, ваш showStackHead может быть чище, если использовать сопоставление с образцом. Позволяя вам отказаться от сравнения охраны, голова и хвост:
#! /usr/bin/env runhaskell
showStackHead [] = return []
showStackHead (x:xs) = do
putStrLn $ "result: " ++ [x]
return xs
main :: IO ()
main = do
let s1 = []
r1 <- showStackHead s1
putStrLn $ "returned: " ++ r1
putStrLn "---"
let s2 = "foo"
r2 <- showStackHead s2
putStrLn $ "returned: " ++ r2
putStrLn "---"
let s3 = "q"
r3 <- showStackHead s3
putStrLn $ "returned: " ++ r3