tag:blogger.com,1999:blog-10770855.post111695956631048431..comments2024-03-28T03:20:57.393-04:00Comments on The Little Calculist: Argument orderDave Hermanhttp://www.blogger.com/profile/00405190527081772997noreply@blogger.comBlogger1125tag:blogger.com,1999:blog-10770855.post-1118328231051162802005-06-09T10:43:00.000-04:002005-06-09T10:43:00.000-04:00I disagree with your first paragraph. Sure, passi...I disagree with your first paragraph. Sure, passing arguments by label is independent of the order of the arguments in the function definition.<BR/><BR/>But one could just as easily say that passing arguments by position is independent of the names given to those arguments in the function definition. (Allowing distinct labels and identifiers wouldn't really change my argument.)<BR/><BR/>And is call-by-label really necessary for a more flexible form of currying? Haskell addresses this for binary operators with their cut syntax; I suspect one could extend this idea to cover higher-arity functions as well. If we have a function f :: W -> X -> Y -> Z and values w :: W and y :: Y, then we could say something like f w _ y, which would have type X -> Z. (Granted, underscore is probably a bad choice for this given its use as the non-binding pattern, but you get the point.)<BR/><BR/>Since the theme of this blog appears to be finding the general underlying principle, let me propose this: any time you have two elements of a program communicating, you have to break abstraction between those two elements at least enough to define a communication mechanism. This applies to passing arguments to a function, importing and exporting things across module boundaries, communicating between multiple threads in one process, or communicating between multiple processes over a network.Anonymousnoreply@blogger.com