Haskell: [String] to IO ()

haskell, io

Solution

You can use `forM_` for this:

func :: [String] -> IO ()
func l = forM_ l putStrLn

If you want to write your own version directly, you have some problems.

For the empty list, you have nothing to do but create a value of `IO ()`, which you can do with return.

For the non-empty list you want to output the line with `putStrLn` and then process the rest of the list. The non-empty list is of the form `x:xs` where `x` is the head of the list and `xs` the tail. Your second pattern matches the one-element list.

func [] = return ()
func (x:xs) = putStrLn x >> func xs

Problem

I am new to Haskell and I am trying to get a list of values from input and print one item out from the list each line. ``` func :: [String] -> IO () ``` I am having trouble trying to figure out how to print out the item in the list, when the list size is just 1. ``` func [] = return () func [x] = return x ``` I am getting this error message when trying to compile the file: ``` Couldn't match expected type `()' with actual type `String' In the first argument of `return', namely `x' In the expression: return x ``` I am completely lost and I have tried searching but haven't found anything. Thanks!

Original source