support curried types

requires currying in the host language