{ "Slug": "haskell", "Language": "Haskell", "Status": "LIVE", "URL": "https://todo-haskell-2.bfj.oncarlos.com", "Version": "b9fbdff", "Stack": "", "Source": "https://amadan.net/carlos/todomvc-bakeoff?ref=main\u0026path=apps/haskell", "BehaviourJSOn": { "Passed": 35, "Failed": 0, "Skipped": 0 }, "BehaviourJSOff": { "Passed": 32, "Failed": 0, "Skipped": 3 }, "TTFBEmpty": { "N": 30, "P50": 99.332, "P95": 107.298, "P99": 111.009, "Min": 83.908, "Max": 111.009 }, "TTFB50": { "N": 30, "P50": 98.459, "P95": 110.62, "P99": 168.219, "Min": 89.266, "Max": 168.219 }, "Wake": [ 1364.09, 1394.227, 1342.436 ], "Load": [ { "Scenario": "read", "Concurrency": 1, "RPS": 26.59610993859711, "P50Ms": 37.506243000000005, "P95Ms": 42.345214999999996, "P99Ms": 55.210443, "ErrorRate": 0, "Status": { "200": 265 } }, { "Scenario": "read", "Concurrency": 2, "RPS": 50.69475714314678, "P50Ms": 38.755004, "P95Ms": 45.726567, "P99Ms": 56.355788, "ErrorRate": 0, "Status": { "200": 505 } }, { "Scenario": "read", "Concurrency": 4, "RPS": 104.18854732398793, "P50Ms": 37.774133, "P95Ms": 44.549024, "P99Ms": 55.789260999999996, "ErrorRate": 0, "Status": { "200": 1038 } }, { "Scenario": "read", "Concurrency": 8, "RPS": 200.02596464909874, "P50Ms": 38.891755, "P95Ms": 48.065269, "P99Ms": 61.747381, "ErrorRate": 0, "Status": { "200": 1994 } }, { "Scenario": "read", "Concurrency": 16, "RPS": 362.62808178567985, "P50Ms": 41.568044, "P95Ms": 58.232081, "P99Ms": 80.397633, "ErrorRate": 0, "Status": { "200": 3611 } }, { "Scenario": "read", "Concurrency": 32, "RPS": 391.3376172226424, "P50Ms": 79.11072399999999, "P95Ms": 106.98137700000001, "P99Ms": 144.924763, "ErrorRate": 0, "Status": { "200": 3882 } }, { "Scenario": "read", "Concurrency": 64, "RPS": 399.99541739816476, "P50Ms": 158.280656, "P95Ms": 188.15194599999998, "P99Ms": 225.93614, "ErrorRate": 0, "Status": { "200": 3937 } }, { "Scenario": "toggle", "Concurrency": 1, "RPS": 94.39117616182652, "P50Ms": 9.829907, "P95Ms": 15.140255, "P99Ms": 17.012545, "ErrorRate": 0, "Status": { "303": 943 } }, { "Scenario": "toggle", "Concurrency": 2, "RPS": 62.189142882619436, "P50Ms": 31.007856, "P95Ms": 36.883623, "P99Ms": 42.004796, "ErrorRate": 0, "Status": { "303": 620 } }, { "Scenario": "toggle", "Concurrency": 4, "RPS": 114.85210578752539, "P50Ms": 34.145729, "P95Ms": 39.691365, "P99Ms": 42.286877000000004, "ErrorRate": 0, "Status": { "303": 1145 } }, { "Scenario": "toggle", "Concurrency": 8, "RPS": 223.75596701849923, "P50Ms": 34.765794, "P95Ms": 39.601362, "P99Ms": 44.554303000000004, "ErrorRate": 0, "Status": { "303": 2230 } }, { "Scenario": "toggle", "Concurrency": 16, "RPS": 432.6315926775869, "P50Ms": 36.019937, "P95Ms": 42.519154, "P99Ms": 61.721464, "ErrorRate": 0, "Status": { "303": 4313 } }, { "Scenario": "toggle", "Concurrency": 32, "RPS": 862.4576009191986, "P50Ms": 35.808892, "P95Ms": 45.280590000000004, "P99Ms": 68.382225, "ErrorRate": 0, "Status": { "303": 8594 } }, { "Scenario": "toggle", "Concurrency": 64, "RPS": 780.1442624533769, "P50Ms": 60.939885, "P95Ms": 178.966504, "P99Ms": 239.56328, "ErrorRate": 0, "Status": { "303": 7739 } }, { "Scenario": "toggle", "Concurrency": 128, "RPS": 1813.0549918620309, "P50Ms": 49.445799, "P95Ms": 201.391374, "P99Ms": 274.141735, "ErrorRate": 0.4451910262105731, "Status": { "303": 9991, "503": 8017 } }, { "Scenario": "read-after", "Concurrency": 1, "RPS": 26.9955735115153, "P50Ms": 37.093659, "P95Ms": 42.204928, "P99Ms": 50.499763, "ErrorRate": 0, "Status": { "200": 269 } }, { "Scenario": "read-after", "Concurrency": 2, "RPS": 50.79291338796198, "P50Ms": 38.764284, "P95Ms": 46.634456, "P99Ms": 53.920227000000004, "ErrorRate": 0, "Status": { "200": 506 } }, { "Scenario": "read-after", "Concurrency": 4, "RPS": 238.76902860074694, "P50Ms": 15.970498999999998, "P95Ms": 23.360366, "P99Ms": 32.031116, "ErrorRate": 0, "Status": { "200": 2384 } }, { "Scenario": "read-after", "Concurrency": 8, "RPS": 368.7594607974367, "P50Ms": 20.246022999999997, "P95Ms": 33.163141, "P99Ms": 50.387125999999995, "ErrorRate": 0, "Status": { "200": 3680 } }, { "Scenario": "read-after", "Concurrency": 16, "RPS": 390.6594583065769, "P50Ms": 38.311910999999995, "P95Ms": 59.198389, "P99Ms": 96.509428, "ErrorRate": 0, "Status": { "200": 3892 } }, { "Scenario": "read-after", "Concurrency": 32, "RPS": 368.5312716354635, "P50Ms": 81.38664800000001, "P95Ms": 121.239345, "P99Ms": 191.46308100000002, "ErrorRate": 0, "Status": { "200": 3658 } } ], "Weight": { "HTMLBytes": 36847, "JSBytes": 4183 }, "Memory": { "IdleKB": 11392, "PeakKB": 78476, "AfterKB": 40420 }, "Code": { "Server": 685, "Templates": 0, "JS": 113, "Tests": 152, "Deps": 10 }, "Build": { "ColdSeconds": 1146.223358787, "WarmSeconds": 104.433057706, "EditSeconds": 26.633811235, "Bytes": 28726912, "Host": "DOCS-T1", "ColdRuns": 1, "Runs": 3 }, "TokensBuild": { "Input": 140, "Output": 79279, "CacheRead": 7860561, "CacheWrite": 161967, "Turns": 73, "Seconds": 3280.837, "CostUSD": 4.4539882 }, "TokensFix": { "Input": 20, "Output": 6470, "CacheRead": 1823381, "CacheWrite": 13744, "Turns": 10, "Seconds": 238.426, "CostUSD": 0.6041082000000007 }, "TokensSecurity": { "Input": 0, "Output": 0, "CacheRead": 0, "CacheWrite": 0, "Turns": 0, "Seconds": 0, "CostUSD": 0 }, "TokensReview": { "Input": 664393, "Output": 3522, "CacheRead": 573184, "CacheWrite": 0, "Turns": 2, "Seconds": 0, "CostUSD": 0 }, "Readability": { "Naming": 4, "Structure": 4, "Traceability": 5, "Errors": 3, "Comments": 5, "Overall": 8, "Notes": "Strongest: tracing a request is effortless. The toggle route goes from the pathInfo case through the `post` helper to Db.toggleTodo and back to Html.fragment, with the Bool-means-found contract stated at each end. Comments consistently explain why (WAL via query_, getrandom over /dev, single connection, the `swapping` flag) without restating code. Weakest: error handling is mostly implicit. Database exceptions reach Warp's default 500 with no logging; migrate silently assumes version 0 on an odd PRAGMA result; the getrandom loop retries on any negative result, not only EINTR; app.js hides every failure behind location.reload(). Minor: `app`'s where-block is long and the multiway-if in `post` is dense; `common`, `with`, `f`, `v` are terse names." }, "ReviewFindings": null, "Notes": null }