Logs on 2023-09-08 (liberachat/#haskell)
| 00:01:34 | × | Guest|3 quits (~Guest|3@93-136-208-249.adsl.net.t-com.hr) (Quit: Connection closed) |
| 00:04:33 | → | Guest12 joins (~Guest12@187.83.249.216.dyn.smithville.net) |
| 00:09:26 | × | oo_miguel quits (~Thunderbi@78-11-179-96.static.ip.netia.com.pl) (Ping timeout: 246 seconds) |
| 00:09:33 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 246 seconds) |
| 00:11:22 | × | qhong quits (~qhong@DN160vrd000d6kpg009l6c0000fj.stanford.edu) (Read error: Connection reset by peer) |
| 00:11:57 | → | FinnElija joins (~finn_elij@user/finn-elija/x-0085643) |
| 00:12:03 | × | apteryx quits (~maxim@dsl-159-106.b2b2c.ca) (Ping timeout: 246 seconds) |
| 00:12:04 | × | cafkafk_ quits (~cafkafk@fsf/member/cafkafk) (Remote host closed the connection) |
| 00:23:56 | × | Guest12 quits (~Guest12@187.83.249.216.dyn.smithville.net) (Quit: Client closed) |
| 00:27:16 | × | stites quits (~stites@2607:fb90:ad62:807c:d15b:ce72:ad88:3242) (Read error: Connection reset by peer) |
| 00:27:37 | → | stites joins (~stites@130.44.147.204) |
| 00:27:52 | → | cafkafk_ joins (~cafkafk@fsf/member/cafkafk) |
| 00:30:36 | × | aaronv quits (~aaronv@user/aaronv) (Ping timeout: 246 seconds) |
| 00:31:13 | × | bratwurst quits (~blaadsfa@2604:3d09:207f:f650:216:3eff:fe5a:a1f8) (Ping timeout: 240 seconds) |
| 00:33:10 | → | aaronv joins (~aaronv@user/aaronv) |
| 00:34:00 | × | ezzieyguywuf quits (~Unknown@user/ezzieyguywuf) (Ping timeout: 255 seconds) |
| 00:35:54 | × | califax quits (~califax@user/califx) (Remote host closed the connection) |
| 00:35:59 | → | ezzieyguywuf joins (~Unknown@user/ezzieyguywuf) |
| 00:36:05 | → | califax_ joins (~califax@user/califx) |
| 00:37:14 | → | yosef` joins (~yosef`@user/yosef/x-2947716) |
| 00:37:22 | califax_ | is now known as califax |
| 00:42:20 | × | YoungFrog quits (~youngfrog@2a02:a03f:ca07:f900:fffe:2aed:9333:96be) (Quit: ZNC 1.7.x-git-3-96481995 - https://znc.in) |
| 00:42:41 | → | YoungFrog joins (~youngfrog@39.129-180-91.adsl-dyn.isp.belgacom.be) |
| 00:49:09 | → | bratwurst joins (~blaadsfa@S010610561191f5d6.lb.shawcable.net) |
| 00:53:57 | → | Guest|3 joins (~Guest|3@93-136-208-249.adsl.net.t-com.hr) |
| 00:54:00 | <Guest|3> | Hello me again with light and shadows! |
| 00:54:13 | <Guest|3> | [1 of 1] Compiling Main ( main.hs, main.o ) |
| 00:54:14 | <Guest|3> | main.hs:1:1: error:Could not find module System.Random' |
| 00:54:14 | <Guest|3> | Use -v (or :set -v` in ghci) to see a list of the files searched for. |
| 00:54:15 | <Guest|3> | | |
| 00:54:15 | <Guest|3> | 1 | import System.Random |
| 00:54:16 | <Guest|3> | | ^^^^^^^^^^^^^^^^^^^^ |
| 00:54:16 | <Guest|3> | Trying to run a code |
| 00:54:17 | <Guest|3> | please help |
| 00:56:23 | <yushyin> | it's a module from the random package |
| 00:56:38 | <Guest|3> | import System.Random |
| 00:56:38 | <Guest|3> | -- Define a type alias for the grid as a 2D list of characters |
| 00:56:39 | <Guest|3> | type Grid = [[Char]] |
| 00:56:39 | <Guest|3> | -- Define a data type for simulation parameters |
| 00:56:40 | <Guest|3> | data SimulationParameters = SimulationParameters |
| 00:56:40 | <Guest|3> | { simulationWidth :: Int -- Width of the simulation area |
| 00:56:41 | <Guest|3> | , simulationHeight :: Int -- Height of the simulation area |
| 00:56:41 | <Guest|3> | , gridWidth :: Int -- Width of the grid |
| 00:56:42 | <Guest|3> | , gridHeight :: Int -- Height of the grid |
| 00:56:42 | <Guest|3> | , lightIntensity :: Int -- Intensity of the light |
| 00:56:43 | <Guest|3> | , numberOfObstacles :: Int -- Number of obstacles |
| 00:56:43 | <Guest|3> | } |
| 00:56:44 | <Guest|3> | -- Initialize an empty grid filled with spaces |
| 00:56:44 | <Guest|3> | emptyGrid :: Int -> Int -> Grid |
| 00:56:45 | <Guest|3> | emptyGrid width height = replicate height (replicate width ' ') |
| 00:56:45 | <Guest|3> | -- Define the position of the light source |
| 00:56:46 | <Guest|3> | lightSource :: (Int, Int) |
| 00:56:46 | <Guest|3> | lightSource = (5, 5) |
| 00:56:47 | × | sinbad quits (~sinbad@user/sinbad) (Quit: Leaving.) |
| 00:56:53 | <yushyin> | you would need to add this to your dependencies |
| 00:56:57 | <Guest|3> | -- Function to replace an element at a specific position in the grid |
| 00:56:58 | <Guest|3> | replaceElement :: Grid -> Int -> Int -> Char -> Grid |
| 00:56:58 | <Guest|3> | replaceElement grid x y newElement = |
| 00:56:59 | <Guest|3> | take y grid ++ |
| 00:56:59 | <Guest|3> | [take x (grid !! y) ++ [newElement] ++ drop (x + 1) (grid !! y)] ++ |
| 00:57:00 | <Guest|3> | drop (y + 1) grid |
| 00:57:00 | <Guest|3> | -- Function to spread light from the source |
| 00:57:01 | <Guest|3> | spreadLight :: Grid -> (Int, Int) -> Int -> Grid |
| 00:57:01 | <Guest|3> | spreadLight grid _ 0 = grid |
| 00:57:02 | <Guest|3> | spreadLight grid (x, y) intensity |
| 00:57:02 | <Guest|3> | | x < 0 || x >= gridWidthParam || y < 0 || y >= gridHeightParam = grid |
| 00:57:03 | <Guest|3> | | grid !! y !! x /= ' ' && grid !! y !! x /= '#' = grid |
| 00:57:03 | <Guest|3> | | otherwise = |
| 00:57:04 | <Guest|3> | let updatedGrid = replaceElement grid x y '*' -- Place light at (x, y) |
| 00:57:04 | <Guest|3> | in foldl (\g (dx, dy) -> spreadLight g (x + dx, y + dy) (intensity - 1)) |
| 00:57:05 | <Guest|3> | updatedGrid [(1, 0), (-1, 0), (0, 1), (0, -1)] -- Recursively spread light |
| 00:57:05 | <Guest|3> | -- Function to round positions of objects in the grid with real numbers |
| 00:57:06 | <Guest|3> | roundGridPositions :: Grid -> Grid |
| 00:57:09 | <yushyin> | please use the paste service from the topic, lol |
| 00:57:19 | <Guest|3> | where and how |
| 00:57:20 | <Guest|3> | sorry it bugged out |
| 00:57:59 | <Guest|3> | how do i add to my dependencies |
| 00:58:10 | <yushyin> | "Paste code/errors: https://paste.tomsmeding.com " |
| 00:59:44 | <yushyin> | https://cabal.readthedocs.io/en/3.4/getting-started.html#adding-dependencies here is how you do it with cabal |
| 00:59:50 | <Guest|3> | https://paste.tomsmeding.com/1bXo7hqg/raw/1 |
| 01:01:04 | → | EvanR joins (~EvanR@user/evanr) |
| 01:01:13 | <Guest|3> | what do i need to do to use online interpreter to test my code, since when i run the code that is error |
| 01:04:36 | <institor> | if you need random access into the grid |
| 01:04:45 | <institor> | don't use linked lists of linked lists |
| 01:04:48 | <institor> | use data.vector |
| 01:05:37 | <institor> | which has nicer facilities for updating/replacing elements anyway |
| 01:06:40 | <institor> | but this probably doesn't matter |
| 01:07:06 | <Guest|3> | yes but i will still need to import something |
| 01:07:12 | <Guest|3> | i think thats the problem |
| 01:07:17 | <Guest|3> | or is it in my code? |
| 01:08:26 | <Axman6> | Hecate: I didn't see yaml-streamly, but it doesn't look like it solves any of the issues I have with the other libraries |
| 01:08:52 | × | hrberg quits (~quassel@171.79-160-161.customer.lyse.net) (Ping timeout: 255 seconds) |
| 01:10:10 | <EvanR> | without knowing the context, I used Data.Vector to great effect for advent of code by using a cabal script (instead of a full cabal project) if you want to use that package for something quick and dirty |
| 01:10:54 | <Axman6> | Guest|3: to import packages you need a cabal project (or stack I guess, but cabal is the lowest common denominator). you cab probably do something like cabal repl -b random RayBasedLightSimulation.hs without needing a cabal project though |
| 01:12:32 | <Guest|3> | i'll try |
| 01:13:48 | <Guest|3> | cabal repl -b random RayBasedLightSimulation.hs tried to run this but didnt work |
| 01:14:02 | <Axman6> | "didn't work" |
| 01:14:06 | <Axman6> | ok |
| 01:14:12 | <Guest|3> | PS D:\haskel> cabal repl -b random RayBasedLightSimulation2 |
| 01:14:13 | <Guest|3> | cabal-3.6.2.0.exe: Cannot open a repl for the package |
| 01:14:13 | <Guest|3> | RayBasedLightSimulation2, it is not in this project (either directly or |
| 01:14:14 | <Guest|3> | indirectly). If you want to add it to the project then edit the cabal.project |
| 01:14:14 | <Guest|3> | file. |
| 01:14:20 | → | hrberg joins (~quassel@171.79-160-161.customer.lyse.net) |
| 01:14:34 | <Axman6> | do not paste multiple lines in here please! you've been told at least once before |
| 01:14:43 | <Guest|3> | sorry |
| 01:15:26 | <Axman6> | try cabal repl -b random, and then :load RayBasedLightSimulation.hs inside ghci |
| 01:17:05 | → | wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com) |
| 01:17:05 | × | wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host) |
| 01:17:05 | → | wroathe joins (~wroathe@user/wroathe) |
| 01:19:39 | <Guest|3> | can i use https://www.tutorialspoint.com/compile_haskell_online.php this? |
| 01:20:36 | <Axman6> | the general recommendation I've seen is to not use tutorialspoint at all, I think I read their tutorial forhaskell and it was incredibly bad, and frequently just plain wrong |
| 01:20:59 | <Guest|3> | yes but i need online interpreter |
| 01:21:40 | <Guest|3> | i just need to test this code if it works |
| 01:21:47 | <Guest|3> | and i cant |
| 01:23:08 | <Axman6> | have you tried https://play.haskell.org |
| 01:23:17 | × | emmanuelux quits (~emmanuelu@user/emmanuelux) (Quit: au revoir) |
| 01:24:02 | <Axman6> | looks like it works there (though you have an error in your code so it doesn't currently compile) |
| 01:24:12 | → | nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net) |
| 01:24:23 | <Guest|3> | yes i needed to know which error it was |
| 01:24:30 | <Guest|3> | blindly i can't |
| 01:24:34 | <Guest|3> | and time is of the essence |
| 01:24:38 | <Axman6> | ... did you try it? |
| 01:24:45 | <yushyin> | is this homework? |
| 01:24:56 | <Guest|3> | yes homework |
| 01:25:04 | <Axman6> | we can only help you so much if you are unwilling to do anything at all to help yourself |
| 01:25:05 | <Guest|3> | u can call it that |
| 01:25:13 | <Guest|3> | a job requirement |
| 01:25:26 | <Guest|3> | im trying to help myself |
| 01:25:30 | <Guest|3> | im stuck for 2 hours |
| 01:25:43 | <Axman6> | then paste your code into play.haskell.org and hit run |
| 01:25:44 | <Guest|3> | blindly trying to setup this official office laptop with no permissions |
| 01:26:51 | <Guest|3> | https://pastebin.com/dXGJk0S3 |
| 01:27:08 | <Guest|3> | idk how to fix this |
| 01:28:04 | <Axman6> | Data.List.Split comes from the split package, which is probably not installed by default on any online code evaluator, it's not a particularly common package. writing chunksOf is quite simple though |
| 01:29:21 | × | nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 255 seconds) |
| 01:30:06 | <institor> | @type chunksOf |
| 01:30:07 | <lambdabot> | Int -> [e] -> [[e]] |
| 01:30:27 | <Axman6> | @hoogle chunksOf |
| 01:30:27 | <lambdabot> | Data.Sequence chunksOf :: Int -> Seq a -> Seq (Seq a) |
| 01:30:28 | <lambdabot> | Data.Sequence.Internal chunksOf :: Int -> Seq a -> Seq (Seq a) |
| 01:30:28 | <lambdabot> | Data.Text chunksOf :: Int -> Text -> [Text] |
| 01:30:33 | <Axman6> | @more |
| 01:30:38 | <Axman6> | :( |
| 01:30:41 | <institor> | :chunksOf 1 [1..20] |
| 01:30:46 | <institor> | @chunksOf 1 [1..20] |
| 01:30:46 | <lambdabot> | Unknown command, try @list |
| 01:30:47 | <institor> | @list |
| 01:30:47 | <lambdabot> | What module? Try @listmodules for some ideas. |
| 01:30:51 | <institor> | @listmodules |
| 01:30:51 | <lambdabot> | activity base bf check compose dice dict djinn dummy elite eval filter free fresh haddock help hoogle instances irc karma localtime metar more oeis offlineRC pl pointful poll pretty quote search |
| 01:30:51 | <lambdabot> | seen slap source spell system tell ticker todo topic type undo unlambda unmtl version where |
| 01:30:56 | <institor> | @eval chunksOf 1 [1..20] |
| 01:31:11 | <Axman6> | > chunksOf 3 [1..20] |
| 01:31:12 | <lambdabot> | [[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18],[19,20]] |
| 01:31:19 | <int-e> | institor: It's '> ' or "@run ' |
| 01:31:31 | <int-e> | @help eval |
| 01:31:32 | <lambdabot> | eval. Do nothing (perversely) |
| 01:31:37 | <Guest|3> | https://pastebin.com/xQLfsbCN |
| 01:31:47 | <int-e> | (I /assume/ that this clashed with another bot somewhere) |
| 01:32:20 | <int-e> | > iterate (drop 3) [1..20] -- a start |
| 01:32:23 | <lambdabot> | [[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],[4,5,6,7,8,9,10,11,12,... |
| 01:32:32 | <Guest|3> | i dont understand |
| 01:32:34 | <int-e> | > iterate (drop 3) [1..4] -- a start |
| 01:32:36 | <lambdabot> | [[1,2,3,4],[4],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[... |
| 01:34:17 | <Guest|3> | Can somebody |
| 01:34:23 | <Guest|3> | please help me fix this code https://pastebin.com/6dmGuH2G |
| 01:35:32 | <Axman6> | not without knowing the errors we can't. |
| 01:36:02 | <Guest|3> | https://pastebin.com/qeRQcM3Y |
| 01:36:05 | <Guest|3> | errors |
| 01:36:33 | <Axman6> | but if that's the same code you shared earlier, I showed you a) how to run it and b) what the errors are. did you read them? they were pretty clear about what was wrong |
| 01:37:22 | <Guest|3> | you mean about cabal? |
| 01:37:35 | <Axman6> | right, you're referencing variables that the function can't see, somehow you need to pass those to it - it looks like they are contained the Grid type? |
| 01:37:50 | <Axman6> | no, i mean play.haskell.org |
| 01:38:04 | <Guest|3> | ok |
| 01:38:22 | <Guest|3> | i was confused by lambdabot |
| 01:38:56 | <Axman6> | oh I was wrong, they're not in Grid, I got mixed up with SimulationParameters |
| 01:39:41 | <Guest|3> | i think i fixed it can you please check |
| 01:39:57 | <Guest|3> | https://pastebin.com/RtdJfMgm |
| 01:40:01 | <Axman6> | ... you can check it, paste it into play.haskell.org ad hit run, like I said |
| 01:40:18 | <Guest|3> | it runs |
| 01:40:21 | <Guest|3> | wow |
| 01:40:27 | <Guest|3> | but does it do what its supposed to do |
| 01:40:39 | <Axman6> | If you'd like our help, the least you can do is pay attention to the help we're giving you. |
| 01:40:53 | <Axman6> | I have no idea, you tell us, it's not our code, nor our homework |
| 01:41:12 | <Guest|3> | its not for homework its for job, people depend on the push |
| 01:41:24 | <yushyin> | it runs, ship it! |
| 01:41:34 | <Axman6> | ... then isn't it your job to check that it works? |
| 01:41:47 | <monochrom> | Not my job. |
| 01:41:58 | <Guest|3> | could you atleast comment on the code from a professional view |
| 01:42:02 | <monochrom> | Well, unless I'm the one getting your pay. |
| 01:42:04 | <Axman6> | We're here to help you figure out how to write haskell, not to do your job for you |
| 01:42:24 | <Guest|3> | i never asked you to write a single line of code. |
| 01:42:25 | <monochrom> | Homework likewise: Unless I'm the one getting your marks. |
| 01:42:51 | <Axman6> | well, the first thing that jumps out is repeated ue of foo !! x !! y, this takes O(n) time, and doing it multiple times is not good |
| 01:42:54 | <monochrom> | Well I don't have time figuring out what your code does either. I'm not getting paid here. |
| 01:43:17 | <institor> | it sounds like an interview question |
| 01:43:21 | <Guest|3> | its not about getting paid |
| 01:43:33 | <monochrom> | It is always about getting paid, and it is always personal. |
| 01:43:48 | <Guest|3> | well unfortunately im not getting paid for this work |
| 01:43:55 | <monochrom> | There is no "free beer, free speech". There is only free market, free samples. |
| 01:44:49 | <Axman6> | Guest|3: if this is for a job interview, then the point is to demonstrate your skills, not ours. |
| 01:45:03 | <Axman6> | there's also a very good chance that whoever is interviewing you is also in this channel |
| 01:45:28 | <Guest|3> | so when i presented you this code what did u notice, or what would you say to rate it |
| 01:45:55 | <int-e> | I noticed the total lack of explanation of what it does, and what changed compared to the previous version. |
| 01:46:07 | <Axman6> | And if I were hiring you, I wouldn't be impressed - it's fine to ask for help, as long as you're up front about the fact that someone else is judging _you_ on it. That means we can help yo in a way that the work is yours, not ours |
| 01:46:27 | × | otto_s quits (~user@p5de2f794.dip0.t-ipconnect.de) (Ping timeout: 255 seconds) |
| 01:46:54 | <monochrom> | This is why I stick to the socratic method. It already makes that assumption. Always. |
| 01:47:15 | <Guest|3> | i think i commented fair amount of code.. |
| 01:47:15 | <Guest|3> | Also nobody wrote anything you keep reffering to ur help as you wrote a single line in my code. This is my work. Using templates and help from other sources is not my work? |
| 01:47:40 | <institor> | everything is Microsoft's work in this brave new world |
| 01:47:45 | <monochrom> | People need to get paid for code review, too. |
| 01:47:48 | <institor> | copilot will write everything for you |
| 01:48:01 | → | otto_s joins (~user@p5de2ff65.dip0.t-ipconnect.de) |
| 01:48:05 | <monochrom> | Also soon enough you will find that your managers write 0 lines of code and still get paid. |
| 01:48:16 | <institor> | Guest|3: if you're not sure what it does maybe you should test it and find out |
| 01:48:30 | <Axman6> | Guest|3: can you explain what every character of that code does? Based on the questions you've asked, i would suspect that there is code that you've found elsewhere, andprobably don't understand |
| 01:48:38 | <institor> | if you don't understand if the test results are correct or not you should step back and ask if you understand the problem |
| 01:49:04 | <institor> | there is a spurious do block in the code |
| 01:49:11 | <institor> | should use a where or let clause instead |
| 01:49:11 | <monochrom> | Ugh individual characters don't do anything.... |
| 01:49:19 | <Guest|3> | yes but is the result satisfying, from a thrid person point of view. i made it on my vision |
| 01:50:00 | <institor> | does this even typecheck |
| 01:50:17 | <monochrom> | Yes, it already runs. |
| 01:50:25 | <institor> | i guess lists are a monad... |
| 01:50:37 | <monochrom> | Yes, I love abusing that too. :) |
| 01:50:38 | <Axman6> | Guest|3: I've told you several things that I would say are not ideal with that code, but you seem to have ignored them. ?Do you want our help or to waste our time? |
| 01:50:50 | <Guest|3> | i want ur help of course |
| 01:51:00 | <institor> | man i should just open a consultancy |
| 01:51:04 | <institor> | and start yelling at people for doing things wrong |
| 01:51:08 | <institor> | that would be the life |
| 01:51:14 | <monochrom> | and getting paid too |
| 01:51:15 | <Guest|3> | i want to learn |
| 01:51:17 | × | g00gler quits (uid125351@id-125351.uxbridge.irccloud.com) (Quit: Connection closed for inactivity) |
| 01:51:17 | <Guest|3> | thats why im here |
| 01:51:18 | <institor> | monochrom: exactly |
| 01:51:33 | <monochrom> | This is why I took up the 2nd best: Teaching. >:) |
| 01:52:07 | <monochrom> | Yell at wrong students and give them failing grades and saving the world and getting the... pay. >:) |
| 01:52:14 | <Axman6> | spreadLight looks very inefficient to me, it traverses the data many times when it could probably be done with zome maps and zip/zipWiths |
| 01:52:47 | <institor> | folding with a recursive call to something that is at least O(n)? |
| 01:52:52 | <institor> | lol |
| 01:53:07 | <monochrom> | I'm sure lots of people write like that in C, too. |
| 01:53:08 | <Guest|3> | like this axman6? https://pastebin.com/F9qhjfBG |
| 01:53:15 | <Axman6> | but that said, it's not a particularly easy thing to write, so can't blame someone who's relatively new to thelanguage |
| 01:53:50 | <Axman6> | I don't know what you changed |
| 01:54:03 | <monochrom> | I saw world-class programming competition contesters using linear search for priority queue extract-min for dijkstra. |
| 01:54:30 | <monochrom> | err, contestants! I hate English. |
| 01:54:40 | <Guest|3> | https://pastebin.com/Jdq9xfv6 |
| 01:54:59 | <institor> | i probably couldn't implement a heap from memory |
| 01:55:13 | <int-e> | monochrom: valid if it's fast enough for your purpose |
| 01:55:19 | <int-e> | KISS and all that |
| 01:55:34 | <monochrom> | Oh but they didn't write it off their head either. It is their on-paper code library they brought into the contest! |
| 01:55:45 | <institor> | damn |
| 01:55:52 | <institor> | i wish i could just bring my red-black tree implementation everywhere |
| 01:55:53 | <institor> | that would be dope |
| 01:55:58 | <Axman6> | Guest|3: do you know how much time updateElement takes to run? (not in terms of time but how expensive it is) |
| 01:56:25 | <int-e> | monochrom: everything to save a few minutes or even seconds, eh |
| 01:56:30 | <Axman6> | there's a fairly nice GADT red-black tree implementation right? |
| 01:56:50 | × | aaronv quits (~aaronv@user/aaronv) (Quit: Leaving) |
| 01:56:55 | <institor> | yeah but i wanted to try to reimplement the algorithms given in CLRS |
| 01:56:58 | <int-e> | monochrom: I imagine they also have a faster version (with more code) to copy if they need it? |
| 01:56:59 | <institor> | and it's a good excuse for quickcheck too |
| 01:57:03 | × | td_ quits (~td@i53870915.versanet.de) (Ping timeout: 246 seconds) |
| 01:57:10 | → | aaronv joins (~aaronv@user/aaronv) |
| 01:57:12 | <monochrom> | I didn't find it. |
| 01:57:16 | <int-e> | fun |
| 01:57:31 | <monochrom> | But I can accept that it is fast enough "because C". |
| 01:58:02 | <institor> | hasn't stroustrup gotten on stage and said that even if the asymptotics favour a linked list you should still use a vector anyway |
| 01:58:04 | × | Guest|3 quits (~Guest|3@93-136-208-249.adsl.net.t-com.hr) (Quit: Connection closed) |
| 01:58:06 | <institor> | for better spatial locality and caching |
| 01:58:06 | <Axman6> | sorry, meant replaceElement |
| 01:58:11 | int-e | tends to use Data.Map as a quick&dirty priority queue with minView for extracting the smallest element |
| 01:58:16 | <institor> | sometimes the engineering just takes precedence |
| 01:58:21 | <monochrom> | Typing in a real priority queue can waste time even if you just have to transcribe it from your papers. |
| 01:58:50 | <int-e> | (there's a lot of caveats here... notably, avoiding duplicate keys) |
| 01:58:59 | → | td_ joins (~td@i5387090D.versanet.de) |
| 01:59:11 | <int-e> | Actually, I lied. I use Data.Set (Prio, Value) |
| 01:59:12 | <Axman6> | Data.Map.Map is a real priority queue |
| 01:59:26 | <int-e> | Precisely because of the duplicate key problem. |
| 01:59:30 | → | Guest|3 joins (~Guest|3@93-136-208-249.adsl.net.t-com.hr) |
| 01:59:40 | <institor> | heh so |
| 01:59:43 | <institor> | Data.Map is a balanced binary tree? |
| 01:59:44 | <Guest|3> | so you all are teachers like Albert? |
| 02:00:09 | <monochrom> | Yes Data.Map is a balanced binary search tree. |
| 02:00:11 | <int-e> | institor: Yes. size-balanced |
| 02:00:19 | <institor> | interesting.. |
| 02:00:23 | <int-e> | (which is an implementation detail of course) |
| 02:00:27 | <int-e> | Data.IntMap is a trie |
| 02:00:43 | <institor> | don't maps/dictionaries as an abstract data type demand O(1) access though |
| 02:00:53 | <institor> | well i guess there's collisions which could degenerate to O(n) |
| 02:01:34 | × | aaronv quits (~aaronv@user/aaronv) (Ping timeout: 258 seconds) |
| 02:01:35 | <Axman6> | Who's Albert? |
| 02:01:35 | <institor> | well who's doing the "demanding" i guess... |
| 02:01:43 | <int-e> | Well... no, the abstract interface generally just specifies behavior (input, output), not runtime. |
| 02:01:58 | <Guest|3> | monochrom |
| 02:02:03 | <monochrom> | Data structure academia accepts O(lg n). |
| 02:02:18 | <institor> | i suppose it's the data structure that determines runtime |
| 02:02:19 | <int-e> | And with persistent data structures, you often have O(log(n)) everything anyway. |
| 02:02:20 | <monochrom> | To some extent they recognize that O(1) is impossible. |
| 02:02:26 | <institor> | and association lists also constitute a dictionary... |
| 02:02:59 | <int-e> | (well, Theta(log(n)) is what I really mean) |
| 02:03:21 | × | xff0x quits (~xff0x@2405:6580:b080:900:cb93:4506:eebb:2c0b) (Ping timeout: 246 seconds) |
| 02:03:52 | × | bratwurst quits (~blaadsfa@S010610561191f5d6.lb.shawcable.net) (Ping timeout: 258 seconds) |
| 02:04:43 | <Axman6> | RAM is ln n, so that's the bst we can do |
| 02:05:18 | <int-e> | isn't the usualy model O(sqrt(n)) even |
| 02:05:49 | <int-e> | (because ultimately it's about distance and energy dissipation) |
| 02:11:16 | <int-e> | (Oh but I also wouldn't use a priority queue for a plain breadth first search.) |
| 02:11:44 | <monochrom> | Right, that just needs an unpriority fifo queue. |
| 02:12:23 | <int-e> | I generally just compute a level of the tree at a time, often as a plain list. |
| 02:12:37 | <monochrom> | Iterative deepening? |
| 02:13:07 | <int-e> | Nah, that would start from the root each time. |
| 02:13:45 | <int-e> | I'm thinking of `next_level = curent_level >>= successors` (conceptually; there'll be code for weeding out duplicates somewhere) |
| 02:15:38 | <int-e> | It's just what I feel is a sweet spot when trading between amount of code and wasted memory. |
| 02:16:31 | → | nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net) |
| 02:20:20 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:b858:d331:34dd:9a83) (Remote host closed the connection) |
| 02:20:35 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:b858:d331:34dd:9a83) |
| 02:22:20 | → | qhong joins (~qhong@DN160vrd000d6kpg009l6c0000fj.stanford.edu) |
| 02:28:42 | × | todi quits (~todi@p4fd1a685.dip0.t-ipconnect.de) (Ping timeout: 245 seconds) |
| 02:28:47 | × | td_ quits (~td@i5387090D.versanet.de) (Ping timeout: 258 seconds) |
| 02:29:06 | → | todi joins (~todi@p4fd1ab34.dip0.t-ipconnect.de) |
| 02:29:28 | <EvanR> | ram access is O(log n), IntMap access is O(n) where n is the number of bits, and HashTables are somehow O(1) |
| 02:29:44 | <EvanR> | clear as mud |
| 02:30:02 | → | mysl_ joins (~mysl@user/mysl) |
| 02:30:37 | → | td_ joins (~td@i53870905.versanet.de) |
| 02:30:39 | × | mysl quits (~mysl@user/mysl) (Ping timeout: 246 seconds) |
| 02:31:00 | <EvanR> | with careful accounting of everything except hash tables, hash tables beat everything by a long shot |
| 02:33:12 | × | Guest|3 quits (~Guest|3@93-136-208-249.adsl.net.t-com.hr) (Quit: Connection closed) |
| 02:33:47 | <EvanR> | I wonder what absurd more careful O rating hash tables actually would get awarded |
| 02:36:03 | × | [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection) |
| 02:38:31 | <int-e> | EvanR: it's far from a theoretical concern: https://en.wikipedia.org/wiki/Collision_attack#Hash_flooding |
| 02:39:08 | × | ddellacosta quits (~ddellacos@ool-44c738de.dyn.optonline.net) (Ping timeout: 258 seconds) |
| 02:39:28 | × | qhong quits (~qhong@DN160vrd000d6kpg009l6c0000fj.stanford.edu) (Remote host closed the connection) |
| 02:40:29 | <EvanR> | oof |
| 02:40:52 | → | ddellacosta joins (~ddellacos@ool-44c738de.dyn.optonline.net) |
| 02:43:00 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection) |
| 02:45:27 | <monochrom> | Claim O(0). >:) |
| 02:46:01 | <int-e> | I always claim O(1). |
| 02:46:21 | <int-e> | (Nobody will demonstrate that I'm wrong in my lifetime.) |
| 02:47:17 | → | FinnElija joins (~finn_elij@user/finn-elija/x-0085643) |
| 02:48:09 | <int-e> | Though O(0) has merits. "Nobody will spend any time on this for large enough input size." |
| 02:48:20 | <monochrom> | I do that too but only for "termination". >:) |
| 02:48:28 | <monochrom> | Or rather, my thesis supervisor does. |
| 02:51:03 | → | xff0x joins (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) |
| 02:53:09 | <EvanR> | clearly we've been thinking about it upside down the whole time, like temperature = 1/coldness |
| 02:58:52 | <int-e> | is this #bad-physics now |
| 03:01:06 | → | aaronv joins (~aaronv@user/aaronv) |
| 03:02:31 | × | waleee quits (~waleee@h-176-10-137-138.NA.cust.bahnhof.se) (Ping timeout: 258 seconds) |
| 03:03:00 | <monochrom> | YES! We should measure algorithm speed instead of time: "O(n) time" should become "Ω(1/n)". Then we can state the Heisenbug Uncertainty Principle: Δspeed × Δoutput ≥ prank constant. |
| 03:06:19 | × | litharge quits (litharge@libera/bot/litharge) (Ping timeout: 600 seconds) |
| 03:06:21 | <EvanR> | coldness makes sense when you have laser states that can all pile up in the highest energy state, becoming infinitely hot. But still can't go anywhere near absolute zero |
| 03:07:00 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 255 seconds) |
| 03:08:07 | × | aaronv quits (~aaronv@user/aaronv) (Quit: Leaving) |
| 03:08:25 | → | aaronv joins (~aaronv@user/aaronv) |
| 03:09:22 | <EvanR> | ok I messed that up because you can go higher than infinitely hot |
| 03:10:02 | × | aforemny quits (~aforemny@i59f516dc.versanet.de) (Ping timeout: 246 seconds) |
| 03:10:17 | → | aforemny_ joins (~aforemny@2001:9e8:6cd9:400:79dd:b9ae:d530:5eae) |
| 03:11:36 | → | litharge joins (litharge@libera/bot/litharge) |
| 03:13:01 | → | merijn joins (~merijn@088-129-128-083.dynamic.caiway.nl) |
| 03:17:33 | × | merijn quits (~merijn@088-129-128-083.dynamic.caiway.nl) (Ping timeout: 250 seconds) |
| 03:18:43 | × | nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 240 seconds) |
| 03:35:13 | × | ubert quits (~Thunderbi@77.119.210.130.wireless.dyn.drei.com) (Ping timeout: 244 seconds) |
| 03:46:17 | → | artem joins (~artem@c-73-103-90-145.hsd1.in.comcast.net) |
| 03:46:17 | × | ulysses4ever quits (~artem@c-73-103-90-145.hsd1.in.comcast.net) (Read error: Connection reset by peer) |
| 03:55:08 | × | yosef` quits (~yosef`@user/yosef/x-2947716) (Quit: Client closed) |
| 03:55:35 | Feuermagier | is now known as Guest7409 |
| 03:55:35 | × | Guest7409 quits (~Feuermagi@user/feuermagier) (Killed (cadmium.libera.chat (Nickname regained by services))) |
| 03:55:40 | → | Feuermagier joins (~Feuermagi@user/feuermagier) |
| 03:56:24 | × | aaronv quits (~aaronv@user/aaronv) (Ping timeout: 246 seconds) |
| 03:56:57 | × | Feuermagier quits (~Feuermagi@user/feuermagier) (Max SendQ exceeded) |
| 03:57:20 | → | Feuermagier joins (~Feuermagi@user/feuermagier) |
| 03:59:17 | × | litharge quits (litharge@libera/bot/litharge) (Remote host closed the connection) |
| 03:59:25 | → | litharge joins (litharge@libera/bot/litharge) |
| 04:06:43 | → | _ht joins (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) |
| 04:07:57 | → | aaronv joins (~aaronv@user/aaronv) |
| 04:09:18 | → | Lycurgus joins (~juan@user/Lycurgus) |
| 04:24:03 | × | JordiGH quits (~jordi@user/jordigh) (Ping timeout: 246 seconds) |
| 04:30:36 | × | vglfr quits (~vglfr@cli-188-239-201-89.bbn.slav.dn.ua) (Remote host closed the connection) |
| 04:31:39 | → | vglfr joins (~vglfr@cli-188-239-201-89.bbn.slav.dn.ua) |
| 04:32:09 | × | Lycurgus quits (~juan@user/Lycurgus) (Quit: Tschüss) |
| 04:36:31 | → | caryhartline joins (~caryhartl@168.182.58.169) |
| 04:40:04 | → | talismanick joins (~user@2601:204:ef80:2980::c39) |
| 04:40:39 | × | vglfr quits (~vglfr@cli-188-239-201-89.bbn.slav.dn.ua) (Ping timeout: 258 seconds) |
| 04:41:07 | → | vglfr joins (~vglfr@88.155.1.251) |
| 04:42:55 | × | machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 250 seconds) |
| 04:44:12 | × | EvanR quits (~EvanR@user/evanr) (Quit: Leaving) |
| 04:44:34 | × | caryhartline quits (~caryhartl@168.182.58.169) (Quit: caryhartline) |
| 04:44:52 | × | aforemny_ quits (~aforemny@2001:9e8:6cd9:400:79dd:b9ae:d530:5eae) (Ping timeout: 258 seconds) |
| 04:45:10 | → | EvanR joins (~EvanR@user/evanr) |
| 04:49:00 | → | acidjnk joins (~acidjnk@p200300d6e7072f302de738f6d26fc170.dip0.t-ipconnect.de) |
| 04:49:41 | × | nckx quits (nckx@libera/staff/owl/nckx) (*.net *.split) |
| 04:50:03 | → | nckx joins (nckx@libera/staff/owl/nckx) |
| 04:51:26 | → | caryhartline joins (~caryhartl@168.182.58.169) |
| 04:53:42 | × | vglfr quits (~vglfr@88.155.1.251) (Ping timeout: 245 seconds) |
| 04:54:09 | → | vglfr joins (~vglfr@cli-188-239-201-89.bbn.slav.dn.ua) |
| 04:55:38 | → | aforemny joins (~aforemny@i59F516ED.versanet.de) |
| 04:57:00 | → | idgaen joins (~idgaen@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) |
| 05:07:34 | × | systemfault quits (sid267009@id-267009.uxbridge.irccloud.com) (Changing host) |
| 05:07:34 | → | systemfault joins (sid267009@about/typescript/member/systemfault) |
| 05:16:20 | → | nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net) |
| 05:19:02 | → | jackneill__ joins (~Jackneill@20014C4E1E101A0091C70064EC2E3AAF.dsl.pool.telekom.hu) |
| 05:20:14 | → | takuan joins (~takuan@178-116-218-225.access.telenet.be) |
| 05:20:51 | × | nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 255 seconds) |
| 05:21:38 | → | qqq joins (~qqq@92.43.167.61) |
| 05:31:04 | → | Inst joins (~Inst@120.244.192.250) |
| 05:31:22 | <Inst> | stupid discovery of the day: you can inline type signatures in Haskell, at the cost of having to make everything into an explicit lambda |
| 05:31:42 | × | _ht quits (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Quit: _ht) |
| 05:31:58 | × | caryhartline quits (~caryhartl@168.182.58.169) (Quit: caryhartline) |
| 05:32:44 | → | caryhartline joins (~caryhartl@168.182.58.169) |
| 05:33:01 | <Inst> | https://cdn.discordapp.com/attachments/280036215477239809/1149577202833309736/image.png |
| 05:33:24 | <Inst> | for someone who whines about style wars, I think the only thing I really have against maxigit wanting to adopt do bulleting for everything is that I didn't come up with it myself |
| 05:33:32 | × | Feuermagier quits (~Feuermagi@user/feuermagier) (Ping timeout: 246 seconds) |
| 05:35:41 | × | talismanick quits (~user@2601:204:ef80:2980::c39) (Remote host closed the connection) |
| 05:40:13 | <EvanR> | Inst, or delete the type signature and read the docs to see what you wrote xD |
| 05:40:48 | → | Pixi` joins (~Pixi@user/pixi) |
| 05:40:51 | <Inst> | top-level binding with no type signature |
| 05:43:21 | <EvanR> | sure why not (because while write the code originally type signatures help the compiler help you write what you wanted, and make refactoring easier later) |
| 05:43:25 | <EvanR> | writing* |
| 05:43:41 | × | Pixi quits (~Pixi@user/pixi) (Ping timeout: 246 seconds) |
| 05:45:54 | <Inst> | I mean I'm the kind of guy who's done foo | bool1 = bar1 | bool2 = bar2 as an experiment |
| 05:45:58 | <Inst> | which is perfectly valid Haskell |
| 05:46:30 | <Axman6> | Is that supposed to be surprising? |
| 05:48:13 | <Inst> | it's non-standard, I usually do foo arg1; | bool1 = bar1; | bool2 = bar2... |
| 05:48:43 | <mauke> | that's a syntax error |
| 05:49:12 | <Inst> | the first one or the second one? The second one is only a syntax error because of the ellipsis |
| 05:49:24 | <mauke> | the second one is a syntax error because of the ; |
| 05:49:30 | <int-e> | I suspect the `;` was just meant to delimit lines |
| 05:49:42 | <int-e> | not sure, of course |
| 05:49:51 | <Inst> | oh, yeah, it is a syntax error because of the offset rule |
| 05:49:55 | → | michalz joins (~michalz@185.246.207.221) |
| 05:50:13 | <Inst> | since it's considered to start on a new line |
| 05:50:27 | <Inst> | and then terminates the definition |
| 05:50:40 | <int-e> | there's nothing wrong with foo | cond1 = val1 | cond2 = val2 except for readability if it's all on one line. |
| 05:51:06 | <int-e> | (and worries about completeness of the conditions) |
| 05:51:28 | <Inst> | i think it's valid if it's foo |... |
| 05:51:40 | × | aaronv quits (~aaronv@user/aaronv) (Ping timeout: 248 seconds) |
| 05:51:41 | <Inst> | i.e, it's in a where clause and you're defining a non-function value based on other data |
| 05:52:41 | → | aaronv joins (~aaronv@user/aaronv) |
| 05:53:00 | <mauke> | > let x | otherwise = "hi" in x |
| 05:53:01 | <lambdabot> | "hi" |
| 05:53:43 | × | Inst quits (~Inst@120.244.192.250) (Remote host closed the connection) |
| 05:54:02 | → | Inst joins (~Inst@120.244.192.250) |
| 06:00:00 | <Axman6> | > let foo x | otherwise /= x = "Oh" | otherwise = "Ok" in foo True |
| 06:00:02 | <lambdabot> | "Ok" |
| 06:00:39 | <int-e> | Oh ok! |
| 06:01:49 | <Inst> | wait, you guys never try foo | bool1 = bar1 | bool2 = bar2 idioms? |
| 06:01:51 | <int-e> | > let f otherwise | otherwise = 1 | True = 0 in map f [False ..] |
| 06:01:54 | <Inst> | and I mean with proper whitespacing |
| 06:01:54 | <lambdabot> | [0,1] |
| 06:02:18 | <Axman6> | feature flags syntax |
| 06:02:23 | <mauke> | > let foo x | False <- x = "Oh" | True = "Ok" in foo True |
| 06:02:24 | <lambdabot> | "Ok" |
| 06:02:31 | <int-e> | > [() | False] |
| 06:02:32 | <lambdabot> | [] |
| 06:02:40 | <int-e> | > [() | True] |
| 06:02:42 | <lambdabot> | [()] |
| 06:02:56 | <Axman6> | even more fun with monad comprehensions |
| 06:02:59 | <Inst> | int-e: you knew that'd work, right? |
| 06:03:15 | <Inst> | i was told [foo | bool] is fairly standard |
| 06:03:22 | <int-e> | Inst: it is |
| 06:03:29 | <int-e> | it's also surprisingly useful |
| 06:03:46 | <Axman6> | it's quite a nice alternative to guard for lists |
| 06:03:57 | <Inst> | i've used it with <> to append terms, although obv I freak out a little bit about performance |
| 06:04:03 | <Inst> | then fold on the resulting list |
| 06:04:13 | <int-e> | Inst: I don't know where you got the idea that foo | bool1 = bar1 | bool2 = bar2 would be uncommon... it's common, it's just a bit too much to put on a single line in clean code |
| 06:04:28 | <mauke> | > let f xs | []<-xs = 0 | _ : xs<-xs = f xs + 1 in f "four" |
| 06:04:29 | <lambdabot> | 4 |
| 06:04:35 | × | mxs quits (~mxs@user/mxs) (Server closed connection) |
| 06:04:43 | → | mxs joins (~mxs@user/mxs) |
| 06:04:55 | <int-e> | pattern guards are a bit less common |
| 06:04:58 | <Inst> | int-e: well, a production haskeller was impressed because he never thought about it, probably because it was smelly |
| 06:05:18 | <Inst> | and was thinking about putting it out as an interview question (he doesn't do interviews) |
| 06:06:34 | <int-e> | So a single person was unaware of that possibility... Haskell is a rich language, it's very easy to be unaware of chunks of the syntax without ever missing them. |
| 06:06:36 | <Inst> | "which of the following is valid Haskell syntax? foo | bool1 = bar | bool2 = baz... foo, | bool1 = bar {- newline goes here -} {- lots of whitespacing goes here -}.. |
| 06:06:52 | <Inst> | then standard put boolean guards on another line |
| 06:07:00 | <mauke> | > let f xs | []<-xs = 0 | _ : (f->xs)<-xs = xs + 1 in f "four" |
| 06:07:01 | <lambdabot> | 4 |
| 06:07:05 | <Inst> | also I'd argue that it's smelly when you're doing a complex chain of conditionals |
| 06:07:11 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 06:07:11 | <int-e> | even without extensions like view patterns |
| 06:07:25 | <Inst> | if you're setting a variable based on inputs, and there's very few guards, it's not that bad |
| 06:08:03 | <Inst> | where color | bool1 = Red | bool2 = Green | bool3 = Blue isn't bad, is it? |
| 06:09:20 | <Axman6> | I feel like I'd opt for MultiwayIf there, but mostly because I wouldn't think of doing it that way |
| 06:11:38 | <Axman6> | I've definitely seen where something | cond = a | cond2 = b | otherwise = c in real code though |
| 06:12:12 | <Inst> | yeah tbh it's probably still less readable than XMultiWayIf |
| 06:15:34 | → | oo_miguel joins (~Thunderbi@78-11-179-96.static.ip.netia.com.pl) |
| 06:15:56 | <Inst> | or, rather in this case, just properly formatting the thing with a line extension + guards on separate lines |
| 06:16:55 | <Inst> | the one thing i'd kill for syntactically, though, is being able to inline kind signatures in data declarations, though |
| 06:17:12 | <Inst> | you can do that with the type ariables, but not with the base type constructor |
| 06:19:20 | → | yosef` joins (~yosef`@user/yosef/x-2947716) |
| 06:19:23 | → | sord937 joins (~sord937@gateway/tor-sasl/sord937) |
| 06:20:48 | × | swamp_ quits (~zmt00@user/zmt00) (Remote host closed the connection) |
| 06:21:08 | → | swamp_ joins (~zmt00@user/zmt00) |
| 06:24:04 | × | noctux quits (~noctux@user/noctux) (Server closed connection) |
| 06:24:13 | → | noctux joins (~noctux@user/noctux) |
| 06:39:43 | × | aaronv quits (~aaronv@user/aaronv) (Remote host closed the connection) |
| 06:40:03 | → | aaronv joins (~aaronv@user/aaronv) |
| 06:40:35 | × | gaze___ quits (sid387101@id-387101.helmsley.irccloud.com) (Server closed connection) |
| 06:40:39 | → | lortabac joins (~lortabac@2a01:e0a:541:b8f0:eab7:f748:7d5f:b5dd) |
| 06:40:44 | → | gaze___ joins (sid387101@id-387101.helmsley.irccloud.com) |
| 06:42:46 | → | chele joins (~chele@user/chele) |
| 06:46:57 | → | coot joins (~coot@89-69-206-216.dynamic.chello.pl) |
| 06:46:57 | → | machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net) |
| 06:47:37 | → | qhong joins (~qhong@rescomp-21-400677.stanford.edu) |
| 06:50:37 | × | tcard quits (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) (Quit: Leaving) |
| 06:52:43 | → | tcard joins (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) |
| 06:59:35 | <Axman6> | phma: wanna share that code again and we'll make it go superfast? |
| 07:00:07 | × | aaronv quits (~aaronv@user/aaronv) (Ping timeout: 248 seconds) |
| 07:05:08 | → | chromoblob joins (~user@37.113.180.113) |
| 07:05:09 | <Axman6> | phma: if you use vector, your bitRotate should look something like: rotBitcount src mult = generate (V.length src) (\i -> unsafeIndex src ((i+len-byte) `mod` len) `unsafeShiftL` bit .|. unsafeIndex src ((i+len-byte-1) `mod` len) `unsafeShiftR` (bit-8)). that shoudl eliminate most bounds checks since you're guaranteeing that you aren't creating indices and shifts out of range (you need to check that the changes I made are actually valid though...) |
| 07:06:52 | <Axman6> | the benefit of using generate instead of listArray is that internally it can allocate a mutable array that is exactly the right size and then just write into it, to do that with listArray, it needs to traverse the list twice to find the length, then write each value |
| 07:09:43 | × | chromoblob quits (~user@37.113.180.113) (Ping timeout: 248 seconds) |
| 07:09:55 | → | sinbad joins (~sinbad@user/sinbad) |
| 07:11:51 | × | idgaen quits (~idgaen@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 4.0.2) |
| 07:13:21 | × | Fischmiep quits (~Fischmiep@user/Fischmiep) (Ping timeout: 245 seconds) |
| 07:14:41 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 07:16:27 | <phma> | here's the repo, I just pushed it: https://github.com/phma/wring-twistree |
| 07:17:45 | <phma> | I looked at Data.Bits and found there's (.>>.), which is shorter when infixed |
| 07:18:07 | <int-e> | Axman6: Uhm listArray gets the array bounds as its first argument. There are reasons to prefer `vector` (better fusion, less overly abstraced indexing nonsense), but this double traversal story isn't true. |
| 07:19:22 | <Axman6> | oh right, I forgot about that (: |
| 07:19:46 | <int-e> | Vector.fromList is probably where that story comes from? |
| 07:19:49 | <phma> | The S-boxes are a two-dimensional array (3×256). Would that be better as a vector? Or can a vector do that? It's computed once, when you key the Wring, then passed around. |
| 07:19:54 | <Axman6> | yes, that's likely |
| 07:20:10 | → | Fischmiep joins (~Fischmiep@user/Fischmiep) |
| 07:20:37 | <Axman6> | vector only does one dimensional indices, but it's trivial to convert between the two (particularly when the smallest size is a power of two, you just need masks and shifts) |
| 07:20:43 | × | Inst quits (~Inst@120.244.192.250) (Ping timeout: 240 seconds) |
| 07:21:24 | <Axman6> | or shift and .|. I guess, if you're going (x,y) -> index |
| 07:21:42 | <phma> | Running the bytes through the s-boxes seems pretty fast. I think I'll leave it as is. |
| 07:22:11 | <int-e> | "overly abstracted indexing" -- Ix looks like a great abstraction, and it is nice as far as convenience goes... but it also tends to be very slow. |
| 07:23:05 | × | cafkafk_ quits (~cafkafk@fsf/member/cafkafk) (Remote host closed the connection) |
| 07:23:07 | <Axman6> | phma: if performance is a big concern, making sure you use functions like unsafeShifts and unsafeIndex makes a massive improvement (particularly if you then use the LLVM backend) |
| 07:23:31 | <phma> | how do I use LLVM? |
| 07:23:34 | → | cafkafk_ joins (~cafkafk@fsf/member/cafkafk) |
| 07:24:19 | <Axman6> | the GHC flag is -fllvm, I can't remember how you pass that to cabal/stack, you'd need to check their documentation. I think it's an example in the stack docs though |
| 07:25:46 | <phma> | 16.5 s, not much change |
| 07:26:03 | <phma> | now I'll try the unsafe shift |
| 07:26:10 | <Axman6> | No, it's not a magic bullet, it can't make slow code fast magically sadly |
| 07:26:14 | → | fendor joins (~fendor@2a02:8388:1640:be00:c785:45ab:c70:9d3f) |
| 07:26:22 | <phma> | now one of the args to shift is negative, I'll have to flip it |
| 07:27:31 | <Axman6> | you should also try using unsafeAt instead of (!) |
| 07:27:59 | <Axman6> | if you know it'll always be negative, then just make it positive and shift the other direction |
| 07:28:35 | <phma> | I'm running test.sh before and after to make sure that I don't mess up the algorithm with unsafe shifts |
| 07:28:51 | <Axman6> | sensible :) |
| 07:29:21 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:b858:d331:34dd:9a83) (Remote host closed the connection) |
| 07:29:28 | <probie> | re LLVM: In my experience, about all you'll reliably get over NCG is better loop unrolling (and that only works if what you've written actually compiles to a loop) |
| 07:29:50 | <Axman6> | generally when it comes to this sort of array and bit level stuff, it's best to make sure everything works using the safe functions (use shiftL or shiftR instead of shift, you shouldn't need a branch in there), then you can replace indexing and shifts with their unsafe versions |
| 07:30:13 | <Axman6> | probie: this is very array heavy code so should be a good candidate for LLVM |
| 07:30:57 | → | aaronv joins (~aaronv@user/aaronv) |
| 07:31:47 | <phma> | does unsafe shift work right when you shift a byte by 8? |
| 07:32:10 | <Axman6> | probably not |
| 07:32:28 | <Axman6> | you need to make sure the inputs are between 0 and 7 |
| 07:32:31 | <Axman6> | IIRC |
| 07:32:44 | <phma> | the Rust code didn't work right, I had to make an if statement |
| 07:33:32 | → | gmg joins (~user@user/gehmehgeh) |
| 07:33:56 | <Axman6> | if you're just doing it once per call to rotBitcount it should be fine, just make sure you compute your constants correctly so you can use the unsafe functions |
| 07:33:59 | <int-e> | rust has dedicated bit rotation operation |
| 07:34:18 | <Axman6> | this requires shifting in bits from a different word though |
| 07:34:28 | <int-e> | ah |
| 07:34:30 | → | mmhat joins (~mmh@p200300f1c7178a9eee086bfffe095315.dip0.t-ipconnect.de) |
| 07:34:35 | <Axman6> | so it's a global rotation, not rotation of a single byte |
| 07:34:41 | × | mmhat quits (~mmh@p200300f1c7178a9eee086bfffe095315.dip0.t-ipconnect.de) (Client Quit) |
| 07:34:54 | <Axman6> | (for very small definitions of "global") |
| 07:34:58 | <phma> | test passed so far |
| 07:34:58 | <int-e> | yeah, missed that. |
| 07:36:21 | → | cfricke joins (~cfricke@user/cfricke) |
| 07:36:52 | <phma> | I'm doing it twice per byte (one left shift, one right shift). |
| 07:37:48 | <phma> | rotBitcount rotates an entire buffer (1 MiB in the timed code) by its population count |
| 07:38:09 | <Axman6> | you could split it into the case where the rotation is a multiple of 8, so you're just indexing into other indices, and then the more expensive one where you need to index into adjacent bytes and merge them |
| 07:38:43 | <phma> | that's what the rust does |
| 07:39:06 | <phma> | but the haskell is working properly, at least on this cpu |
| 07:39:10 | <Axman6> | seems like a sensible performance improvement (which in the crypto world is generally regarded as A Bad Idea) |
| 07:39:23 | <phma> | hein? |
| 07:39:30 | <Axman6> | since a timing attack could tell when the pop count is a multiple of 8 very easily then |
| 07:39:39 | <phma> | ah |
| 07:40:29 | <phma> | test 524288, almost done |
| 07:41:13 | × | shawwwn quits (sid6132@id-6132.helmsley.irccloud.com) (Server closed connection) |
| 07:41:22 | → | shawwwn joins (sid6132@id-6132.helmsley.irccloud.com) |
| 07:41:41 | <phma> | 15.2 s |
| 07:41:57 | <Axman6> | keep in mind that a shift o 0 is fine but 8 is not, so for both shifts you can just apply `mod` 8 to always be between 0-7 |
| 07:41:59 | → | Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542) |
| 07:42:22 | <phma> | the pop count could be 0 mod 8 on one round, and 5 mod 8 the next |
| 07:42:55 | <Axman6> | so you'd use (8 - n) `mod` 8 (or .&. 0x7) |
| 07:42:57 | <phma> | changing shift by 8 to shift by 8 is wrong though, it'll combine two whole bytes into one output byte |
| 07:43:15 | <phma> | I mean to shif by 0 |
| 07:43:35 | × | AmyMalik quits (ellenor@callbox.trd.is) (Server closed connection) |
| 07:43:53 | <Axman6> | oh right, yeah a mask there would be useful |
| 07:46:57 | <phma> | How can I tell if I specialized it to the right type? |
| 07:47:09 | <Axman6> | or if you're on ARM64 you can just use the instructions that exist for exactly this sort of bit movement nonsense, like UBFX https://developer.arm.com/documentation/102374/0101/Data-processing---bit-manipulation?lang=en |
| 07:47:26 | <Axman6> | what is 'it'? |
| 07:47:36 | <phma> | rotBitcount |
| 07:48:11 | → | mechap joins (~mechap@user/mechap) |
| 07:48:20 | <phma> | I'm on AMD |
| 07:48:38 | <Axman6> | if you're using vector, there won't be any generic types, but if you're still using Array then, if it were me, i would add the SPECIALISE pragmas I know I want and make sure it has been |
| 07:49:37 | <phma> | RBIT looks fun |
| 07:50:01 | → | [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470) |
| 07:50:06 | <Axman6> | yeah that was mostly a joke (thought I did have some plans to add optimisations to use those instructions when GHC saw patterns like x .&. ((1 `shiftL` len - 1) `shiftL` offset) `shiftR` offset |
| 07:50:37 | <Axman6> | because that's exactly what UBFX does |
| 07:52:21 | <phma> | is there a REV32? |
| 07:52:48 | <phma> | the key schedule would use REV16 if it were on ARM |
| 07:52:49 | <Axman6> | https://developer.arm.com/documentation/ddi0602/2022-09/Base-Instructions/REV32--Reverse-bytes-in-32-bit-words-?lang=en |
| 07:54:40 | <phma> | make sure it has been what? |
| 07:55:57 | × | micro quits (~micro@user/micro) (Ping timeout: 260 seconds) |
| 07:56:58 | <phma> | Axman6: you seem to have broken off your sentence. What's the rest of the sentence? |
| 07:57:33 | × | td_ quits (~td@i53870905.versanet.de) (Quit: waking up from the american dream ...) |
| 07:57:38 | <Axman6> | specialised |
| 07:57:57 | <phma> | how do I do that? |
| 07:57:59 | × | Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 07:58:43 | <Axman6> | https://ghc.gitlab.haskell.org/ghc/doc/users_guide/exts/pragmas.html#specialize-pragma |
| 07:59:18 | × | mechap quits (~mechap@user/mechap) (Ping timeout: 246 seconds) |
| 08:00:19 | <phma> | I think I have to specialize roundEncrypt and roundDecrypt too, those are what call rotBitcount |
| 08:00:27 | × | She quits (haveident@libera/staff/she/her) (Quit: Either upgrades, or the world's ending.) |
| 08:01:30 | → | mechap joins (~mechap@user/mechap) |
| 08:03:15 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:b858:d331:34dd:9a83) |
| 08:03:49 | → | micro joins (~micro@user/micro) |
| 08:07:20 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 08:07:32 | → | Ellenor joins (ellenor@callbox.trd.is) |
| 08:07:36 | × | Fischmiep quits (~Fischmiep@user/Fischmiep) (Ping timeout: 255 seconds) |
| 08:07:51 | → | arahael joins (~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net) |
| 08:07:57 | → | She joins (haveident@libera/staff/she/her) |
| 08:08:02 | → | CiaoSen joins (~Jura@2a05:5800:296:dc00:664b:f0ff:fe37:9ef) |
| 08:10:54 | → | Fischmiep joins (~Fischmiep@user/Fischmiep) |
| 08:11:55 | <phma> | Time is now down to 10 s |
| 08:12:07 | × | arahael quits (~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net) (Ping timeout: 248 seconds) |
| 08:15:13 | → | finn_elija joins (~finn_elij@user/finn-elija/x-0085643) |
| 08:15:13 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija))) |
| 08:15:13 | finn_elija | is now known as FinnElija |
| 08:15:43 | <phma> | safe or unsafe shift makes no difference to the run time |
| 08:20:30 | → | arahael joins (~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net) |
| 08:21:54 | × | aaronv quits (~aaronv@user/aaronv) (Quit: Leaving) |
| 08:22:47 | × | mechap quits (~mechap@user/mechap) (Ping timeout: 248 seconds) |
| 08:24:55 | × | arahael quits (~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net) (Ping timeout: 248 seconds) |
| 08:28:43 | <phma> | rotBitcount now takes 9.6% of the time. |
| 08:29:07 | → | td_ joins (~td@i53870905.versanet.de) |
| 08:29:11 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 08:31:57 | × | phma quits (~phma@host-67-44-208-5.hnremote.net) (Read error: Connection reset by peer) |
| 08:32:44 | × | shachaf quits (~shachaf@user/shachaf) (Server closed connection) |
| 08:32:47 | → | phma joins (phma@2001:5b0:212a:b168:8a63:fd9c:4a28:c70e) |
| 08:32:53 | → | shachaf joins (~shachaf@user/shachaf) |
| 08:37:00 | × | caryhartline quits (~caryhartl@168.182.58.169) (Quit: caryhartline) |
| 08:49:31 | × | yosef` quits (~yosef`@user/yosef/x-2947716) (Quit: Client closed) |
| 08:49:36 | × | tzh quits (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz) |
| 08:57:30 | → | ubert joins (~Thunderbi@2001:871:263:95d1:53a2:cab9:2747:4277) |
| 09:03:41 | × | ft quits (~ft@p3e9bc1b6.dip0.t-ipconnect.de) (Quit: leaving) |
| 09:05:08 | → | chromoblob joins (~user@37.113.180.113) |
| 09:09:55 | → | danza joins (~francesco@151.57.215.192) |
| 09:11:03 | × | chromoblob quits (~user@37.113.180.113) (Ping timeout: 255 seconds) |
| 09:12:23 | × | ubert quits (~Thunderbi@2001:871:263:95d1:53a2:cab9:2747:4277) (Ping timeout: 248 seconds) |
| 09:14:10 | → | ubert joins (~Thunderbi@2001:871:263:95d1:bc24:1a8e:fab7:1bea) |
| 09:17:11 | → | nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net) |
| 09:20:32 | → | sm joins (~sm@plaintextaccounting/sm) |
| 09:21:03 | × | sm quits (~sm@plaintextaccounting/sm) (Client Quit) |
| 09:21:20 | × | danza quits (~francesco@151.57.215.192) (Remote host closed the connection) |
| 09:21:42 | → | danza joins (~francesco@151.57.215.192) |
| 09:22:28 | × | Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection) |
| 09:22:31 | × | nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 248 seconds) |
| 09:24:09 | × | cawfee quits (~root@2406:3003:2077:2758::babe) (Server closed connection) |
| 09:24:28 | → | cawfee joins (~root@2406:3003:2077:2758::babe) |
| 09:26:15 | × | danza quits (~francesco@151.57.215.192) (Ping timeout: 248 seconds) |
| 09:27:15 | → | sm joins (~sm@plaintextaccounting/sm) |
| 09:27:16 | × | sm quits (~sm@plaintextaccounting/sm) (Client Quit) |
| 09:32:10 | × | m1dnight quits (~christoph@78-22-4-67.access.telenet.be) (Quit: WeeChat 4.0.2) |
| 09:32:38 | → | m1dnight joins (~christoph@78-22-4-67.access.telenet.be) |
| 09:34:13 | → | g00gler joins (uid125351@id-125351.uxbridge.irccloud.com) |
| 09:38:43 | → | kuribas joins (~user@ptr-17d51eo6k7h88xpr7hr.18120a2.ip6.access.telenet.be) |
| 09:40:27 | × | NinjaTrappeur quits (~ninja@user/ninjatrappeur) (Changing host) |
| 09:40:27 | → | NinjaTrappeur joins (~ninja@about/aquilenet/vodoo/NinjaTrappeur) |
| 09:43:31 | → | cael_ joins (~quassel@host109-148-244-226.range109-148.btcentralplus.com) |
| 09:49:24 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 09:53:46 | × | haveo quits (~haveo@sl35.iuwt.fr) (Ping timeout: 245 seconds) |
| 09:53:47 | × | [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer) |
| 09:59:06 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 09:59:13 | × | driib quits (~driib@vmi931078.contaboserver.net) (Quit: The Lounge - https://thelounge.chat) |
| 09:59:59 | → | driib joins (~driib@vmi931078.contaboserver.net) |
| 10:02:34 | × | caubert_ quits (~caubert@user/caubert) (Quit: WeeChat 3.8) |
| 10:02:45 | → | caubert joins (~caubert@user/caubert) |
| 10:05:39 | → | haveo joins (~haveo@sl35.iuwt.fr) |
| 10:08:04 | → | mysl joins (~mysl@user/mysl) |
| 10:09:10 | × | mysl_ quits (~mysl@user/mysl) (Ping timeout: 258 seconds) |
| 10:14:03 | × | _d0t quits (~{-d0t-}@user/-d0t-/x-7915216) (Ping timeout: 255 seconds) |
| 10:17:18 | → | mysl_ joins (~mysl@user/mysl) |
| 10:17:52 | → | _d0t joins (~{-d0t-}@user/-d0t-/x-7915216) |
| 10:19:08 | × | mysl quits (~mysl@user/mysl) (Ping timeout: 258 seconds) |
| 10:20:04 | mysl_ | is now known as mysl |
| 10:20:21 | × | xff0x quits (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 246 seconds) |
| 10:22:18 | → | mysl_ joins (~mysl@user/mysl) |
| 10:22:47 | × | ubert quits (~Thunderbi@2001:871:263:95d1:bc24:1a8e:fab7:1bea) (Ping timeout: 248 seconds) |
| 10:23:00 | → | danza joins (~francesco@151.57.215.192) |
| 10:24:53 | × | mysl quits (~mysl@user/mysl) (Ping timeout: 258 seconds) |
| 10:27:19 | → | mysl joins (~mysl@user/mysl) |
| 10:28:07 | × | mysl_ quits (~mysl@user/mysl) (Ping timeout: 248 seconds) |
| 10:30:04 | × | danza quits (~francesco@151.57.215.192) (Ping timeout: 248 seconds) |
| 10:35:17 | → | mysl_ joins (~mysl@user/mysl) |
| 10:35:35 | × | CiaoSen quits (~Jura@2a05:5800:296:dc00:664b:f0ff:fe37:9ef) (Ping timeout: 248 seconds) |
| 10:37:14 | → | ubert joins (~Thunderbi@2001:871:263:95d1:77ed:664c:9083:f304) |
| 10:37:16 | × | mysl quits (~mysl@user/mysl) (Ping timeout: 258 seconds) |
| 10:40:16 | → | mysl joins (~mysl@user/mysl) |
| 10:42:03 | × | mysl_ quits (~mysl@user/mysl) (Ping timeout: 246 seconds) |
| 10:42:53 | × | kuribas quits (~user@ptr-17d51eo6k7h88xpr7hr.18120a2.ip6.access.telenet.be) (Remote host closed the connection) |
| 10:45:18 | → | mysl_ joins (~mysl@user/mysl) |
| 10:46:07 | × | mysl quits (~mysl@user/mysl) (Ping timeout: 244 seconds) |
| 10:49:13 | → | sm joins (~sm@plaintextaccounting/sm) |
| 10:49:35 | × | Flow quits (~none@gentoo/developer/flow) (Server closed connection) |
| 10:50:18 | → | mysl joins (~mysl@user/mysl) |
| 10:50:20 | → | Flow joins (~none@gentoo/developer/flow) |
| 10:51:02 | Ellenor | is now known as AmyMalik |
| 10:51:03 | × | mysl_ quits (~mysl@user/mysl) (Ping timeout: 248 seconds) |
| 10:54:11 | → | cael__ joins (~quassel@host109-148-244-226.range109-148.btcentralplus.com) |
| 10:54:24 | × | cael_ quits (~quassel@host109-148-244-226.range109-148.btcentralplus.com) (Ping timeout: 258 seconds) |
| 10:58:35 | × | Arsen quits (arsen@gentoo/developer/managarm.dev.Arsen) (Server closed connection) |
| 10:58:53 | → | Arsen joins (arsen@gentoo/developer/managarm.dev.Arsen) |
| 10:59:06 | → | mysl_ joins (~mysl@user/mysl) |
| 11:01:18 | × | mysl quits (~mysl@user/mysl) (Ping timeout: 246 seconds) |
| 11:04:39 | → | mysl joins (~mysl@user/mysl) |
| 11:07:03 | × | mysl_ quits (~mysl@user/mysl) (Ping timeout: 258 seconds) |
| 11:07:08 | × | Dykam quits (Dykam@dykam.nl) (Server closed connection) |
| 11:07:17 | → | Dykam joins (Dykam@dykam.nl) |
| 11:11:39 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 258 seconds) |
| 11:13:29 | → | mysl_ joins (~mysl@user/mysl) |
| 11:13:34 | × | shane quits (~shane@ana.rch.ist) (Server closed connection) |
| 11:13:42 | → | shane joins (~shane@ana.rch.ist) |
| 11:13:59 | × | mysl quits (~mysl@user/mysl) (Ping timeout: 248 seconds) |
| 11:16:40 | → | xff0x joins (~xff0x@2405:6580:b080:900:775:bab:62a6:3a1d) |
| 11:20:41 | → | JordiGH joins (~jordi@user/jordigh) |
| 11:25:44 | → | sm joins (~sm@plaintextaccounting/sm) |
| 11:27:00 | → | actioninja0 joins (~actioninj@user/actioninja) |
| 11:27:51 | × | actioninja quits (~actioninj@user/actioninja) (Ping timeout: 255 seconds) |
| 11:27:51 | actioninja0 | is now known as actioninja |
| 11:27:54 | × | ubert quits (~Thunderbi@2001:871:263:95d1:77ed:664c:9083:f304) (Ping timeout: 246 seconds) |
| 11:28:22 | → | ubert joins (~Thunderbi@2001:871:263:95d1:270d:fe5e:9aae:336d) |
| 11:30:53 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 11:33:49 | → | kuribas joins (~user@ptr-17d51eo6k7h88xpr7hr.18120a2.ip6.access.telenet.be) |
| 11:34:57 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 11:35:12 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 246 seconds) |
| 11:36:55 | × | ubert quits (~Thunderbi@2001:871:263:95d1:270d:fe5e:9aae:336d) (Ping timeout: 248 seconds) |
| 11:44:36 | × | vglfr quits (~vglfr@cli-188-239-201-89.bbn.slav.dn.ua) (Ping timeout: 245 seconds) |
| 11:54:12 | × | califax quits (~califax@user/califx) (Remote host closed the connection) |
| 11:54:33 | → | califax joins (~califax@user/califx) |
| 11:56:53 | × | JordiGH quits (~jordi@user/jordigh) (Ping timeout: 258 seconds) |
| 12:10:56 | × | artem quits (~artem@c-73-103-90-145.hsd1.in.comcast.net) (Remote host closed the connection) |
| 12:13:36 | → | JordiGH joins (~jordi@user/jordigh) |
| 12:17:35 | × | jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 258 seconds) |
| 12:18:35 | → | ulysses4ever joins (~artem@2601:249:4380:8950:f474:e3f8:9806:671) |
| 12:22:19 | <sm> | @where+ hs-opt-handbook https://haskell.foundation/hs-opt-handbook.github.io/contents.html Haskell Optimization Handbook |
| 12:22:19 | <lambdabot> | Done. |
| 12:22:47 | <sm> | lambdabot seems to have had a few shots of espresso. Instant response now! |
| 12:23:51 | × | stites quits (~stites@130.44.147.204) (Ping timeout: 255 seconds) |
| 12:24:40 | × | qqq quits (~qqq@92.43.167.61) (Remote host closed the connection) |
| 12:24:51 | → | stites joins (~stites@2607:fb90:ad62:807c:d15b:ce72:ad88:3242) |
| 12:25:18 | × | flukiluke quits (~m-7humut@2603:c023:c000:6c7e:8945:ad24:9113:a962) (Ping timeout: 246 seconds) |
| 12:25:37 | → | flukiluke joins (~m-7humut@2603:c023:c000:6c7e:8945:ad24:9113:a962) |
| 12:29:52 | × | stites quits (~stites@2607:fb90:ad62:807c:d15b:ce72:ad88:3242) (Read error: Connection reset by peer) |
| 12:30:43 | × | SethTisue quits (sid14912@id-14912.ilkley.irccloud.com) (Server closed connection) |
| 12:30:53 | → | SethTisue joins (sid14912@id-14912.ilkley.irccloud.com) |
| 12:31:54 | → | stites joins (~stites@2607:fb90:ad62:807c:d15b:ce72:ad88:3242) |
| 12:33:01 | × | sinbad quits (~sinbad@user/sinbad) (Quit: Leaving.) |
| 12:33:16 | → | vglfr joins (~vglfr@cli-188-239-201-89.bbn.slav.dn.ua) |
| 12:34:48 | × | ph88^ quits (~ph88@ip5b403cd4.dynamic.kabel-deutschland.de) (Quit: Leaving) |
| 12:40:18 | × | stites quits (~stites@2607:fb90:ad62:807c:d15b:ce72:ad88:3242) (Read error: Connection reset by peer) |
| 12:40:43 | → | stites joins (~stites@155.33.134.55) |
| 12:51:15 | → | ubert joins (~Thunderbi@178.115.49.191.wireless.dyn.drei.com) |
| 12:55:13 | × | kuribas quits (~user@ptr-17d51eo6k7h88xpr7hr.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 27.1)) |
| 12:56:21 | × | ddellacosta quits (~ddellacos@ool-44c738de.dyn.optonline.net) (Quit: WeeChat 4.0.3) |
| 12:58:39 | → | ddellacosta joins (~ddellacos@ool-44c738de.dyn.optonline.net) |
| 13:01:04 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Read error: Connection reset by peer) |
| 13:01:35 | × | it_ quits (~quassel@v2202212189510211193.supersrv.de) (Quit: ,o>) |
| 13:01:52 | × | sm quits (~sm@plaintextaccounting/sm) (Quit: sm) |
| 13:01:56 | → | it_ joins (~quassel@v2202212189510211193.supersrv.de) |
| 13:04:56 | → | sm joins (~sm@plaintextaccounting/sm) |
| 13:06:03 | × | sm quits (~sm@plaintextaccounting/sm) (Client Quit) |
| 13:06:19 | → | Simikando joins (~Simikando@adsl-dyn91.91-127-22.t-com.sk) |
| 13:08:09 | mysl_ | is now known as mysl |
| 13:13:10 | → | waleee joins (~waleee@h-176-10-137-138.na.cust.bahnhof.se) |
| 13:18:58 | × | koolazer quits (~koo@user/koolazer) (Server closed connection) |
| 13:19:03 | → | nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net) |
| 13:20:09 | × | Simikando quits (~Simikando@adsl-dyn91.91-127-22.t-com.sk) (Read error: Connection reset by peer) |
| 13:20:28 | → | Simikando joins (~Simikando@adsl-dyn91.91-127-22.t-com.sk) |
| 13:24:07 | × | nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 248 seconds) |
| 13:24:26 | → | koolazer joins (~koo@user/koolazer) |
| 13:29:29 | × | texasmynsted quits (~username@99.96.221.112) (Quit: WeeChat 3.0) |
| 13:29:51 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 13:32:39 | × | JordiGH quits (~jordi@user/jordigh) (Ping timeout: 248 seconds) |
| 13:33:11 | × | img quits (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in) |
| 13:33:33 | → | libertyprime joins (~libertypr@203.96.203.44) |
| 13:33:40 | → | img joins (~img@user/img) |
| 13:33:49 | × | img quits (~img@user/img) (Remote host closed the connection) |
| 13:34:46 | → | img joins (~img@user/img) |
| 13:44:23 | × | stites quits (~stites@155.33.134.55) (Read error: Connection reset by peer) |
| 13:44:50 | × | it_ quits (~quassel@v2202212189510211193.supersrv.de) (Quit: ,o>) |
| 13:45:45 | → | it_ joins (~quassel@v2202212189510211193.supersrv.de) |
| 13:45:55 | → | stites joins (~stites@155.33.134.55) |
| 13:50:54 | → | ezzieygu1wuf joins (~Unknown@user/ezzieyguywuf) |
| 13:51:32 | × | ezzieyguywuf quits (~Unknown@user/ezzieyguywuf) (Ping timeout: 250 seconds) |
| 13:53:08 | × | cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 4.0.4) |
| 13:54:24 | × | Deide quits (d0130db69a@user/deide) (Server closed connection) |
| 14:01:11 | <ddellacosta> | I didn't realize how weird Alternative is until just now. I feel slightly dirty with how liberally I use guard everywhere. |
| 14:01:49 | <[exa]> | wait Alternative is weird? |
| 14:02:49 | <haskellbridge> | <jade> news to me as well |
| 14:02:52 | <ddellacosta> | [exa]: I mean, from reading this https://wiki.haskell.org/Typeclassopedia#Failure_and_choice:_Alternative.2C_MonadPlus.2C_ArrowPlus it seems like there are few instances that work distinctly from each other, and the laws aren't super well thought out |
| 14:03:33 | <ddellacosta> | and like, one thing in particular that I never considered was how the Monoid instance for Maybe works distinctly from Maybe's own Monoid instance, and that is distinct from how [] works w/Alternative |
| 14:03:56 | <ddellacosta> | anyways, sorry just going down this rabbit hole and felt like expressing my surprise |
| 14:04:42 | <[exa]> | ddellacosta: not a big problem, I just wanted to kinda distill what is the weird part |
| 14:04:55 | <[exa]> | it's certainly surprising in cases, esp. with the left bias |
| 14:05:15 | <[exa]> | (perhaps the story with Validation might shed some light on that) |
| 14:06:06 | → | JordiGH joins (~jordi@user/jordigh) |
| 14:06:25 | <ddellacosta> | [exa]: yeah amusingly I came back to read that typeclassopedia entry after starting with trying to figure out how to silence a warning about this in PureScript: https://discourse.purescript.org/t/unbiasing-the-semigroup-instance-for-map/1935, and following an email thread from there |
| 14:06:52 | <[exa]> | I'd say that people love to ignore the left bias :] |
| 14:07:02 | <ddellacosta> | I'll take a look at Validation, also not something I've thought much about |
| 14:07:04 | <[exa]> | btw what's the "Maybe's own Monoid instance" ? |
| 14:07:07 | × | Simikando quits (~Simikando@adsl-dyn91.91-127-22.t-com.sk) (Ping timeout: 250 seconds) |
| 14:07:37 | <ddellacosta> | [exa]: to quote directly from that link, as it's a bit buried: "[] is an instance, with empty given by the empty list, and (<|>) equal to (++). It is worth pointing out that this is identical to the Monoid instance for [a], whereas the Alternative and Monoid instances for Maybe are different: the Monoid instance for Maybe a requires a Monoid instance for a, and monoidally combines the contained |
| 14:07:39 | <ddellacosta> | values when presented with two Justs." |
| 14:08:10 | <ddellacosta> | puts it better than I can |
| 14:08:49 | <[exa]> | ah, so it's about that Monoidal and Alternative behavior differs surprisingly |
| 14:09:07 | <lortabac> | I've always found Alternative weird too |
| 14:09:18 | <lortabac> | I think there has been a similar discussion in the past here |
| 14:09:26 | <ddellacosta> | yeah I'm sure, I'm a bit late to the party lol |
| 14:09:48 | <lortabac> | also what's the meaning of the IO instance? |
| 14:09:49 | <ddellacosta> | it's interesting though, it is super useful regardless |
| 14:10:03 | <ddellacosta> | oh yeah that's also funky. It feels a bit like every instance has its own set of laws |
| 14:10:25 | <[exa]> | ddellacosta: IMO this is more of a Monoid problem. I always see that there's moreless one reasonable and simple way how to do the failure-avoiding instance for Maybe, but there are many ways how to combine Maybes monoidically while technically still being a perfect Monoid |
| 14:10:29 | × | bcmiller quits (~bm3719@66.42.95.185) (Server closed connection) |
| 14:10:37 | <ddellacosta> | [exa]: that's a good point |
| 14:10:39 | <[exa]> | (related: Sum, Product, Endo, ... marks) |
| 14:10:39 | → | bcmiller joins (~bm3719@66.42.95.185) |
| 14:11:10 | <ddellacosta> | I mean, you could generalize that to the tradeoffs between modules and typeclasses, I suppose |
| 14:11:18 | <[exa]> | I'm not sure if defaulting to the "natural" behavior in the default instance is somehow supported, like that it would be the only choice or so |
| 14:11:26 | <ddellacosta> | but yeah Monoid suffers a lot from that |
| 14:11:30 | <[exa]> | *only _other_ choice than what Alternative does |
| 14:11:34 | <lortabac> | TBH I've never found Alternative very useful either |
| 14:11:44 | <[exa]> | it helps here and there |
| 14:11:48 | <[exa]> | parsecs |
| 14:11:49 | <[exa]> | :] |
| 14:12:09 | <lortabac> | except 'asum', we almost never write functions that are generic over Alternative |
| 14:12:10 | <ddellacosta> | lortabac: it's somewhat trivial but I really like how much minor boilerplate the Maybe instance for guard can eliminate, and yeah for parsing it can be handy |
| 14:12:51 | <lortabac> | ah yes, there is 'guard' |
| 14:12:57 | <lortabac> | I hadn't thought about it |
| 14:13:42 | <[exa]> | ddellacosta: kinda wondering, is there even any other valid implementation of the binary&nullary operation for Maybe that would not be isomorphic to either Alternative or Monoid as we have it now? |
| 14:14:04 | <[exa]> | except ofc for 1] right bias instead of left 2] trivial case of "all is Nothing" |
| 14:14:36 | <[exa]> | btw cf.: First, Last -- https://hackage.haskell.org/package/base-4.18.0.0/docs/Data-Monoid.html#t:First |
| 14:15:02 | <ddellacosta> | I have no idea |
| 14:15:25 | <ddellacosta> | interesting question tho |
| 14:17:02 | <[exa]> | I'd say nope, you either don't bring in any assumptions and you can neither combine the valutes nor create a error-less Just; or you start bringing in typeclasses and Monoid assumption is a kindof natural one right |
| 14:18:03 | <[exa]> | so perhaps the `Alternative a => Alternative (Maybe a)` would be missing, but that overlaps already |
| 14:19:22 | × | pavonia quits (~user@user/siracusa) (Quit: Bye!) |
| 14:20:55 | <[exa]> | ddellacosta: and perhaps related, this was a really nice find for me once: https://hackage.haskell.org/package/lens-5.2.3/docs/Control-Lens-Combinators.html#v:ala |
| 14:30:15 | × | vglfr quits (~vglfr@cli-188-239-201-89.bbn.slav.dn.ua) (Read error: Connection reset by peer) |
| 14:30:24 | → | vglfr joins (~vglfr@cli-188-239-201-89.bbn.slav.dn.ua) |
| 14:31:35 | × | bwe quits (~bwe@2a01:4f8:1c1c:4878::2) (Server closed connection) |
| 14:31:43 | → | bwe joins (~bwe@2a01:4f8:1c1c:4878::2) |
| 14:31:51 | × | lortabac quits (~lortabac@2a01:e0a:541:b8f0:eab7:f748:7d5f:b5dd) (Quit: WeeChat 2.8) |
| 14:37:11 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 14:42:15 | <ddellacosta> | [exa]: thank you for that link! I swear I saw that function maybe in a puzzle game online a while back, randomly? ...and didn't follow up on it |
| 14:43:37 | <ddellacosta> | I cannot for the life of me remember the link to that game though |
| 14:49:18 | <ddellacosta> | and yeah that makes sense re: possible Monoid instances for that, I agree. Maybe's structure constrains the options pretty simply I guess huh |
| 14:49:29 | → | ph88 joins (~ph88@ip5b403cd4.dynamic.kabel-deutschland.de) |
| 14:50:21 | × | fendor quits (~fendor@2a02:8388:1640:be00:c785:45ab:c70:9d3f) (Remote host closed the connection) |
| 14:50:59 | × | dcoutts quits (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net) (Ping timeout: 246 seconds) |
| 14:51:35 | × | cael__ quits (~quassel@host109-148-244-226.range109-148.btcentralplus.com) (Ping timeout: 248 seconds) |
| 14:51:51 | → | cael_ joins (~quassel@host109-148-244-226.range109-148.btcentralplus.com) |
| 14:52:29 | → | sm joins (~sm@plaintextaccounting/sm) |
| 14:55:24 | <ph88> | how can i compile this? https://github.com/elaforge/fix-imports i only use stack normally |
| 14:55:40 | × | acidjnk quits (~acidjnk@p200300d6e7072f302de738f6d26fc170.dip0.t-ipconnect.de) (Ping timeout: 244 seconds) |
| 14:58:03 | <albet70> | is Karp-Rabin related to Edmonds-Karp? |
| 14:58:21 | <yushyin> | ph88: extra-deps: allows for git repos, i would assume |
| 14:58:50 | <[exa]> | albet70: in which sense precisely? (50% of folks is shared! :D ) |
| 14:59:42 | <[exa]> | ph88: the cabal.project is borked by user's local files, I guess you should open an issue or so |
| 15:00:23 | <[exa]> | ph88: you might have luck by just removing this line and wishing that the other package exists https://github.com/elaforge/fix-imports/blob/master/cabal.project#L3 |
| 15:01:46 | <ph88> | yushyin, [exa] i'm getting an error like this https://bpa.st/RK7VA [exa] i did your suggested change in the cabal file |
| 15:02:11 | <albet70> | [exa] , I don't know, :) |
| 15:02:20 | <[exa]> | ph88: why not compile just with `cabal run` ? |
| 15:02:46 | <[exa]> | albet70: anyway rabin-karp is the hashy string search algorithm, and the other is afaik for maximum flows in networks, not very related imo |
| 15:02:48 | <ph88> | [exa], i don't have cabal only stack |
| 15:03:34 | <[exa]> | ph88: wait how come? (I didn't think that is possible) |
| 15:05:20 | <ph88> | [exa], i don't know, i never installed it. I don't have it as a command on the CLI |
| 15:05:28 | → | Simikando joins (~Simikando@adsl-dyn91.91-127-22.t-com.sk) |
| 15:05:51 | <[exa]> | ph88: maybe try `stack exec cabal -- run` or so |
| 15:06:00 | <ph88> | ok |
| 15:06:45 | <[exa]> | ohyeah, here: https://docs.haskellstack.org/en/stable/faq/index.html#can-i-run-cabal-commands-inside-stack-exec |
| 15:06:49 | <ph88> | Executable named cabal not found on path |
| 15:07:00 | <ph88> | oh thanks for the link i will look |
| 15:07:33 | <[exa]> | looks like I misplaced the -- |
| 15:07:56 | × | She quits (haveident@libera/staff/she/her) (Quit: Either upgrades, or the world's ending.) |
| 15:07:57 | <[exa]> | anyway AFAIK stack must have a cabal binary stashed somewhere, at least internally, so it should work |
| 15:08:04 | → | She joins (haveident@libera/staff/she/her) |
| 15:08:13 | <ph88> | stack exec cabal -- run |
| 15:08:14 | <ph88> | stack exec -- cabal exec -- cabal run |
| 15:08:19 | <ph88> | stack exec -- cabal run |
| 15:08:29 | <ph88> | tried these 3 but i get the same: Executable named cabal not found on path |
| 15:08:38 | <sclv> | stack doesn’t have a cabal binaru |
| 15:08:38 | → | Lycurgus joins (~juan@user/Lycurgus) |
| 15:08:46 | <sclv> | only links the lib |
| 15:08:50 | <[exa]> | okay that explains it |
| 15:09:05 | → | mc47 joins (~mc47@xmonad/TheMC47) |
| 15:11:17 | <ph88> | is there any other program that can remove unused imports ? |
| 15:14:22 | <[exa]> | I just run the ghc with the warning and fix all warnings |
| 15:14:26 | <[exa]> | and -Werror helps |
| 15:14:41 | <sm> | stack doesn't use a cabal binary, it links to the Cabal library |
| 15:15:44 | → | bratwurst joins (~blaadsfa@S010610561191f5d6.lb.shawcable.net) |
| 15:16:42 | → | dcoutts joins (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net) |
| 15:19:10 | <sm> | as was just said. dangit eyes, dangit crappy monitor.. |
| 15:19:49 | → | nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net) |
| 15:20:35 | × | Simikando quits (~Simikando@adsl-dyn91.91-127-22.t-com.sk) (Remote host closed the connection) |
| 15:20:52 | <sm> | I tried building fix-imports with stack, it seems to have very constrained deps and it's hard to figure out the right resolver |
| 15:20:59 | <sm> | but if you want a cabal binary, you could just install it |
| 15:22:14 | × | dcoutts quits (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net) (Ping timeout: 246 seconds) |
| 15:23:34 | <sm> | there's also https://hackage.haskell.org/package/hls-refine-imports-plugin |
| 15:24:45 | × | nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 255 seconds) |
| 15:24:46 | × | bratwurst quits (~blaadsfa@S010610561191f5d6.lb.shawcable.net) (Ping timeout: 255 seconds) |
| 15:25:04 | <sm> | and https://hackage.haskell.org/package/importify (2017) |
| 15:29:03 | → | justsomeguy joins (~justsomeg@user/justsomeguy) |
| 15:29:06 | → | ph88^ joins (~ph88@ip5b403cd4.dynamic.kabel-deutschland.de) |
| 15:29:55 | → | sinbad joins (~sinbad@user/sinbad) |
| 15:31:56 | × | libertyprime quits (~libertypr@203.96.203.44) (Ping timeout: 258 seconds) |
| 15:38:44 | × | coot quits (~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot) |
| 15:38:46 | × | stites quits (~stites@155.33.134.55) (Read error: Connection reset by peer) |
| 15:39:11 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:b858:d331:34dd:9a83) (Remote host closed the connection) |
| 15:39:26 | → | stites joins (~stites@2607:fb90:ad60:c188:2612:e938:afc1:2f1e) |
| 15:39:28 | → | eggplantade joins (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) |
| 15:40:21 | × | stites quits (~stites@2607:fb90:ad60:c188:2612:e938:afc1:2f1e) (Read error: Connection reset by peer) |
| 15:40:43 | → | stites joins (~stites@155.33.134.55) |
| 15:45:27 | × | justsomeguy quits (~justsomeg@user/justsomeguy) (Ping timeout: 248 seconds) |
| 15:48:45 | → | Inst joins (~Inst@120.244.192.250) |
| 15:49:16 | × | Lycurgus quits (~juan@user/Lycurgus) (Quit: Tschüss) |
| 15:50:14 | → | [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470) |
| 15:51:07 | → | ft joins (~ft@p4fc2ae5a.dip0.t-ipconnect.de) |
| 16:00:19 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 16:10:11 | → | danza joins (~francesco@151.46.222.150) |
| 16:10:34 | → | _ht joins (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) |
| 16:14:43 | × | machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 240 seconds) |
| 16:16:24 | × | eggplantade quits (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 16:18:42 | → | coot joins (~coot@89-69-206-216.dynamic.chello.pl) |
| 16:18:51 | × | danza quits (~francesco@151.46.222.150) (Ping timeout: 244 seconds) |
| 16:19:28 | × | ubert quits (~Thunderbi@178.115.49.191.wireless.dyn.drei.com) (Ping timeout: 258 seconds) |
| 16:20:59 | × | ph88^ quits (~ph88@ip5b403cd4.dynamic.kabel-deutschland.de) (Quit: Leaving) |
| 16:23:14 | → | acidjnk joins (~acidjnk@p200300d6e7072f30251e7d7a920dd919.dip0.t-ipconnect.de) |
| 16:29:04 | → | arahael joins (~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net) |
| 16:29:52 | <ph88> | anyone want to help with this parsing code? https://github.com/elaforge/fix-imports/pull/4 i'm not particularly familiar with the codebase |
| 16:32:04 | → | aaronv joins (~aaronv@user/aaronv) |
| 16:33:07 | <ph88> | sm, thanks importify looks good |
| 16:33:27 | × | arahael quits (~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net) (Ping timeout: 248 seconds) |
| 16:34:36 | × | sord937 quits (~sord937@gateway/tor-sasl/sord937) (Quit: sord937) |
| 16:38:30 | → | tzh joins (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) |
| 16:39:26 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 16:40:44 | <sm> | because it's six years old, you'll have to work harder to install it |
| 16:49:27 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:1030:d66f:8de7:984f) |
| 16:49:42 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:1030:d66f:8de7:984f) (Remote host closed the connection) |
| 16:49:57 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:1030:d66f:8de7:984f) |
| 16:50:56 | → | danza joins (~francesco@151.46.222.150) |
| 16:52:42 | × | aaronv quits (~aaronv@user/aaronv) (Ping timeout: 246 seconds) |
| 16:53:47 | <geekosaur> | @where+ rwh http://www.realworldhaskell.org/blog/ http://book.realworldhaskell.org/read/ https://github.com/tssm/up-to-date-real-world-haskell |
| 16:53:47 | <lambdabot> | Okay. |
| 16:54:29 | × | sand-witch quits (~m-mzmz6l@vmi833741.contaboserver.net) (Server closed connection) |
| 16:54:46 | → | sand-witch joins (~m-mzmz6l@vmi833741.contaboserver.net) |
| 16:55:10 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 16:56:59 | × | danza quits (~francesco@151.46.222.150) (Ping timeout: 246 seconds) |
| 16:57:52 | → | danza joins (~francesco@151.46.222.150) |
| 16:58:26 | <monochrom> | ph88: When I want it, I use ghc -ddump-minimal-imports |
| 17:02:21 | → | aaronv joins (~aaronv@user/aaronv) |
| 17:02:28 | <monochrom> | Add -fno-code :) |
| 17:04:50 | <EvanR> | I heard on betazed they write all their programs with no code! |
| 17:09:00 | → | qqq joins (~qqq@92.43.167.61) |
| 17:11:55 | → | arahael joins (~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net) |
| 17:16:28 | × | arahael quits (~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net) (Ping timeout: 248 seconds) |
| 17:16:59 | → | wootehfoot joins (~wootehfoo@user/wootehfoot) |
| 17:18:04 | × | aaronv quits (~aaronv@user/aaronv) (Remote host closed the connection) |
| 17:18:23 | → | aaronv joins (~aaronv@user/aaronv) |
| 17:21:56 | × | chele quits (~chele@user/chele) (Remote host closed the connection) |
| 17:23:51 | × | g00gler quits (uid125351@id-125351.uxbridge.irccloud.com) (Quit: Connection closed for inactivity) |
| 17:26:47 | × | danza quits (~francesco@151.46.222.150) (Ping timeout: 248 seconds) |
| 17:28:55 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 17:30:11 | → | bratwurst joins (~blaadsfa@S010610561191f5d6.lb.shawcable.net) |
| 17:35:03 | × | bratwurst quits (~blaadsfa@S010610561191f5d6.lb.shawcable.net) (Ping timeout: 246 seconds) |
| 17:37:15 | × | phma quits (phma@2001:5b0:212a:b168:8a63:fd9c:4a28:c70e) (Read error: Connection reset by peer) |
| 17:37:17 | → | danza joins (~francesco@151.46.222.150) |
| 17:38:38 | → | phma joins (~phma@2001:5b0:210f:2a18:ec08:5fa6:cd25:140c) |
| 17:45:45 | × | Inst quits (~Inst@120.244.192.250) (Remote host closed the connection) |
| 17:46:10 | → | Inst joins (~Inst@120.244.192.250) |
| 17:47:49 | ← | Inst parts (~Inst@120.244.192.250) () |
| 17:49:34 | → | __monty__ joins (~toonn@user/toonn) |
| 17:50:55 | × | megaTherion quits (~therion@unix.io) (Quit: ZNC 1.8.2 - https://znc.in) |
| 17:52:01 | → | megaTherion joins (~therion@unix.io) |
| 17:53:29 | × | megaTherion quits (~therion@unix.io) (Client Quit) |
| 17:54:36 | → | megaTherion joins (~therion@unix.io) |
| 18:02:14 | → | justsomeguy joins (~justsomeg@user/justsomeguy) |
| 18:02:51 | → | lex_ joins (~alex@188.26.233.194) |
| 18:05:11 | × | danza quits (~francesco@151.46.222.150) (Remote host closed the connection) |
| 18:05:30 | → | danza joins (~francesco@151.46.222.150) |
| 18:08:20 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:1030:d66f:8de7:984f) (Remote host closed the connection) |
| 18:08:29 | × | Typedfern quits (~Typedfern@60.red-83-37-32.dynamicip.rima-tde.net) (Ping timeout: 246 seconds) |
| 18:08:32 | → | Simikando joins (~Simikando@adsl-dyn91.91-127-22.t-com.sk) |
| 18:10:27 | × | lex_ quits (~alex@188.26.233.194) (Remote host closed the connection) |
| 18:11:17 | × | danza quits (~francesco@151.46.222.150) (Ping timeout: 246 seconds) |
| 18:17:32 | × | Simikando quits (~Simikando@adsl-dyn91.91-127-22.t-com.sk) (Quit: Leaving) |
| 18:20:16 | → | danza joins (~francesco@151.46.222.150) |
| 18:23:35 | × | danza quits (~francesco@151.46.222.150) (Remote host closed the connection) |
| 18:23:37 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:1030:d66f:8de7:984f) |
| 18:23:57 | → | danza joins (~francesco@151.46.222.150) |
| 18:24:10 | → | g00gler joins (uid125351@id-125351.uxbridge.irccloud.com) |
| 18:24:25 | → | Typedfern joins (~Typedfern@81.red-83-37-27.dynamicip.rima-tde.net) |
| 18:28:39 | × | danza quits (~francesco@151.46.222.150) (Ping timeout: 248 seconds) |
| 18:32:49 | × | sm quits (~sm@plaintextaccounting/sm) (Quit: sm) |
| 18:34:13 | <erisco> | Low code and no code just means your programming language is some mix of config files and GUIs |
| 18:38:37 | × | gmg quits (~user@user/gehmehgeh) (Remote host closed the connection) |
| 18:39:28 | → | gmg joins (~user@user/gehmehgeh) |
| 18:42:36 | <EvanR> | it takes a huge amount of code to write a GUI. So if code seems to be missing it's in the GUI |
| 18:43:46 | → | pavonia joins (~user@user/siracusa) |
| 18:44:11 | <ph88> | how can i fix this type error about MonadFail ? https://bpa.st/HWOZ2 |
| 18:44:38 | <haskellbridge> | <jean-paul.> ph88: You could add a MonadFail constraint to m |
| 18:44:59 | <haskellbridge> | <jean-paul.> ph88: Or you could make your pattern match complete so you don't need MonadFail |
| 18:45:49 | <ph88> | jean-paul when i get the constraint i get this https://bpa.st/3TURS i rather get rid of the MonadFail monad if possible |
| 18:46:02 | <ph88> | ok i will try pattern match complete |
| 18:47:08 | × | cael_ quits (~quassel@host109-148-244-226.range109-148.btcentralplus.com) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.) |
| 18:47:26 | → | cael_ joins (~quassel@host109-148-244-226.range109-148.btcentralplus.com) |
| 18:47:55 | × | cael_ quits (~quassel@host109-148-244-226.range109-148.btcentralplus.com) (Client Quit) |
| 18:50:13 | × | aaronv quits (~aaronv@user/aaronv) (Ping timeout: 240 seconds) |
| 18:53:47 | × | coot quits (~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot) |
| 18:54:01 | → | coot joins (~coot@89-69-206-216.dynamic.chello.pl) |
| 18:54:28 | → | danza joins (~francesco@151.46.222.150) |
| 19:02:13 | × | hrberg quits (~quassel@171.79-160-161.customer.lyse.net) (Ping timeout: 240 seconds) |
| 19:05:03 | → | arahael joins (~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net) |
| 19:05:28 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:1030:d66f:8de7:984f) (Remote host closed the connection) |
| 19:06:17 | × | robobub quits (uid248673@id-248673.uxbridge.irccloud.com) (Quit: Connection closed for inactivity) |
| 19:09:01 | → | Simikando joins (~Simikando@adsl-dyn91.91-127-22.t-com.sk) |
| 19:09:32 | × | arahael quits (~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net) (Ping timeout: 245 seconds) |
| 19:11:31 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 19:14:28 | <ph88> | sm2n, i made a fork https://github.com/flip111/importify/tree/lts-21.10 |
| 19:21:34 | → | nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net) |
| 19:26:24 | × | nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 255 seconds) |
| 19:34:48 | <monochrom> | ph88: "cabalPath <- fromJust <$> findCabalFile qpPath" will not incur MonadFail. Basically non-exhaustive patterns in do-notation incurs MonadFail. |
| 19:39:56 | <ph88> | thanks monochrom |
| 19:40:27 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:1030:d66f:8de7:984f) |
| 19:44:47 | × | gmg quits (~user@user/gehmehgeh) (Remote host closed the connection) |
| 19:45:35 | → | gmg joins (~user@user/gehmehgeh) |
| 19:48:58 | → | danza_ joins (~francesco@151.43.253.223) |
| 19:49:11 | × | danza quits (~francesco@151.46.222.150) (Ping timeout: 248 seconds) |
| 19:53:41 | × | gmg quits (~user@user/gehmehgeh) (Remote host closed the connection) |
| 19:54:12 | × | justsomeguy quits (~justsomeg@user/justsomeguy) (Quit: WeeChat 3.6) |
| 19:54:25 | → | gmg joins (~user@user/gehmehgeh) |
| 19:55:08 | × | Simikando quits (~Simikando@adsl-dyn91.91-127-22.t-com.sk) (Quit: Leaving) |
| 19:56:48 | × | jackneill__ quits (~Jackneill@20014C4E1E101A0091C70064EC2E3AAF.dsl.pool.telekom.hu) (Ping timeout: 246 seconds) |
| 20:07:33 | × | danza_ quits (~francesco@151.43.253.223) (Ping timeout: 258 seconds) |
| 20:13:07 | → | Tuplanolla joins (~Tuplanoll@91-159-68-236.elisa-laajakaista.fi) |
| 20:19:22 | × | _ht quits (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Quit: _ht) |
| 20:19:40 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
| 20:20:01 | → | sm joins (~sm@plaintextaccounting/sm) |
| 20:20:14 | × | sm quits (~sm@plaintextaccounting/sm) (Client Quit) |
| 20:22:03 | → | fendor joins (~fendor@2a02:8388:1640:be00:c785:45ab:c70:9d3f) |
| 20:23:17 | × | stites quits (~stites@155.33.134.55) (Read error: Connection reset by peer) |
| 20:23:54 | → | stites joins (~stites@155.33.134.55) |
| 20:24:59 | × | mzg quits (mzg@lazy.unconscious.biz) (Ping timeout: 246 seconds) |
| 20:25:06 | → | mzg joins (mzg@lazy.unconscious.biz) |
| 20:27:39 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 20:28:07 | × | stites quits (~stites@155.33.134.55) (Ping timeout: 248 seconds) |
| 20:28:36 | → | stites joins (~stites@2607:fb91:dc9:7a86:c8d0:2613:87c3:be7) |
| 20:35:53 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 20:37:00 | × | ddellacosta quits (~ddellacos@ool-44c738de.dyn.optonline.net) (Read error: Connection reset by peer) |
| 20:39:56 | → | ddellacosta joins (~ddellacos@ool-44c738de.dyn.optonline.net) |
| 20:42:46 | → | Pickchea joins (~private@user/pickchea) |
| 20:44:57 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Read error: Connection reset by peer) |
| 20:46:06 | × | mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection) |
| 20:47:05 | × | __monty__ quits (~toonn@user/toonn) (Quit: leaving) |
| 20:48:51 | × | stites quits (~stites@2607:fb91:dc9:7a86:c8d0:2613:87c3:be7) (Read error: Connection reset by peer) |
| 20:49:11 | → | stites joins (~stites@130.44.147.204) |
| 20:51:35 | → | sm joins (~sm@plaintextaccounting/sm) |
| 20:55:51 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 248 seconds) |
| 21:00:38 | → | falafel joins (~falafel@62.175.113.194.dyn.user.ono.com) |
| 21:01:45 | × | kimiamania quits (~67afdc47@user/kimiamania) (Quit: PegeLinux) |
| 21:02:13 | → | kimiamania joins (~67afdc47@user/kimiamania) |
| 21:02:22 | × | AlexZenon quits (~alzenon@178.34.160.172) (Ping timeout: 258 seconds) |
| 21:03:54 | → | AlexZenon joins (~alzenon@178.34.160.172) |
| 21:07:03 | × | michalz quits (~michalz@185.246.207.221) (Remote host closed the connection) |
| 21:08:20 | → | libertyprime joins (~libertypr@203.96.203.44) |
| 21:08:48 | × | wootehfoot quits (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer) |
| 21:09:45 | → | caryhartline joins (~caryhartl@168.182.58.169) |
| 21:18:32 | → | mmhat joins (~mmh@p200300f1c7178a9eee086bfffe095315.dip0.t-ipconnect.de) |
| 21:19:50 | × | _xor quits (~xor@ip-50-5-233-250.dynamic.fuse.net) (Quit: Ping timeout (120 seconds)) |
| 21:20:08 | → | _xor0 joins (~xor@ip-50-5-233-250.dynamic.fuse.net) |
| 21:23:03 | → | nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net) |
| 21:24:31 | → | sm joins (~sm@plaintextaccounting/sm) |
| 21:25:01 | × | mmhat quits (~mmh@p200300f1c7178a9eee086bfffe095315.dip0.t-ipconnect.de) (Quit: WeeChat 4.0.4) |
| 21:26:15 | × | acidjnk quits (~acidjnk@p200300d6e7072f30251e7d7a920dd919.dip0.t-ipconnect.de) (Ping timeout: 248 seconds) |
| 21:27:51 | × | nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 248 seconds) |
| 21:29:12 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 258 seconds) |
| 21:31:43 | → | sm joins (~sm@plaintextaccounting/sm) |
| 21:36:23 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 248 seconds) |
| 21:36:29 | × | fendor quits (~fendor@2a02:8388:1640:be00:c785:45ab:c70:9d3f) (Remote host closed the connection) |
| 21:38:48 | → | powderhorn joins (~powderhor@207-153-12-54.static.fttp.usinternet.com) |
| 21:39:18 | × | caryhartline quits (~caryhartl@168.182.58.169) (Quit: caryhartline) |
| 21:46:02 | → | machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net) |
| 21:49:04 | → | sm joins (~sm@plaintextaccounting/sm) |
| 21:52:18 | × | Vajb quits (~Vajb@2001:999:500:7771:18aa:c4e5:e7a9:f44b) (Read error: Connection reset by peer) |
| 21:53:04 | → | Vajb joins (~Vajb@2001:999:500:7771:18aa:c4e5:e7a9:f44b) |
| 21:53:44 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 258 seconds) |
| 21:55:59 | → | wroathe joins (~wroathe@user/wroathe) |
| 22:01:31 | × | coot quits (~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot) |
| 22:04:35 | × | raym quits (~ray@user/raym) (Server closed connection) |
| 22:04:51 | → | raym joins (~ray@user/raym) |
| 22:19:02 | × | son0p quits (~ff@186.121.39.74) (Quit: Bye) |
| 22:22:39 | → | sm joins (~sm@plaintextaccounting/sm) |
| 22:25:02 | ← | sinbad parts (~sinbad@user/sinbad) () |
| 22:25:30 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 246 seconds) |
| 22:27:03 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 248 seconds) |
| 22:31:15 | → | aaronv joins (~aaronv@user/aaronv) |
| 22:37:11 | × | libertyprime quits (~libertypr@203.96.203.44) (Ping timeout: 246 seconds) |
| 22:37:12 | × | ulysses4ever quits (~artem@2601:249:4380:8950:f474:e3f8:9806:671) (Read error: Connection reset by peer) |
| 22:37:20 | → | ulysses4ever joins (~artem@c-73-103-90-145.hsd1.in.comcast.net) |
| 22:41:48 | <jackdk> | It will instead crash your program if `findCabalFile` executes and generates a `Nothing` |
| 22:42:37 | <geekosaur> | the original probably did as well though |
| 22:42:54 | <geekosaur> | doesn't fail in IO throw? |
| 22:43:25 | <geekosaur> | % fail "foo" |
| 22:43:26 | <yahb2> | *** Exception: user error (foo) |
| 22:45:48 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 246 seconds) |
| 22:47:41 | <jackdk> | True, but the type system no longer forces you to care. I suppose you can consider that a good thing, or not. |
| 22:53:22 | → | libertyprime joins (~libertypr@203.96.203.44) |
| 22:56:08 | → | sm joins (~sm@plaintextaccounting/sm) |
| 23:00:07 | × | falafel quits (~falafel@62.175.113.194.dyn.user.ono.com) (Ping timeout: 248 seconds) |
| 23:00:49 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 258 seconds) |
| 23:01:00 | × | Pickchea quits (~private@user/pickchea) (Quit: Leaving) |
| 23:01:26 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 246 seconds) |
| 23:01:57 | → | son0p joins (~ff@186.121.39.74) |
| 23:03:46 | → | caryhartline joins (~caryhartl@168.182.58.169) |
| 23:08:43 | × | cyphase quits (~cyphase@user/cyphase) (Ping timeout: 255 seconds) |
| 23:10:41 | → | cyphase joins (~cyphase@user/cyphase) |
| 23:11:18 | → | Chioque joins (~mansur@88.125.49.60.jb03-home.tm.net.my) |
| 23:13:17 | × | Tuplanolla quits (~Tuplanoll@91-159-68-236.elisa-laajakaista.fi) (Quit: Leaving.) |
| 23:13:22 | × | caryhartline quits (~caryhartl@168.182.58.169) (Quit: caryhartline) |
| 23:18:12 | × | Chioque quits (~mansur@88.125.49.60.jb03-home.tm.net.my) (Quit: WeeChat 4.0.4) |
| 23:19:19 | → | cptaffe joins (~ZNC@99-47-99-155.lightspeed.ltrkar.sbcglobal.net) |
| 23:22:01 | × | cptaffe quits (~ZNC@99-47-99-155.lightspeed.ltrkar.sbcglobal.net) (Client Quit) |
| 23:22:01 | × | cpt\iphone quits (~ZNC@2600:1700:f08:111f::18e7) (Quit: ZNC 1.8.2 - https://znc.in) |
| 23:22:01 | × | cpt\macbook quits (~ZNC@2600:1700:f08:111f::18e7) (Quit: ZNC 1.8.2 - https://znc.in) |
| 23:22:23 | → | cpt\iphone joins (~iPhone@99-47-99-155.lightspeed.ltrkar.sbcglobal.net) |
| 23:22:54 | → | cptaffe joins (~ZNC@2600:1700:f08:111f::18e7) |
| 23:23:02 | × | gmg quits (~user@user/gehmehgeh) (Quit: Leaving) |
| 23:23:49 | × | cpt\iphone quits (~iPhone@99-47-99-155.lightspeed.ltrkar.sbcglobal.net) (Client Quit) |
| 23:23:53 | × | cptaffe quits (~ZNC@2600:1700:f08:111f::18e7) (Client Quit) |
| 23:23:55 | → | cptaffe- joins (~ZNC@99-47-99-155.lightspeed.ltrkar.sbcglobal.net) |
| 23:24:22 | → | arahael joins (~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net) |
| 23:24:58 | <EvanR> | crash early, crash often |
| 23:25:35 | <institor> | crash override |
| 23:26:19 | cptaffe- | is now known as cptaffe |
| 23:27:19 | × | cyphase quits (~cyphase@user/cyphase) (Ping timeout: 248 seconds) |
| 23:28:36 | → | sm joins (~sm@plaintextaccounting/sm) |
| 23:32:06 | → | cyphase joins (~cyphase@user/cyphase) |
| 23:32:24 | × | arahael quits (~arahael@119-18-1-27.771201.syd.nbn.aussiebb.net) (Ping timeout: 246 seconds) |
| 23:32:24 | × | JordiGH quits (~jordi@user/jordigh) (Ping timeout: 246 seconds) |
| 23:33:43 | × | stites quits (~stites@130.44.147.204) (Ping timeout: 248 seconds) |
| 23:34:15 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 248 seconds) |
| 23:35:12 | → | stites joins (~stites@2607:fb91:dc9:6ccd:6a4b:9556:1e53:57eb) |
| 23:37:38 | × | powderhorn quits (~powderhor@207-153-12-54.static.fttp.usinternet.com) (Ping timeout: 245 seconds) |
| 23:38:21 | → | danza_ joins (~francesco@151.43.250.219) |
| 23:43:35 | × | stefan-_ quits (~cri@42dots.de) (Server closed connection) |
| 23:43:51 | → | stefan-_ joins (~cri@42dots.de) |
| 23:47:56 | × | stites quits (~stites@2607:fb91:dc9:6ccd:6a4b:9556:1e53:57eb) (Read error: Connection reset by peer) |
| 23:48:16 | → | stites joins (~stites@130.44.147.204) |
| 23:49:53 | → | danza__ joins (~francesco@151.37.121.223) |
| 23:52:27 | × | stites quits (~stites@130.44.147.204) (Ping timeout: 245 seconds) |
| 23:52:27 | × | danza_ quits (~francesco@151.43.250.219) (Ping timeout: 245 seconds) |
| 23:52:40 | → | FinnElija joins (~finn_elij@user/finn-elija/x-0085643) |
| 23:52:41 | → | stites joins (~stites@2607:fb91:dc9:6ccd:6a4b:9556:1e53:57eb) |
| 23:52:55 | × | aaronv quits (~aaronv@user/aaronv) (Ping timeout: 248 seconds) |
| 23:53:39 | → | Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915) |
| 23:54:00 | × | stites quits (~stites@2607:fb91:dc9:6ccd:6a4b:9556:1e53:57eb) (Read error: Connection reset by peer) |
| 23:54:32 | → | stites joins (~stites@130.44.147.204) |
| 23:54:52 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 258 seconds) |
| 23:54:59 | Lord_of_Life_ | is now known as Lord_of_Life |
All times are in UTC on 2023-09-08.