I want do do something like: 

```
>enumerate ["banana", "potato", "ice"]
[(1, "banana"), (2, "potato"), (3, "ice")]

```

I wrote:

```
enumerate :: [String] -> [(Int, String)]
enumerate [] = []

```

How may I control/manage the int counter ? Is there a way to do that without a support function ?

*Update:* I know about [Zip](http://zvon.org/other/haskell/Outputprelude/zip_f.html) function. But for matter of study, I want to implement my own zip function.

*Update 2: Currently Code* 

This is what I did so far, using a support function. Considering that: 

1) I want to implement my own `zip` function;  

2) I do not want to change the function struct: 

```
   enumerate :: [String] -> [(Int, String)]  

enumerate :: [String]->[(Int,String)]
enumerate [] = []
enumerate list = aux 1 list

aux :: Int->[String]->[(Int, String)]
aux _ [] = []
aux i (x:xs) = [(i, x)] ++ aux (i+1) xs

```

Is it possible to improve this function ? As I don't want to add one more last to the function, so I think support function is the only way to go, right ?