> From the demo program it looks like a function with two int arguments returning an int, but why the -> signs?
This is standard syntax in functional languages. A->B is a function from A to B. A->B->C is a function from A that returns a function B->C. This is the standard curried function application, like used in OCaml, and it enables you to easily partially apply and compose functions.
addCandidate's type is indeed Int->Int->Int, it's simply not declared that way. In OCaml, the following two syntaxes are equivalent:
let addCandidate = fun A:Int B:Int -> ...body...
let addCandidate A:Int B:Int = ...body...
I imagine this language is similar.