Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何编写返回Haskell_Haskell_Syntax - Fatal编程技术网

如何编写返回Haskell

如何编写返回Haskell,haskell,syntax,Haskell,Syntax,我希望我的showStackHead函数获取一个堆栈打印头部并返回其余部分,这是我的代码 --代码 当我运行这段代码时,编译器告诉我第二个返回有一个解析错误,那么编写此函数的正确方法是什么?将“返回”缩进到与“putStrLn”相同的深度,如下所示: showStackHead xs | xs == [] = return [] | otherwise = do putStrLn ("result:" ++ (head xs)) ret

我希望我的showStackHead函数获取一个堆栈打印头部并返回其余部分,这是我的代码 --代码


当我运行这段代码时,编译器告诉我第二个返回有一个解析错误,那么编写此函数的正确方法是什么?

将“返回”缩进到与“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
#/usr/bin/env runhaskell
showStackHead[]=返回[]
showStackHead(x:xs)=do
putStrLn$“结果:”++[x]
返回xs
main::IO()
main=do
设s1=[]
r1
#! /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