title: Some confusion with Closure of Operations
body: <p>From DDD: Tackling Complexity in the Heart of Software ( pg 268 ):</p>
  
  <blockquote>
    <p>If implementer has state that is used in the computation, then
    implementer is effectively an argument of the operation, so the
    arguments and return value should be of the same type as the
    implementer. Such an operation is closed under the set of instances of
    that type.</p>
  </blockquote>
  
  <p>a) I understand that making <em>arguments</em>, <em>return value</em> and <em>implementer</em> of same type would simplify an interpretation of operation, but  is author suggesting that even though conceptually it would make more sense for <em>arguments</em> and <em>return value</em> not to be of the same type ( say <code>ImplType</code> ) as implementer, we should still try to force them to be <code>ImplType</code>, even if it means we'll have to sacrifice a bit of conceptual clarity? </p>
  
  <p>b) My thinking is, if it made more sense for <em>arguments</em> and <em>return value</em> to be of type <code>ImplType</code>, then we would already define them as such,  even if we didn't know anything about <em>Closure of Operations</em> and its benefits. Shouldn't the fact that we initially made them of different type be an indication that conceptually it is better they're not of type <code>ImplType</code>?</p>
  
  <p>Thank you</p>