add constructor parameter ADT
add support for polymorphic types