title: ADTs and values
body: <p>In Rascal, say I have the code:</p>
  
  <pre><code>value x = 2;
  data Exp = con(int n);
  </code></pre>
  
  <p>Is there a way to call con(x), while x is a value (but actually an integer), without knowing on beforehand what the type of con's first argument is supposed to be (thus without explicitly casting it to an int)?</p>
  
  <p>Why is it possible to call a function, say int something(int n) = n, with an integer defined as a value (e.g. value y = 2) passed into its first argument, while it gives me an error when I try to do the same with user-defined ADTs?</p>