Home liberachat/#haskell: Logs Calendar

Logs on 2021-09-29 (liberachat/#haskell)

00:00:04 × jlamothe quits (~jlamothe@104.158.48.100) (Ping timeout: 252 seconds)
00:00:33 <monochrom> While everyone takes side privately, no one would want to take side in a leader role to call any of the above "official".
00:01:02 <monochrom> Well, either that, or all of the above are official. Same difference.
00:01:02 <sclv> the HF has been trying to shephard some stuff through, but the individual webpages are controlled by various teams
00:01:17 <sclv> haskell.org controls the downloads page, and there are prs in flight under discussion for improving it
00:01:36 <sclv> the ghc downloads page just points to binaries, because its intended as an official source for the binaries and nothing else
00:02:01 <sclv> arguably it could say "hey, if you want an installer for your platform and not just the binaries, check here: " but nobody's made a pr to do that
00:02:04 <monochrom> And I still get my rustc from "apt-get install", not from rustup, BTW.
00:02:18 <sclv> the cabal website would welcome a pr to change the ghcup pointer to a better destination. *shrug*
00:02:40 <monochrom> And I was an early adopter of ghcup, long before it was even mentioned on haskell.org
00:02:59 <monochrom> When it was still a shell script, I was there.
00:03:09 <koala_man> if I do `ghci src/foo/myfile.hs` then I can interactively run any function defined in it. If I do `cabal repl` or `cabal repl src/foo/myfile.hs` with or without `:m +foo.myfile` then I can only run exported ones. Is there a way to run unexported functions for debugging purposes via the cabal repl?
00:03:13 <monochrom> Screw "official".
00:03:33 <monochrom> Where is the "official website" of C anyway?
00:04:10 <monochrom> Did that stop anyone from praising C as if it were the most official language? The standard against all other languages are supposed to look up to?
00:04:23 <sclv> koala_man: you should use `:load` to load the file explicitly
00:04:29 <monochrom> Where can I download my cup?
00:04:52 <koala_man> sclv: perfect, thanks
00:05:11 <free_functor> I think for ghcup to recieve the legitimacy of official endorsement, and lower barriers to new adopters, ghcorg should certainly consider officially promoting ghcup on front page. Imo that alone would be a huge - and A/B testable - imrprovement to daily haskell deploys
00:06:01 <monochrom> koala_man: :add is a version of :load that doesn't unload existing stuff, btw, in case you need to load multiple modules after the fact.
00:06:13 <free_functor> Then with that primary call to action in place, the confusing download page, and somewhat inconsistent install documentation can no longer bite a newb
00:06:14 <sclv> new adopters don't go to the ghc homepage, they got to the haskell homepage, which points them to downloads, which points them to ghcup
00:07:57 tabaqui joins (~root@46.39.45.162)
00:08:12 <tabaqui> Hey all!
00:08:17 <tabaqui> It was a long time
00:08:41 <monochrom> But everything seems like just yesterday to me. :)
00:08:52 monochrom is old and wise.
00:09:06 <free_functor> sclv, I propose that that ghcup is the fifth item on the download page which perplexes new users - me included. New users are given the option to manuall install cabal + ghc before they are given the option to install stack, before they are given the option to install ghcup - then to install ghcup they must click a link, rather than just copying text
00:09:53 <sclv> "8:01 PM <sclv> haskell.org controls the downloads page, and there are prs in flight under discussion for improving it"
00:10:03 <free_functor> sclv, I have the feeling that the downloads page needs to link to all those things for maintenance reasons - but if the front page itself gives the user the option to copy the ghcup install string, 90% of users will skip the downloads page
00:10:19 <sclv> ok, make a pr to the front page, not a bad idea!
00:11:11 × myShoggoth quits (~myShoggot@97-120-70-214.ptld.qwest.net) (Ping timeout: 246 seconds)
00:11:51 <monochrom> You realize that ghcup on Windows is only a recent thing?
00:12:22 <monochrom> This is why it was problematic to recommend ghcup at a high priority unconditionally.
00:12:37 <free_functor> because of the windows story alone?
00:12:43 <koala_man> while I'm asking about cabal, is there an equivalent to `runghc` that lets me run a program in interpreted mode to skip the compilation?
00:12:59 <monochrom> Have you been in a tech support role to field questions from Windows users "hi ghcup doesn't work for me?"
00:13:04 <sclv> i mean.. that's just "runghc"?
00:13:14 <tabaqui> I faced a problem, apparantly requires GC hacking, but I'm not good with it
00:13:37 <free_functor> monochrom, yes, with the added bonus that I was the clueless window user, I think.. and I don't think it worked at the time
00:13:48 <free_functor> I think at the time not even the choco scripts were reliable
00:13:53 <tabaqui> I have a code with high loads on STM.TChan, which causes space leak even when chans are empty
00:14:04 <sclv> there's also v2-run and script support https://cabal.readthedocs.io/en/latest/cabal-commands.html#cabal-v2-run
00:14:06 <tabaqui> basically, it is like this https://gist.github.com/boris-stepanov/481821f9fdf93cc3076157a1e8b912a9
00:14:08 <koala_man> sclv: but runghc doesn't understand cabal, right? so it doesn't generate build files or import packages from the current dir
00:14:22 <sclv> koala_man: see my above
00:14:22 <tabaqui> 600M leak, be carefull
00:14:34 <tabaqui> can anyone help me to tune RTS here?
00:14:41 × pierrot quits (~pi@user/pierrot) (Ping timeout: 246 seconds)
00:14:43 <koala_man> huh interesting
00:14:44 pierrot_ joins (~pi@user/pierrot)
00:16:28 <sclv> i'm not sure what the leak is you're describing. you're writing a ton of stuff to a tchan, and then reading it
00:16:33 <sclv> so thats going to... consume memory?
00:16:45 <tabaqui> yeah, but memory is still allocated after reading
00:17:09 <monochrom> > 600*1000*1000 / 10000000
00:17:10 <lambdabot> 60.0
00:17:20 <monochrom> > 600*1000*1000 / 10000000 / 8
00:17:22 <lambdabot> 7.5
00:17:32 <monochrom> Sounds about right.
00:17:55 <monochrom> Actually this is even better:
00:17:57 × Null_A quits (~null_a@2601:645:8700:2290:91f2:4a69:be9c:a77e) (Remote host closed the connection)
00:18:03 <monochrom> > 600*1000*1000 / 2 / 10000000 / 8
00:18:05 <lambdabot> 3.75
00:18:13 <free_functor> monochrom, the idea of having a "Install Me!" call to action on the front page is still workable, given 1) People are willing to tolerate that it will reduce traffic to the download page 2) in particular, they accept that it will reduce the number of stack downloads 3) it is permissible to show windows users the choco version of the install script, rather than GHCUP
00:18:19 <monochrom> The /2 is because "copying GC" also means double-buffering.
00:18:33 Null_A joins (~null_a@2601:645:8700:2290:91f2:4a69:be9c:a77e)
00:18:39 <sclv> we should be recommending ghcup for windows now. its sufficiently tested. that's one of the prs in flight for the downloads page
00:18:49 <free_functor> monochrom, then in that way, we give users a 2 click copy-paste installation experience like other lang pages, even if they're windows users
00:19:15 <tabaqui> I've just started reading SM and company paper about haskell GC, hope to understand something
00:19:22 <monochrom> If you look into the implementation of TChan, you may be able to see that each node can take up say 4 machine words.
00:19:53 <tabaqui> as far as I understand, TChan is basically a linked list of TVars
00:20:13 <monochrom> Sure.
00:20:17 <tabaqui> and when the end is very far from the beginning, gc can't free the head
00:20:28 <monochrom> So each list node is already 3 words.
00:20:36 <monochrom> Each TVar is 1 or 2 words.
00:20:55 <monochrom> That's already 4 to 5.
00:21:11 <free_functor> sclv, does GHCUP for windows use WSL II?
00:21:15 <koala_man> sclv: it's saying "cabal: The run command can only run an executable as a whole, not files or modules within them, but the target 'test/shellcheck.hs' refers to the file test/shellcheck.hsin the test suite test-shellcheck.". The file is an executable (i.e. has a main method). Is it saying it can't span multiple files?
00:21:31 <sclv> nope, no wsl. the standard windows haskell toolchain uses msys
00:21:54 <free_functor> sclv, I was noticing that is what the choco package uses
00:22:22 <tabaqui> so... Can I force GC to collect the fully read tchan?
00:22:30 <sclv> koala_man: yes, the run runs a component, or runs a script. it doesn't run a single file. you can use cabal to create a ghc environment file, and when one of those is around, then the correct package imports will be in scope
00:22:42 <sclv> ?hoogle performGC
00:22:42 <lambdabot> System.Mem performGC :: IO ()
00:22:42 <lambdabot> BasePrelude performGC :: IO ()
00:22:42 <lambdabot> Pipes.Concurrent performGC :: IO ()
00:23:07 <free_functor> lol, was there ever a version of ghcup that installed on windows via a chocolately wrapper? That feels devious but also kind of cursed!
00:23:30 <awpr> are you sure the TChan is actually retaining anything? could it just be that the runtime is holding onto the memory in anticipation of allocating it later?
00:23:33 <monochrom> I think if you have like "threadDelay (2 * 10^6)", that will already trigger GC?
00:23:39 <sclv> note that ghc does _not_ release memory it allocates, iirc. so performing gc might reduce the active footprint, but you won't necessary see the effect directly in a memory monitor
00:23:54 <sclv> also, no, ghcup never did windows any other way than this
00:24:01 <tabaqui> nope, didn't help
00:24:24 <tabaqui> right, I hope it just collects the first node of the tchan
00:24:50 <sclv> in any case, looking at "memory usage" won't tell you what sort of leaks do or don't occur in terms of things not being collected when you expect. you need to profile with heap profiling for that
00:25:22 <free_functor> sclv, when a PR goes out to the haskell.org pront page, do they have the metrics to tell if there has been an improvement?
00:25:46 × pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.3)
00:25:54 <tabaqui> awpr: both tchans are empty. Broadcast is by definition, and read tchan is empty cause I check it later
00:26:06 <sclv> there's google metrics, but its hard to judge what "improvement" means. it'll let one figure out "conversion rates to ghcup clickthrus" i guess..??
00:26:29 <tabaqui> sclv: I did profiling - as I understood, leak is in TVars (which are TChan nodes)
00:27:26 <tabaqui> sclv: btw, you mentioned that ghc does not release memory. So what can be done here?
00:27:42 <sclv> idk.. nothing?
00:27:56 <sclv> i just mean that if ghc system memory usage hits some high water mark you might not see that released
00:28:08 <awpr> I just profiled it. what I'm seeing looks like there is no space leak
00:28:13 <free_functor> sclv, in once scenario, the page would serve the new version to 10% of the users, at random, for a week... if rate of downloads increases significantly among the test group, then the change rolls out...
00:28:25 <free_functor> doing this on top of a hakyll page would be.... hmmm...
00:28:29 <awpr> heap size grows for half a second, then shrinks for 2 seconds, and then it's negligible
00:28:29 <sclv> there's no technology for a/b testing vis a vis how the website is built
00:29:10 <sclv> ok, sounds like no leak then, just a "trick of the light"
00:30:06 <tabaqui> awpr: can you confirm 600M of resident memory after 3 seconds?
00:30:37 lavaman joins (~lavaman@98.38.249.169)
00:31:29 <awpr> yeah. I think that's just the GHC runtime not handing memory back to the OS
00:31:46 <tabaqui> not good
00:31:49 <awpr> why?
00:32:13 <tabaqui> memory is limited, and this program doesn't use it
00:32:31 <sclv> but OSes are designed to let you overallocate memory with no problem
00:32:37 <sclv> as long as you don't use it
00:32:39 <awpr> if the program exits soon, it has no effect. if it doesn't, it'll probably allocate again soon, and returning memory would make those allocations expensive
00:32:40 <sclv> that's why ghc made this choice
00:32:41 <tabaqui> it's virtual memory
00:33:01 <sclv> right. if you don't use it, it doesn't prevent someone else from using it too
00:33:01 <tabaqui> I'm ok that ghc sometimes allocate 1TB of virtual memory
00:33:14 <tabaqui> but resident is another case
00:33:22 <free_functor> sclv, I suppose that before making any PRs for the front page, it would be helpful to give the site maintainers a believable way to run an AB experiment on a statick hackyll page
00:33:30 <monochrom> tabaqui: I decided to try this: rename your main to main2, define my own "main = main2 >> main2". And of course change "100" to "10" so I don't wait that long.
00:34:02 <monochrom> It does not occupy 1200MB. It still only occupies 600M, ever. I rest my case.
00:34:20 <monochrom> And I have also tried variations in which I reuse r and w, no creating new channels.
00:35:24 <tabaqui> 740 in my case, but I catch your point
00:35:39 <sclv> tabaqui: with a sufficiently recent ghc you have some tuning options: https://well-typed.com/blog/2021/03/memory-return/
00:36:33 <monochrom> Oh, 740M when without -threaded. I had -threaded.
00:37:05 <awpr> threads occupy negative memory, I'd never have guessed
00:37:58 <monochrom> Oh the flip side, I have seen -threaded causing a bit of slowness for unconcurrent code.
00:38:45 <monochrom> But lately I have been brainwashed to always say "-O2 -threaded" because that's what open.kattis.com uses. :)
00:38:52 <tabaqui> https://gitlab.haskell.org/ghc/ghc/-/issues/14702
00:38:55 <tabaqui> Found this issue
00:39:13 <tabaqui> nvm, it doesn't explain
00:39:25 <tabaqui> ~0 * 4 < 600Mb
00:39:47 <monochrom> And BTW the memoization mistake puzzle I posted earlier, the real problem I made my mistake in is https://open.kattis.com/problems/fixingbugs
00:41:05 <tabaqui> https://gitlab.haskell.org/ghc/ghc/-/merge_requests/5036
00:41:19 <monochrom> :)
00:42:42 <tabaqui> "+RTS -Fd0" shrink it to 100M
00:43:28 <tabaqui> uh, any Fd does the same :)
00:46:56 <monochrom> I respect being concerned about a program that holds on to space that it has once written to and no longer needs.
00:47:16 <tabaqui> docs are saying that Fd is defaulted to 4, but setting -Fd4 manually makes a lot of help still
00:47:39 <monochrom> "the OS doesn't allocate the pages anyway" holds only when you have never written to it.
00:48:07 <monochrom> But you have. Now the OS thinks it has important data. It goes to swap, at best.
00:48:49 <monochrom> Swap is both finite and sucky.
00:49:16 <monochrom> If every program decides to cause 600M on swap, you will still run into OOM pretty quickly.
00:49:20 × waleee quits (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 246 seconds)
00:50:06 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 245 seconds)
00:50:47 <Cajun> so a friend of mine is trying to install ghc through ghcup and so far all has worked but when installing ghc, it always failed with `BuildFailed failed in dir [dir]: Process "make" with arguments ["install"] failed with exit code 2`
00:51:35 <Axman6> which os?
00:51:42 <Cajun> debian on WSL2
00:51:50 <Cajun> same thing i run so idk why theres an issue with it
00:52:11 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
00:52:25 waleee joins (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
00:52:37 <Axman6> is make installed?
00:52:43 <Cajun> yup
00:52:58 <tabaqui> It's not "-Fd", but just "-F". I'll stay on -F1, it seems pretty well
00:53:00 <Axman6> does the error mention any logs? There should be some somewhere
00:53:13 <tabaqui> and probably I should wait for 9.2 on stackage
00:54:38 × alzgh quits (~alzgh@user/alzgh) (Remote host closed the connection)
00:55:05 <Cajun> Axman6: it does. it complains `ghc-pkg: couldnt open database [db] for modification: [omitted]: hLock: invalid argument (invalid argument) ghc.mk:979: recipe for target 'install_packages' failed`
00:55:07 <tabaqui> -M also helps
00:55:15 <tabaqui> allright, I need to sleep
00:55:23 <tabaqui> thanks guys, you've helped a lot!
00:55:48 <Cajun> oh and after that Make complains that the `install` recipe failed
00:56:20 <Axman6> hmm, something up with package db by the looks of it - no idea how to fix that, it's been a very long time since I've had issues like that!
00:59:03 × tabaqui quits (~root@46.39.45.162) (Quit: WeeChat 3.2)
01:02:08 × Psybur quits (~Psybur@mobile-166-170-32-197.mycingular.net) (Remote host closed the connection)
01:07:17 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
01:07:24 a6a45081-2b83 joins (~aditya@2601:249:4300:1296:88ec:cc73:84d4:1507)
01:08:03 <a6a45081-2b83> Hi, I am looking at `memoized_fib = (map fib [0 ..] !!)` So if I call `memoized_fib 10^25` will it allocate/create 10^25 thunks?
01:08:27 <a6a45081-2b83> or some other function than fib which does not require computation of all the 10^25-1 thunks?
01:09:16 geekosaur joins (~geekosaur@xmonad/geekosaur)
01:10:47 <monochrom> Yes. Parse error.
01:13:26 × Robin_Jadoul quits (~Robin_Jad@152.67.64.160) (Ping timeout: 245 seconds)
01:13:40 <seydar> monochrom: yep, apparently network doesn't come with GHC anymore. do you know why that change was made?
01:14:18 <monochrom> I don't know.
01:15:13 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
01:17:07 geekosaur joins (~geekosaur@xmonad/geekosaur)
01:17:07 × MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer)
01:17:55 <Axman6> a6a45081-2b83: I don't think that will effectively memoise anything
01:19:13 myShoggoth joins (~myShoggot@97-120-70-214.ptld.qwest.net)
01:20:19 <Axman6> if you had: fibs = map fib [0..]; memoise_fibs = (fibs !!) it would. and you would actually take advantage of that memoisation if you defined fib n = memoise_fibs (n-1) + memoise_fibs (n-2) (with appropriate handling of fib 0 and fib 1)
01:20:33 <geekosaur> seydar, ghc ships with the minimum needed to build ghc, not with a "batteries included" ecosystem
01:20:50 × xff0x quits (~xff0x@2001:1a81:534d:3900:7ca7:1f1d:7921:2152) (Ping timeout: 246 seconds)
01:21:26 <geekosaur> back in the day it included more of an ecosystem, but that became unsupportable because it meant e.g. network could only be safely upgraded with a ghc upgrade
01:22:14 <a6a45081-2b83> Axman6: that sounds bad if I have sparse calls, say only 1000 values in range of 0 to 10^25. Might be better to use a hashmap or something
01:22:34 MQ-17J joins (~MQ-17J@8.6.144.233)
01:22:44 xff0x joins (~xff0x@2001:1a81:5386:1100:54f2:236a:7bb5:55bf)
01:22:52 <a6a45081-2b83> Also, I looked at fix and memoFix from haskellWiki but still confused if that can help if I have a function like `go :: Int128 -> [Int128] -> Int` ...
01:22:53 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 264 seconds)
01:23:23 <Axman6> yeah it's a memory-time trade off, if memory is more valuable (and at 10^25 it probably is) then using the "linear" algorithm to compute fibs is probably worthwhile and using a map or something
01:31:12 yauhsien joins (~yauhsien@118-167-48-21.dynamic-ip.hinet.net)
01:33:51 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 245 seconds)
01:36:16 <seydar> geekosaur: oh interesting, that makes perfect sense
01:40:26 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 246 seconds)
01:41:03 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
01:41:03 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
01:41:03 wroathe joins (~wroathe@user/wroathe)
01:42:11 × Null_A quits (~null_a@2601:645:8700:2290:91f2:4a69:be9c:a77e) (Ping timeout: 246 seconds)
01:44:16 <seydar> okay, so now i'm unable to see `iNADDR_ANY` or `send` from the Network.Socket package. It can see all the other parts (I'm implementing https://wiki.haskell.org/Implement_a_chat_server#Simple_socket_server)
01:45:55 <Axman6> it's worth noting that that page was last edited in 2019 and it's likely there's a fair amount that's out of date - you might try loading Network.Socket into GHCi and :browse'ing it to see what is actually there and if it still amtches
01:46:02 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 246 seconds)
01:46:08 <Axman6> matches*
01:47:05 goepsilongo joins (~goepsilon@2603-7000-ab00-62ed-11dd-67ac-2a26-67df.res6.spectrum.com)
01:47:05 <geekosaur> network has been pretty much rewritten since then, I think.
01:48:06 <geekosaur> in fact I think you want the network-bsd package
01:48:26 <glguy> seydar, iNADDR_ANY is old tech. you'd only need network-bsd for some really specific stuff these days
01:48:52 <Axman6> And if you're feeling adventurous and find how to fix things, maybe you could update the wiki
01:50:10 <glguy> https://hackage.haskell.org/package/network-3.1.2.2/docs/Network-Socket.html has an example at the beginning about how you make make a listening server
01:50:31 × waleee quits (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 245 seconds)
01:50:34 <glguy> sending of bytestrings is in Network.Socket.ByteString over here: https://hackage.haskell.org/package/network-3.1.2.2/docs/Network-Socket-ByteString.html#v:send
01:51:04 × yinghua quits (~yinghua@2800:2121:1400:1db:c8ff:6a08:d6d8:71db) (Quit: Leaving)
01:54:37 fef joins (~thedawn@user/thedawn)
01:54:39 × yauhsien quits (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Remote host closed the connection)
01:55:34 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
01:55:34 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
01:55:34 wroathe joins (~wroathe@user/wroathe)
01:56:03 yauhsien joins (~yauhsien@118-167-48-21.dynamic-ip.hinet.net)
01:59:32 × alx741 quits (~alx741@186.178.109.237) (Ping timeout: 252 seconds)
01:59:43 × jespada quits (~jespada@2803:9800:9842:7a62:8558:368:788c:6dc6) (Quit: My MacBook has gone to sleep. ZZZzzz…)
02:00:53 × yauhsien quits (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Ping timeout: 265 seconds)
02:04:41 Carro joins (~Carro@2806:261:40a:1389:407c:dfb9:3c44:5688)
02:05:28 × td_ quits (~td@muedsl-82-207-238-070.citykom.de) (Ping timeout: 252 seconds)
02:07:02 <seydar> glguy: thanks! and I see now at the top of the Network.Socket docs, it says to use ByteString for sending
02:07:29 td_ joins (~td@muedsl-82-207-238-213.citykom.de)
02:12:25 alx741 joins (~alx741@186.178.109.205)
02:12:36 × MQ-17J quits (~MQ-17J@8.6.144.233) (Ping timeout: 245 seconds)
02:23:32 × alx741 quits (~alx741@186.178.109.205) (Quit: alx741)
02:24:00 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Quit: leaving)
02:28:51 × goepsilongo quits (~goepsilon@2603-7000-ab00-62ed-11dd-67ac-2a26-67df.res6.spectrum.com) (Ping timeout: 245 seconds)
02:28:51 goepsilongo_ joins (~goepsilon@2603-7000-ab00-62ed-c4b5-f493-7437-ddea.res6.spectrum.com)
02:30:28 × DigitalKiwi quits (~kiwi@192.241.157.119) (Quit: quite.)
02:31:15 DigitalKiwi joins (~kiwi@192.241.157.119)
02:40:00 × doyougnu quits (~user@c-73-25-202-122.hsd1.or.comcast.net) (Quit: ERC (IRC client for Emacs 28.0.50))
02:49:01 × Carro quits (~Carro@2806:261:40a:1389:407c:dfb9:3c44:5688) (Quit: Client closed)
02:51:54 × segfaultfizzbuzz quits (~segfaultf@135-180-0-138.static.sonic.net) (Ping timeout: 268 seconds)
02:56:46 × pooryorick quits (~pooryoric@87-119-174-173.tll.elisa.ee) (Ping timeout: 260 seconds)
02:59:15 yauhsien joins (~yauhsien@118-167-48-21.dynamic-ip.hinet.net)
03:01:59 pooryorick joins (~pooryoric@87-119-174-173.tll.elisa.ee)
03:02:36 Carro joins (~Carro@2806:261:40a:1389:407c:dfb9:3c44:5688)
03:03:41 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 264 seconds)
03:04:17 × yauhsien quits (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Ping timeout: 264 seconds)
03:05:29 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
03:16:45 × zebrag quits (~chris@user/zebrag) (Remote host closed the connection)
03:18:11 × machinedgod quits (~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 252 seconds)
03:29:36 justsomeguy joins (~justsomeg@user/justsomeguy)
03:35:31 × myShoggoth quits (~myShoggot@97-120-70-214.ptld.qwest.net) (Ping timeout: 245 seconds)
03:35:47 × agoraphobic_ quits (~agoraphob@ip11-173.bon.riksnet.se) (Ping timeout: 252 seconds)
03:36:18 myShoggoth joins (~myShoggot@97-120-70-214.ptld.qwest.net)
03:37:18 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
03:38:06 tommd joins (~tommd@75-164-130-101.ptld.qwest.net)
03:42:38 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer)
03:42:57 × justsomeguy quits (~justsomeg@user/justsomeguy) (Quit: WeeChat 3.2)
03:46:57 fvr joins (uid503686@id-503686.uxbridge.irccloud.com)
03:47:40 lavaman joins (~lavaman@98.38.249.169)
03:51:01 agoraphobic joins (~agoraphob@ip11-173.bon.riksnet.se)
03:52:32 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 265 seconds)
04:05:52 pzuidhoek joins (~textual@82-95-239-200.ip.xs4all.nl)
04:10:37 × pzuidhoek quits (~textual@82-95-239-200.ip.xs4all.nl) (Quit: Textual IRC Client: www.textualapp.com)
04:11:52 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
04:14:50 vysn joins (~vysn@user/vysn)
04:15:24 Guest20 joins (~textual@82-95-239-200.ip.xs4all.nl)
04:19:00 × Guest20 quits (~textual@82-95-239-200.ip.xs4all.nl) (Client Quit)
04:19:36 Guest20 joins (~textual@82-95-239-200.ip.xs4all.nl)
04:21:16 Gurkenglas joins (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de)
04:23:39 × zaquest quits (~notzaques@5.128.210.178) (Remote host closed the connection)
04:24:43 zaquest joins (~notzaques@5.128.210.178)
04:26:41 × tommd quits (~tommd@75-164-130-101.ptld.qwest.net) (Ping timeout: 246 seconds)
04:31:39 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
04:35:57 × slowButPresent quits (~slowButPr@user/slowbutpresent) (Quit: leaving)
04:38:33 × Carro quits (~Carro@2806:261:40a:1389:407c:dfb9:3c44:5688) (Quit: Client closed)
04:42:36 oxide joins (~lambda@user/oxide)
04:44:40 × Guest20 quits (~textual@82-95-239-200.ip.xs4all.nl) (Quit: Textual IRC Client: www.textualapp.com)
04:56:18 yauhsien joins (~yauhsien@118-167-48-21.dynamic-ip.hinet.net)
04:58:01 × myShoggoth quits (~myShoggot@97-120-70-214.ptld.qwest.net) (Ping timeout: 245 seconds)
04:59:59 myShoggoth joins (~myShoggot@97-120-70-214.ptld.qwest.net)
05:00:24 × fef quits (~thedawn@user/thedawn) (Quit: Leaving)
05:00:31 × yauhsien quits (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Ping timeout: 245 seconds)
05:00:33 iridium__ joins (~iridium@223.235.192.51)
05:04:50 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 246 seconds)
05:16:38 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 265 seconds)
05:17:50 MidAutumnMoon joins (~MidAutumn@user/midautumnmoon)
05:22:58 Andrew_ joins (~andrew@user/andrewyu)
05:23:35 × AndrewYu quits (~andrew@user/andrewyu) (Ping timeout: 252 seconds)
05:27:07 mei joins (~mei@user/mei)
05:38:05 sndr joins (~sander@user/sander)
05:38:26 × sander quits (~sander@user/sander) (Ping timeout: 252 seconds)
05:38:48 sndr is now known as sander
05:46:07 takuan joins (~takuan@178-116-218-225.access.telenet.be)
05:56:40 × fvr quits (uid503686@id-503686.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
05:59:30 × Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Ping timeout: 265 seconds)
06:00:09 × vicfred quits (~vicfred@user/vicfred) (Quit: Leaving)
06:00:13 Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
06:01:26 yauhsien joins (~yauhsien@118-167-48-21.dynamic-ip.hinet.net)
06:05:59 ub joins (~Thunderbi@178.115.72.201.wireless.dyn.drei.com)
06:07:50 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
06:10:19 × a6a45081-2b83 quits (~aditya@2601:249:4300:1296:88ec:cc73:84d4:1507) (Remote host closed the connection)
06:11:22 michalz joins (~michalz@185.246.204.33)
06:13:20 × img quits (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in)
06:19:27 emf joins (~emf@2620:10d:c090:400::5:8ff1)
06:19:41 img joins (~img@user/img)
06:26:14 × emf quits (~emf@2620:10d:c090:400::5:8ff1) (Quit: emf)
06:26:32 emf joins (~emf@2620:10d:c090:400::5:8ff1)
06:29:20 qbt joins (~edun@user/edun)
06:32:47 lavaman joins (~lavaman@98.38.249.169)
06:37:14 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 246 seconds)
06:37:22 <Axman6> Could you use pattern synonyms to make a pattern like foo (PrefixedBy "Hello" rest), that would be the same as 'H':'e':'l':'l':'o':rest?
06:40:40 <c_wraith> Should be able to.
06:40:47 <c_wraith> :t stripPrefix
06:40:48 <lambdabot> Eq a => [a] -> [a] -> Maybe [a]
06:41:14 <c_wraith> Should just be a view pattern involving that
06:41:47 <c_wraith> and if you want it to be bidirectional, it's ++ in the other direction
06:41:58 JeSCaLis23-F joins (~rizon@188.119.22.153)
06:42:08 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 250 seconds)
06:43:05 × yauhsien quits (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Remote host closed the connection)
06:43:23 × tzh quits (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz)
06:46:04 × JeSCaLis23-F quits (~rizon@188.119.22.153) (Client Quit)
06:47:51 × phma quits (~phma@host-67-44-208-197.hnremote.net) (Read error: Connection reset by peer)
06:48:34 phma joins (~phma@host-67-44-208-52.hnremote.net)
06:50:02 <iridium__> is there a way to change the "override" the show method for lists?
06:50:10 <iridium__> s/change the//
06:50:35 <c_wraith> Nope. Your options are using a different type or using a different function
06:52:17 <iridium__> c_wraith: ok. thanks.
06:57:07 cfricke joins (~cfricke@user/cfricke)
07:01:36 max22- joins (~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr)
07:05:56 × emf quits (~emf@2620:10d:c090:400::5:8ff1) (Ping timeout: 245 seconds)
07:08:48 <Axman6> @hoogle concapMapM
07:08:48 <lambdabot> No results found
07:09:03 gehmehgeh joins (~user@user/gehmehgeh)
07:09:19 <c_wraith> Axman6: guess not. Looks like you can't use pattern arguments as inputs in pattern matches - they're outputs only
07:09:27 <Axman6> c_wraith: hmm, interesting. Mostly just a thought, but one day I reckon I might have a use for that
07:09:38 <Axman6> hmm, ok
07:09:47 <c_wraith> Axman6: I *almost* got there with DataKinds
07:10:02 chele joins (~chele@user/chele)
07:10:02 <c_wraith> But it turns out to be... uh..
07:10:20 <c_wraith> error: Type applications in patterns are not yet supported
07:10:40 <c_wraith> And without that... Can't quite work.
07:11:43 <c_wraith> Hmm. Maybe a different strategy can work.
07:16:25 notzmv joins (~zmv@user/notzmv)
07:17:30 <c_wraith> Hmm, the other thing I wanted to try also doesn't work. It feels like something should, I just haven't put it together.
07:17:34 × nehsou^ quits (~nehsou@68.101.50.106) (Remote host closed the connection)
07:20:27 <Axman6> Can pattern synonyms be recursive? =)
07:21:46 × xff0x quits (~xff0x@2001:1a81:5386:1100:54f2:236a:7bb5:55bf) (Ping timeout: 245 seconds)
07:22:54 xff0x joins (~xff0x@2001:1a81:5386:1100:29ed:389e:8e87:468f)
07:23:07 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
07:24:52 lortabac joins (~lortabac@2a01:e0a:541:b8f0:6beb:5bcb:e1d4:764)
07:26:08 rtjure joins (~rtjure@bras-79-132-17-74.comnet.bg)
07:26:35 × ub quits (~Thunderbi@178.115.72.201.wireless.dyn.drei.com) (Ping timeout: 246 seconds)
07:28:29 emf joins (~emf@2620:10d:c090:400::5:8ff1)
07:28:46 nrl^ joins (~nrl@68.101.50.106)
07:35:58 yauhsien joins (~yauhsien@118-167-48-21.dynamic-ip.hinet.net)
07:40:53 × yauhsien quits (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Ping timeout: 264 seconds)
07:42:09 <c_wraith> Axman6: here. You can think of this as either performance art or a joke: https://paste.tomsmeding.com/KmOT6PZy
07:45:31 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
07:56:52 acidjnk_new3 joins (~acidjnk@p200300d0c703cb53f8ed89eaeab7169f.dip0.t-ipconnect.de)
07:56:54 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
07:59:02 × jonathanx quits (~jonathan@dyn-8-sc.cdg.chalmers.se) (Ping timeout: 265 seconds)
07:59:36 jonathanx joins (~jonathan@dyn-8-sc.cdg.chalmers.se)
07:59:38 × emf quits (~emf@2620:10d:c090:400::5:8ff1) (Ping timeout: 260 seconds)
08:00:05 <Axman6> =| amazing, but what did it cost?
08:00:11 yauhsien joins (~yauhsien@118-167-48-21.dynamic-ip.hinet.net)
08:00:13 iridium__ parts (~iridium@223.235.192.51) ()
08:00:46 dyeplexer joins (~dyeplexer@user/dyeplexer)
08:02:23 fvr joins (uid503686@id-503686.uxbridge.irccloud.com)
08:03:10 × gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving)
08:05:20 × yauhsien quits (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Ping timeout: 250 seconds)
08:05:50 acidjnk_new joins (~acidjnk@p200300d0c703cb53c55fe893eb04092a.dip0.t-ipconnect.de)
08:05:55 hendursa1 joins (~weechat@user/hendursaga)
08:08:17 <c_wraith> only sanity
08:08:54 × hendursaga quits (~weechat@user/hendursaga) (Ping timeout: 276 seconds)
08:09:14 × acidjnk_new3 quits (~acidjnk@p200300d0c703cb53f8ed89eaeab7169f.dip0.t-ipconnect.de) (Ping timeout: 250 seconds)
08:12:16 × NinjaTrappeur quits (~ninja@user/ninjatrappeur) (Quit: WeeChat 3.1)
08:13:07 NinjaTrappeur joins (~ninja@user/ninjatrappeur)
08:16:28 gehmehgeh joins (~user@user/gehmehgeh)
08:16:36 Heisen joins (~Heisen@77.240.67.20)
08:17:10 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
08:17:33 geekosaur joins (~geekosaur@xmonad/geekosaur)
08:18:54 × hnOsmium0001 quits (uid453710@id-453710.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
08:21:42 × econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity)
08:22:17 × siraben quits (~siraben@user/siraben) (Quit: Bridge terminating on SIGTERM)
08:22:17 × MatrixTravelerbo quits (~voyagert2@2001:470:69fc:105::22) (Quit: Bridge terminating on SIGTERM)
08:22:17 × Arathorn quits (~arathorn@2001:470:69fc:105::1f) (Quit: Bridge terminating on SIGTERM)
08:22:17 × kadoban quits (~kadoban@user/kadoban) (Quit: Bridge terminating on SIGTERM)
08:22:17 × peddie quits (~peddie@2001:470:69fc:105::25d) (Quit: Bridge terminating on SIGTERM)
08:22:17 × psydroid quits (~psydroid@user/psydroid) (Quit: Bridge terminating on SIGTERM)
08:22:17 × Las[m] quits (~lasmatrix@2001:470:69fc:105::74e) (Quit: Bridge terminating on SIGTERM)
08:22:18 × SimonWeiss[m] quits (~weiss-dma@2001:470:69fc:105::bebd) (Quit: Bridge terminating on SIGTERM)
08:22:18 × fgaz quits (~fgaz@2001:470:69fc:105::842) (Quit: Bridge terminating on SIGTERM)
08:22:18 × jophish quits (~jophish@2001:470:69fc:105::670) (Quit: Bridge terminating on SIGTERM)
08:22:18 × vaibhavsagar[m] quits (~vaibhavsa@2001:470:69fc:105::ffe) (Quit: Bridge terminating on SIGTERM)
08:22:18 × maralorn quits (~maralorn@2001:470:69fc:105::251) (Quit: Bridge terminating on SIGTERM)
08:22:18 × kar1 quits (~kar1@2001:470:69fc:105::c308) (Quit: Bridge terminating on SIGTERM)
08:22:18 × PotatoHatsue quits (~berberman@2001:470:69fc:105::b488) (Quit: Bridge terminating on SIGTERM)
08:22:18 × marinelli[m] quits (~marinelli@2001:470:69fc:105::2d8) (Quit: Bridge terminating on SIGTERM)
08:22:18 × ericson2314 quits (~ericson23@2001:470:69fc:105::70c) (Quit: Bridge terminating on SIGTERM)
08:22:18 × zfnmxt quits (~zfnmxtzfn@user/zfnmxt) (Quit: Bridge terminating on SIGTERM)
08:22:18 × carmysilna quits (~brightly-@2001:470:69fc:105::2190) (Quit: Bridge terminating on SIGTERM)
08:22:18 × hsiktas[m] quits (~hsiktasma@2001:470:69fc:105::30d4) (Quit: Bridge terminating on SIGTERM)
08:22:18 × maerwald[m] quits (~maerwaldm@2001:470:69fc:105::1ee) (Quit: Bridge terminating on SIGTERM)
08:22:18 × Morrow[m] quits (~morrowmma@2001:470:69fc:105::1d0) (Quit: Bridge terminating on SIGTERM)
08:22:18 × amesgen[m] quits (~amesgenm]@2001:470:69fc:105::82b) (Quit: Bridge terminating on SIGTERM)
08:22:18 × Ollie[m] quits (~ollieocha@2001:470:69fc:105::41a5) (Quit: Bridge terminating on SIGTERM)
08:22:18 × SawyerBergeron[m quits (~sawyerber@2001:470:69fc:105::3036) (Quit: Bridge terminating on SIGTERM)
08:22:18 × moats quits (~oats@user/oats) (Quit: Bridge terminating on SIGTERM)
08:22:18 × aidy quits (~aidy@2001:470:69fc:105::c7b4) (Quit: Bridge terminating on SIGTERM)
08:22:18 × schuelermine[m] quits (~schuelerm@user/schuelermine) (Quit: Bridge terminating on SIGTERM)
08:22:18 × bitonic quits (~bitonic@2001:470:69fc:105::1812) (Quit: Bridge terminating on SIGTERM)
08:22:18 × soft quits (~soft-matr@2001:470:69fc:105::c75) (Quit: Bridge terminating on SIGTERM)
08:22:18 × thomasjm[m] quits (~thomasjmm@2001:470:69fc:105::c6d9) (Quit: Bridge terminating on SIGTERM)
08:22:18 × oak- quits (~oakuniver@2001:470:69fc:105::fcd) (Quit: Bridge terminating on SIGTERM)
08:22:18 × bakinonion[m] quits (~bakinonio@2001:470:69fc:105::ddb3) (Quit: Bridge terminating on SIGTERM)
08:22:18 × erinvanderveen[m quits (~erinvande@2001:470:69fc:105::e8f3) (Quit: Bridge terminating on SIGTERM)
08:22:18 × zwro[m] quits (~zwromatri@2001:470:69fc:105::1d4) (Quit: Bridge terminating on SIGTERM)
08:22:18 × jchia[m] quits (~jchiamatr@2001:470:69fc:105::c50b) (Quit: Bridge terminating on SIGTERM)
08:22:19 × Magnus[m] quits (~magthetch@2001:470:69fc:105::d1a7) (Quit: Bridge terminating on SIGTERM)
08:22:19 × wysteriary[m] quits (~wysteriar@2001:470:69fc:105::a42e) (Quit: Bridge terminating on SIGTERM)
08:22:19 × Topik[m] quits (~topikmatr@2001:470:69fc:105::a082) (Quit: Bridge terminating on SIGTERM)
08:22:19 × cloudy quits (~cloudy@2001:470:69fc:105::50c0) (Quit: Bridge terminating on SIGTERM)
08:22:19 × srid[m] quits (~sridmatri@2001:470:69fc:105::1c2) (Quit: Bridge terminating on SIGTERM)
08:22:19 × dualinverter[m] quits (~dualinver@2001:470:69fc:105::16a7) (Quit: Bridge terminating on SIGTERM)
08:22:19 × ManofLetters[m] quits (~manoflett@2001:470:69fc:105::3be) (Quit: Bridge terminating on SIGTERM)
08:22:19 × hjulle[m] quits (~hjullemat@2001:470:69fc:105::1dd) (Quit: Bridge terminating on SIGTERM)
08:22:19 × unclechu quits (~unclechu@2001:470:69fc:105::354) (Quit: Bridge terminating on SIGTERM)
08:22:20 × reza[m] quits (~rezaphone@2001:470:69fc:105::3eda) (Quit: Bridge terminating on SIGTERM)
08:22:21 × fcortesi quits (~fcortesi@2001:470:69fc:105::f3a9) (Quit: Bridge terminating on SIGTERM)
08:22:24 × shiraeeshi[m] quits (~shiraeesh@2001:470:69fc:105::1:77) (Quit: Bridge terminating on SIGTERM)
08:22:24 × commuswift[m] quits (~commuswif@2001:470:69fc:105::e862) (Quit: Bridge terminating on SIGTERM)
08:22:26 × jesser[m] quits (~jessermat@2001:470:69fc:105::d5ae) (Quit: Bridge terminating on SIGTERM)
08:22:26 × stoicswe[m] quits (~deadlette@2001:470:69fc:105::d277) (Quit: Bridge terminating on SIGTERM)
08:22:27 × smichel17[m] quits (~smichel17@2001:470:69fc:105::2d32) (Quit: Bridge terminating on SIGTERM)
08:22:28 × craige[m] quits (~craigemcw@2001:470:69fc:105::35f1) (Quit: Bridge terminating on SIGTERM)
08:22:28 × ixlun quits (~ixlun@2001:470:69fc:105::41b3) (Quit: Bridge terminating on SIGTERM)
08:22:28 × alexfmpe[m] quits (~alexfmpem@2001:470:69fc:105::38ba) (Quit: Bridge terminating on SIGTERM)
08:22:28 × afotgkmnzj7asv3r quits (~afotgkmnz@2001:470:69fc:105::c24b) (Quit: Bridge terminating on SIGTERM)
08:22:28 × jakefromstatefar quits (~jakefroms@2001:470:69fc:105::15ef) (Quit: Bridge terminating on SIGTERM)
08:22:28 × unrooted quits (~unrooted@2001:470:69fc:105::a4a) (Quit: Bridge terminating on SIGTERM)
08:22:28 × asdofindia-m quits (~akshaymat@2001:470:69fc:105::831) (Quit: Bridge terminating on SIGTERM)
08:22:28 × dexmad[m] quits (~dexmadmat@2001:470:69fc:105::e056) (Quit: Bridge terminating on SIGTERM)
08:22:28 × ongy[m] quits (~ongymatri@2001:470:69fc:105::5018) (Quit: Bridge terminating on SIGTERM)
08:22:28 × fendor[m] quits (~fendormat@2001:470:69fc:105::fcbd) (Quit: Bridge terminating on SIGTERM)
08:22:28 × hsek[m] quits (~hsekmatri@2001:470:69fc:105::d18f) (Quit: Bridge terminating on SIGTERM)
08:22:29 × hughjfchen[m] quits (~hughjfche@2001:470:69fc:105::c29d) (Quit: Bridge terminating on SIGTERM)
08:22:29 × jneira[m] quits (~jneiramat@2001:470:69fc:105::d729) (Quit: Bridge terminating on SIGTERM)
08:22:29 × infinisil quits (~infinisil@2001:470:69fc:105::ff8) (Quit: Bridge terminating on SIGTERM)
08:22:29 × Tisoxin quits (~ikosit@user/ikosit) (Quit: Bridge terminating on SIGTERM)
08:22:29 × cdsmith quits (~cdsmithma@2001:470:69fc:105::284) (Quit: Bridge terminating on SIGTERM)
08:22:29 × ormaaj quits (~ormaaj@user/ormaaj) (Quit: Bridge terminating on SIGTERM)
08:22:29 × rednaZ[m] quits (~r3dnazmat@2001:470:69fc:105::ba70) (Quit: Bridge terminating on SIGTERM)
08:22:30 × ServerStatsDisco quits (~serversta@2001:470:69fc:105::1a) (Quit: Bridge terminating on SIGTERM)
08:22:30 × sm quits (~sm@plaintextaccounting/sm) (Quit: Bridge terminating on SIGTERM)
08:22:30 × Christoph[m] quits (~hpotsirhc@2001:470:69fc:105::2ff8) (Quit: Bridge terminating on SIGTERM)
08:22:30 × lwe[m] quits (~dendrumat@2001:470:69fc:105::2f9b) (Quit: Bridge terminating on SIGTERM)
08:22:30 × Drew[m] quits (~drewefenw@2001:470:69fc:105::c8c4) (Quit: Bridge terminating on SIGTERM)
08:22:30 × IgnatInsarov[m] quits (~kindaroma@2001:470:69fc:105::f5d9) (Quit: Bridge terminating on SIGTERM)
08:22:32 × ru0mad[m] quits (~ru0madmat@2001:470:69fc:105::9b2) (Quit: Bridge terminating on SIGTERM)
08:22:32 × OndejSkup[m] quits (~mimivxmat@2001:470:69fc:105::c300) (Quit: Bridge terminating on SIGTERM)
08:22:32 × bb010g quits (~bb010g@2001:470:69fc:105::9a5) (Quit: Bridge terminating on SIGTERM)
08:22:32 × denbrahe[m] quits (~denbrahem@2001:470:69fc:105::19c0) (Quit: Bridge terminating on SIGTERM)
08:22:32 × Deewiant quits (~deewiant@2001:470:69fc:105::2fd3) (Quit: Bridge terminating on SIGTERM)
08:22:32 × sky_lounge[m] quits (~skylounge@2001:470:69fc:105::efa6) (Quit: Bridge terminating on SIGTERM)
08:22:33 × quantum quits (~quantum@user/quantum/x-8556232) (Quit: Bridge terminating on SIGTERM)
08:22:33 × monadfritz[m] quits (~ahdytmatr@2001:470:69fc:105::e1f1) (Quit: Bridge terminating on SIGTERM)
08:22:33 × fakehacker[m] quits (~fakehacke@2001:470:69fc:105::b5f0) (Quit: Bridge terminating on SIGTERM)
08:22:33 × Orbstheorem quits (~orbstheor@2001:470:69fc:105::a56) (Quit: Bridge terminating on SIGTERM)
08:22:33 × kevin[m]1 quits (~pnotequal@2001:470:69fc:105::a54) (Quit: Bridge terminating on SIGTERM)
08:22:33 × YoungChiefBTW quits (~youngchie@user/youngchiefbtw) (Quit: Bridge terminating on SIGTERM)
08:22:33 × reddishblue[m] quits (~reddishbl@2001:470:69fc:105::21eb) (Quit: Bridge terminating on SIGTERM)
08:22:33 × justosophy[m] quits (~justosoph@2001:470:69fc:105::572f) (Quit: Bridge terminating on SIGTERM)
08:22:33 × sam[m]1 quits (~sammtopoi@2001:470:69fc:105::e887) (Quit: Bridge terminating on SIGTERM)
08:22:33 × the-coot[m] quits (~the-cootm@2001:470:69fc:105::95f) (Quit: Bridge terminating on SIGTERM)
08:22:33 × Deide quits (~deide@user/deide) (Quit: Bridge terminating on SIGTERM)
08:22:33 × rosariopulella[m quits (~rosariopu@2001:470:69fc:105::a57) (Quit: Bridge terminating on SIGTERM)
08:22:41 acidjnk_new3 joins (~acidjnk@pd9e0b933.dip0.t-ipconnect.de)
08:23:28 <Heisen> Hello, I am trying to print out each element in my list with the same principles as I did with my for loop however I don't get it to work, could someone give me a helping hand?:] https://paste.tomsmeding.com/p0LlFz2c
08:24:46 <c_wraith> you're testing to see if the tail of the list is empty
08:25:25 <c_wraith> Though more initially problematic, the type you provided doesn't match the type it has
08:25:42 × acidjnk_new quits (~acidjnk@p200300d0c703cb53c55fe893eb04092a.dip0.t-ipconnect.de) (Ping timeout: 250 seconds)
08:25:44 jakefromstatefar joins (~jakefroms@2001:470:69fc:105::15ef)
08:26:45 <Heisen> oh wow, thank yo
08:26:48 <Heisen> -u
08:26:59 maerwald[m] joins (~maerwaldm@2001:470:69fc:105::1ee)
08:27:11 jchia[m] joins (~jchiamatr@2001:470:69fc:105::c50b)
08:27:11 MatrixTravelerbo joins (~voyagert2@2001:470:69fc:105::22)
08:27:23 dualinverter[m] joins (~dualinver@2001:470:69fc:105::16a7)
08:27:23 fgaz joins (~fgaz@2001:470:69fc:105::842)
08:27:23 peddie joins (~peddie@2001:470:69fc:105::25d)
08:27:23 cdsmith joins (~cdsmithma@2001:470:69fc:105::284)
08:27:23 Morrow[m] joins (~morrowmma@2001:470:69fc:105::1d0)
08:27:35 thomasjm[m] joins (~thomasjmm@2001:470:69fc:105::c6d9)
08:27:35 hsek[m] joins (~hsekmatri@2001:470:69fc:105::d18f)
08:27:35 ru0mad[m] joins (~ru0madmat@2001:470:69fc:105::9b2)
08:27:50 bb010g joins (~bb010g@2001:470:69fc:105::9a5)
08:27:50 vaibhavsagar[m] joins (~vaibhavsa@2001:470:69fc:105::ffe)
08:27:50 Las[m] joins (~lasmatrix@2001:470:69fc:105::74e)
08:27:50 ServerStatsDisco joins (~serversta@2001:470:69fc:105::1a)
08:27:50 amesgen[m] joins (~amesgenm]@2001:470:69fc:105::82b)
08:27:50 the-coot[m] joins (~the-cootm@2001:470:69fc:105::95f)
08:27:50 moats joins (~oats@user/oats)
08:28:02 soft joins (~soft-matr@2001:470:69fc:105::c75)
08:28:02 zfnmxt joins (~zfnmxtzfn@2001:470:69fc:105::2b32)
08:28:16 oak- joins (~oakuniver@2001:470:69fc:105::fcd)
08:28:16 kadoban joins (~kadoban@user/kadoban)
08:28:16 bitonic joins (~bitonic@2001:470:69fc:105::1812)
08:28:16 ericson2314 joins (~ericson23@2001:470:69fc:105::70c)
08:28:17 jophish joins (~jophish@2001:470:69fc:105::670)
08:28:17 Arathorn joins (~arathorn@2001:470:69fc:105::1f)
08:28:17 Ollie[m] joins (~ollieocha@2001:470:69fc:105::41a5)
08:28:17 PotatoHatsue joins (~berberman@2001:470:69fc:105::b488)
08:28:17 ixlun joins (~ixlun@2001:470:69fc:105::41b3)
08:28:17 unclechu joins (~unclechu@2001:470:69fc:105::354)
08:28:31 Deewiant joins (~deewiant@2001:470:69fc:105::2fd3)
08:28:31 unrooted joins (~unrooted@2001:470:69fc:105::a4a)
08:28:31 rednaZ[m] joins (~r3dnazmat@2001:470:69fc:105::ba70)
08:28:31 maralorn joins (~maralorn@2001:470:69fc:105::251)
08:28:32 SimonWeiss[m] joins (~weiss-dma@2001:470:69fc:105::bebd)
08:28:32 denbrahe[m] joins (~denbrahem@2001:470:69fc:105::19c0)
08:28:32 lwe[m] joins (~dendrumat@2001:470:69fc:105::2f9b)
08:28:44 jesser[m] joins (~jessermat@2001:470:69fc:105::d5ae)
08:28:59 erinvanderveen[m joins (~erinvande@2001:470:69fc:105::e8f3)
08:29:20 reza[m] joins (~rezaphone@2001:470:69fc:105::3eda)
08:29:20 quantum joins (~quantum@user/quantum/x-8556232)
08:29:20 marinelli[m] joins (~marinelli@2001:470:69fc:105::2d8)
08:29:20 hsiktas[m] joins (~hsiktasma@2001:470:69fc:105::30d4)
08:29:33 Orbstheorem joins (~orbstheor@2001:470:69fc:105::a56)
08:29:45 craige[m] joins (~craigemcw@2001:470:69fc:105::35f1)
08:29:57 afotgkmnzj7asv3r joins (~afotgkmnz@2001:470:69fc:105::c24b)
08:29:58 schuelermine[m] joins (~schuelerm@user/schuelermine)
08:29:58 sm joins (~sm@plaintextaccounting/sm)
08:29:59 reddishblue[m] joins (~reddishbl@2001:470:69fc:105::21eb)
08:30:11 justosophy[m] joins (~justosoph@2001:470:69fc:105::572f)
08:30:11 kevin[m]1 joins (~pnotequal@2001:470:69fc:105::a54)
08:30:11 Deide joins (~deide@user/deide)
08:30:23 fakehacker[m] joins (~fakehacke@2001:470:69fc:105::b5f0)
08:30:23 hughjfchen[m] joins (~hughjfche@2001:470:69fc:105::c29d)
08:30:35 IgnatInsarov[m] joins (~kindaroma@2001:470:69fc:105::f5d9)
08:30:35 srid[m] joins (~sridmatri@2001:470:69fc:105::1c2)
08:30:35 psydroid joins (~psydroid@user/psydroid)
08:30:47 wysteriary[m] joins (~wysteriar@2001:470:69fc:105::a42e)
08:30:47 Christoph[m] joins (~hpotsirhc@2001:470:69fc:105::2ff8)
08:30:47 zwro[m] joins (~zwromatri@2001:470:69fc:105::1d4)
08:30:59 stoicswe[m] joins (~deadlette@2001:470:69fc:105::d277)
08:31:11 sam[m]1 joins (~sammtopoi@2001:470:69fc:105::e887)
08:31:23 Topik[m] joins (~topikmatr@2001:470:69fc:105::a082)
08:31:23 OndejSkup[m] joins (~mimivxmat@2001:470:69fc:105::c300)
08:31:23 kar1 joins (~kar1@2001:470:69fc:105::c308)
08:31:23 ongy[m] joins (~ongymatri@2001:470:69fc:105::5018)
08:31:23 YoungChiefBTW joins (~youngchie@2001:470:69fc:105::214c)
08:31:23 alexfmpe[m] joins (~alexfmpem@2001:470:69fc:105::38ba)
08:31:23 asdofindia-m joins (~akshaymat@2001:470:69fc:105::831)
08:31:23 ormaaj joins (~ormaaj@user/ormaaj)
08:31:23 hjulle[m] joins (~hjullemat@2001:470:69fc:105::1dd)
08:31:37 infinisil joins (~infinisil@2001:470:69fc:105::ff8)
08:31:37 Drew[m] joins (~drewefenw@2001:470:69fc:105::c8c4)
08:31:37 jneira[m] joins (~jneiramat@2001:470:69fc:105::d729)
08:31:37 Magnus[m] joins (~magthetch@2001:470:69fc:105::d1a7)
08:31:37 siraben joins (~siraben@user/siraben)
08:31:49 dexmad[m] joins (~dexmadmat@2001:470:69fc:105::e056)
08:31:49 smichel17[m] joins (~smichel17@2001:470:69fc:105::2d32)
08:31:50 SawyerBergeron[m joins (~sawyerber@2001:470:69fc:105::3036)
08:32:02 sky_lounge[m] joins (~skylounge@2001:470:69fc:105::efa6)
08:32:02 Tisoxin joins (~ikosit@user/ikosit)
08:32:14 monadfritz[m] joins (~ahdytmatr@2001:470:69fc:105::e1f1)
08:32:14 bakinonion[m] joins (~bakinonio@2001:470:69fc:105::ddb3)
08:32:26 rosariopulella[m joins (~rosariopu@2001:470:69fc:105::a57)
08:32:28 fcortesi joins (~fcortesi@2001:470:69fc:105::f3a9)
08:32:28 ManofLetters[m] joins (~manoflett@2001:470:69fc:105::3be)
08:32:28 cloudy joins (~cloudy@2001:470:69fc:105::50c0)
08:32:40 commuswift[m] joins (~commuswif@2001:470:69fc:105::e862)
08:32:40 carmysilna joins (~brightly-@2001:470:69fc:105::2190)
08:32:40 fendor[m] joins (~fendormat@2001:470:69fc:105::fcbd)
08:32:40 aidy joins (~aidy@2001:470:69fc:105::c7b4)
08:32:40 shiraeeshi[m] joins (~shiraeesh@2001:470:69fc:105::1:77)
08:33:56 × werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 250 seconds)
08:41:15 zincy_ joins (~tom@2a00:23c8:970c:4801:e07c:c539:ea16:90d3)
08:41:34 kuribas joins (~user@ip-188-118-57-242.reverse.destiny.be)
08:43:21 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 276 seconds)
08:44:01 <zincy_> What is the correct data structure to use if you have 2 grids of alphabetical chars and you want to flip and shift one of them - essentially creating a caeser cipher but with a grid instead of a list
08:44:36 <kuribas> zincy_: list of lists?
08:45:21 <zincy_> Yeah
08:45:25 <Rembane> Data.Map! :D
08:46:16 <zincy_> Rembane: How then do you do a transformation on say the x rows of the grid?
08:46:43 <zincy_> [1,2][3,4]] -> [1,2][4,3]]
08:47:04 <zincy_> i.e map doesnt know about position
08:47:08 <Rembane> zincy_: One cell at the time. :: Data.Map (Int, Int) Int
08:47:40 <Rembane> But it seems like you have a dense matrix, so a list of lists or vector of vectors are probably better.
08:48:46 <zincy_> Rembane: Out of curiosity what do the keys and value types denote
08:48:51 <zincy_> in your type sig
08:48:52 <dminuoso> vector of vectors is always good :)
08:48:58 <zincy_> Yeah
08:49:34 <pavonia> Why not an MArray instead, which might be easier to handle for random access?
08:49:53 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
08:50:54 <zincy_> pavonia: You mean nicer interface for random access?
08:51:11 <zincy_> Interesting never heard of MArray before
08:51:14 <pavonia> Also faster than Map, I guess
08:51:47 <dminuoso> pavonia: It's a French commune.
08:51:51 <dminuoso> Err, zincy_!
08:52:54 <Heisen> Is using head and tail always bad even though I know that the list isn't empty? Also why doesn't my second solution work? https://paste.tomsmeding.com/YvFHcd6N
08:52:58 <zincy_> dminuso: Is that surprise you are feeling?
08:53:09 <kuribas> Heisen: yes
08:53:18 <kuribas> Heisen: if you know it isn't empty, you can pattern match.
08:53:38 <Heisen> How would I go about pattern matching there?
08:53:39 <dminuoso> And since you're in IO, you can also simply use exitFailure or throw an exception in case the list is, unexpectedly, empty
08:53:44 <dminuoso> printList (x:xs) = ...
08:53:47 <dminuoso> printList [] = ...
08:53:52 <kuribas> Heisen: don't write "if length l > 0"
08:54:11 <kuribas> Heisen: instead, write: case l of [] -> ...; x:xs -> ...
08:54:46 <kuribas> Heisen: or better: printList [] = ...; printList (x:xs) = ...
08:57:57 dminuoso always starts with the more likely condition first
08:58:19 <dminuoso> Just a very cheap force of habit that avoids unnecessary pattern matches in the general case. :)
08:58:35 × azeem quits (~azeem@2a00:801:2d5:6b0b:3559:4c30:7a57:5531) (Read error: Connection reset by peer)
08:59:37 azeem joins (~azeem@emp-180-222.eduroam.uu.se)
09:00:01 <kuribas> ghc will warn about those, no?
09:00:57 <Heisen> This is good? =) https://paste.tomsmeding.com/whUMkJ6j
09:01:06 <Heisen> Also thank you for your time
09:01:39 <kuribas> Heisen: better, but I prefer matching in the function declaration.
09:04:30 yauhsien joins (~yauhsien@118-167-48-21.dynamic-ip.hinet.net)
09:06:52 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) (Remote host closed the connection)
09:18:08 arpl joins (~arpl@84-107-171-239.cable.dynamic.v4.ziggo.nl)
09:26:41 nfd joins (~nfd@user/nfd)
09:27:04 norskalm joins (~norskalm@101.175.64.73)
09:29:53 × yauhsien quits (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Remote host closed the connection)
09:30:56 yauhsien joins (~yauhsien@118-167-48-21.dynamic-ip.hinet.net)
09:32:57 zer0bitz joins (~zer0bitz@dsl-hkibng31-54fafc-123.dhcp.inet.fi)
09:34:29 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
09:34:50 × arpl quits (~arpl@84-107-171-239.cable.dynamic.v4.ziggo.nl) (Quit: Client closed)
09:35:29 × yauhsien quits (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Remote host closed the connection)
09:35:36 dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net)
09:36:55 yauhsien joins (~yauhsien@118-167-48-21.dynamic-ip.hinet.net)
09:38:42 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
09:39:41 × tinwood quits (~tinwood@canonical/tinwood) (Remote host closed the connection)
09:40:15 goepsilongo joins (~goepsilon@2603-7000-ab00-62ed-f17d-df99-d880-46ae.res6.spectrum.com)
09:40:33 × Guest557 quits (~chris@81.96.113.213) (Remote host closed the connection)
09:41:32 × yauhsien quits (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Ping timeout: 252 seconds)
09:42:11 × goepsilongo_ quits (~goepsilon@2603-7000-ab00-62ed-c4b5-f493-7437-ddea.res6.spectrum.com) (Ping timeout: 245 seconds)
09:42:39 tinwood joins (~tinwood@general.default.akavanagh.uk0.bigv.io)
09:42:39 × tinwood quits (~tinwood@general.default.akavanagh.uk0.bigv.io) (Changing host)
09:42:39 tinwood joins (~tinwood@canonical/tinwood)
09:45:30 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2)
09:46:16 × Heisen quits (~Heisen@77.240.67.20) (Quit: Client closed)
09:48:16 × spruit11 quits (~quassel@2a02:a467:ccd6:1:ed67:f262:991e:7f5) (Ping timeout: 265 seconds)
09:49:41 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) (Ping timeout: 245 seconds)
09:51:05 × rtjure quits (~rtjure@bras-79-132-17-74.comnet.bg) (Ping timeout: 264 seconds)
09:52:32 × xff0x quits (~xff0x@2001:1a81:5386:1100:29ed:389e:8e87:468f) (Ping timeout: 246 seconds)
09:53:11 iridium__ joins (~iridium@223.235.192.51)
09:54:37 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
09:57:43 × iridium__ quits (~iridium@223.235.192.51) (Quit: leaving)
09:57:47 spruit11 joins (~quassel@2a02:a467:ccd6:1:ed67:f262:991e:7f5)
10:01:13 × phma quits (~phma@host-67-44-208-52.hnremote.net) (Read error: Connection reset by peer)
10:01:52 phma joins (~phma@host-67-44-208-25.hnremote.net)
10:03:43 xff0x joins (~xff0x@2001:1a81:5386:1100:29ed:389e:8e87:468f)
10:08:26 × azeem quits (~azeem@emp-180-222.eduroam.uu.se) (Read error: Connection reset by peer)
10:08:43 azeem joins (~azeem@emp-180-222.eduroam.uu.se)
10:08:53 yauhsien joins (~yauhsien@118-167-48-21.dynamic-ip.hinet.net)
10:10:42 × azeem quits (~azeem@emp-180-222.eduroam.uu.se) (Read error: Connection reset by peer)
10:11:27 azeem joins (~azeem@2a00:801:2d5:6b0b:3559:4c30:7a57:5531)
10:13:00 arpl joins (~arpl@84-107-171-239.cable.dynamic.v4.ziggo.nl)
10:13:01 × yauhsien quits (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Ping timeout: 245 seconds)
10:13:11 Heisen joins (~Heisen@77.240.67.20)
10:15:00 <Heisen> When I type for example fold in GHCi and then tab, can I somehow choose which one I want with my arrow keys or something?
10:17:14 img_ joins (~img@user/img)
10:17:34 jpds joins (~jpds@gateway/tor-sasl/jpds)
10:18:22 × img quits (~img@user/img) (Ping timeout: 250 seconds)
10:19:10 ubert1 joins (~Thunderbi@178.115.55.159.wireless.dyn.drei.com)
10:20:31 × ubert quits (~Thunderbi@178.115.72.201.wireless.dyn.drei.com) (Ping timeout: 245 seconds)
10:20:31 ubert1 is now known as ubert
10:21:18 × shriekingnoise quits (~shrieking@186.137.144.80) (Quit: Quit)
10:21:20 × azeem quits (~azeem@2a00:801:2d5:6b0b:3559:4c30:7a57:5531) (Read error: Connection reset by peer)
10:21:28 × cods quits (~fred@82-65-232-44.subs.proxad.net) (Ping timeout: 265 seconds)
10:21:46 × dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Ping timeout: 245 seconds)
10:23:03 azeem joins (~azeem@emp-180-222.eduroam.uu.se)
10:24:50 × Heisen quits (~Heisen@77.240.67.20) (Quit: Client closed)
10:27:42 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2)
10:31:31 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
10:32:06 goepsilongo_ joins (~goepsilon@2603-7000-ab00-62ed-9cf3-4260-a35d-73be.res6.spectrum.com)
10:32:08 mikoto-chan joins (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be)
10:32:11 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) (Ping timeout: 245 seconds)
10:33:10 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
10:33:37 cods joins (~fred@82-65-232-44.subs.proxad.net)
10:34:41 × goepsilongo quits (~goepsilon@2603-7000-ab00-62ed-f17d-df99-d880-46ae.res6.spectrum.com) (Ping timeout: 245 seconds)
10:41:42 enoq joins (~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7)
10:42:03 alzgh joins (~alzgh@user/alzgh)
10:43:19 ph88 joins (~ph88@2a02:8109:9e00:7e5c:5435:afc4:e6b4:ce6b)
10:44:38 × arpl quits (~arpl@84-107-171-239.cable.dynamic.v4.ziggo.nl) (Quit: Client closed)
10:45:34 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
10:46:14 yauhsien joins (~yauhsien@118-167-48-21.dynamic-ip.hinet.net)
10:47:16 <dminuoso> No.
10:47:45 <dminuoso> If you want this type of interactive writing, consider using haskell-language-server.
10:48:01 <dminuoso> Since it exposes LSP, it integrates with many editors well.
10:48:10 <dminuoso> Most offer some kind of "narrowing"
10:48:40 hololeap joins (~hololeap@user/hololeap)
10:48:55 <dminuoso> Strictly speaking this could also with just with just say hasktags, but the HLS experience is quite good in general.
10:50:41 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
10:50:50 × yauhsien quits (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Ping timeout: 252 seconds)
10:50:52 × benin036932301 quits (~benin@183.82.176.107) (Quit: The Lounge - https://thelounge.chat)
10:50:54 iridium__ joins (~iridium@223.235.192.51)
10:51:46 benin036932301 joins (~benin@183.82.176.107)
10:53:53 × benin036932301 quits (~benin@183.82.176.107) (Client Quit)
10:54:49 benin036932301 joins (~benin@183.82.176.107)
10:56:59 × benin036932301 quits (~benin@183.82.176.107) (Client Quit)
10:57:09 dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net)
10:58:28 benin036932301 joins (~benin@183.82.176.107)
10:58:49 × iridium__ quits (~iridium@223.235.192.51) (Quit: leaving)
11:00:04 × azeem quits (~azeem@emp-180-222.eduroam.uu.se) (Ping timeout: 252 seconds)
11:00:54 alx741 joins (~alx741@186.178.109.205)
11:03:02 azeem joins (~azeem@emp-180-222.eduroam.uu.se)
11:06:59 × benin036932301 quits (~benin@183.82.176.107) (Quit: The Lounge - https://thelounge.chat)
11:07:53 benin036932301 joins (~benin@183.82.176.107)
11:08:19 × nfd quits (~nfd@user/nfd) (Ping timeout: 252 seconds)
11:08:33 × Las[m] quits (~lasmatrix@2001:470:69fc:105::74e) (Quit: Reconnecting)
11:10:26 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:6beb:5bcb:e1d4:764) (Ping timeout: 265 seconds)
11:10:29 <arahael> Do we have a library that, for a given dtd, can generate random xmls? (Eg, for testing with quickcheck)?
11:10:46 × dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Ping timeout: 265 seconds)
11:11:09 AlexNoo_ joins (~AlexNoo@178.34.161.150)
11:11:17 <sshine> I haven't seen that before.
11:11:50 <Cajun> there was a `random-data` package or something like that, but im not sure if it dealt with xml (and i dont know what a dtd is)
11:12:42 × benin036932301 quits (~benin@183.82.176.107) (Client Quit)
11:12:59 <sshine> Cajun, a DTD is a document type definition. sort of like JSON Schema, but from the W3C days.
11:13:16 × Alex_test quits (~al_test@178.34.161.193) (Ping timeout: 252 seconds)
11:13:24 Soanvig joins (~Soanvig@80.49.217.249.ipv4.supernova.orange.pl)
11:13:26 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 245 seconds)
11:13:34 <arahael> I'm thinking I'll just write it myself (though by manually interpreting the dtd). This particular one is simple enough.
11:13:46 <sshine> Cajun, DTDs are written in SGML, which is a meta-syntax for specifying HTML and XML.
11:13:49 <arahael> (Ie, hardcoding it)
11:13:52 × AlexZenon quits (~alzenon@178.34.161.193) (Ping timeout: 252 seconds)
11:14:29 × AlexNoo quits (~AlexNoo@178.34.161.193) (Ping timeout: 252 seconds)
11:15:42 <Soanvig> Hello guys. I have question about Parsec in that case I cannot really solve by myself. So my application uses Parsec and I want to show Parsec errors to the user. However Parsec heavily relies on `show` to print it's errors (https://hackage.haskell.org/package/parsec-3.1.14.0/docs/src/Text.Parsec.Error.html#showErrorMessages), and I need normal,
11:15:43 <Soanvig> non-escaped String as error message. Any idea how to handle that (except creating error formatter by myself)?
11:15:44 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
11:15:47 benin036932301 joins (~benin@183.82.176.107)
11:16:26 <sshine> Cajun, so the <!DOCTYPE ...> part of XML is the DTD header :) and the <!...> tags in general is SGML.
11:16:55 <Cajun> interesting, today i learned :)
11:18:05 <hpc> you'll wish you didn't learn - it means parsing xml is an impure operation, since the sgml lives behind an http url
11:18:19 <hpc> there have been some pretty entertaining CVEs based on that
11:18:33 <arahael> Not to mention entity expansion.
11:18:52 <sshine> Cajun, do you mean 'generic-random'? (can't find 'random-data')
11:18:54 lortabac joins (~lortabac@2a01:e0a:541:b8f0:1256:fdab:1396:c482)
11:19:25 AlexZenon joins (~alzenon@178.34.161.150)
11:19:26 Alex_test joins (~al_test@178.34.161.150)
11:19:56 <Cajun> that wasnt it, ill have to search for it. it used a dataset and generated random names and stuff but it may have also included file formats. didnt read into it beyond the readme
11:19:59 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
11:20:02 × cunne quits (~cunne@user/cunne) (Ping timeout: 246 seconds)
11:20:17 <hololeap> is it possible to coerce inside some container `f`, even if it isn't a Functor, specifically a TVar?
11:20:19 × benin036932301 quits (~benin@183.82.176.107) (Client Quit)
11:21:05 <hpc> does it need to be generic wrt f?
11:21:14 <hpc> the various *Vars have their own modify functions
11:21:18 benin036932301 joins (~benin@183.82.176.107)
11:21:40 <Cajun> `fakedata` and `fakedata-quickcheck` sshine
11:22:25 <Cajun> seems its more for data than files sadly
11:22:38 <hololeap> newtype FunctorMap map f k a = FunctorMap { getFunctorMap :: map k (f a) }
11:22:59 <hololeap> newtype Trie map f k a = Trie { getTrie :: Cofree (FunctorMap map f k) a }
11:23:16 CiaoSen joins (~Jura@p200300c9571be1002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
11:23:39 <hololeap> unwrap :: Trie map f k a -> FunctorMap map f k (Trie map f k a)
11:23:45 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2)
11:24:02 × benin036932301 quits (~benin@183.82.176.107) (Client Quit)
11:24:37 <hololeap> i need this: FunctorMap map f k (Cofree (FunctorMap map f k) a) -> FunctorMap map f k (Trie map f k a)
11:25:03 <hololeap> the Cofree there should be coercable into a Trie
11:25:14 benin036932301 joins (~benin@183.82.176.107)
11:25:51 <hololeap> but if `f` isn't a Functor (in the case of TVar) I stop being able to use `unwrap`
11:26:40 <hololeap> if I just `fmap` the Trie constructor into the FunctorMap
11:28:01 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) (Ping timeout: 245 seconds)
11:34:00 <hololeap> http://sprunge.us/GAC2hR
11:36:36 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
11:38:55 <arahael> Oh, I could use a RELAX NG schema instead.
11:39:09 × benin036932301 quits (~benin@183.82.176.107) (Quit: The Lounge - https://thelounge.chat)
11:40:03 benin036932301 joins (~benin@183.82.176.107)
11:41:03 AlexNoo_ is now known as AlexNoo
11:41:05 <sshine> Cajun, fakedata seems pretty nice. but it seems to generate predefined types, and generally not deeply nested stuff, even though those predefined types compose nicely.
11:41:31 <sshine> Cajun, I'll have to remember to use fakedata for something fun soon, or I'll forget it exists. there are too many interesting packages.
11:42:11 dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net)
11:42:28 × CiaoSen quits (~Jura@p200300c9571be1002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
11:43:09 CiaoSen joins (~Jura@p5dcc145a.dip0.t-ipconnect.de)
11:43:52 <hololeap> hm, it looks like if I specify `map` as HashMap and `f` as TVar, it works. is there any way to constrain a type variable as "not nominal"?
11:44:35 × enoq quits (~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7) (Quit: enoq)
11:48:02 × mestre quits (~mestre@191.177.175.57) (Quit: Lost terminal)
11:50:56 × jonathanx quits (~jonathan@dyn-8-sc.cdg.chalmers.se) (Ping timeout: 245 seconds)
11:55:04 jonathanx joins (~jonathan@dyn-8-sc.cdg.chalmers.se)
11:59:35 × michalz quits (~michalz@185.246.204.33) (Read error: No route to host)
12:00:44 × max22- quits (~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) (Ping timeout: 268 seconds)
12:01:21 × CiaoSen quits (~Jura@p5dcc145a.dip0.t-ipconnect.de) (Ping timeout: 245 seconds)
12:01:31 <hololeap> We cannot know what roles the parameters to ‘map k’ have; we must assume that the role is nominal
12:01:47 × benin036932301 quits (~benin@183.82.176.107) (Quit: The Lounge - https://thelounge.chat)
12:01:59 lavaman joins (~lavaman@98.38.249.169)
12:02:39 benin036932301 joins (~benin@183.82.176.107)
12:03:22 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
12:04:16 × mikoto-chan quits (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) (Ping timeout: 245 seconds)
12:10:13 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
12:10:20 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2)
12:12:10 × Soanvig quits (~Soanvig@80.49.217.249.ipv4.supernova.orange.pl) (Quit: Client closed)
12:14:41 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) (Ping timeout: 245 seconds)
12:14:52 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
12:16:24 xiongxin joins (~quassel@119.123.100.167)
12:28:50 mikoto-chan joins (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be)
12:30:49 waleee joins (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
12:32:36 goepsilongo joins (~goepsilon@2603-7000-ab00-62ed-11e5-eaf7-be1f-d354.res6.spectrum.com)
12:33:26 × goepsilongo_ quits (~goepsilon@2603-7000-ab00-62ed-9cf3-4260-a35d-73be.res6.spectrum.com) (Ping timeout: 245 seconds)
12:34:44 Psybur joins (~Psybur@mobile-166-170-32-197.mycingular.net)
12:34:49 hololeap . o (RoleAnnotations ?)
12:37:28 × dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Quit: WeeChat 3.3)
12:38:56 <xerox> on mac do you have CTRL+arrows and CTRL+A or CTRL+E to move between words, to the beginning of the line, to the end of line work?
12:40:25 <geekosaur> hololeap, RoleAnnotations work when declaring types, but not when constraining them
12:40:36 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2)
12:40:59 <geekosaur> you can't say e.g. role t ~ nominal => ...
12:41:38 × mikoto-chan quits (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) (Ping timeout: 265 seconds)
12:42:15 mikoto-chan joins (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be)
12:42:29 <geekosaur> xerox, haskeline should work the same way on all platforms, which is part of why ghci uses it. same with readline or editline (Mac "built-in" line editing)
12:42:59 <geekosaur> none of them work with a bare getLine, except within ghci where I think haskeline is always used
12:43:05 <xerox> geekosaur: it is extremely broken here
12:45:06 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) (Ping timeout: 245 seconds)
12:47:06 pbrisbin joins (~patrick@pool-173-49-147-250.phlapa.fios.verizon.net)
12:47:42 yauhsien joins (~yauhsien@118-167-48-21.dynamic-ip.hinet.net)
12:48:44 <geekosaur> with getLine in Haskell you will get only very basic line editing (backspace for delete, ^W deletes previous word, ^U deletes back to the beginning of the line; no arrows or other control keys)
12:49:22 <geekosaur> you need to explicitly use haskeline or readline to get real line editing
12:49:54 <xerox> geekosaur: I'm not trying to make a prompt myself, I'm using ghci
12:50:50 <geekosaur> odd. do you have a haskeline config file (https://downloads.haskell.org/ghc/latest/docs/html/users_guide/ghci.html#the-haskeline-file) ?
12:52:06 × fvr quits (uid503686@id-503686.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
12:52:11 × yauhsien quits (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Ping timeout: 245 seconds)
12:52:33 jespada joins (~jespada@2803:9800:9842:7a62:9cdc:f08c:7ab8:bd6a)
12:54:28 machinedgod joins (~machinedg@135-23-192-217.cpe.pppoe.ca)
12:55:44 <geekosaur> in particular you might have (perhaps accidentally) switched haskeline to vi emulation mode (I think that works these days?)
12:56:46 <geekosaur> in which case it starts out in insert mode and you have to press esc to use commands
12:57:24 <xerox> hmm I have ghc 8.10.7 not 9
12:57:48 <geekosaur> you might not have noticed previously because iirc vi emulation was broken/ignored for a while
12:58:17 <xerox> ok, I do not have that file
12:59:20 <xerox> making one with editMode: Emacs does not change the brokennes
12:59:26 × hyiltiz quits (~quassel@31.220.5.250) (Ping timeout: 246 seconds)
12:59:33 <xerox> it does work but the display of what is doing is rong
12:59:35 <xerox> *wrong
13:00:17 <geekosaur> weird. but that sounds more like a terminal issue than a ghci / editline issue
13:00:57 <geekosaur> do you have something like colors in the prompt?
13:01:04 <xerox> this is macos terminal.app
13:01:19 <xerox> nope
13:01:42 michalz joins (~michalz@185.246.204.72)
13:02:11 <xerox> for example ctrl+left arrow goes back 1 char visually, but functionally it seems to do the right thing and go back a word, or CTRL+A also goes back 1 char visually, but CTRL+K correctly functionally deletes the whole line such that if I type '2' and RET it evaluates to 2 no matter what was on the line before, does that make sense?
13:02:29 <geekosaur> this is sounding very bizarre
13:02:47 <geekosaur> actually this is starting to sound like a bad terminfo entry
13:02:58 <geekosaur> except it takes quite a lot of work to get that :)
13:03:41 hyiltiz joins (~quassel@31.220.5.250)
13:04:07 <geekosaur> even if you somehow selected the wrong terminfo entry it should mostly work as expected these days, since almost all terminals emulate VT240 / xterm
13:04:29 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 252 seconds)
13:05:04 <xerox> geekosaur: https://i.imgur.com/HYJRDMC.mp4
13:05:29 <xerox> geekosaur: every other program that is not ghci has correct line editing, where these work as expected
13:05:52 <xerox> see how that CTRL+A goes back 1 char not all 3 of them
13:06:09 <geekosaur> yeh, I understood your description, that was what made me think terminfo
13:06:23 <xerox> wouldn't that mean the other line editing programs would also be broken?
13:06:49 <geekosaur> hm, yes
13:07:24 <geekosaur> except there's like 6 ways to do that particular positioning operation and other programs might use a different one from haskeline
13:08:01 <geekosaur> terminals are muy complicated
13:08:22 <geekosaur> lots of ways for things to go wrong :(
13:09:47 × jakefromstatefar quits (~jakefroms@2001:470:69fc:105::15ef) (Ping timeout: 240 seconds)
13:10:53 × maerwald[m] quits (~maerwaldm@2001:470:69fc:105::1ee) (Ping timeout: 264 seconds)
13:10:59 × infinisil quits (~infinisil@2001:470:69fc:105::ff8) (Ping timeout: 246 seconds)
13:11:15 × vaibhavsagar[m] quits (~vaibhavsa@2001:470:69fc:105::ffe) (Ping timeout: 268 seconds)
13:11:29 × ormaaj quits (~ormaaj@user/ormaaj) (Ping timeout: 264 seconds)
13:12:03 <geekosaur> hm, I'm on 8.10.7 and it works here, so presumably not a haskeline bug
13:12:10 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
13:12:45 <xerox> darn! :)
13:13:08 <xerox> I cannot try 9.0.1 as it is not available on arm
13:13:59 <geekosaur> pretty sure it works under rosetta
13:14:13 <geekosaur> but yes, native awaits 9.2.1
13:14:44 <xerox> right but then I need a x64 ghcup in parallel if I want to manage nonnative bins as well
13:15:21 <maerwald> xerox: 9.0.1 is not available where?
13:15:32 <geekosaur> M1 Mac, native
13:15:46 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
13:16:11 <xerox> maerwald: https://i.imgur.com/8bIrzlz.png
13:16:26 <xerox> on M1 yes
13:16:39 nvmd joins (~nvmd@user/nvmd)
13:16:58 <maerwald> 9.2.0.20210821 is though
13:17:05 <maerwald> it just appears to be missing from ghcup metadata
13:17:07 Morrow joins (~Morrow@37.142.145.18)
13:17:09 <xerox> ah neat
13:17:13 <maerwald> I'll add it
13:17:19 <xerox> I'll give it a whirl
13:19:12 <maerwald> ghcup install ghc -u https://downloads.haskell.org/~ghc/9.2.1-rc1/ghc-9.2.0.20210821-aarch64-apple-darwin.tar.xz 9.2.0.20210821
13:20:47 Organizers|Robin joins (~Robin_Jad@152.67.64.160)
13:21:45 × Morrow quits (~Morrow@37.142.145.18) (Ping timeout: 265 seconds)
13:21:59 <xerox> hmpf, that one is broken on my system as well
13:22:00 <dminuoso> • A_Lens cannot be composed with A_Lens
13:22:05 <dminuoso> Mmm, optics diagnostic fail. :(
13:26:28 yinghua joins (~yinghua@2800:2121:1400:1db:2dd5:711:7e56:f9f7)
13:33:51 × jonathanx quits (~jonathan@dyn-8-sc.cdg.chalmers.se) (Ping timeout: 245 seconds)
13:36:05 <xerox> I wonder what can I bang my head against to fix this
13:36:21 <dminuoso> Concrete walls are good.
13:37:12 doyougnu joins (~user@c-73-25-202-122.hsd1.or.comcast.net)
13:37:15 <Psybur> xerox, a button that when pressed gives me money
13:37:23 shapr hugs xerox
13:37:32 <xerox> hey shapr :-)
13:37:38 <shapr> how you doin xerox ?
13:37:43 <xerox> p good!!
13:37:50 <xerox> how about you
13:37:50 <shapr> Any cool projects lately?
13:38:25 <xerox> yeah I'm doing stuff, related to wood and agricolture, a whole other domain of things, it's good
13:38:25 <shapr> I'm writing small fun things for my own use: https://github.com/shapr/bloohm and https://github.com/shapr/sandwatch and https://github.com/shapr/takedouble
13:38:43 xerox takes a look
13:39:52 <shapr> xerox: do you write about your wood / agriculture adventures? blog or place to post things?
13:40:12 <xerox> shapr: not yet, just started out, that's a good idea tho I'll see what I can do
13:40:20 <shapr> cool, I'd read for sure!
13:41:07 <shapr> I want to tune sandwatch and publish it, and I don't know how to publish bloohm so that many can use it.
13:41:13 brandonh joins (brandonh@gateway/vpn/protonvpn/brandonh)
13:41:47 <shapr> xerox: will you visit north america anytime soon?
13:41:52 <shapr> would be nice to see you again
13:42:17 <xerox> shapr: I doubt it, but I would love to meet again for sure, you foresee coming to this side of the atlantic anytime in the future?
13:42:35 <shapr> hm, thinking of visiting scandinavia again
13:42:40 <shapr> might could visit the south too
13:44:13 <xerox> that'd be nice, how many years has it been, I think it was something like 2006-7-8 for the MSR meets
13:44:24 <shapr> might have been 2005
13:44:28 <xerox> !
13:44:30 <shapr> I think that's when AngloHaskell happened
13:44:41 <xerox> I have fond memories of that time
13:44:43 <shapr> so, fifteen or sixteen years?
13:44:44 <shapr> me too!
13:45:05 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2)
13:45:13 <xerox> Heffalump yelling "duck!!" and I could see no duck, only to learn it is also a verb and my head was saved from a hanging branch on the cam river
13:45:33 <shapr> :-D
13:45:37 <shapr> punting was fun
13:46:01 <xerox> with duncan bridge-hopping
13:46:19 <shapr> yeah, good adventures!
13:46:27 <xerox> :)))
13:46:52 <xerox> have you been at other haskell related meets afterwards? I had some issues and fell off the map for a while afterwards
13:49:16 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) (Ping timeout: 245 seconds)
13:49:22 epolanski joins (uid312403@id-312403.helmsley.irccloud.com)
13:54:14 <shapr> I fell off the map for a few years myself, but I have a haskell job for the past two years, yay!
13:56:29 Lycurgus joins (~juan@98.4.112.204)
13:56:44 × unmanbearpig quits (~unmanbear@user/unmanbearpig) (Quit: unmanbearpig)
13:57:12 unmanbearpig joins (~unmanbear@45.76.95.141)
13:57:39 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
13:58:39 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
13:58:39 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
13:58:39 wroathe joins (~wroathe@user/wroathe)
13:59:35 max22- joins (~maxime@2a01cb0883359800129990ac0bc95b23.ipv6.abo.wanadoo.fr)
14:01:16 MQ-17J joins (~MQ-17J@35.50.53.58)
14:02:33 Sgeo joins (~Sgeo@user/sgeo)
14:02:40 × xsperry quits (~xs@user/xsperry) (Ping timeout: 252 seconds)
14:03:02 × brandonh quits (brandonh@gateway/vpn/protonvpn/brandonh) (Quit: brandonh)
14:04:17 slack1256 joins (~slack1256@191.125.154.227)
14:06:32 <slack1256> I got the impression that TH made compilation slower and memory usage bigger. I remember some folk advice to control that, such as separating TH heavy modules in multiple submodule so GHC has an easier time. Is that still valid?
14:07:30 <slack1256> I am using multiple graphql queries/mutations and I am generating the corresponding ADTs via TH. But I am at the border where memory usage is too much.
14:08:16 shriekingnoise joins (~shrieking@186.137.144.80)
14:11:53 <dminuoso> slack1256: It's really hard to say in general.
14:12:13 <dminuoso> Without knowing the details of what your TH code generates, and without GHC profiling options enabled.
14:12:35 <dminuoso> GHC has a bunch of flags that make it tell you a lot of information about its internals
14:13:48 <Lycurgus> really at the border or just ghc prealloced to the maz?
14:13:56 <Lycurgus> *max
14:14:27 × waleee quits (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Quit: WeeChat 3.3)
14:14:28 <Lycurgus> out the kazoo, or whatever quanta
14:14:35 <slack1256> No, border of what my machine and peers can give it. Which is 3Gb.
14:15:14 <dminuoso> 3Gb is quite.. slim..
14:15:20 <Lycurgus> so you have 3GB RAM and it's swapping with nothing else running?
14:15:30 × hendursa1 quits (~weechat@user/hendursaga) (Ping timeout: 276 seconds)
14:15:39 <dminuoso> For Haskell I wouldn't pick a machine without 8G of ram for non-trivial projects. It's so easy to blow up memory usage.. :(
14:15:47 <slack1256> Well it is a 4 gb machine.
14:15:47 <dminuoso> s/without/with less than/
14:16:15 <slack1256> I was thinking on advice in the line of https://www.parsonsmatt.org/2019/11/27/keeping_compilation_fast.html . There it shows that GHC is superlinear on module size respect to memory usage.
14:16:26 <Lycurgus> peers?
14:16:32 <slack1256> Given that TH expands before compilation, that can be a source of slowness.
14:16:40 <slack1256> Lycurgus: closed source project.
14:16:45 <Lycurgus> ah
14:16:55 Flonk joins (~Flonk@ec2-52-40-29-25.us-west-2.compute.amazonaws.com)
14:16:55 <Lycurgus> so the group has set a limit
14:17:13 <dminuoso> slack1256: But yes, module size has a notable impact on compilation time.
14:17:20 hendursa1 joins (~weechat@user/hendursaga)
14:17:26 <janus> lortabac: i found out my issue with DataKinds was due to TemplateHaskell and DataKinds somehow interacting
14:17:31 <dminuoso> It's part of why, for the code generator Im working on right now, carefully generates many small modules.
14:17:47 <dminuoso> (or rather, notable impact on memory usage)
14:18:17 <slack1256> More like, we are distributed through the world and everybody has different machines. They have in average around 4GB for compiling projects. If haskell uses more memory than that, people will try to avoid to compile it or use it. Which is a shame because is the interaction with the compiler while programming that is soo useful.
14:18:53 <dminuoso> slack1256: And in fact, this is why I dont use TH for code generation, but rather a separate haskell program with a bunch of tooling to make that task easier.
14:19:05 <Lycurgus> most phones have 4X that these days
14:19:09 <slack1256> dminuoso: So it seems reasonable to try to break the big TH module on a series of little one and see if it get better?
14:19:20 <slack1256> Lycurgus: in the US.
14:19:21 <dminuoso> slack1256: Yeah.
14:19:27 <dminuoso> slack1256: Or even just not doing this in TH at all.
14:19:32 <janus> slack1256: where did you get the 4gb figure from?
14:19:48 Lycurgus suspects hs is first world thing
14:19:49 <slack1256> myself and my other peer in the philiphines.
14:20:21 Lycurgus ... with outliers
14:20:34 <slack1256> I am develop on a phenom II from 2008 with 5.3 Gb, kill me.
14:20:54 <Lycurgus> janus e said it was an arbitrary group decided limit
14:21:18 <dminuoso> slack1256: Then perhaps indeed, consider a separate code generator program
14:21:32 <dminuoso> And generate smaller modules.
14:21:38 <slack1256> Arbitrary in the sense I don't decide the machine of the remote workers. Yet the usage should be reasonable even for them.
14:21:52 <slack1256> dminuoso: Awesome. Any tool I should be looking at?
14:21:57 <Lycurgus> hs, in general, is not the skinny
14:22:01 <janus> hmm so you have 5.3 gb, the average is 4gb though. so your buddy must have 2.7 gb. interesting
14:22:09 <dminuoso> slack1256: I use haskell-src-exts together with haskell-src-exts-qq
14:22:12 <Lycurgus> ghcjs and the like notwithstandig
14:22:33 <dminuoso> slack1256: oh and haskell-src-exts-simple
14:22:35 <slack1256> janus: There is other people. So far the one with problems is the one from the philiphines.
14:22:41 <dminuoso> these three fit nicely together, it's mostly similar to TH
14:22:50 <dminuoso> Except you dont have any ambient state, you have to manage that yourself
14:22:56 <slack1256> Awesome, thanks dminuoso !
14:23:35 <dminuoso> Note that the -qq package likely needs to used from https://github.com/bezirg/haskell-src-exts-qq
14:23:45 <dminuoso> Because the original package is no longer maintained, a really minor issue
14:23:55 <dminuoso> Someone ought to just take over the original package and push that update..
14:24:00 <Lycurgus> send the Phillipenes some memory
14:24:27 <Lycurgus> prolly cheaper
14:24:27 <slack1256> Instead of fixing what is broken on our project? come on Lycurgus.
14:24:54 <Lycurgus> yeah I wasn't clear if it was broken or normal ghc ops
14:24:59 <Lycurgus> on a big codebase
14:25:48 <dminuoso> slack1256: In case you're curious, https://github.com/bezirg/haskell-src-exts-qq/commit/226e1268c372b6b1f8ec807873f1df23383a1faa is the sole reason why. :)
14:26:06 slack1256 reads
14:27:20 <dminuoso> So for our code generator I work inside some `StateT G IO` where G is a record that keeps track of a buch of things, like definitions, imports, pragmas, etc, and at certain points I have a monadic `flush` action that builds a haskell-src-exts module based on all the currently built stuff
14:27:29 waleee joins (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
14:28:17 <Lycurgus> there's ur solution slack1256
14:28:58 <slack1256> Oh, you do the "buffering" yourself. Neat.
14:30:16 ec joins (~ec@gateway/tor-sasl/ec)
14:30:51 × ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
14:31:10 slowButPresent joins (~slowButPr@user/slowbutpresent)
14:31:15 ec joins (~ec@gateway/tor-sasl/ec)
14:37:17 Null_A joins (~null_a@2601:645:8700:2290:91f2:4a69:be9c:a77e)
14:38:19 ub joins (~Thunderbi@178.115.55.159.wireless.dyn.drei.com)
14:38:35 × cheater quits (~Username@user/cheater) (Remote host closed the connection)
14:38:36 × MQ-17J quits (~MQ-17J@35.50.53.58) (Read error: Connection reset by peer)
14:39:50 MQ-17J joins (~MQ-17J@35.50.53.58)
14:43:20 hnOsmium0001 joins (uid453710@id-453710.hampstead.irccloud.com)
14:45:19 cheater joins (~Username@user/cheater)
14:49:19 yauhsien joins (~yauhsien@118-167-48-21.dynamic-ip.hinet.net)
14:50:31 Morrow joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
14:51:54 × ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
14:52:47 goepsilongo_ joins (~goepsilon@2603-7000-ab00-62ed-509b-8499-b4b2-d246.res6.spectrum.com)
14:53:57 × yauhsien quits (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Ping timeout: 252 seconds)
14:54:42 × goepsilongo quits (~goepsilon@2603-7000-ab00-62ed-11e5-eaf7-be1f-d354.res6.spectrum.com) (Ping timeout: 245 seconds)
14:55:10 × dyeplexer quits (~dyeplexer@user/dyeplexer) (Read error: Connection reset by peer)
14:58:05 × acidjnk_new3 quits (~acidjnk@pd9e0b933.dip0.t-ipconnect.de) (Ping timeout: 265 seconds)
14:59:29 × Lycurgus quits (~juan@98.4.112.204) (Quit: Exeunt)
15:04:42 × azeem quits (~azeem@emp-180-222.eduroam.uu.se) (Ping timeout: 265 seconds)
15:05:48 azeem joins (~azeem@2a00:801:42e:f0c5:54bc:9505:1b65:51ec)
15:05:55 xsperry joins (~xs@cpe-188-129-101-182.dynamic.amis.hr)
15:05:55 × xsperry quits (~xs@cpe-188-129-101-182.dynamic.amis.hr) (Changing host)
15:05:55 xsperry joins (~xs@user/xsperry)
15:06:10 Tuplanolla joins (~Tuplanoll@91-159-69-50.elisa-laajakaista.fi)
15:06:53 gdhffd[m] joins (~gdhffdmat@2001:470:69fc:105::1:799)
15:08:43 yauhsien joins (~yauhsien@118-167-48-21.dynamic-ip.hinet.net)
15:09:20 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2)
15:09:28 goepsilongo joins (~goepsilon@2603-7000-ab00-62ed-79c3-eb84-501d-4a08.res6.spectrum.com)
15:11:46 × goepsilongo_ quits (~goepsilon@2603-7000-ab00-62ed-509b-8499-b4b2-d246.res6.spectrum.com) (Ping timeout: 245 seconds)
15:13:26 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) (Ping timeout: 245 seconds)
15:14:13 × xff0x quits (~xff0x@2001:1a81:5386:1100:29ed:389e:8e87:468f) (Ping timeout: 252 seconds)
15:14:58 gdhffd[m] parts (~gdhffdmat@2001:470:69fc:105::1:799) ()
15:15:11 xff0x joins (~xff0x@2001:1a81:5386:1100:ed62:9085:5098:b430)
15:15:56 × xiongxin quits (~quassel@119.123.100.167) (Ping timeout: 252 seconds)
15:16:30 Guest2 joins (~Guest2@86.57.234.195)
15:16:34 xiongxin joins (~quassel@119.123.100.167)
15:17:20 × yauhsien quits (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Remote host closed the connection)
15:19:29 × ub quits (~Thunderbi@178.115.55.159.wireless.dyn.drei.com) (Read error: Connection reset by peer)
15:19:46 ub joins (~Thunderbi@178.115.55.159.wireless.dyn.drei.com)
15:19:51 yauhsien joins (~yauhsien@118-167-48-21.dynamic-ip.hinet.net)
15:22:18 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2)
15:22:26 ilkecan[m] joins (~ilkecanma@2001:470:69fc:105::1:79b)
15:23:05 × ub quits (~Thunderbi@178.115.55.159.wireless.dyn.drei.com) (Read error: Connection reset by peer)
15:23:05 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 252 seconds)
15:23:11 ub1 joins (~Thunderbi@178.115.55.159.wireless.dyn.drei.com)
15:23:32 segfaultfizzbuzz joins (~segfaultf@135-180-0-138.static.sonic.net)
15:23:51 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Quit: Leaving)
15:24:26 Guest2 parts (~Guest2@86.57.234.195) ()
15:24:41 × yauhsien quits (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Ping timeout: 245 seconds)
15:25:29 ub1 is now known as ub
15:26:21 geekosaur joins (~geekosaur@xmonad/geekosaur)
15:34:32 × hendursa1 quits (~weechat@user/hendursaga) (Quit: hendursa1)
15:34:58 hendursaga joins (~weechat@user/hendursaga)
15:35:20 × xiongxin quits (~quassel@119.123.100.167) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
15:36:27 × byorgey quits (~byorgey@155.138.238.211) (Quit: leaving)
15:36:34 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:1256:fdab:1396:c482) (Quit: WeeChat 2.8)
15:36:35 byorgey joins (~byorgey@155.138.238.211)
15:38:07 × norskalm quits (~norskalm@101.175.64.73) (Ping timeout: 256 seconds)
15:38:43 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) (Remote host closed the connection)
15:40:43 × doyougnu quits (~user@c-73-25-202-122.hsd1.or.comcast.net) (Remote host closed the connection)
15:42:54 tzh joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net)
15:44:08 <fryguybob> tabaqui, sclv: I have no idea if this is actually related to your problem, but the RTS does hang on to trec chunks to recycle them with the idea that they are hot in the cache.
15:45:04 chris joins (~chris@81.96.113.213)
15:45:08 chris is now known as Guest3846
15:46:11 <fryguybob> If you touch *a lot* of TVars once and then not much after that, this is clearly not ideal. We shouldn't be keeping more than would be resident in cache anyway. Maybe a workaround would be to set the number of capabilities to 1, GC, then set it back up to N.
15:51:09 × cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.2.1)
15:58:01 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 245 seconds)
15:59:30 × benin036932301 quits (~benin@183.82.176.107) (Quit: The Lounge - https://thelounge.chat)
15:59:35 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2)
16:03:10 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
16:03:47 × ub quits (~Thunderbi@178.115.55.159.wireless.dyn.drei.com) (Remote host closed the connection)
16:03:51 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) (Ping timeout: 245 seconds)
16:04:56 yauhsien joins (~yauhsien@118-167-48-21.dynamic-ip.hinet.net)
16:07:00 slac42908 joins (~slack1256@191.126.227.219)
16:09:10 × slack1256 quits (~slack1256@191.125.154.227) (Ping timeout: 252 seconds)
16:09:55 × yauhsien quits (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Ping timeout: 250 seconds)
16:11:09 × max22- quits (~maxime@2a01cb0883359800129990ac0bc95b23.ipv6.abo.wanadoo.fr) (Quit: Leaving)
16:11:59 max22- joins (~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr)
16:13:38 slack1256 joins (~slack1256@181.203.20.152)
16:14:44 × Guest3846 quits (~chris@81.96.113.213) (Remote host closed the connection)
16:15:31 × slac42908 quits (~slack1256@191.126.227.219) (Ping timeout: 245 seconds)
16:19:59 nfd joins (~nfd@user/nfd)
16:20:19 chris joins (~chris@81.96.113.213)
16:20:23 chris is now known as Guest1239
16:24:52 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
16:24:56 × Guest1239 quits (~chris@81.96.113.213) (Ping timeout: 265 seconds)
16:24:59 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2)
16:27:15 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
16:29:16 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) (Ping timeout: 245 seconds)
16:29:46 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
16:29:47 _ht joins (~quassel@82-169-194-8.biz.kpn.net)
16:33:36 × kuribas quits (~user@ip-188-118-57-242.reverse.destiny.be) (Remote host closed the connection)
16:35:18 mc47 joins (~mc47@xmonad/TheMC47)
16:36:48 boxscape_ joins (~boxscape_@i577BCBE7.versanet.de)
16:43:21 × Null_A quits (~null_a@2601:645:8700:2290:91f2:4a69:be9c:a77e) (Remote host closed the connection)
16:45:39 Null_A joins (~null_a@2601:645:8700:2290:91f2:4a69:be9c:a77e)
16:50:51 × Cajun quits (~Cajun@user/cajun) (Quit: Client closed)
16:51:02 × chele quits (~chele@user/chele) (Remote host closed the connection)
16:54:08 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
16:59:15 × cheater quits (~Username@user/cheater) (Ping timeout: 265 seconds)
16:59:52 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2)
17:00:49 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) (Remote host closed the connection)
17:00:58 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2)
17:01:24 lavaman joins (~lavaman@98.38.249.169)
17:01:25 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
17:02:20 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 246 seconds)
17:05:31 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 245 seconds)
17:05:56 cheater joins (~Username@user/cheater)
17:17:11 × MQ-17J quits (~MQ-17J@35.50.53.58) (Ping timeout: 245 seconds)
17:17:29 × ystael quits (~ystael@user/ystael) (Ping timeout: 252 seconds)
17:18:20 ystael joins (~ystael@user/ystael)
17:21:02 <segfaultfizzbuzz> i have a bit of a philosophical question here, feel free to have me not ask this due to it being too fuzzy:
17:22:09 <segfaultfizzbuzz> when i was introduced to groups for the first time i felt that the concept of a group was fundamentally descriptive, and by this i mean that the group does not "exist" and is not "as real" as other mathematical objects
17:22:33 <segfaultfizzbuzz> in the same way that the color red does not exist, there are only red cars and red buildings and soforth
17:23:12 <segfaultfizzbuzz> i never had a mechanism to justify this view until recently, where i came across a discussion of the monster group
17:23:43 <segfaultfizzbuzz> and a clear presentation of the various "unnatural" objects which satisfy the laws of a group
17:23:49 <monochrom> Ah, if this will not involve Haskell, then #haskell-offtopic is a good place.
17:23:56 <segfaultfizzbuzz> okay i will jump over there
17:24:31 econo joins (uid147250@user/econo)
17:28:20 emf joins (~emf@2601:602:9401:b660:47d:d5f4:4143:7c05)
17:29:55 MQ-17J joins (~MQ-17J@2607:fb90:8848:a516:92d8:c446:e2f1:d98e)
17:31:11 × MQ-17J quits (~MQ-17J@2607:fb90:8848:a516:92d8:c446:e2f1:d98e) (Read error: Connection reset by peer)
17:31:18 notzmv joins (~zmv@user/notzmv)
17:32:12 MQ-17J joins (~MQ-17J@35.50.53.58)
17:32:41 × emf quits (~emf@2601:602:9401:b660:47d:d5f4:4143:7c05) (Quit: emf)
17:33:48 × Null_A quits (~null_a@2601:645:8700:2290:91f2:4a69:be9c:a77e) (Remote host closed the connection)
17:34:01 emf joins (~emf@2620:10d:c090:400::5:d028)
17:34:16 tommd joins (~tommd@75-164-130-101.ptld.qwest.net)
17:34:34 × YoungChiefBTW quits (~youngchie@2001:470:69fc:105::214c) (Changing host)
17:34:34 YoungChiefBTW joins (~youngchie@user/youngchiefbtw)
17:35:01 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
17:35:56 × nrl^ quits (~nrl@68.101.50.106) (Ping timeout: 245 seconds)
17:38:56 nrl^ joins (~nrl@68.101.50.106)
17:40:02 <nf> > let 1 = 0 in ()
17:40:04 <lambdabot> ()
17:40:06 <nf> how does this parse?
17:41:53 × lbseale quits (~lbseale@user/ep1ctetus) (Ping timeout: 246 seconds)
17:42:09 <Taneb> It parses because "1" is valid in pattern contexts. This is useful for things like case 0 -> 0; 1 -> 1; n -> n + 4
17:43:03 <boxscape_> nf it's desugared to `let x | x == 1 = 0 in ()`
17:43:14 <boxscape_> more or less
17:43:22 <nf> ooh, right
17:43:43 × YoungChiefBTW quits (~youngchie@user/youngchiefbtw) (Quit: Reconnecting)
17:43:46 <Taneb> The more surprising thing is it executes. That's because (I believe) the pattern is only executed if a bound symbol is used, and there's no bound symbols to use
17:43:57 YoungChiefBTW joins (~youngchie@2001:470:69fc:105::214c)
17:43:58 <boxscape_> > let !1 = 0 in ()
17:44:00 <lambdabot> *Exception: <interactive>:3:5-10: Non-exhaustive patterns in 1
17:44:04 × YoungChiefBTW quits (~youngchie@2001:470:69fc:105::214c) (Changing host)
17:44:04 YoungChiefBTW joins (~youngchie@user/youngchiefbtw)
17:44:29 <boxscape_> > let Just x = Nothing in ()
17:44:30 <lambdabot> ()
17:45:25 BosonCollider joins (~olofs@90-227-86-119-no542.tbcn.telia.com)
17:45:28 nilof joins (~olofs@90-227-86-119-no542.tbcn.telia.com)
17:45:40 × nilof quits (~olofs@90-227-86-119-no542.tbcn.telia.com) (Remote host closed the connection)
17:46:05 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
17:51:21 <monochrom> case 0 of ~1 -> ()
17:51:40 <boxscape_> hm I'm actually not sure what a good desugaring of `let !1 = 0 in ()` would be
17:52:00 <monochrom> case 0 of 1 -> ()
17:52:25 <monochrom> Everything is nicer with "case" and irrefutable patterns :)
17:52:41 <tomsmeding> boxscape_: let !x | x == 1 = 0 in () ? :p
17:52:48 <monochrom> Indeed the Haskell Report also has this inclination of reducing everything to "case".
17:52:56 <boxscape_> > let !x | x == 1 = 0 in ()
17:52:58 <lambdabot> ()
17:53:00 <tomsmeding> oh
17:53:12 <tomsmeding> wut
17:53:13 benin036932301 joins (~benin@183.82.176.107)
17:53:20 <tomsmeding> how does that even work
17:53:26 <boxscape_> er
17:53:44 <boxscape_> > let !x | x == 1 = 0 in x `seq` ()
17:53:47 <lambdabot> *Exception: <<loop>>
17:54:20 × MQ-17J quits (~MQ-17J@35.50.53.58) (Ping timeout: 252 seconds)
17:55:11 MQ-17J joins (~MQ-17J@2607:fb90:8848:a516:92d8:c446:e2f1:d98e)
17:55:21 <boxscape_> not really sure where the loop there comes from either
17:56:31 <monochrom> You probably should desuger "x | x==1 = 0" first.
17:56:54 <monochrom> something equiv to "x = if x==1 then 0 else undefined"
17:57:44 fresheyeball joins (~fresheyeb@c-76-25-93-164.hsd1.co.comcast.net)
17:57:53 <monochrom> Mixing bang pattern with guard probably requires a very careful reading of the GHC user's guide.
17:59:01 <boxscape_> looks like it, yeah
17:59:16 × myShoggoth quits (~myShoggot@97-120-70-214.ptld.qwest.net) (Ping timeout: 245 seconds)
18:00:36 Guest41 joins (~Guest41@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
18:01:12 <monochrom> Ugh why does the GHC user's guide still links to Haskell 98 not Haskell 2010 haha
18:01:16 <boxscape_> wait, I think I'm confused because I'm mixing up pattern and function bindings
18:01:27 × goepsilongo quits (~goepsilon@2603-7000-ab00-62ed-79c3-eb84-501d-4a08.res6.spectrum.com) (Quit: Textual IRC Client: www.textualapp.com)
18:01:33 <boxscape_> to have `x | x == 1 = 0`, you need to know what x is (for the guard), to find out what x is
18:01:35 myShoggoth joins (~myShoggot@97-120-70-214.ptld.qwest.net)
18:01:38 <boxscape_> which is the loop
18:02:38 tabaqui joins (~root@46.39.45.162)
18:02:42 <boxscape_> `let 1 = 0` should actually be desugared to something more like `let 1 | 1 == 0 = 0`
18:02:45 <boxscape_> I think
18:03:07 <boxscape_> er, `let _ | 1 == 0 = 0`
18:03:10 Null_A joins (~null_a@2601:645:8700:2290:91f2:4a69:be9c:a77e)
18:03:23 <tabaqui> sort of
18:03:52 <boxscape_> % let !_ | 1 == 0 = 0 in () -- tomsmeding this does work
18:03:52 <yahb> boxscape_: *** Exception: <interactive>:99:5-19: Non-exhaustive guards in
18:04:57 <Guest41> hello. I seem to be misunderstanding parser combinators in Megaparsec. I have a parser of the form `choice [pNumber, try pBool, pString], `
18:05:03 <tomsmeding> boxscape_: fascinating
18:05:05 <monochrom> No, it really is better to translate "let 1=0 in foo" to "case".
18:05:06 <Guest41> but even though I'm using the try primitive, the pBool parser keeps consuming input and triggering errors (eof not found) down the line
18:05:25 <tomsmeding> I shall continue to avoid ! in let bindings, and reach for a case or pattern guards or explicit seq
18:05:32 <boxscape_> monochrom but the part I'm interested in translating is the `1` pattern, your case desugaring still contains that
18:05:50 <monochrom> But it also has ~
18:06:22 <Guest41> I was following the pattern described here: https://markkarpov.com/tutorial/megaparsec.html#controlling-backtracking-with-try
18:06:25 <tomsmeding> Guest41: "eof not found" -- does pBool call eof?
18:06:37 <boxscape_> I do agree that with case it's easier to follow what happens than with bang patterns
18:06:41 emf_ joins (~emf@2620:10d:c090:400::5:b24f)
18:06:45 <boxscape_> in let
18:07:01 <Guest41> tomsmeding: no it's called after the parser as in: `myParser <* eof`
18:07:03 × fresheyeball quits (~fresheyeb@c-76-25-93-164.hsd1.co.comcast.net) (Quit: WeeChat 2.9)
18:07:03 <tomsmeding> boxscape_: case also corresponds more closely to the form in Core, so there's less semantics translation going on
18:07:12 <boxscape_> right, yeah
18:07:27 yauhsien joins (~yauhsien@118-167-48-21.dynamic-ip.hinet.net)
18:07:52 <tomsmeding> Guest41: then are you sure it's pBool that's failing? If pBool fails properly, it shouldn't even reach that 'eof' parser
18:08:08 <Guest41> tomsmeding: I have it set that way because some strings are special, ie: "true" and "false", otherwise I want to fallback to parsing Text
18:08:33 <tomsmeding> (parsing yaml?)
18:09:09 <tomsmeding> Guest41: try putting 'getInput >>= \s -> traceIO ("Remaining: <" ++ s ++ ">")' right after that 'choice'
18:09:14 <tomsmeding> with 'import Debug.Trace'
18:09:15 <Guest41> tomsmeding: that makes sense, how would I make pBool fail if it parses something like "trueAAAAA"
18:09:33 <monochrom> "!var = e" and even "!(Ctor pat1 pat2) = e" are pretty unsurprising. You don't have to avoid these use cases of bang patterns.
18:09:34 <tomsmeding> Guest41: what's the definition of pBool?
18:09:48 <tomsmeding> monochrom: true, I guess
18:09:52 <Guest41> you are right, pBool isn't failing: `pBool = True <$ string "true" <|> False <$ string "false"`
18:10:02 × emf quits (~emf@2620:10d:c090:400::5:d028) (Ping timeout: 260 seconds)
18:10:07 <monochrom> But "!var | cond = e" is the one that surprised me. This one is reasonable to avoid.
18:10:12 <tomsmeding> Guest41: because of megaparsec's semantics of 'string', that shouldn't even need 'try' I think
18:10:30 <tomsmeding> it's parsec that has a 'string' that needs to be wrapped in 'try'; megaparsec changed that
18:10:36 <boxscape_> monochrom yes, I'm still trying to figure out why `let !x | x == 1 = 0` *doesn't* loop
18:10:39 <monochrom> Now I have to be a lawyer and follow the GHC user's guide and Haskell 2010 to desugar what's going on with that. :)
18:11:55 <Guest41> tomsmeding: yes you are right, "Note that as of Megaparsec 4.4.0, string backtracks automatically (see tokens), so it does not need try. However, the examples above demonstrate the idea behind try so well that it was decided to keep them. You still need to use try when your alternatives are complex, composite parsers."
18:12:00 <Guest41> https://hackage.haskell.org/package/megaparsec-9.2.0/docs/Text-Megaparsec.html
18:12:14 × yauhsien quits (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Ping timeout: 265 seconds)
18:12:24 <tomsmeding> ah, so I remembered correctly
18:13:03 <Guest41> I still can't see how to force pBool to fail, it should expect whitespace after a Bool
18:13:08 <boxscape_> FWIW, `f = () where !x | x == True = False` is desugared into Core as `f = case x_r1kw of { __DEFAULT -> break<2>() GHC.Tuple.() }`
18:13:15 chris joins (~chris@81.96.113.213)
18:13:19 chris is now known as Guest2478
18:13:23 <tomsmeding> Guest41: what about that definition you gave forces whitespace?
18:13:28 <boxscape_> oh wait I guess that's only part of it
18:14:03 <Guest41> tomsmeding: nothing, I tried adding `<* space` at the end but it didn't change the behaviour
18:14:50 <boxscape_> (this is the full Core https://paste.tomsmeding.com/rsvN5Uml )
18:14:52 <Guest41> Wait, I was wrong, it does complain about expecting whitespace
18:14:59 <tomsmeding> Guest41: could you try: pBool = (True <$ string "true" <|> False <$ string "false") <* lookAhead space
18:15:08 <Guest41> but it doesn't move on to the _next_ choice
18:15:26 <boxscape_> oh but wait calling f *does* loop...
18:15:32 <tomsmeding> Guest41: yeah with that '<* space', with or without lookAhead, you do now need the 'try'
18:16:11 <boxscape_> % let !x | x == True = False
18:16:16 <yahb> boxscape_: [Timed out]
18:16:17 <boxscape_> % let !x | x == 1 = 0
18:16:18 <yahb> boxscape_:
18:16:22 <boxscape_> it's a dictionary thing, apparently
18:16:41 <Guest41> tomsmeding: because combining primitives doesn't give auto-backtracking parsers, yes?
18:16:42 <boxscape_> x is a function that takes a dictionary, so the bang pattern only forces it to be a lambda (is my hypothesis)
18:16:49 <boxscape_> ^ monochrom
18:17:23 <monochrom> > let !x = case () of () | x==1 -> 0 in () -- this is following Haskell 2010 4.4.3.2 to desugar guards in a pattern binding.
18:17:25 <lambdabot> ()
18:17:37 <monochrom> Hrm
18:17:45 <tomsmeding> Guest41: indeed, nothing is backtracking by default except when explicitly made backtracking with 'try', or if it's a special case, of which 'string' is one
18:17:58 <monochrom> > let !x = case () of () | x==False -> True in () -- this is following Haskell 2010 4.4.3.2 to desugar guards in a pattern binding.
18:18:00 <lambdabot> *Exception: <<loop>>
18:18:27 <tomsmeding> wonky
18:18:29 × MQ-17J quits (~MQ-17J@2607:fb90:8848:a516:92d8:c446:e2f1:d98e) (Read error: Connection reset by peer)
18:18:37 <monochrom> > let !x | x = False in ()
18:18:40 <lambdabot> *Exception: <<loop>>
18:18:47 MQ-17J joins (~MQ-17J@35.50.53.58)
18:18:58 <boxscape_> > !x | x == x in ()
18:18:59 <monochrom> That theory does hold water.
18:19:00 <lambdabot> <hint>:1:4: error: parse error on input ‘|’
18:19:05 <boxscape_> > let !x | x == x in ()
18:19:06 <lambdabot> <hint>:1:17: error: parse error on input ‘in’
18:19:08 <Guest41> tomsmeding: the parser /still/ doesn't refrain from consuming "true" in "trueAAAA". I will simply Paste the code now so you can see it :P
18:19:10 × epolanski quits (uid312403@id-312403.helmsley.irccloud.com) (Quit: Connection closed for inactivity)
18:19:12 <boxscape_> egh
18:19:19 <monochrom> !x | x==x = not x ?
18:19:37 <boxscape_> > let !x | x == x = () in ()
18:19:38 <monochrom> !x | x = x ?
18:19:40 <lambdabot> *Exception: <<loop>>
18:19:54 <boxscape_> > let !x | x == x = undefined in ()
18:19:55 <Guest41> tomsmeding: https://paste.tomsmeding.com/F8u1rsRa
18:19:56 <lambdabot> ()
18:20:03 <Guest41> (forgive the use of parseTest)
18:20:04 <boxscape_> okay yeah this makes sense I think
18:21:45 aegon joins (~mike@174.127.249.180)
18:22:01 jlamothe joins (~jlamothe@104.158.48.100)
18:22:11 × xff0x quits (~xff0x@2001:1a81:5386:1100:ed62:9085:5098:b430) (Ping timeout: 245 seconds)
18:22:36 <tomsmeding> Guest41: what's that L import?
18:22:44 <tomsmeding> oh Lexer
18:22:53 <Guest41> yes `import qualified Text.Megaparsec.Char.Lexer as L`
18:23:02 xff0x joins (~xff0x@2001:1a81:5386:1100:51ce:15a:f28:e4d7)
18:24:30 <Guest41> what I don't understand is why doesn't choice fallback to the third parser when pBool fails
18:24:34 <tomsmeding> Guest41: when I give that trueAAAA I get back 'unexpected A, expecting end of input', which makes sense to me?
18:24:39 <tomsmeding> oh wait no it doesn't
18:24:56 tomsmeding is confused
18:24:57 × Guest2478 quits (~chris@81.96.113.213) (Remote host closed the connection)
18:25:14 kuribas joins (~user@ptr-25vy0i8j07s3q8yomww.18120a2.ip6.access.telenet.be)
18:25:24 <Guest41> it should get a `StringValue` right?
18:25:38 werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
18:25:56 × emf_ quits (~emf@2620:10d:c090:400::5:b24f) (Quit: emf_)
18:25:59 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
18:28:44 <tomsmeding> oooooooh
18:28:50 <tomsmeding> space: Skip zero or more white space characters.
18:29:13 <tomsmeding> Guest41: should use spaceChar
18:29:29 × qbt quits (~edun@user/edun) (Ping timeout: 246 seconds)
18:29:31 gensyst joins (gensyst@user/gensyst)
18:29:34 chris joins (~chris@81.96.113.213)
18:29:36 <Guest41> *facepalm*
18:29:38 chris is now known as Guest4418
18:29:43 <tomsmeding> dumb megaparsec, shouldn't have changed the meaning of 'space' from the original parsec meaning
18:29:52 emf joins (~emf@2620:10d:c090:400::5:b24f)
18:30:35 <gensyst> Can someone quickly please do this? "mkdir testproj; cd testproj; cabal init; vim testproj.cabal", add "Chart-chairo" dependency, and "cabal build"? Do you also get the error "(conflict: pkg-config package cairo>=1.2.0, not found in the pkg-config database)" ?
18:30:39 <gensyst> How to solve this?
18:30:58 × Guest4418 quits (~chris@81.96.113.213) (Remote host closed the connection)
18:31:01 <tomsmeding> gensyst: install cairo with your system package manager :p
18:31:05 × Null_A quits (~null_a@2601:645:8700:2290:91f2:4a69:be9c:a77e) (Remote host closed the connection)
18:31:11 <sclv> also possibly cairo-dev
18:31:22 <tomsmeding> apparently that has a dependency on the cairo C library that you don't have installed (or the pkg-config file isn't installed for some reason)
18:31:24 Null_A joins (~null_a@2601:645:8700:2290:91f2:4a69:be9c:a77e)
18:31:27 <sclv> its not a haskell lib, its a c lib that the haskell lib depends on
18:32:27 × max22- quits (~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) (Ping timeout: 240 seconds)
18:33:31 acidjnk_new3 joins (~acidjnk@p200300d0c703cb53c55fe893eb04092a.dip0.t-ipconnect.de)
18:33:39 <Guest41> tomsmeding: thank you very much
18:34:52 <tomsmeding> Guest41: cheers :)
18:36:13 chris joins (~chris@81.96.113.213)
18:36:17 chris is now known as Guest6556
18:40:27 × Guest6556 quits (~chris@81.96.113.213) (Ping timeout: 240 seconds)
18:45:53 justsomeguy joins (~justsomeg@user/justsomeguy)
18:46:22 MarsIronPI joins (~MarsIronP@107.117.175.35)
18:47:40 × MarsIronPI quits (~MarsIronP@107.117.175.35) (Client Quit)
18:50:26 × nfd quits (~nfd@user/nfd) (Ping timeout: 252 seconds)
18:51:08 <c_wraith> I think it was too late last night when I unleashed my latest abomination upon this channel.
18:51:29 <c_wraith> So I present it again now. Look upon my works, and despair: https://paste.tomsmeding.com/KmOT6PZy
18:52:44 <tomsmeding> c_wraith: should call that pattern synonym :++ instead
18:53:25 <c_wraith> I'm just "happy" that using it is more work than... not.
18:53:31 <tomsmeding> c_wraith: you don't need the provided constraints () => to be listed explicitly, right?
18:53:54 <tomsmeding> I like it :p
18:53:56 <c_wraith> I'm not sure. Didn't look at the grammar for pattern signatures too closely.
18:54:08 <tomsmeding> iirc provided constraints are optional
18:54:25 <c_wraith> On the other hand, it doesn't really hurt anything
18:54:59 <tomsmeding> how do you _use_ this though? 'f (PrefixedBy (Proxy @"prefix") suffix) = print suffix'?
18:55:17 <c_wraith> No, I had an earlier version that would work like that.
18:55:20 <monochrom> "is this dependent typing?" meme
18:55:33 <c_wraith> except ghc doesn't allow type applications inside patterns
18:55:44 <c_wraith> it even has a fun error message saying "yet"
18:55:44 <tomsmeding> rip
18:55:47 <tomsmeding> lol
18:56:01 max22- joins (~maxime@2a01cb088335980073a4b4db0ef417b5.ipv6.abo.wanadoo.fr)
18:56:17 <c_wraith> So this is like.... PrefixedBy (Proxy :: Proxy "prefix") suffix
18:56:45 <c_wraith> and even that requires enabling ScopedTypeVariables
18:56:55 <tomsmeding> blegh
18:57:03 <c_wraith> it's a horrible mess!
18:57:06 <c_wraith> I'm so proud!
18:57:11 <tomsmeding> :D
19:01:25 × ircbrowse_tom quits (~ircbrowse@2a01:4f8:1c1c:9319::1) (ZNC 1.7.5+deb4 - https://znc.in)
19:03:10 ircbrowse_tom joins (~ircbrowse@2a01:4f8:1c1c:9319::1)
19:03:10 Server sets mode +Cnt
19:04:11 × tabaqui quits (~root@46.39.45.162) (Ping timeout: 252 seconds)
19:05:11 × gensyst quits (gensyst@user/gensyst) (Quit: Leaving)
19:07:47 <boxscape_> c_wraith neat, I was wondering if it's possible to write something like this without having to do `PrefixOf "prefix" -> Just suffix` when using the pattern synonym. Will be interesting to see if Proxy is still necessary once visible forall is a thing
19:08:30 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 260 seconds)
19:08:33 <c_wraith> boxscape_: it almost works now, except for type applications not being allowed in patterns.
19:09:14 <c_wraith> err, works without the Proxy argument
19:09:44 <boxscape_> right, I suppose it's quite possible that that restriction will also extend to visible type applications
19:10:00 <boxscape_> or, "visible-by-default" type applications, not sure what the proper terminology is
19:10:39 <kuribas> c_wraith: what does that do?
19:11:15 <c_wraith> it's a pattern for matching a string with a specific prefix and binding the rest to a name
19:11:47 <c_wraith> kind of like Erlang's pattern matching on strings can do
19:12:07 <c_wraith> except the syntax for using it is atrocious
19:12:23 <boxscape_> there is/was some ongoing work (not sure if complete) that makes it possible to have patterns like (Just @Int 4), not sure if that applies to pattern synonyms as well
19:13:11 <c_wraith> if it does, it would allow using something like (PrefixedBy @"prefix" suffix) with no other changes
19:13:40 <c_wraith> err. no other ghc changes
19:13:42 k joins (~user@152.1.137.158)
19:15:50 <boxscape_> it's in 9.2.1, let me check if it works for synonyms
19:16:09 fendor joins (~fendor@178.165.164.78.wireless.dyn.drei.com)
19:16:21 × mikoto-chan quits (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) (Ping timeout: 245 seconds)
19:16:29 <k> Say I have a class like `Monad m` with methods `(>>=)` and `(>>)` , and a default definition in terms of `(>>=)` is given for `(>>)`. Does GHC inline the default definition everywhere it appears? Or does it specialize the definition to the type of each instance, and then use its usual heuristic to decide whether to inline the specialized version? Or does it just use it's usual heuristic to decide whether to inline a fully polymorphic
19:16:29 <k> version?
19:16:55 <k> Sorry about the apostrophe in 'its'.
19:18:32 <kuribas> c_wraith: why not just: myFun pref s | Just rest <- stripPrefix pref s = rest | otherwise = ""
19:18:32 mikoto-chan joins (~mikoto-ch@83.137.2.251)
19:19:42 <c_wraith> because that's not a pattern. it is a lot easier to use right now, but it's sort of missing the point.
19:20:17 <boxscape_> c_wraith seems to work just fine with pattern synonyms in master
19:20:42 <c_wraith> yeah, 9.2 fixed some other type application bug I ran into recently.
19:20:52 <c_wraith> seems like it got improved a bunch.
19:21:10 <kuribas> c_wraith: ok, so obfuscation is the point...
19:21:28 <c_wraith> no, the point is that you can use it as pattern matching.
19:21:38 chris joins (~chris@81.96.113.213)
19:21:42 chris is now known as Guest6826
19:22:17 <c_wraith> looks like in GHC 9.2 it will actually be useable sanely.
19:22:27 × Guest6826 quits (~chris@81.96.113.213) (Remote host closed the connection)
19:22:28 <c_wraith> instead of how you have to use that version
19:23:09 <boxscape_> I think there might be a bug though, since `f (PrefixedBy (Proxy @GHC.Types.Symbol @"prefix") suffix) = suffix` works
19:23:18 <boxscape_> whereas leaving out the @GHC.Types.Symbol doesn't
19:23:30 <boxscape_> but I think it should be the other way around, since Proxy only has one specified type argument?
19:23:39 <c_wraith> oh, it's the kind argument.
19:23:49 <c_wraith> can you just leave it at @_ ?
19:23:52 <boxscape_> yeah but it's inferred, you shouldn't be able to provide it via type application
19:24:29 <boxscape_> yes, @_ works, but I would expect to get the same error I get if I try `Proxy @_ @"test"` in an expression instead of in a pattern
19:24:29 × Guest41 quits (~Guest41@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Quit: Client closed)
19:24:34 <boxscape_> % Proxy @_ @"test"
19:24:34 <yahb> boxscape_: ; <interactive>:2:1: error:; * Cannot apply expression of type `Proxy w0'; to a visible type argument `"test"'; * In the expression: Proxy @_ @"test"; In an equation for `it': it = Proxy @_ @"test"
19:24:58 × myShoggoth quits (~myShoggot@97-120-70-214.ptld.qwest.net) (Ping timeout: 252 seconds)
19:25:00 <kuribas> c_wraith: or do: myFun (stripPrefix "myPrefix" -> Just rest) = rest; myFun _ = ""
19:25:05 <c_wraith> hah, ok. that is certainly unexpected
19:25:25 <kuribas> c_wraith: I don't see what you gain with a Pattern...
19:25:42 <kuribas> unless it's some weird "challenge".
19:25:42 <c_wraith> you gain not having to write a view pattern
19:25:47 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
19:25:47 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
19:25:47 wroathe joins (~wroathe@user/wroathe)
19:25:54 <boxscape_> kuribas if you have to do this a bunch of times for different prefixes it's a lot less visual clutter
19:25:55 Guest41 joins (~Guest41@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
19:26:07 <tomsmeding> and you gain the ability to say "my latest abomination"
19:26:11 <tomsmeding> which is clearly an advantage
19:26:22 <Guest41> any ideas on how one might write a test suite for a parser written in (mega)parsec ?
19:26:32 <c_wraith> like, the whole reason pattern synonyms were added to GHC is that view patterns are rerrible
19:26:36 <c_wraith> *terrible
19:26:36 <Guest41> I've never written a proper test suite before
19:26:47 <shapr> Guest41: property based tests?
19:27:18 chris joins (~chris@81.96.113.213)
19:27:22 chris is now known as Guest816
19:27:23 <Guest41> shapr: I'll look it up
19:27:34 <Guest41> (first time hearing the term)
19:27:40 <shapr> I like doing round trip tests for parsers, where I can generate a random value of the type, turn that into text, and then parse it back out and see if it's the same thing.
19:27:57 <shapr> Guest41: you could start with straight up unit tests using hspec
19:28:47 myShoggoth joins (~myShoggot@97-120-70-214.ptld.qwest.net)
19:29:11 <Guest41> shapr: what you said sounds very interesting. How would hspec differ/
19:29:22 <Guest41> s;/;?
19:30:00 <kuribas> boxscape_: that looks perfectly clear to my eyes...
19:30:06 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 245 seconds)
19:30:49 <boxscape_> ¯\_(ツ)_/¯ it's two more tokens, which isn't a lot but adds up
19:31:12 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
19:31:43 × Guest816 quits (~chris@81.96.113.213) (Ping timeout: 252 seconds)
19:31:46 × oxide quits (~lambda@user/oxide) (Ping timeout: 245 seconds)
19:32:37 <shapr> Guest41: if you've written some Haskell before, what do you think about the tutorial? https://hspec.github.io/
19:33:08 <shapr> Guest41: I don't understand the question, how would hspec differ from? oh, do you mean differ from property based tests?
19:33:24 <Guest41> shapr: sorry, yes that's I meant
19:33:55 <shapr> unit tests are where you declare that a particular input should match a particular output.
19:33:57 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
19:34:14 <shapr> Property based tests are where you say some class of inputs should match some class of outputs.
19:34:23 <shapr> oh, I've forgotten how to use @check
19:34:52 <shapr> @help check
19:34:52 <lambdabot> check <expr>
19:34:52 <lambdabot> You have QuickCheck and 3 seconds. Prove something.
19:35:15 <Guest41> oh so in your example "class of inputs" is just type correctness, yes?
19:35:49 <shapr> it can be something as simple as "the length of a list should be the same after sorting the list"
19:35:50 <Guest41> if the outputs are the correct type then they pass the tests
19:36:11 <tomsmeding> @check \l -> length (sort l) == length (l :: [Int])
19:36:12 <lambdabot> +++ OK, passed 100 tests.
19:36:15 × Morrow quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Read error: Connection reset by peer)
19:36:23 <tomsmeding> @check \l -> sort l == (l :: [Int])
19:36:25 <lambdabot> *** Failed! Falsifiable (after 6 tests and 5 shrinks):
19:36:25 <lambdabot> [-3,3,3,3,-4]
19:36:28 Morrow joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
19:36:33 <shapr> when I'm giving a talk on property based testing I ask whether everyone in the audience believes that a * (b * c) is the same as (a * b) * c
19:36:51 × emf quits (~emf@2620:10d:c090:400::5:b24f) (Quit: emf)
19:36:59 <shapr> I also ask whether every number can be saved to json, and will be the same when it's loaded from json
19:37:21 <shapr> @check \a b c -> a * (b * c) == (a * b) * c
19:37:22 <lambdabot> +++ OK, passed 100 tests.
19:37:42 <shapr> Guest41: does the associativity of multiplication seem like a reasonable property?
19:37:51 <Guest41> Wait how does lambdabot generate its tests?
19:37:52 <shapr> tomsmeding: thanks for that example :-)
19:38:21 <Guest41> shapr: well I think you could overload your operator some horrible way and break it
19:38:22 y04nn joins (~y04nn@193.32.127.238)
19:38:29 <kuribas> @check \a b c -> (a::Double) * (b * c) == (a * b) * c
19:38:29 <shapr> Guest41: lambdabot uses QuickCheck, which has a definition for how to generate the values for each type.
19:38:31 <lambdabot> *** Failed! Falsifiable (after 4 tests and 8 shrinks):
19:38:31 <lambdabot> -0.16831687903971976 0.7961839001969537 0.28952502728872787
19:38:44 <Hecate> :O
19:38:52 <shapr> Guest41: also, floating point numbers in computers aren't what you think!
19:38:56 <shapr> as kuribas just demonstrated
19:39:00 <tomsmeding> for some conservative definition of "each" in "each type" :p
19:39:11 <shapr> heh, yes
19:39:16 <Guest41> aha, interesting how it didn't try that many DOubles the first time
19:39:28 <Guest41> it had to be nudged a bit
19:40:02 <Guest41> shapr: so does hspec "allow" writing property based tests?
19:40:18 <Guest41> Also, what numbers break JSON :^)
19:40:22 <shapr> in Haskell, if your parser produces a data structure like an abstract syntax tree, you could turn that data structure into the matching text, and then see if the parser gets the right result!
19:40:56 <shapr> Guest41: surprisingly many numbers break JSON, but the most common is that dividing by zero gives you NaN which is a floating point value, and is saved into JSON as the string "NaN"
19:41:41 <shapr> you'd also think that all values of numbers should equal themselves, but NaN == NaN is false
19:41:43 <boxscape_> > read "NaN" :: Double
19:41:44 <lambdabot> NaN
19:42:20 <justsomeguy> Floating point as a whole is really confusing and unintuitive to me.
19:42:26 <shapr> > let nan = read "NaN" :: Double in nan == nan
19:42:28 <lambdabot> False
19:42:53 <Guest41> shapr: thank you for the information
19:43:07 <shapr> Guest41: yes, hspec allows you to write both unit tests and property based tests
19:43:33 <shapr> Guest41: got any other fun questions?
19:43:36 <Guest41> I think a mix of both is what I'll go for
19:43:46 <tomsmeding> > (0.0 == -0.0, show 0.0 == show "-0.0")
19:43:48 <lambdabot> (True,False)
19:43:53 <Guest41> shapr: What a thing to say :^)
19:43:54 <boxscape_> "NaN" being stored as a string in JSON doesn't seem to imply that storing it in JSON doesn't preserve the information, after all, JSON generally doesn't store type information and you always have to know as what type you want to decode it, and you can with `read @Double`
19:43:56 <tomsmeding> > (0.0 == -0.0, show 0.0 == show (-0.0))
19:43:57 <lambdabot> (True,False)
19:44:06 <boxscape_> or well
19:44:07 <shapr> boxscape_: oh that's a good point
19:44:26 <boxscape_> I guess technically for read in particular to work, regular numbers would also have to have ""
19:44:28 <boxscape_> but close enough
19:45:56 <tomsmeding> > round (fromIntegral (2 ^ 55 + 1 :: Int) :: Double) == 2 ^ 55 + 1
19:45:57 <lambdabot> False
19:46:06 <shapr> fromIntegral can bite you hard
19:46:35 × _ht quits (~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection)
19:46:46 <tomsmeding> > round (fromIntegral (2 ^ 55 + 1 :: Int) :: Double) :: Int == 2 ^ 55 + 1
19:46:47 <lambdabot> error:
19:46:47 <lambdabot> Not in scope: type constructor or class ‘==’error:
19:46:47 <lambdabot> Not in scope: type constructor or class ‘^’error:
19:46:57 <tomsmeding> > (round (fromIntegral (2 ^ 55 + 1 :: Int) :: Double) :: Int) == 2 ^ 55 + 1
19:46:58 <lambdabot> False
19:47:02 ec joins (~ec@gateway/tor-sasl/ec)
19:47:04 <tomsmeding> there, all types specified
19:47:10 <tomsmeding> nice error message btw
19:47:14 <shapr> heh
19:47:17 <Guest41> well, probably not a fun question, but I'm struggling to write a parser that can consume a sequence of interspersed value types. Something like `A 1 2 "hello" True 5.6 False` I would need to store each list of values in a record field. I have no idea how to do this :P
19:47:36 <tomsmeding> Guest41: do you have a parser that parses one such value?
19:47:43 <Guest41> Yes I do
19:47:51 × Morrow quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Read error: Connection reset by peer)
19:47:54 <tomsmeding> 'pValue `sepBy` spaces1' ?
19:48:04 Morrow joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
19:48:06 <Guest41> I have one parser foreach type I want to parse
19:48:27 <shapr> do you know the order of the types in the string you want to parse?
19:48:27 <Guest41> wait I asked the question wrong
19:48:54 <shapr> Guest41: sounds like you are taking an especially fun class
19:49:07 <Guest41> well I'm trying to write a parser for: https://github.com/kdl-org/kdl/blob/main/SPEC.md#node
19:50:05 <Guest41> it's a doc language where a node can be in the form `node 123 { emptyNode; } prop=value`
19:50:36 <Guest41> the spec insists you can have values, sub-nodes, and key-value pairs interspersed in any order
19:50:57 <Guest41> so much for an XML-like language
19:51:07 <tomsmeding> perhaps make an ADT, something like 'data Thing = ValueThing Value | SubNodeThing SubNode | KeyValueThing Key Value'
19:51:22 <shapr> yeah, I like that
19:51:29 <tomsmeding> and make a pThing = ValueThing <$> pValue <|> ...
19:51:35 <tomsmeding> and then the sepBy thing :p
19:51:50 <tomsmeding> and then build your record from the grouped values in the resulting list
19:52:12 tomsmeding finds that linked description very hard to read
19:52:37 <Guest41> I swear those algebraic data types are amazing
19:52:45 <shapr> they are!
19:52:56 <Guest41> such a simple one-liner to solve a rather tricky issue
19:53:06 <shapr> but really you can say "this holds one of these things" or you can say "this holds several things"
19:53:27 hexfive joins (~eric@50.35.83.177)
19:53:56 <shapr> Guest41: if it were me, I'd start by writing a parser that does some of the things and doesn't do the rest
19:53:57 <Guest41> well only now do I see the latter
19:54:08 <kuribas> Or you can make a record data ThingMaybe = ThingMaybe (Maybe Value) (Maybe SubNode) (Maybe KeyValue)
19:54:10 <shapr> but that's because I get more motivation from incremental small successes
19:54:23 <kuribas> and parse into (Endo ThingMaybe)
19:54:42 <kuribas> then check in the end if all values are "Just".
19:54:44 <Guest41> shapr: That's good idea for me too, because I will probably write some nonesense the first time around
19:54:51 <shapr> I certainly do that
19:55:46 <tomsmeding> kuribas: in this case probably replace Maybe by [] since there maybe be more than one
19:55:46 <kuribas> I almost always start my code with nonsense.
19:56:14 <tomsmeding> but that's kind of a clever solution; the sum type approach that I suggested is more accessible to a non-advanced haskeller, I think
19:56:16 <kuribas> tomsmeding: in that case your ADT would be more useful.
19:56:18 doyougnu joins (~user@c-73-25-202-122.hsd1.or.comcast.net)
19:57:18 × hexfive quits (~eric@50.35.83.177) (Client Quit)
19:57:36 tomsmeding wonders if someone has written a generic function that takes a [Thing] and returns a ThingList, but then using Generics so it works for all suhc types
19:57:41 <tomsmeding> s/suhc/such/
19:57:56 <tomsmeding> like generalised 'partition'
19:58:03 <tomsmeding> um, 'partitionEithers'
20:00:39 × kuribas quits (~user@ptr-25vy0i8j07s3q8yomww.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 26.3))
20:01:17 × mcfrdy quits (~mcfrdy@user/mcfrdy) (Quit: quit)
20:02:07 mcfrdy joins (~mcfrdy@user/mcfrdy)
20:02:26 emf joins (~emf@2620:10d:c090:400::5:b24f)
20:03:35 × emf quits (~emf@2620:10d:c090:400::5:b24f) (Client Quit)
20:03:37 × dixie_ quits (~dixie@real.wilbury.sk) (Ping timeout: 252 seconds)
20:05:02 oxide joins (~lambda@user/oxide)
20:05:29 × juhp quits (~juhp@128.106.188.220) (Ping timeout: 265 seconds)
20:05:40 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
20:07:22 juhp joins (~juhp@128.106.188.220)
20:10:15 dixie joins (~dixie@real.wilbury.sk)
20:11:42 yauhsien joins (~yauhsien@118-167-48-21.dynamic-ip.hinet.net)
20:12:54 acidjnk_new joins (~acidjnk@p200300d0c703cb53d06c99722a203ed2.dip0.t-ipconnect.de)
20:13:44 acidjnk joins (~acidjnk@p200300d0c703cb532872c69d6a5a30e0.dip0.t-ipconnect.de)
20:14:36 × Morrow quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Read error: Connection reset by peer)
20:14:42 Morrow_ joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
20:15:56 × yauhsien quits (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Ping timeout: 245 seconds)
20:16:21 × acidjnk_new3 quits (~acidjnk@p200300d0c703cb53c55fe893eb04092a.dip0.t-ipconnect.de) (Ping timeout: 245 seconds)
20:16:58 × mht quits (~mht@mht.wtf) (Ping timeout: 260 seconds)
20:17:11 × connrs quits (~connrs@user/connrs) (Quit: ZNC 1.8.2 - https://znc.in)
20:17:31 connrs joins (~connrs@user/connrs)
20:17:54 × acidjnk_new quits (~acidjnk@p200300d0c703cb53d06c99722a203ed2.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
20:17:54 × Morrow_ quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Read error: Connection reset by peer)
20:18:01 Morrow joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
20:19:18 × sshine quits (~simon@hubris.eta.solutions) (Ping timeout: 260 seconds)
20:19:18 × zzz quits (~yin@user/yin) (Ping timeout: 260 seconds)
20:19:46 × rookie101 quits (~rookie@207.154.204.166) (Ping timeout: 260 seconds)
20:19:47 × janus quits (janus@anubis.0x90.dk) (Ping timeout: 240 seconds)
20:21:20 × nrl^ quits (~nrl@68.101.50.106) (Remote host closed the connection)
20:22:11 sshine joins (~simon@hubris.eta.solutions)
20:23:44 mht joins (~mht@mht.wtf)
20:23:45 zzz joins (~yin@user/yin)
20:28:54 × justsomeguy quits (~justsomeg@user/justsomeguy) (Quit: WeeChat 3.2)
20:29:29 <Guest41> hmm, if I have a type like Int wrapped in some data constructor like Constructor Int, is there an "idiomatic" way to "flatten" it?
20:30:11 <Guest41> sometthing like `flatten :: AnyConstructor a -> a`
20:30:51 <Guest41> I know I can pattern match against what I need but I think this would be common (no?)
20:30:51 <geekosaur> look at the Data.Coerce module?
20:31:18 <geekosaur> otherwise no, there's no shortcut. but you can pattern match in more places than you might think
20:31:33 janus joins (janus@anubis.0x90.dk)
20:32:11 rookie101 joins (~rookie@207.154.204.166)
20:32:46 × slack1256 quits (~slack1256@181.203.20.152) (Ping timeout: 252 seconds)
20:34:24 <Guest41> geekosaur: the doc is unreadable for me ... how should I use coerce exactly?
20:35:17 × Null_A quits (~null_a@2601:645:8700:2290:91f2:4a69:be9c:a77e) (Remote host closed the connection)
20:35:28 <geekosaur> given your example, a valid use of coerce would be coerce :: Constructor Int -> Int (not that you have to write the signature, that's just what a use of coerce under those circumstances would do)
20:35:50 <geekosaur> it would also be able to go the other way, coerce on an Int can produce a Constructor Int
20:38:44 <Guest41> oh no I made a silly mistake. Constructor isn't a type: `data Type = Constructor Int | Constructor1 String` ...
20:39:09 <geekosaur> no, you need to pattern match for that
20:39:23 <Guest41> no way to use coerce right?
20:39:35 <geekosaur> nope
20:39:46 <geekosaur> coerce operates on types, not data constructors
20:40:11 <geekosaur> what type would a hypothetical dataCoerce have with respect to type Type?
20:40:54 <awpr> you could make it a record constructor and use the field selector function. but then it's a partial function, with all the associated issues (like, you need to already know it's the right constructor, which means you probably already pattern-matched it, and thus already have the contents from the pattern match and don't need the selector function)
20:43:05 Null_A joins (~null_a@2601:645:8700:2290:91f2:4a69:be9c:a77e)
20:43:38 × alzgh quits (~alzgh@user/alzgh) (Remote host closed the connection)
20:44:00 alzgh joins (~alzgh@user/alzgh)
20:45:08 <Guest41> awpr: well in fact I already pattern matched it to exclude unwanted constructors, which means a field selector is just the right thing for me
20:45:44 <Guest41> I hadn't written field selectors the first time I wrote the type definition and I seemingly forgot they exis
20:45:55 <geekosaur> if you pattern matched it, it's trivial to extract the value at the same time
20:46:01 <Guest41> it's always the simple things with haskell :^)
20:46:02 <awpr> but if you're inside a pattern match for that constructor, then the contents are already in scope, unless you _'d the
20:46:03 <awpr> m
20:47:54 <Guest41> geekosaur: I used `filter isRightConstructor list` where isRightConstructor x = case x of RightConstructor _ -> True ....
20:47:58 Guest79 joins (~Guest79@247.158-248-49.customer.lyse.net)
20:48:01 <Guest79> Howdy
20:48:01 × vysn quits (~vysn@user/vysn) (Ping timeout: 245 seconds)
20:48:01 × mei quits (~mei@user/mei) (Quit: mei)
20:48:18 <geekosaur> right, so just change the _ to a variable name and you have your value
20:48:18 <Guest41> wait yes
20:48:29 <Guest41> *facepalm*
20:48:44 <awpr> try `mapMaybe` in place of `filter`
20:48:51 × MQ-17J quits (~MQ-17J@35.50.53.58) (Ping timeout: 245 seconds)
20:48:56 <Guest79> Can I ask a noob question? I found " foldl " and according to zvon.org it is Prelude, but when I run the examples in ghci I just get errors
20:49:00 <Guest79> http://zvon.org/other/haskell/Outputprelude/foldl_f.html
20:49:28 MQ-17J joins (~MQ-17J@2607:fb90:8848:a516:92d8:c446:e2f1:d98e)
20:50:46 <Guest41> awpr: Amazing!
20:50:48 geranim0 joins (~geranim0@modemcable242.171-178-173.mc.videotron.ca)
20:50:59 <Guest41> I should learn more about these functions
20:52:18 <geekosaur> > foldl (/) 64 [4,2,4]
20:52:23 <lambdabot> 2.0
20:54:17 <Guest79> https://i.imgur.com/RZDUpzi.png
20:54:20 <Guest79> oh god
20:54:20 <Guest79> nevermind...
20:54:20 <geekosaur> so what errors heh
20:54:20 <Guest79> i guess i redefined the function in my .hs file
20:54:20 <Guest79> hehe, ty tho
20:54:20 <monochrom> This is why remote tech support is impossible.
20:55:15 × Null_A quits (~null_a@2601:645:8700:2290:91f2:4a69:be9c:a77e) (Remote host closed the connection)
20:55:15 <Guest79> Well it helped me within 1 minute
20:55:15 <monochrom> That's just rubber duck working.
20:55:28 <Guest79> it's a bit cozier having cyber humans instead of rubber ducks tho
20:55:37 × zer0bitz quits (~zer0bitz@dsl-hkibng31-54fafc-123.dhcp.inet.fi) (Ping timeout: 265 seconds)
20:55:47 <monochrom> My TA and I came up with this crazy idea that we should distribute rubber ducks to our students.
20:56:33 awpr wishes Haskell had a cute mascot like the Go-pher or the Rust crab
20:57:12 <monochrom> I then came up with this next idea that the rubber ducks should contain smart circuitry to automatically escalate their questions to me when appropriate.
20:57:24 <geekosaur> overengineered
20:57:37 <monochrom> My TA pointed out "therefore it just needs the null circuitry".
20:58:16 <monochrom> We had a Da Lamb mascot.
20:58:25 <monochrom> But it didn't take off.
20:58:48 <monochrom> We're now stuck with the bind-lambda logo.
20:59:07 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
20:59:08 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
20:59:08 wroathe joins (~wroathe@user/wroathe)
20:59:24 <awpr> because it's an infix of lambda or because it's a popular ingredient in curry
21:00:04 <monochrom> I think it began as simply the letter game of permuting "lambda"
21:00:38 <monochrom> But I used to say "applicative is curried burrito"
21:00:45 <monochrom> err "curry burrito"
21:00:47 <awpr> just brainstorming more potential mascots here: C++thulhu
21:01:03 <monochrom> https://currito.com/
21:02:09 emf joins (~emf@2620:10d:c090:400::5:2507)
21:03:00 lavaman joins (~lavaman@98.38.249.169)
21:04:01 Null_A joins (~null_a@2601:645:8700:2290:91f2:4a69:be9c:a77e)
21:04:37 <boxscape_> awpr https://pbs.twimg.com/media/EXBVdPuWoAIt2K2?format=jpg&name=large
21:05:02 <monochrom> Nice.
21:06:47 × yinghua quits (~yinghua@2800:2121:1400:1db:2dd5:711:7e56:f9f7) (Ping timeout: 240 seconds)
21:07:41 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 265 seconds)
21:08:54 yinghua joins (~yinghua@181.228.40.183)
21:09:46 jaitoon joins (~Jaitoon@2a02:c7f:a5f:1d00:f43d:e16d:5d40:5652)
21:10:25 <Guest41> is that an unofficial mascot?
21:10:51 <boxscape_> there's a big wiki page with logo suggestions where that was one https://wiki.haskell.org/Haskell_logos/New_logo_ideas
21:11:03 <boxscape_> (before the current logo was chosen, though I believe it was born in that thread)
21:13:40 <monochrom> The radioactivity one came from the 1st and worst monad analogy.
21:13:46 Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
21:14:14 <monochrom> Perhaps it's time you young lads hear the long-forgotten cautionary tale.
21:14:36 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 265 seconds)
21:15:06 Lord_of_Life_ is now known as Lord_of_Life
21:15:44 × emf quits (~emf@2620:10d:c090:400::5:2507) (Quit: emf)
21:17:03 <monochrom> Don Stewart (IRC nick dons) was a prominent contributor to Haskell libraries back then. You have him to thank for bytestring, plugins (not GHC plugin, rather the "can my haskell exe load a plugin dynamically?" kind), and others.
21:18:34 <Hecate> monochrom: what's the state of plugins anyway?
21:18:58 × myShoggoth quits (~myShoggot@97-120-70-214.ptld.qwest.net) (Ping timeout: 252 seconds)
21:19:06 <monochrom> So one day he blogged that he finally thought up the perfect analogy for monad or the IO monad (I forgot which): a spacesuit with hazardous nuclear waste inside, you are outside so you are safe.
21:19:18 emf joins (~emf@2620:10d:c090:400::5:2507)
21:19:22 <monochrom> I think miraculous it still builds today. I haven't really checked.
21:19:51 <monochrom> The problem is that, if anything, you should be inside, the nuclear waste should be outside.
21:20:12 <geekosaur> someone seems to be keeping it up to date
21:20:13 <monochrom> And this analogy works for IO only, if anything.
21:20:33 <monochrom> There is nothing unsafe about even the [] monad.
21:21:02 × michalz quits (~michalz@185.246.204.72) (Remote host closed the connection)
21:21:16 × SquidDev quits (~SquidDev@autoclave.squiddev.cc) (Quit: Bye!)
21:21:41 SquidDev joins (~SquidDev@autoclave.squiddev.cc)
21:22:30 × emf quits (~emf@2620:10d:c090:400::5:2507) (Client Quit)
21:23:34 <boxscape_> there's a whole wikibooks page using the nuclear waste analogy https://en.wikibooks.org/w/index.php?title=Haskell/Understanding_monads&oldid=933545
21:23:38 <boxscape_> (removed in the current version)
21:23:38 × oxide quits (~lambda@user/oxide) (Ping timeout: 265 seconds)
21:24:12 <monochrom> Yeah good riddance.
21:25:42 <monochrom> The Haskell Wikibook restored my faith in the wiki way of doing things because someone was rude enough to just delete a whole chapter wholesale.
21:25:46 <monochrom> "rude"
21:26:13 <monochrom> You look at the haskell wiki and you can still see that everyone is too polite to delete outdated, obsolete, wrong stuff.
21:26:35 <monochrom> This politeness makes the whole thing useless.
21:26:49 <geekosaur> never assume "too polite" when "doesn't give a damn" is sufficient
21:26:59 <boxscape_> whose razor is that
21:26:59 × gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving)
21:27:07 <geekosaur> which, sadly, is a recurrent disease of wikis
21:27:08 <awpr> wow some of those logos are so bad they're actually amazing
21:27:13 <awpr> "HELL ASK"
21:27:28 <boxscape_> oh I didn't even notice that's an anagram when I saw the logo
21:28:35 <monochrom> OK, I was speaking for and about myself. I gave a damn, but too afraid to delete.
21:29:55 × pbrisbin quits (~patrick@pool-173-49-147-250.phlapa.fios.verizon.net) (Ping timeout: 265 seconds)
21:32:50 emf joins (~emf@2620:10d:c090:400::5:2507)
21:34:23 Guest4176 joins (~Guest41@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
21:34:27 × cheater quits (~Username@user/cheater) (Ping timeout: 240 seconds)
21:35:32 mestre joins (~mestre@191.177.175.57)
21:36:04 × emf quits (~emf@2620:10d:c090:400::5:2507) (Client Quit)
21:36:28 × y04nn quits (~y04nn@193.32.127.238) (Ping timeout: 252 seconds)
21:38:31 × Guest41 quits (~Guest41@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Ping timeout: 256 seconds)
21:39:34 × Morrow quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 260 seconds)
21:40:09 Morrow joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
21:41:23 cheater joins (~Username@user/cheater)
21:44:14 emf joins (~emf@2620:10d:c090:400::5:2507)
21:45:03 Guest2934 joins (~Guest29@206.12.14.124)
21:47:44 × MQ-17J quits (~MQ-17J@2607:fb90:8848:a516:92d8:c446:e2f1:d98e) (Read error: Connection reset by peer)
21:48:42 MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com)
21:48:57 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
21:49:32 makrus joins (~makrus@206.12.14.124)
21:50:22 makrus parts (~makrus@206.12.14.124) ()
21:50:32 × Null_A quits (~null_a@2601:645:8700:2290:91f2:4a69:be9c:a77e) (Remote host closed the connection)
21:51:39 <sclv> monochrom: i had no idea that dons was responsible for the nuclear waste metaphor, lol
21:52:08 <monochrom> :)
21:52:17 × dhouthoo quits (~dhouthoo@178-117-36-167.access.telenet.be) (Quit: WeeChat 3.2)
21:52:53 <Hecate> awpr: oh yeah it's fantastic
21:53:03 Null_A joins (~null_a@2601:645:8700:2290:91f2:4a69:be9c:a77e)
21:53:21 <boxscape_> (https://wiki.haskell.org/Monad_tutorials_timeline claims Eric Kow came up with space suits and Paul Johnson with nuclear waste)
21:55:12 × Guest79 quits (~Guest79@247.158-248-49.customer.lyse.net) (Quit: Client closed)
21:55:14 myShoggoth joins (~myShoggot@97-120-70-214.ptld.qwest.net)
21:57:25 <monochrom> Ah, the one I saw was "2007-01 Think of a monad - Don Stewart (reposted on Eric Kow's blog)"
21:57:37 × max22- quits (~maxime@2a01cb088335980073a4b4db0ef417b5.ipv6.abo.wanadoo.fr) (Quit: Leaving)
21:57:59 y04nn joins (~y04nn@193.32.127.238)
21:59:15 <monochrom> I admit error in attributing the 1st monad analogy.
21:59:29 × Guest2934 quits (~Guest29@206.12.14.124) (Quit: Client closed)
22:00:04 <monochrom> But may I attribute the 1st monad analogy stack? SpaceSuitT NuclearWaste or something... :)
22:01:58 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
22:07:11 × xff0x quits (~xff0x@2001:1a81:5386:1100:51ce:15a:f28:e4d7) (Ping timeout: 245 seconds)
22:07:35 × mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection)
22:08:13 xff0x joins (~xff0x@2001:1a81:5386:1100:959c:7ba1:9c0e:1cbf)
22:11:16 × benin036932301 quits (~benin@183.82.176.107) (Quit: The Lounge - https://thelounge.chat)
22:14:11 × Guest4176 quits (~Guest41@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Quit: Client closed)
22:16:15 benin036932301 joins (~benin@183.82.176.107)
22:20:43 yauhsien joins (~yauhsien@118-167-50-28.dynamic-ip.hinet.net)
22:25:22 × yauhsien quits (~yauhsien@118-167-50-28.dynamic-ip.hinet.net) (Ping timeout: 252 seconds)
22:25:29 × cheater quits (~Username@user/cheater) (Ping timeout: 252 seconds)
22:25:39 cheater joins (~Username@user/cheater)
22:25:47 random-jellyfish joins (~random-je@user/random-jellyfish)
22:25:53 azimut joins (~azimut@gateway/tor-sasl/azimut)
22:26:16 × unmanbearpig quits (~unmanbear@45.76.95.141) (Changing host)
22:26:16 unmanbearpig joins (~unmanbear@user/unmanbearpig)
22:26:44 × random-jellyfish quits (~random-je@user/random-jellyfish) (Client Quit)
22:27:08 × azimut_ quits (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
22:34:17 × mikoto-chan quits (~mikoto-ch@83.137.2.251) (Ping timeout: 252 seconds)
22:36:07 mikoto-chan joins (~mikoto-ch@83.137.2.252)
22:36:21 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 245 seconds)
22:37:36 × waleee quits (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 245 seconds)
22:39:50 waleee joins (~waleee@h-98-128-228-119.NA.cust.bahnhof.se)
22:43:15 pavonia joins (~user@user/siracusa)
22:43:48 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
22:44:16 × Organizers|Robin quits (~Robin_Jad@152.67.64.160) (Ping timeout: 245 seconds)
22:45:50 × acidjnk quits (~acidjnk@p200300d0c703cb532872c69d6a5a30e0.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
22:50:10 × MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer)
22:50:43 × mikoto-chan quits (~mikoto-ch@83.137.2.252) (Ping timeout: 252 seconds)
22:50:44 MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com)
22:56:10 × ubert quits (~Thunderbi@178.115.55.159.wireless.dyn.drei.com) (Ping timeout: 252 seconds)
22:56:37 yauhsien joins (~yauhsien@118-167-50-28.dynamic-ip.hinet.net)
22:57:28 × yauhsien quits (~yauhsien@118-167-50-28.dynamic-ip.hinet.net) (Remote host closed the connection)
22:59:44 tsmc[m] joins (~tsmcmatri@2001:470:69fc:105::1:7e1)
23:00:31 × hendursaga quits (~weechat@user/hendursaga) (Remote host closed the connection)
23:01:00 hendursaga joins (~weechat@user/hendursaga)
23:03:59 × MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Ping timeout: 252 seconds)
23:04:41 × CnnibisIndica quits (~herb@user/mesaboogie) (Ping timeout: 245 seconds)
23:04:51 codygman[m] joins (~codygman@2001:470:69fc:105::b4ba)
23:05:03 CnnibisIndica joins (~herb@user/mesaboogie)
23:06:22 × pfurla quits (~pfurla@ool-182ed2e2.dyn.optonline.net) (Ping timeout: 260 seconds)
23:08:58 × Tuplanolla quits (~Tuplanoll@91-159-69-50.elisa-laajakaista.fi) (Quit: Leaving.)
23:09:38 Guest79 joins (~Guest79@47.186.214.206)
23:12:03 <Guest79> Can anyone help? I'm stuck trying to use a custom Logging monad transformer inside of my App monad. I don't know how to go from LoggingOrville -> App here: https://github.com/codygman/smol-monadorville-example/blob/a95261633eed1b9df9bf1d4df8255cec92fecc22/Main.hs#L52
23:13:07 <Guest79> Maybe with MonadIO? I want my soon to be custom instance of `runningQuery` to be used
23:13:42 × machinedgod quits (~machinedg@135-23-192-217.cpe.pppoe.ca) (Remote host closed the connection)
23:14:36 MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com)
23:14:40 machinedgod joins (~machinedg@135-23-192-217.cpe.pppoe.ca)
23:17:06 × euandreh quits (~euandreh@2804:14c:33:9fe5:6daf:7cb1:25f6:bef8) (Ping timeout: 260 seconds)
23:20:47 emf_ joins (~emf@2601:602:9401:b660:47d:d5f4:4143:7c05)
23:20:51 × xsperry quits (~xs@user/xsperry) (Remote host closed the connection)
23:21:14 xsperry joins (~xs@cpe-188-129-101-182.dynamic.amis.hr)
23:22:29 euandreh joins (~euandreh@2804:14c:33:9fe5:2810:3afa:c444:8029)
23:23:10 × emf quits (~emf@2620:10d:c090:400::5:2507) (Ping timeout: 260 seconds)
23:28:05 × Guest79 quits (~Guest79@47.186.214.206) (Quit: Ping timeout (120 seconds))
23:28:16 Guest79 joins (~Guest79@47.186.214.206)
23:28:27 yauhsien joins (~yauhsien@118-167-50-28.dynamic-ip.hinet.net)
23:29:30 × mestre quits (~mestre@191.177.175.57) (Quit: leaving)
23:29:47 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 265 seconds)
23:32:55 × Guest79 quits (~Guest79@47.186.214.206) (Client Quit)
23:33:08 × yauhsien quits (~yauhsien@118-167-50-28.dynamic-ip.hinet.net) (Ping timeout: 252 seconds)
23:35:35 × MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Ping timeout: 265 seconds)
23:37:04 mestre joins (~mestre@191.177.175.57)
23:40:43 MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com)
23:40:59 × Gurkenglas quits (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 246 seconds)
23:45:52 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
23:45:52 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
23:45:52 wroathe joins (~wroathe@user/wroathe)
23:49:07 × BosonCollider quits (~olofs@90-227-86-119-no542.tbcn.telia.com) (Ping timeout: 252 seconds)
23:50:11 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 252 seconds)
23:50:40 × ph88 quits (~ph88@2a02:8109:9e00:7e5c:5435:afc4:e6b4:ce6b) (Ping timeout: 252 seconds)
23:52:33 benin0369323016 joins (~benin@183.82.30.62)
23:53:25 × aegon quits (~mike@174.127.249.180) (Remote host closed the connection)
23:53:38 zebrag joins (~chris@user/zebrag)
23:54:16 × benin036932301 quits (~benin@183.82.176.107) (Ping timeout: 245 seconds)
23:54:16 benin0369323016 is now known as benin036932301
23:55:57 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)

All times are in UTC on 2021-09-29.