Hi,
this is how I would have solved the exercise:
canBalanceRec [] _ _ = False
canBalanceRec (x:xs) s1 s2 = s1+x==s2-x || canBalanceRec xs (s1+x) (s2-x)
canBalance xs = s==0 || canBalanceRec xs 0 s where s=sum xs
Note that there is one difference: in this case
canBalance [-2,-2,4] = True
because I think I can split the list into [ ] and the rest (since the sum of the empty list is 0 and the same is the sum of the elements of the lists). Anyway this is a matter of how we interpret the text of the exercise (your function would return False instead). Note that removing the "s==0 ||" makes no difference.
An advantage of my solution is that it is less expensive, since its computational complexity is linear in the length of the list xs. Yours uses sum and drop many times, and so is slower. Just to have an idea of the difference (using ghci interpreter):
> canBalance [1..10000]
False
(0.02 secs, 6,974,552 bytes)
> can_split_even [1..10000]
False
(5.60 secs, 11,395,843,384 bytes)
Cheers,
Ut