changeset 18:16447dc6a68c

Introduction of multi-parameter type class for gui components
author Ron de Bruijn <rmbruijn@gmail.com>
date Thu, 22 Sep 2011 19:24:01 +0200
parents 2947170fcfd6
children 3a303df9ae92
files calendar.urs gui.ur gui.urs togglePanel.ur togglePanel.urs
diffstat 5 files changed, 32 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/calendar.urs	Sun Aug 21 11:27:41 2011 -0400
+++ b/calendar.urs	Thu Sep 22 19:24:01 2011 +0200
@@ -20,7 +20,7 @@
 val value : t -> signal date
 (* Read the date of the calendar. *)
 
-val gui_t : Gui.gui t
+val gui_t : Gui.gui t xbody
 (* Witness that this is a gui widget. *)
 
 val create : time -> transaction t
--- a/gui.ur	Sun Aug 21 11:27:41 2011 -0400
+++ b/gui.ur	Thu Sep 22 19:24:01 2011 +0200
@@ -1,7 +1,16 @@
-class gui t = t -> xbody
+class gui = fn t :: Type => fn xcomponent :: Type => t -> xcomponent
 
-fun toXml [t ::: Type] (xmlize : gui t) = xmlize
+fun gui_xbody (x:xbody) : xbody = x
+fun gui_xtable (x:xtable) : xtable = x
 
-fun gui_xbody x = x
+fun mkGui [t ::: Type] [xcomponent:::Type] (toXml : t -> xcomponent) = toXml 
 
-fun mkGui [t ::: Type] (toXml : t -> xbody) = toXml
+fun toXml [t:::Type] [xcomponent ::: Type] (xmlize: gui t xcomponent) = xmlize 
+
+(* class gui t = t -> xbody *)
+
+(* fun toXml [t ::: Type] (xmlize : gui t) = xmlize *)
+
+(* fun gui_xbody x = x *)
+
+(* fun mkGui [t ::: Type] (toXml : t -> xbody) = toXml *)
--- a/gui.urs	Sun Aug 21 11:27:41 2011 -0400
+++ b/gui.urs	Thu Sep 22 19:24:01 2011 +0200
@@ -1,14 +1,21 @@
 (* Gui framework elements common across individual components. *)
 
-class gui
 (* Types of this class describe gui components. *)
+class gui :: Type -> Type -> Type
+ 
 
-val toXml : t ::: Type -> gui t -> t -> xbody
+(* class gui = fn t xcomponent => t -> xcomponent *)
+(* class gui :: Type -> Type -> Type *)
+
+(* How to add components to the gui class. *)
+val mkGui : t ::: Type -> xcomponent:::Type -> (t -> xcomponent) -> gui t xcomponent
+
+(* Xml itself can be a gui component. *)
+val gui_xbody : gui xbody xbody
+
 (* Currently the only thing a gui component can do is be
  * pretty printed to a piece of xml. *)
+val toXml : t ::: Type -> xcomponent ::: Type -> gui t xcomponent -> t -> xcomponent
 
-val gui_xbody : gui xbody
-(* Xml itself can be a gui component. *)
 
-val mkGui : t ::: Type -> (t -> xbody) -> gui t
-(* How to add components to the gui class. *)
+
--- a/togglePanel.ur	Sun Aug 21 11:27:41 2011 -0400
+++ b/togglePanel.ur	Thu Sep 22 19:24:01 2011 +0200
@@ -14,14 +14,14 @@
 
 open Gui
 
-fun create [t ::: Type] (toXml : gui t) (f : formatCtl) (content : t) (startOpen : bool) : transaction (togglePanel t) =
+fun create [t ::: Type] (toXml : gui t xbody) (f : formatCtl) (content : t) (startOpen : bool) : transaction (togglePanel t) =
     state <- source (if startOpen then Open else Closed);
 
     return {PanelState = state,
             FormatCtl = f,
             Content = content}
 
-fun render [t ::: Type] (_ : gui t) (panel : togglePanel t) =
+fun render [t ::: Type] (_ : gui t xbody) (panel : togglePanel t) =
     let
         val openCtl = panel.FormatCtl.CloseCtl (set panel.PanelState Closed)
         val closeCtl = panel.FormatCtl.OpenCtl (set panel.PanelState Open)
@@ -48,4 +48,4 @@
             </xml>
     end
 
-fun gui_togglePanel [t ::: Type] (_ : gui t) = mkGui render 
+fun gui_togglePanel [t ::: Type] (_ : gui t xbody) = mkGui render 
--- a/togglePanel.urs	Sun Aug 21 11:27:41 2011 -0400
+++ b/togglePanel.urs	Thu Sep 22 19:24:01 2011 +0200
@@ -25,10 +25,10 @@
 val defaultFormat : formatCtl
 (* Some reasonable default formats for the layout and controls. *)
 
-val create : t ::: Type -> Gui.gui t -> formatCtl -> t -> bool -> transaction (togglePanel t)
+val create : t ::: Type ->  Gui.gui t xbody -> formatCtl -> t -> bool -> transaction (togglePanel t)
 (* Given instructions for formatting the display, some content and whether to start in
  * the open state get such a togglePanel. *)
 
-val gui_togglePanel : t ::: Type -> Gui.gui t -> Gui.gui (togglePanel t)
+val gui_togglePanel : t ::: Type -> Gui.gui t xbody -> Gui.gui (togglePanel t) xbody
 (* The togglePanel is itself a widget.  It can be pretty printed to a piece
  * of xml with a use of toXml. *)