definition:
|
wTriple :: (Data a, Data b, Data c) =>
WuiSpec a -> WuiSpec b -> WuiSpec c -> WuiSpec (a,b,c)
-- This simple implementation does not work in KiCS2 due to non-determinism
-- cause by functional patterns:
--wTriple = wCons3 (\a b c -> (a,b,c))
wTriple (WuiSpec wparamsa showa cora reada)
(WuiSpec wparamsb showb corb readb)
(WuiSpec wparamsc showc corc readc) =
WuiSpec (renderTuple, tupleError, const True) showd cord readd
where
showd (render,errmsg,legal) nocheck (va,vb,vc) =
let (hea,rta) = showa wparamsa nocheck va
(heb,rtb) = showb wparamsb nocheck vb
(hec,rtc) = showc wparamsc nocheck vc
in ((if nocheck || legal (va,vb,vc)
then render
else renderError render errmsg) [hea,heb,hec],
states2state [rta,rtb,rtc])
cord wparamsd (va,vb,vc) = conditionOf wparamsd (va,vb,vc) &&
cora wparamsa va &&
corb wparamsb vb &&
corc wparamsc vc
readd env s =
let [ra,rb,rc] = state2states s
in (reada env ra, readb env rb, readc env rc)
|
iotype:
|
{(_,_,_,{WuiSpec},{WuiSpec},{WuiSpec}) |-> {WuiSpec}}
|
signature:
|
(Prelude.Data a, Prelude.Data b, Prelude.Data c) => WuiSpec a -> WuiSpec b
-> WuiSpec c -> WuiSpec (a, b, c)
|