definition module StdId


//	********************************************************************************
//	Clean Standard Object I/O library.
//	
//	StdId specifies the generation functions for identification values.
//	********************************************************************************


from	StdMaybe	import :: Maybe
from	id			import :: Id, :: RId, :: R2Id, rIdtoId, r2IdtoId, class ==,
							instance == Id, 
							instance ==	(RId  mess), 
							instance == (R2Id mess resp)
from	iostate		import :: IOSt, :: PSt

class Ids env where
	openId		::      !*env -> (!Id,         !*env)
	openIds		:: !Int !*env -> (![Id],       !*env)
	
	openRId		::		!*env -> (!RId  m,     !*env)
	openRIds	:: !Int	!*env -> (![RId m],    !*env)
	
	openR2Id	:: 		!*env -> (!R2Id  m r,  !*env)
	openR2Ids	:: !Int	!*env -> (![R2Id m r], !*env)
/*	There are three types of identification values:
	-	RId  m:		for uni-directional message passing (see StdReceiver)
	-	R2Id m r:	for bi-directional  message passing (see StdReceiver)
	-	Id:			for all other Object I/O library components
	Of each generation function there are two variants:
	-	to create exactly one identification value.
	-	to create a number of identification values.
			If the integer argument <=0, then an empty list of identification values
			is generated.
*/

instance Ids World
instance Ids (IOSt .l)
instance Ids (PSt  .l)

getParentId :: !Id !(IOSt .l) -> (!Maybe Id,!IOSt .l)
/*	getParentId returns the Id of the parent top-level GUI object 
	of the GUI component identified by the argument Id.
	If the GUI component could not be found then Nothing is returned.
*/
