support curried types
requires currying in the host language