fun draggableList title items =
itemSources <- List.mapM source items;
draggingItem <- source None;
return
Great {[title]}
{List.mapX (fn itemSource =>
set draggingItem (Some itemSource)}
onmouseup={fn _ => set draggingItem None}
onmouseover={fn _ => di <- get draggingItem;
case di of
None => return ()
| Some di => original <- get di;
movedOver <- get itemSource;
set di movedOver;
set itemSource original;
set draggingItem (Some itemSource)}>