reduce number of types and add let expressions
added new tests