Question: I am trying to go thorough a list of pairs, [(a, a)], but I can't get to make it work. I tried something like:

```
showList :: [(a, a)] -> IO ()
showList (x, y):[] = putStrLn (x, y)
showList (x, y):xs = do 
    putStrLn (x, y)
    showList xs

```

Any solution to this? I'd like something like what I done there.

Answer: 
Spaces don't affect operator precedence.

`showList (x, y):[]` parses as `(showList (x, y)) : []`.

Function application has higher precedence than any infix operator, including `:`.

You want

```
showList ((x, y) : []) = ...

```
Your biggest mistake is that you thought that a Tuple is a String.
Tuple `(x, y)` is not a string. 
The signature of `putStrLn :: String -> IO ()` wants a String as it's argument.

You can use `print :: Show a => a -> IO ()` that will print anything that has a Show instance.

As a side note: You could've used `mapM_ print` instead.