if (!declarations.getType().isSubtypeOf(defType)) {
throw new UnexpectedType(defType, declarations.getType(), getSymbol());
}
java.util.Map<Type,Type> bindings = new HashMap<Type,Type>();
bindings.put(Factory.TypeParam, new TypeReifier(VF).symbolToType((IConstructor) symbol.getValue(), (IMap) declarations.getValue()));
IValue val = VF.constructor(Factory.Type_Reified.instantiate(bindings), symbol.getValue(), declarations.getValue());
bindings.put(Factory.TypeParam, TF.valueType());
Type typ = Factory.Type.instantiate(bindings);