Ur (programming language)
Ur also called Ur/Web is an open source functional programming language specific for web development, created by Adam Chlipala at the Massachusetts Institute of Technology[1] that from a single program produces server code, browser client code and SQL code specific for the database backend.
Forms structure and server handler ones are typechecked at compile time to ensure an unmatched web quality.
An Object relational mapping based on records is embedded in the language through the SQL language extension.
Although the syntax is based on Standard ML the language includes concepts from Haskell with additional type manipulation.
This is an example demo program showing client, server and database code with Ajax communication encapsulated in the rpc function call:
datatype list t = Nil | Cons of t * list t
table t : { Id : int, A : string }
PRIMARY KEY Id
fun add id s =
dml (INSERT INTO t (Id, A) VALUES ({[id]}, {[s]}))
fun del id =
dml (DELETE FROM t WHERE t.Id = {[id]})
fun lookup id =
ro <- oneOrNoRows (SELECT t.A FROM t WHERE t.Id = {[id]});
case ro of
None => return None
| Some r => return (Some r.T.A)
fun check ls =
case ls of
Nil => return ()
| Cons (id, ls') =>
ao <- rpc (lookup id);
alert (case ao of
None => "Nada"
| Some a => a);
check ls'
fun main () =
idAdd <- source "";
aAdd <- source "";
idDel <- source "";
return <xml><body>
<button value="Check values of 1, 2, and 3" onclick={fn _ => check (Cons (1, Cons (2, Cons (3, Nil))))}/><br/>
<br/>
<button value="Add" onclick={fn _ => id <- get idAdd; a <- get aAdd; rpc (add (readError id) a)}/>
<ctextbox source={idAdd}/>
<ctextbox source={aAdd}/><br/>
<br/>
<button value="Delete" onclick={fn _ => id <- get idDel; rpc (del (readError id))}/>
<ctextbox source={idDel}/>
</body></xml>