importqualifiedData.MapasMimportqualifiedData.PQueue.MinasPQfib0=1fib1=1fibn=(fib(n-1))+(fib(n-2))maxsize=1000typeFKey=InttypeFVal=InttypeMyF=FKey->FValtypeTimeStamp=InttypeCache=(M.MapFKey(FVal,TimeStamp),M.MapTimeStampFKey,TimeStamp)cacheWithLimitSpacef(m,q,lastt)k=caseM.lookupkmofJust(r,oldt)->--(((M.insert k (r,(t+1)) m),q),r)letnewt=lastt+1inletnewm=M.insertk(r,newt)minletnewq=M.insertnewtk(M.deleteoldtq)in((newm,newq,newt),r)Nothing->letr=fkinif(M.sizem)<maxsizethenletnewt=lastt+1inletnewm=M.insertk(r,newt)min--),q,t+1),r)letnewq=M.insertnewtkqin((newm,newq,newt),r)elseletnewt=lastt+1inlet((_,invalidKey),q')=M.deleteFindMinqinletnewm=M.insertk(r,newt)(M.deleteinvalidKeym)inletnewq=M.insertnewtkq'in((newm,newq,newt),r)tint=35main=doprint$fibtintprint$fibtintlet(c,r1)=cacheWithLimitSpacefib(M.empty,M.empty,0)tintprintr1let(_,r2)=cacheWithLimitSpacefibctintprintr2