I have been skeptical of the notion of &quot;interface&quot; lately.<p>First of all, there is comment from Erik Meijer who said something like &quot;interface without laws is useless&quot; (he was referring to &quot;interface&quot; as a concept in OOP languages, and by &quot;laws&quot; he meant some algebraic laws). Basically what he wanted to know was the algebra, not just interface.<p>And if you look at it from Curry-Howard correspondence perspective, where programs are proofs and types are theorems, then basically, since type is an interface, you could say that theorems are interfaces in mathematics. So there already is a very precise notion of what is interface.<p>On the other hand, I also kinda like the notion of DSL as an interface, as described in the recent article here on HN: <a href="http:&#x2F;&#x2F;degoes.net&#x2F;articles&#x2F;modern-fp&#x2F;" rel="nofollow">http:&#x2F;&#x2F;degoes.net&#x2F;articles&#x2F;modern-fp&#x2F;</a><p>What seems to be the main contention here - should the interface just use the names (akin to philosophical nominalism) and leave them open to interpretation or should it somehow encode the properties of things it describes (akin to philosophical realism)?