changes to recursion
fixed ifelse elseif
added some type system