constructor Nil  0
constructor Cons 2

function length(xs:List):int = case xs
    Nil -> lengthNil
    Cons -> lengthCons
function lengthNil():int=0
function lengthCons(x:int , xs:List):List = 1+length(xs)

function sum(xs:List):int = case xs
    Nil -> lengthNil
    Cons -> sumCons
function sumCons(x:int,xs:List):int = x+sum(xs)
  
function head(xs:List):int= case xs Cons -> headCons
function headCons(x:int,xs:List):int=x    

function tail(xs:List):List = case xs Cons -> tailCons
function tailCons(y:int,ys:List):List=ys    

function get(xs:List,i:int):int=
  if i==0 then head(xs) else get(tail(xs),i-1)  

function test1():int = get(Cons(17,Cons(4,Cons(2,Cons(42,Nil())))),3)

function subtract(n1:int,n2:int):int=n1-n2
function test2():int = subtract(subtract(19,2),6)

test1()
