Commit 75c6dd5e authored by Peter Achten's avatar Peter Achten

(PA): unified versions Peter and Diederik

parent 519bb8b8
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -139,25 +139,25 @@ where
(nh, nv) = b.dimensions
newmapid = (FindMaxID 0 mapids) + 1
InitBlockSequences :: !BID ![TileSequence] !*OSToolbox -> !*OSToolbox
InitBlockSequences :: !BID ![TileSequence] !*OSToolbox -> *OSToolbox
InitBlockSequences bid [] tb = tb
InitBlockSequences bid [s:ss] tb
# (_, tb) = InitBlockSequence bid s tb
= InitBlockSequences bid ss tb
LayersDone :: ![BID] ![MAPID] !*OSToolbox -> !*OSToolbox
LayersDone :: ![BID] ![MAPID] !*OSToolbox -> *OSToolbox
LayersDone bids mapids tb
# tb = MapsDone mapids tb
# tb = BitmapsDone bids tb
= tb
MapsDone :: ![MAPID] !*OSToolbox -> !*OSToolbox
MapsDone :: ![MAPID] !*OSToolbox -> *OSToolbox
MapsDone [] tb = tb
MapsDone [m:ms] tb
# (_, tb) = GameLayerMapDone m tb
= MapsDone ms tb
BitmapsDone :: ![BID] !*OSToolbox -> !*OSToolbox
BitmapsDone :: ![BID] !*OSToolbox -> *OSToolbox
BitmapsDone [] tb = tb
BitmapsDone [b:bs] tb
# (_, tb) = GameBitmapDone b tb
......@@ -196,12 +196,12 @@ where
startobjx = stx,
startobjy = sty} = curLevelHnd.boundmap`
{ w = wid, h = ht } = bs
maybePlayMusic :: !(Maybe Music) !*OSToolbox -> !*OSToolbox
maybePlayMusic :: !(Maybe Music) !*OSToolbox -> *OSToolbox
maybePlayMusic Nothing tb = tb
maybePlayMusic (Just m) tb
# (_, tb) = PlayMusic m.musicfile m.restart tb
= tb
maybeStopMusic :: !(Maybe Music) !*OSToolbox -> !*OSToolbox
maybeStopMusic :: !(Maybe Music) !*OSToolbox -> *OSToolbox
maybeStopMusic Nothing tb = tb
maybeStopMusic (Just m) tb
| m.continue
......
......@@ -130,7 +130,7 @@ import StdGSt
// = E. state:
= { objectcode :: !ObjectCode // code for object type (0 AutoInitObject)
, sprites :: ![Sprite] // sprite 1..n
, init :: !SubCode !Point2 !GameTime !gs -> GameObjectState state gs
, init :: !SubCode Point2 GameTime gs -> GameObjectState state gs
, done :: !(GameObjectState state gs) -> gs
, move :: ! ObjectFun state gs
, animation :: ! ObjectFun state gs
......@@ -139,7 +139,7 @@ import StdGSt
, frametimer :: ! ObjectFun state gs
, keydown :: !KeyCode -> ObjectFun state gs
, keyup :: !KeyCode -> ObjectFun state gs
, userevent :: !EventCode !EventPar !EventPar -> ObjectFun state gs
, userevent :: !EventCode EventPar EventPar -> ObjectFun state gs
}
:: *GameObjectState state gs
......
......@@ -121,7 +121,7 @@ import StdGSt
// = E. state:
= { objectcode :: !ObjectCode // code for object type (0 AutoInitObject)
, sprites :: ![Sprite] // sprite 1..n
, init :: !SubCode !Point2 !GameTime !gs -> GameObjectState state gs
, init :: !SubCode Point2 GameTime gs -> GameObjectState state gs
, done :: !(GameObjectState state gs) -> gs
, move :: ! ObjectFun state gs
, animation :: ! ObjectFun state gs
......@@ -130,7 +130,7 @@ import StdGSt
, frametimer :: ! ObjectFun state gs
, keydown :: !KeyCode -> ObjectFun state gs
, keyup :: !KeyCode -> ObjectFun state gs
, userevent :: !EventCode !EventPar !EventPar -> ObjectFun state gs
, userevent :: !EventCode EventPar EventPar -> ObjectFun state gs
}
:: *GameObjectState state gs
......
......@@ -35,7 +35,7 @@ import StdGameDef
, sprites` :: ![Sprite]
, spriteids` :: ![SpriteID]
, instances` :: ![(InstanceID, state)]
, init` :: !SubCode !Point2 !GameTime !gs -> GameObjectState state gs
, init` :: !SubCode Point2 GameTime gs -> GameObjectState state gs
, done` :: !(GameObjectState state gs) -> gs
, move` :: ! ObjectFun state gs
, animation` :: ! ObjectFun state gs
......@@ -44,7 +44,7 @@ import StdGameDef
, frametimer` :: ! ObjectFun state gs
, keydown` :: !KeyCode -> ObjectFun state gs
, keyup` :: !KeyCode -> ObjectFun state gs
, userevent` :: !EventCode !EventPar !EventPar -> ObjectFun state gs
, userevent` :: !EventCode EventPar EventPar -> ObjectFun state gs
}
:: InstanceID
......
......@@ -28,7 +28,7 @@ import StdGameDef
, sprites` :: ![Sprite]
, spriteids` :: ![SpriteID]
, instances` :: ![(InstanceID, state)]
, init` :: !SubCode !Point2 !GameTime !gs -> GameObjectState state gs
, init` :: !SubCode Point2 GameTime gs -> GameObjectState state gs
, done` :: !(GameObjectState state gs) -> gs
, move` :: ! ObjectFun state gs
, animation` :: ! ObjectFun state gs
......@@ -37,7 +37,7 @@ import StdGameDef
, frametimer` :: ! ObjectFun state gs
, keydown` :: !KeyCode -> ObjectFun state gs
, keyup` :: !KeyCode -> ObjectFun state gs
, userevent` :: !EventCode !EventPar !EventPar -> ObjectFun state gs
, userevent` :: !EventCode EventPar EventPar -> ObjectFun state gs
}
:: InstanceID
......
......@@ -44,6 +44,6 @@ makeDirectionSet :: !Int -> DirectionSet
fromDirectionSet :: !DirectionSet -> Int
toBoundMapCode :: !(!Int,!DirectionSet) -> !Int
toBoundMapCode :: !(!Int,!DirectionSet) -> Int
fromBoundMapCode :: !Int -> (!Int,!DirectionSet)
......@@ -238,7 +238,7 @@ fromDirectionSet :: !DirectionSet -> Int
fromDirectionSet d = CompressBools (False, False, False, False,
d.right, d.bottom, d.left, d.top)
toBoundMapCode :: !(!Int,!DirectionSet) -> !Int
toBoundMapCode :: !(!Int,!DirectionSet) -> Int
toBoundMapCode (c, d) = (c << 8) + (fromDirectionSet d)
fromBoundMapCode :: !Int -> (!Int,!DirectionSet)
......
......@@ -27,7 +27,7 @@ OSIntListArrayToString :: ![{#Int}] -> {#Char}
OSIntListArrayToString irs
= IntListArrayToString "" irs
where
IntListArrayToString :: !{#Char} ![{#Int}] -> !{#Char}
IntListArrayToString :: !{#Char} ![{#Int}] -> {#Char}
IntListArrayToString cs [] = cs
IntListArrayToString cs [ir:irs] = IntListArrayToString (cs+++intarrayToString ir) irs
where
......
......@@ -11,7 +11,7 @@ definition module Help
import StdString
from StdPSt import :: PSt
showAbout :: String String (PSt *l) -> PSt *l
showAbout :: String String (PSt .l) -> PSt .l
/* showAbout opens a window:
- it has the title of the application name (argument 1),
- it displays the about information of the application (found in the helpfile, argument 2),
......@@ -20,7 +20,7 @@ showAbout :: String String (PSt *l) -> PSt *l
*/
showHelp :: String (PSt *l) -> PSt *l
showHelp :: String (PSt .l) -> PSt .l
/* showHelp opens a SDI process that displays the help information found in the helpfile
(argument 1).
*/
......@@ -46,7 +46,7 @@ Help :== True
- it has an Ok button that closes this window,
- it has a Help button that displays the help information (see showHelp).
*/
showAbout :: String String (PSt *l) -> PSt *l
showAbout :: String String (PSt .l) -> PSt .l
showAbout appname helpfile pState
# (okId, pState) = accPIO openId pState
# (fonts,pState) = accPIO (accScreenPicture infoFonts) pState
......@@ -67,13 +67,13 @@ showAbout appname helpfile pState
/* showHelp opens a SDI process that displays the help information found in the helpfile.
*/
showHelp :: String (PSt *l) -> PSt *l
showHelp :: String (PSt .l) -> PSt .l
showHelp helpfile pState
# (fonts,pState) = accPIO (accScreenPicture infoFonts) pState
# ((size,text),pState) = readInfo Help fonts HelpBegin HelpEnd helpfile pState
= openProcesses (Process SDI NoState (initHelp fonts size text) [ProcessClose closeProcess]) pState
where
initHelp :: !Fonts !Size ![InfoLine] (PSt *l) -> PSt *l
initHelp :: !Fonts !Size ![InfoLine] (PSt .l) -> PSt .l
initHelp fonts size text pState
= snd (openWindow undef window pState)
where
......
......@@ -53,12 +53,12 @@ where
/* The definition of the text-slider component: */
:: *RGBPickControl ls pst
:: RGBPickControl ls pst
:== :+: SliderControl TextControl ls pst
RGBPickControl :: RGBColour (String,Id,Id) Id (RGBColour->Int) (Int->RGBColour->RGBColour)
(Maybe ItemPos)
-> RGBPickControl *RGBColour (PSt .l)
-> RGBPickControl RGBColour (PSt .l)
RGBPickControl rgb (text,sid,tid) did get set maybePos
= SliderControl Horizontal length sliderstate slideraction
[ControlId sid:controlPos]
......@@ -70,7 +70,7 @@ where
length = PixelWidth (MaxRGB-MinRGB+1)
sliderstate = {sliderMin=MinRGB, sliderMax=MaxRGB, sliderThumb=get rgb}
slideraction :: SliderMove (*RGBColour,PSt .l) -> (*RGBColour,PSt .l)
slideraction :: SliderMove (RGBColour,PSt .l) -> (RGBColour,PSt .l)
slideraction move (rgb,pst)
= ( newRGBColour newrgb
, appListPIO [ setSliderThumb sid y
......@@ -98,7 +98,7 @@ ColourText text x
:: ColourBoxControl ls pst
:== CustomControl ls pst
ColourBoxControl :: RGBColour Id (Maybe ItemPos) -> *ColourBoxControl .ls .pst
ColourBoxControl :: RGBColour Id (Maybe ItemPos) -> ColourBoxControl .ls .pst
ColourBoxControl rgb did maybePos
= CustomControl {w=40,h=40} (ColourBoxLook rgb)
[ ControlId did
......@@ -125,13 +125,13 @@ setColourBox id rgb iost
:: Out = OutGet RGBColour | OutSet
:: RGBId :== R2Id In Out
:: ColourPickAccess pst :== Receiver2 In Out *RGBColour pst
:: ColourPickAccess pst :== Receiver2 In Out RGBColour pst
ColourPickAccess :: RGBId [(String,Id,Id)] Id -> *ColourPickAccess (PSt .l)
ColourPickAccess :: RGBId [(String,Id,Id)] Id -> ColourPickAccess (PSt .l)
ColourPickAccess rid rgbpicks did
= Receiver2 rid accessRGB []
where
accessRGB :: In (RGBColour,PSt .l) -> (Out,*(*RGBColour,PSt .l))
accessRGB :: In (RGBColour,PSt .l) -> (Out,*(RGBColour,PSt .l))
accessRGB InGet (rgb,pst)
= (OutGet rgb,(newRGBColour rgb,pst))
accessRGB (InSet rgb=:{r,g,b}) (_,pst=:{io})
......@@ -146,7 +146,7 @@ where
/* The definition of the assembled colour picking control: */
:: *ColourPickControl ls pst
:: ColourPickControl ls pst
:== NewLS
( LayoutControl
( :+: (LayoutControl (ListLS (:+: SliderControl TextControl)))
......@@ -175,6 +175,6 @@ where
(rpicks,gpicks,bpicks) = ((rtext,rid,rtid),(gtext,gid,gtid),(btext,bid,btid))
left = Just (Left,NoOffset)
newRGBColour :: !RGBColour -> *RGBColour
newRGBColour :: !RGBColour -> RGBColour
newRGBColour {r,g,b}
= {r=r,g=g,b=b}
......@@ -74,8 +74,8 @@ initstate wordlist
For this purpose the function initialisestate is used.
****************************************************************************************************************/
initialisestate :: (PSt *State) -> PSt *State
initialisestate pst=:{ls=t=:{random=rs,player1,player2}}
# (rs,pst) = getRandomList rs pst
initialisestate pst=:{ls=t=:{random=rs,player1,player2},io}
# (rs,io) = getRandomList rs io
(letterbox,letters1,rs) = grab letterbox 7 rs
(letterbox,letters2,rs) = grab letterbox 7 rs
= {pst & ls={t & playmode = EndPlayer2
......@@ -87,6 +87,7 @@ initialisestate pst=:{ls=t=:{random=rs,player1,player2}}
, dimensions = initdimensions
, random = rs
}
, io=io
}
where
getRandomList :: ![Int] !*env -> (![Int],!*env) | TimeEnv env
......
......@@ -463,7 +463,7 @@ where
= UpdateDbDomain {database & ls={state & records = newrecs, selection = newindex}}
where
newrecs = removeAt oldindex oldrecs
newindex= if (isEmpty newrecs) 0 (oldindex mod length newrecs)
newindex= if (isEmpty newrecs) 0 (oldindex rem length newrecs)
AddRecord :: Bool (PSt DataBase) -> PSt DataBase
AddRecord replace database=:{ls=state=:{selection,records=recs,dbfont},io}
......
......@@ -70,7 +70,7 @@ where
# (candidates,others) = splitFilter (\(okCoord,coord)->distCoord coord hole==1) coords
(random_nr,seed) = random seed
(before,[(okCandidate,candidate):after])
= splitAt (random_nr mod (length candidates)) candidates
= splitAt (random_nr rem (length candidates)) candidates
= (seed,before++[(okCandidate,hole):after]++others,candidate)
......
......@@ -51,7 +51,7 @@ where
, tmids = tmids
}
initialise :: (PSt *Tm) -> PSt *Tm
initialise :: (PSt Tm) -> PSt Tm
initialise pst=:{ls={tmstate=tm=:{turing={tape}}}}
# (error,pst) = openMenu undef file pst
| error<>NoError
......@@ -125,12 +125,12 @@ where
timer = Timer Speed3 NilLS [TimerId timerID,TimerSelectState Unable,TimerFunction (noLS1 TimerStep)]
// Open a new empty Turing machine.
DoNew :: (PSt *Tm) -> PSt *Tm
DoNew :: (PSt Tm) -> PSt Tm
DoNew pst=:{ls={saved}}
| saved = MakeNewTuring pst
| otherwise = SaveBeforeClose "opening a new Turing machine" MakeNewTuring pst
MakeNewTuring :: (PSt *Tm) -> PSt *Tm
MakeNewTuring :: (PSt Tm) -> PSt Tm
MakeNewTuring pst=:{ls=tm=:{delay},io}
# io = setWindowLook tapeWdID True (True,tpLook inittape) io
# io = setWindowLook windowID True (True,tmLook inittmstate) io
......@@ -153,19 +153,19 @@ where
}
// Save the Turing machine.
DoSave :: (PSt *Tm) -> PSt *Tm
DoSave pst=:{ls=tm=:{tmstate={turing},name}}
# (success,pst) = WriteTuringToFile turing name pst
DoSave :: (PSt Tm) -> PSt Tm
DoSave pst=:{ls=tm=:{tmstate={turing},name},io}
# (success,io) = WriteTuringToFile turing name io
| success
# pst = {pst & ls={tm & saved=True}}
# pst = {pst & ls={tm & saved=True},io=io}
# pst = appPIO (disableMenuElements [saveItemId]) pst
= pst
| otherwise
= Alert "The Turing machine has not been saved." "The file could not be opened." pst
= Alert "The Turing machine has not been saved." "The file could not be opened." {pst & io=io}
// Save the Turing machine in a new file.
DoSaveAs :: (PSt *Tm) -> PSt *Tm
DoSaveAs pst=:{ls=tm=:{name,tmstate={turing}},io}
DoSaveAs :: (PSt Tm) -> PSt Tm
DoSaveAs pst=:{ls=tm=:{name,tmstate={turing}}}
# (fname,pst) = selectOutputFile "Save T.M. As:" (RemovePath name) pst
| isNothing fname
= pst
......@@ -181,25 +181,25 @@ where
= {pst & ls={tm & name=fname,saved=True}}
// Load a Turing machine from a file.
DoOpen :: (PSt *Tm) -> PSt *Tm
DoOpen :: (PSt Tm) -> PSt Tm
DoOpen pst=:{ls={saved}}
| saved = EvtOpenTuring pst
| otherwise = SaveBeforeClose "opening an other Turing machine" EvtOpenTuring pst
where
EvtOpenTuring :: (PSt *Tm) -> PSt *Tm
EvtOpenTuring :: (PSt Tm) -> PSt Tm
EvtOpenTuring pst
# (filename,pst) = selectInputFile pst
| isNothing filename = pst
| otherwise = OpenTuringFile (fromJust filename) pst
// DoOpenFiles opens the first file of the argument list.
DoOpenFiles :: [String] (PSt *Tm) -> PSt *Tm
DoOpenFiles :: [String] (PSt Tm) -> PSt Tm
DoOpenFiles names pst=:{ls={saved}}
| saved = OpenTuringFile (hd names) pst
| otherwise = SaveBeforeClose "opening an other Turing machine" (OpenTuringFile (hd names)) pst
// OpenTuringFile parses the file found at the path argument and if successful opens it.
OpenTuringFile :: String (PSt *Tm) -> PSt *Tm
OpenTuringFile :: String (PSt Tm) -> PSt Tm
OpenTuringFile name pst=:{ls=tm}
# fname = RemovePath name
fstring = " \'"+++fname+++"\'"
......@@ -224,12 +224,12 @@ where
// The Help command.
Help :: (PSt *Tm) -> PSt *Tm
Help :: (PSt Tm) -> PSt Tm
Help pst = showHelp HelpFile pst
// Let the Turing machine do one step (transition).
DoStep :: (PSt *Tm) -> PSt *Tm
DoStep :: (PSt Tm) -> PSt Tm
DoStep pst=:{ls=tm=:{tmstate=tmstate=:{turing={tape={head},state},transition}},io}
| state=="halt" || state=="error"
= pst
......@@ -251,7 +251,7 @@ where
// Let the T.M. run until the haltstate is reached.
DoRun :: (PSt *Tm) -> PSt *Tm
DoRun :: (PSt Tm) -> PSt Tm
DoRun pst=:{ls=tm=:{tmstate={turing}},io}
# io = disableWindowMouse tapeWdID io
# io = disableWindowMouse windowID io
......@@ -264,7 +264,7 @@ where
// Halt a running T.M.
DoHalt :: (PSt *Tm) -> PSt *Tm
DoHalt :: (PSt Tm) -> PSt Tm
DoHalt pst=:{io}
# io = enableWindowMouse tapeWdID io
# io = enableWindowMouse windowID io
......@@ -275,7 +275,7 @@ where
// Continue a halted T.M.
DoContinue :: (PSt *Tm) -> PSt *Tm
DoContinue :: (PSt Tm) -> PSt Tm
DoContinue pst=:{io}
# io = disableWindowMouse tapeWdID io
# io = disableWindowMouse windowID io
......@@ -286,13 +286,13 @@ where
// Set the speed (delay) of a (possibly running) T.M.
SetDelay :: Int (PSt *Tm) -> PSt *Tm
SetDelay :: Int (PSt Tm) -> PSt Tm
SetDelay delay pst=:{ls=tm,io}
= {pst & ls={tm & delay=delay},io=setTimerInterval timerID delay io}
// Quit the program.
DoQuit :: (PSt *Tm) -> PSt *Tm
DoQuit :: (PSt Tm) -> PSt Tm
DoQuit pst=:{ls={saved}}
| saved = closeProcess pst
| otherwise = SaveBeforeClose "quitting" closeProcess pst
......@@ -303,7 +303,7 @@ where
tmMouseFilter (MouseDown _ _ _) = True
tmMouseFilter _ = False
EditTransitions :: MouseState (PSt *Tm) -> PSt *Tm
EditTransitions :: MouseState (PSt Tm) -> PSt Tm
EditTransitions (MouseDown mpos _ _) pst=:{ls=tm=:{tmstate={turing={transitions}}},io}
| ontrans = AlterTransition transnr pst
| onstate = AlterState pst
......@@ -319,7 +319,7 @@ where
tpMouseFilter (MouseDown _ _ _) = True
tpMouseFilter _ = False
EditTape :: MouseState (PSt *Tm) -> PSt *Tm
EditTape :: MouseState (PSt Tm) -> PSt Tm
EditTape (MouseDown mpos {commandDown} _) pst=:{ls=tm=:{tmstate=tmst=:{turing}},io}
| not ontape
= pst
......@@ -352,7 +352,7 @@ where
// The step function for the Timer device (used by the Run command).
TimerStep :: NrOfIntervals (PSt *Tm) -> PSt *Tm
TimerStep :: NrOfIntervals (PSt Tm) -> PSt Tm
TimerStep _ pst=:{ls=tm=:{tmstate={turing={state}}},io}
| state<>"halt" && state<>"error"
= DoStep pst
......
......@@ -211,7 +211,7 @@ HeadPos pos
TransPos :: !Int -> Point2
TransPos nr
= {x=Offset+140*(nr/14),y=TransY+15*(nr mod 14)}
= {x=Offset+140*(nr/14),y=TransY+15*(nr rem 14)}
MoveToHeadPos :: !Int !*Picture -> *Picture
MoveToHeadPos pos pic
......
......@@ -28,9 +28,9 @@ HelpFile
openTmIds :: !*env -> (!TmIds,!*env) | Ids env
AlterCell :: Int (PSt *Tm) -> PSt *Tm
AlterTransition :: Int (PSt *Tm) -> PSt *Tm
AlterState :: (PSt *Tm) -> PSt *Tm
ReDraw :: (PSt *Tm) -> PSt *Tm
Alert :: String String (PSt *Tm) -> PSt *Tm
SaveBeforeClose :: String (IdFun (PSt *Tm)) (PSt *Tm) -> PSt *Tm
AlterCell :: Int (PSt Tm) -> PSt Tm
AlterTransition :: Int (PSt Tm) -> PSt Tm
AlterState :: (PSt Tm) -> PSt Tm
ReDraw :: (PSt Tm) -> PSt Tm
Alert :: String String (PSt Tm) -> PSt Tm
SaveBeforeClose :: String (IdFun (PSt Tm)) (PSt Tm) -> PSt Tm
......@@ -49,7 +49,7 @@ openTmIds env
/* The dialog to alter the contents of a tape cell.
*/
AlterCell :: Int (PSt *Tm) -> PSt *Tm
AlterCell :: Int (PSt Tm) -> PSt Tm
AlterCell pos pst=:{ls=tm=:{tmstate={turing={tape}},tmids={tapeWdID}}}
# (ids,pst) = accPIO (openIds 3) pst
# pst = appPIO (appWindowPicture tapeWdID (HiliteCell pos cell)) pst
......@@ -76,7 +76,7 @@ where
okId = ids!!1
celId = ids!!2
Ok :: Int (PSt *Tm) -> PSt *Tm
Ok :: Int (PSt Tm) -> PSt Tm
Ok pos pst=:{ls=tm=:{tmstate,tmids={tapeWdID}},io}
# (maybeDialog,io) = getWindow wId io
cell = FirstChar (fromJust (snd (getControlText celId (fromJust maybeDialog))))
......@@ -85,12 +85,12 @@ where
# io = appWindowPicture tapeWdID (DrawTapeCell pos cell) io
= closeWindow wId {pst & ls=tm,io=io}
Cancel :: Int Char (PSt *Tm) -> PSt *Tm
Cancel :: Int Char (PSt Tm) -> PSt Tm
Cancel pos cell pst=:{ls={tmids={tapeWdID}},io}
= closeWindow wId {pst & io=appWindowPicture tapeWdID (DrawTapeCell pos cell) io}
// The dialog to alter a transition.
AlterTransition :: Int (PSt *Tm) -> PSt *Tm
AlterTransition :: Int (PSt Tm) -> PSt Tm
AlterTransition tnr pst=:{ls=tm=:{tmstate={turing={transitions}},tmids={windowID,tapeWdID}}}
# (ids,pst) = accPIO (openIds 6) pst
# pst = appPIO (appWindowPicture windowID (HiliteTransition tnr transition)) pst
......@@ -141,7 +141,7 @@ where
[wId,fromId,headId,toId,moveId,okId:_]
= ids
Ok :: Int (PSt *Tm) -> PSt *Tm