Hi,

Please compare the two following programs and their outputs:

Haskell:

data Some a = None
            | Some a

f def x = case x of
  (Some x) -> x
  None -> def

ghci> f 2 (Some 1) => 1

Ur/Web:
fun myget default o  =
 case o of
    | (Some x) => x
    | _ => default

returns an error message showing all the types in the module, of which 99.9% is completely unrelated, which approaches 100% as the size of the module grows to infinity. It can even take a minute or so for large modules to print the dancing error message.

Perhaps there is some exotic type at which this piece of text could _also_ be interpreted, but without a type-annotation this should just work and use the same derived type as in Haskell. I.e., as if the user had written:

fun myget [a] (default:a) (o:option a) : a = ...

If some user absolutely wants to have another type he/she can give an explicit type, but in the common case of just defining a 'quick' function he/she should absolutely not. I would also be interested in seeing an example of another type which could be given to this definition.

I also believe that this translates to the fact that Ur definitions and modules are typically much larger than their Haskell equivalents; the programming style is completely different, because introducing a function in Haskell is cheap (no type-annotations required) and introducing a function in Ur/Web is not.


--
Best regards,
  Ron de Bruijn

_______________________________________________
Ur mailing list
[email protected]
http://www.impredicative.com/cgi-bin/mailman/listinfo/ur

Reply via email to