1234567891011121314151617181920212223242526lethash_location=""(* TODO: Maybe this should be implemented? *)letpath?serverUrlString:_()=[](* TODO: Maybe this should be implemented? *)letsearch?serverUrlString:_()=""letpush(_path:string)=()letreplace(_path:string)=()typeurl={path:stringlist;hash:string;search:string}typewatcherID=unit->unitleturl?serverUrlString()={path=path?serverUrlString();hash=hash();search=search?serverUrlString();}letdangerouslyGetInitialUrl=urlletwatchUrl_callback()=()letunwatchUrl_watcherID=()letuseUrl?(serverUrl:urloption)()=matchserverUrlwithSomeserverUrl->serverUrl|None->url()