[Ur] Ur/Web vs Haskell

Ron de Bruijn rmbruijn at gmail.com
Thu Oct 13 05:58:51 EDT 2011


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



More information about the Ur mailing list