Mercurial > feed
diff src/ur/feed.ur @ 21:7275f59cab61
tagAOR and a Reddit example of using it
author | Adam Chlipala <adam@chlipala.net> |
---|---|
date | Sat, 29 Sep 2012 10:30:00 -0400 |
parents | f641cfcd5153 |
children |
line wrap: on
line diff
--- a/src/ur/feed.ur Sat Jun 23 09:58:31 2012 -0400 +++ b/src/ur/feed.ur Sat Sep 29 10:30:00 2012 -0400 @@ -80,7 +80,17 @@ fun tagAO [attrs ::: {Unit}] (fl : folder attrs) (name : string) (attrs : $(mapU string attrs)) : pattern (tagInternal attrs) $(mapU (option string) attrs) = - @tagG fl (fn r => Some (r.Attrs)) name attrs + @tagG fl (fn r => Some r.Attrs) name attrs + +fun tagAOR [optional ::: {Unit}] [required ::: {Unit}] [optional ~ required] + (ofl : folder optional) (rfl : folder required) + (name : string) (required : $(mapU string required)) (optional : $(mapU string optional)) + : pattern (tagInternal (optional ++ required)) $(mapU string required ++ mapU (option string) optional) = + @tagG (@Folder.concat ! ofl rfl) + (fn r => case @allPresent rfl (r.Attrs --- mapU (option string) optional) of + None => None + | Some req => Some (r.Attrs --- mapU (option string) required ++ req)) + name (required ++ optional) fun tagC (name : string) : pattern (tagInternal []) string = tagG (fn r => r.Cdata) name {}