|
Re: Lambda (was: Refactoring in Tunes): msg#00086os.tunes
>>>>> "billy" == btanksley <btanksley@xxxxxxxx> writes: [...] >> In oher words, your system is correct, and mine is broken just >> because if different from yours ? :-) billy> Yes. Just as broken as if it didn't understand the billy> annotation which says "the following name is the title of a billy> new definition." Just as broken as a C system would be if it billy> didn't understand the keyword 'int' when used in the billy> declaration of a parameter. But our system is not designed yet, so we can decide what we want to put in it. billy> ML functions have one and only one type. However, ML's infix billy> operators are overloaded, and thus textually ambiguous. billy> Thus, billy> define square x :- x*x; billy> is of ambiguous type, and the compiler will refuse to accept billy> it (is it float or int?). The solution is simple: the billy> programmer provides a type annotation at any point in the billy> program where it helps. For example, this: billy> define square:(int->int) x :- x*x; define square x:int :- billy> x*x; define square x :- x*x:int; define square x :- billy> (x*x):int; billy> (I think caml may have the same characteristics, by the way. billy> I don't know, having never used caml.) billy> Of course, the oddity here is the result of what I would billy> consider a design mistake -- overloading is a strange action billy> in a type-inferenced language, doubly so when you realise billy> that in spite of the overloading you still have to specify billy> which version of the function you're going to use. Overloading is a UI concept. Therefore I think it's bad to put that in a language. Because I think it's evil to put UI stuff in a language. (but you probably know tha now :-) billy> Perhaps a language without overloading would not require billy> typechecking. I can even imagine that ML could accept "define square x :- x*x;" and define as many overloaded function as possible. billy> I don't understand why you're suggesting it. >> I think that separation of concerns is a very good principle. billy> Drinking water is a good principle, too. But that doesn't billy> mean I do it instead of designing a language. I think that separation of concerns is a very good principle in designing computer systems, and that includes computer languages. >> Proving that some code has some properties should not be mixed >> with interpreting that code. billy> But nobody's proving anything about the code -- these type billy> annotations are used to help the programmer write to the billy> interface, and allow the compiler to do typechecking. Isn't typechecking proving that no type errors will occur if you run the program ? billy> I don't feel good about splitting these things, but would an billy> acceptable compromise be a C-style header file? You lose a billy> LOT of power that way (since you can't place the annotations billy> anywhere in the source), What's so powerful about that ? Anyway, if you have somewhere : (defun f (x) (* x x)) and somewhere else (deftype f (int int)) It's very easy for a GUI to gather the 2 thing and display int f(int x) = x * x ; The fact that the annotation refers to f places it next to f. It's up to the UI to display this in a convenient manner. -- Laurent Martelli martelli@xxxxxxxxxxx |
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| Previous by Date: | RE: Lambda (was: Refactoring in Tunes): 00086, btanksley |
|---|---|
| Next by Date: | Re: Lambda (was: Refactoring in Tunes): 00086, Stig Erik Sandoe |
| Previous by Thread: | RE: Lambda (was: Refactoring in Tunes)i: 00086, btanksley |
| Next by Thread: | RE: Lambda (was: Refactoring in Tunes): 00086, btanksley |
| Indexes: | [Date] [Thread] [Top] [All Lists] |
| News | FAQ | advertise |