# HG changeset patch # User Adam Chlipala # Date 1235502247 18000 # Node ID effa7d43aac3e073f10bac54457e590b9fd2e25b # Parent 6a6eb9882d57ae076bf8bd66fb77ebf50a0a35ed Make folders abstract diff -r 6a6eb9882d57 -r effa7d43aac3 demo/sum.ur --- a/demo/sum.ur Tue Feb 24 13:50:39 2009 -0500 +++ b/demo/sum.ur Tue Feb 24 14:04:07 2009 -0500 @@ -5,6 +5,6 @@ fun main () = return {[sum Folder.nil {}]}
- {[sum (Folder.cons [#A] [()] (Folder.cons [#B] [()] Folder.nil)) {A = 0, B = 1}]}
- {[sum (Folder.cons [#D] [()] (Folder.cons [#C] [()] (Folder.cons [#E] [()] Folder.nil))) {C = 2, D = 3, E = 4}]} + {[sum (Folder.cons [#A] [()] ! (Folder.cons [#B] [()] ! Folder.nil)) {A = 0, B = 1}]}
+ {[sum (Folder.cons [#D] [()] ! (Folder.cons [#C] [()] ! (Folder.cons [#E] [()] ! Folder.nil))) {C = 2, D = 3, E = 4}]}
diff -r 6a6eb9882d57 -r effa7d43aac3 lib/ur/top.ur --- a/lib/ur/top.ur Tue Feb 24 13:50:39 2009 -0500 +++ b/lib/ur/top.ur Tue Feb 24 14:04:07 2009 -0500 @@ -7,6 +7,8 @@ -> tf [] -> tf r structure Folder = struct + fun fold K (r ::: {K}) (fl : folder r) = fl + fun nil K (tf :: {K} -> Type) (f : nm :: Name -> v :: K -> r :: {K} -> tf r -> [[nm] ~ r] => tf ([nm = v] ++ r)) diff -r 6a6eb9882d57 -r effa7d43aac3 lib/ur/top.urs --- a/lib/ur/top.urs Tue Feb 24 13:50:39 2009 -0500 +++ b/lib/ur/top.urs Tue Feb 24 14:04:07 2009 -0500 @@ -1,12 +1,14 @@ (** Row folding *) -con folder = K ==> fn r :: {K} => - tf :: ({K} -> Type) - -> (nm :: Name -> v :: K -> r :: {K} -> tf r - -> [[nm] ~ r] => tf ([nm = v] ++ r)) - -> tf [] -> tf r +con folder :: K --> {K} -> Type structure Folder : sig + val fold : K --> r ::: {K} -> folder r + -> tf :: ({K} -> Type) + -> (nm :: Name -> v :: K -> r :: {K} -> tf r + -> [[nm] ~ r] => tf ([nm = v] ++ r)) + -> tf [] -> tf r + val nil : K --> folder (([]) :: {K}) val cons : K --> r ::: {K} -> nm :: Name -> v :: K -> [[nm] ~ r] => folder r -> folder ([nm = v] ++ r)