I'm required to write a function that takes a list and splits it into 2 lists. The first list will hold elements in odd position and 2nd list hold elements in even position. Here's my attempt which gives me the following warning: 

Warning: type vars not generalized because of
 value restriction are instantiated to dummy types (X1,X2,...)

How to improve this?

```
fun splt (lst: int list) =
    let
      fun splt2 (lst: int list, count: int, lst1: int list, lst2: int list) =
          if null lst
          then []
          else if (count mod 2 = 0)
               then splt2 (tl lst, count+1, hd lst::lst1, lst2)
               else splt2 (tl lst, count+1, lst1, hd lst::lst2)
    in
      splt2 (lst,1,[],[])
    end

```

Here's a 2nd correct implementation that I found but I'm mainly interested in fixing the 1st one!!
[I want to split a list into a tupple of odd and even elements](https://stackoverflow.com/questions/12868924/i-want-to-split-a-list-into-a-tupple-of-odd-and-even-elements)

```
fun split [] = ([], [])   
 | split [x] = ([x], [])  
 | split (x1::x2::xs) = 
           let 
             val (ys, zs) = split xs
           in 
            ((x1::ys), (x2::zs))
          end;

```

UPDATE: Improvement is just replace 

```
  if null lst then
       [] 

```

with this:

```
  if null lst then
    [lst1]@[lst2]

```