@Test public void constructorWithVariableHeadShouldNotFlatten() { assertThat(ctor(var("m"), var("a")).flatten(), is(ctor(var("m"), var("a")))); }
@Override public Type flatten() { return head.flatten(tail.flatten_()); }
ConstructorType extends Type { @Override public Type flatten() { return head.flatten(tail.flatten_()); } }
ConstructorType extends Type { @Override public Type flatten() { return head.flatten(tail.flatten_()); }  }
ConstructorType extends Type { @Override public Type flatten() { return head.flatten(tail.flatten_()); }  @Override T accept(Visitor<T> visitor); @Override Type flatten(); @Override CodeBlock generateBytecode(); @Override Map<String, Type> getContexts(Type type, TypeScope scope); @Override Type mapVariables(Function<VariableType, Type> mapper); @Override Type qualifyNames(TypeQualifier qualifier); @Override TypeDescriptor toDescriptor(); }
ConstructorType extends Type { @Override public Type flatten() { return head.flatten(tail.flatten_()); }  @Override T accept(Visitor<T> visitor); @Override Type flatten(); @Override CodeBlock generateBytecode(); @Override Map<String, Type> getContexts(Type type, TypeScope scope); @Override Type mapVariables(Function<VariableType, Type> mapper); @Override Type qualifyNames(TypeQualifier qualifier); @Override TypeDescriptor toDescriptor();  }