aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/ur/basis.urs2
-rw-r--r--lib/ur/list.ur7
-rw-r--r--lib/ur/list.urs5
3 files changed, 14 insertions, 0 deletions
diff --git a/lib/ur/basis.urs b/lib/ur/basis.urs
index 7f06a47a..9f5a9b97 100644
--- a/lib/ur/basis.urs
+++ b/lib/ur/basis.urs
@@ -125,6 +125,8 @@ val alert : string -> transaction unit
val spawn : transaction unit -> transaction unit
val sleep : int -> transaction unit
+val rpc : t ::: Type -> transaction t -> transaction t
+
(** Channels *)
diff --git a/lib/ur/list.ur b/lib/ur/list.ur
index d774cc54..3d4134ea 100644
--- a/lib/ur/list.ur
+++ b/lib/ur/list.ur
@@ -217,6 +217,13 @@ fun app [m] (_ : monad m) [a] f =
app'
end
+fun mapQuery [tables ::: {{Type}}] [exps ::: {Type}] [t ::: Type]
+ [tables ~ exps] (q : sql_query tables exps)
+ (f : $(exps ++ map (fn fields :: {Type} => $fields) tables) -> t) =
+ query q
+ (fn fs acc => return (f fs :: acc))
+ []
+
fun assoc [a] [b] (_ : eq a) (x : a) =
let
fun assoc' (ls : list (a * b)) =
diff --git a/lib/ur/list.urs b/lib/ur/list.urs
index 1b0fced9..ece85e8c 100644
--- a/lib/ur/list.urs
+++ b/lib/ur/list.urs
@@ -43,6 +43,11 @@ val all : a ::: Type -> (a -> bool) -> t a -> bool
val app : m ::: (Type -> Type) -> monad m -> a ::: Type
-> (a -> m unit) -> t a -> m unit
+val mapQuery : tables ::: {{Type}} -> exps ::: {Type} -> t ::: Type
+ -> [tables ~ exps] =>
+ sql_query tables exps
+ -> ($(exps ++ map (fn fields :: {Type} => $fields) tables) -> t)
+ -> transaction (list t)
(** Association lists *)