[英]Haskell: [String] to IO ()
我是Haskell的新手,我正在尝试从输入中获取值列表,并从列表中每行打印一个项目。
func :: [String] -> IO ()
当列表大小只为1时,我无法弄清楚如何打印列表中的项目。
func [] = return ()
func [x] = return x
我在尝试编译文件时收到此错误消息:
Couldn't match expected type `()' with actual type `String'
In the first argument of `return', namely `x'
In the expression: return x
我完全失去了,我尝试过搜索,但没有找到任何东西。 谢谢!
你可以使用forM_
:
func :: [String] -> IO ()
func l = forM_ l putStrLn
如果您想直接编写自己的版本,则会遇到一些问题。
对于空列表,您无需做任何事情,只需创建IO ()
的值,您可以使用return执行此操作。
对于非空列表,您希望使用putStrLn
输出行,然后处理列表的其余部分。 非空列表的形式为x:xs
其中x
是列表的头部和xs
的尾部。 您的第二个模式与单元素列表匹配。
func [] = return ()
func (x:xs) = putStrLn x >> func xs
func = mapM_ putStrLn
mapM_
将mapM_
等putStrLn
函数应用于列表的每个元素,并丢弃返回值。
你实际上并没有尝试打印任何东西,你使用putStr。 尝试类似的东西
print [] = return ()
print (x:xs) = do
putStr x
print xs
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.