Home liberachat/#haskell: Logs Calendar

Logs on 2022-03-24 (liberachat/#haskell)

00:00:12 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 240 seconds)
00:00:48 jpds joins (~jpds@gateway/tor-sasl/jpds)
00:00:50 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 260 seconds)
00:04:09 × slac45998 quits (~slack1256@191.125.227.64) (Remote host closed the connection)
00:04:48 × zeenk quits (~zeenk@2a02:2f04:a110:7d00:2011:cfed:bad7:3c94) (Quit: Konversation terminated!)
00:05:22 × Crash0verrid3 quits (~IceChat95@2601:151:4500:17b:981f:f251:77de:55e5) (Quit: For Sale: Parachute. Only used once, never opened, small stain.)
00:07:03 × xff0x quits (~xff0x@i121-117-52-147.s41.a013.ap.plala.or.jp) (Ping timeout: 256 seconds)
00:07:30 × romesrf quits (~romes@44.190.189.46.rev.vodafone.pt) (Quit: WeeChat 3.4)
00:07:31 × perrierjouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.4.1)
00:10:07 <dons> shellcheck is excellent.
00:10:57 dsrt^ joins (~dsrt@96-67-120-105-static.hfc.comcastbusiness.net)
00:11:00 <koala_man> praise from caesar
00:11:35 × lavaman quits (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Ping timeout: 256 seconds)
00:18:11 yauhsien joins (~yauhsien@61-231-38-131.dynamic-ip.hinet.net)
00:20:56 machinedgod joins (~machinedg@24.105.81.50)
00:25:14 × pavonia quits (~user@user/siracusa) (Read error: Connection reset by peer)
00:25:24 pavonia joins (~user@user/siracusa)
00:27:39 <sm> Axman6: I was in here saying the same thing a few weeks ago. Conclusion: that's GHC plus hlint, isn't it ?
00:32:26 mvk joins (~mvk@2607:fea8:5cc3:7e00::7980)
00:32:40 × ProfSimm quits (~ProfSimm@87.227.196.109) (Remote host closed the connection)
00:33:05 × mud quits (~mud@user/kadoban) (Quit: quit)
00:33:18 <Axman6> I've never really felt like the experiences are really comparable, but the problem is also significantly more difficult in Haskell IMO
00:33:57 <Axman6> adding a type system where things aren't just nearly always strings makes things much harder to automate good advice
00:36:45 <sm> what makes the experience different ? shellcheck can give more definite concrete advice ?
00:37:19 <sm> I think hlint is pretty good at that, but GHC less so - unless you restrict to some kind of Simple Haskell maybe
00:38:03 <sm> that's why we need racket-like language levels (I think Helium does that)
00:38:53 chenqisu1 joins (~chenqisu1@183.217.201.88)
00:42:08 ProfSimm joins (~ProfSimm@87.227.196.109)
00:42:57 nautical joins (~nautical@2601:602:900:1630::7cbb)
00:43:37 gardnan joins (~max@c-75-70-252-201.hsd1.co.comcast.net)
00:45:10 × phma quits (phma@2001:5b0:2172:dab8:f6f:c543:829a:340a) (Read error: Connection reset by peer)
00:46:32 Akiva joins (~Akiva@user/Akiva)
00:46:45 × ProfSimm quits (~ProfSimm@87.227.196.109) (Remote host closed the connection)
00:47:28 × machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 272 seconds)
00:50:15 phma joins (~phma@host-67-44-209-94.hnremote.net)
00:52:45 × phma quits (~phma@host-67-44-209-94.hnremote.net) (Read error: Connection reset by peer)
00:53:56 × nautical quits (~nautical@2601:602:900:1630::7cbb) (Quit: WeeChat 3.4)
00:54:49 phma joins (~phma@host-67-44-209-94.hnremote.net)
00:56:49 × lbseale quits (~ep1ctetus@user/ep1ctetus) (Read error: Connection reset by peer)
00:58:17 nicbk joins (~nicbk@user/nicbk)
01:00:57 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 240 seconds)
01:05:12 × dsrt^ quits (~dsrt@96-67-120-105-static.hfc.comcastbusiness.net) (Remote host closed the connection)
01:09:57 × Akiva quits (~Akiva@user/Akiva) (Ping timeout: 256 seconds)
01:10:32 × cyphase quits (~cyphase@user/cyphase) (Ping timeout: 240 seconds)
01:11:18 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
01:12:20 merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
01:15:02 Everything parts (~Everythin@37.115.210.35) ()
01:17:25 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
01:18:30 × yauhsien quits (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Ping timeout: 272 seconds)
01:22:33 meinside joins (uid24933@id-24933.helmsley.irccloud.com)
01:22:39 lavaman joins (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net)
01:26:33 × Benzi-Junior quits (~BenziJuni@88-149-64-179.du.xdsl.is) (Quit: ZNC 1.8.2 - https://znc.in)
01:28:05 <abastro[m]> What language is shellcheck made in?
01:31:24 × TonyStone quits (~TonyStone@2603-7080-8607-c36a-2420-4733-60a5-9d17.res6.spectrum.com) (Ping timeout: 240 seconds)
01:34:40 TonyStone joins (~TonyStone@2603-7080-8607-c36a-0874-3206-ce5b-fa50.res6.spectrum.com)
01:35:16 × TonyStone quits (~TonyStone@2603-7080-8607-c36a-0874-3206-ce5b-fa50.res6.spectrum.com) (Remote host closed the connection)
01:41:24 × merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 252 seconds)
01:41:49 × Unicorn_Princess quits (~Unicorn_P@46-54-248-191.static.kate-wing.si) (Remote host closed the connection)
01:42:37 Unicorn_Princess joins (~Unicorn_P@46-54-248-191.static.kate-wing.si)
01:45:48 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 252 seconds)
01:48:18 TonyStone joins (~TonyStone@2603-7080-8607-c36a-0874-3206-ce5b-fa50.res6.spectrum.com)
01:49:08 <boxscape_> abastro[m] haskell
01:49:24 × TonyStone quits (~TonyStone@2603-7080-8607-c36a-0874-3206-ce5b-fa50.res6.spectrum.com) (Read error: Connection reset by peer)
01:50:06 <abastro[m]> ?!?!? Wait
01:50:06 <lambdabot> Unknown command, try @list
01:50:09 <abastro[m]> How?
01:50:46 TonyStone joins (~TonyStone@2603-7080-8607-c36a-0874-3206-ce5b-fa50.res6.spectrum.com)
01:51:03 <boxscape_> abastro[m] haskell is typically well suited to parsing languages and handling ASTs (in this case a bash AST), so it kind of makes sense
01:51:31 <abastro[m]> I see. Seems it would be hard to gather contributors though.
01:51:50 <boxscape_> https://github.com/koalaman/shellcheck says there are 126 contributors
01:52:54 <boxscape_> though of course as with all repos almost all of them have only a couple of commits
01:52:57 × alp quits (~alp@user/alp) (Ping timeout: 252 seconds)
01:53:49 <abastro[m]> Wow, impressive
01:54:59 justsomeguy joins (~justsomeg@user/justsomeguy)
02:01:50 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
02:03:49 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
02:05:48 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
02:06:27 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
02:07:38 geekosaur joins (~geekosaur@xmonad/geekosaur)
02:09:47 × lavaman quits (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Remote host closed the connection)
02:14:33 × catch22 quits (~catch22@204.40.96.58.static.exetel.com.au) (Quit: Client closed)
02:20:36 notzmv joins (~zmv@user/notzmv)
02:29:27 vglfr joins (~vglfr@88.155.118.203)
02:31:14 Guest39 joins (~Guest39@49.207.207.238)
02:32:37 × Guest39 quits (~Guest39@49.207.207.238) (Client Quit)
02:32:52 cyphase joins (~cyphase@user/cyphase)
02:34:12 yauhsien joins (~yauhsien@61-231-38-131.dynamic-ip.hinet.net)
02:34:53 × chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
02:39:27 xff0x joins (~xff0x@125x102x200x106.ap125.ftth.ucom.ne.jp)
02:40:07 lavaman joins (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net)
02:45:23 mud joins (~mud@user/kadoban)
02:46:50 × vglfr quits (~vglfr@88.155.118.203) (Ping timeout: 252 seconds)
02:54:04 <sm> why would it be hard ? everyone who ever wrote a shell script needs this tool :)
02:55:41 <sm> well maintained, well documented, highly practical haskell code - what could be more pleasant
02:56:06 × fryguybob quits (~fryguybob@cpe-74-67-169-145.rochester.res.rr.com) (Quit: leaving)
02:58:48 [_] joins (~itchyjunk@user/itchyjunk/x-7353470)
02:58:57 <sm> oh, you mean why would haskellers sully themselves enabling the writing of more shell scripts. Well yes.. they're just too useful and we can't live without them
03:00:40 <abastro[m]> Oh, that as well. Shell scripts are painful
03:01:49 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 268 seconds)
03:02:35 <sm> they kind of magically became not so painful when I noticed my editor showing errors and advice in real time
03:02:41 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
03:02:41 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
03:02:41 wroathe joins (~wroathe@user/wroathe)
03:03:17 <sm> I never even configured it, AFAIK. What ? It's unheard of
03:03:35 <abastro[m]> Wow, I should use that as well then
03:03:55 <abastro[m]> But mostly I meant how many ppl don't know haskell
03:04:33 <abastro[m]> As haskell is relatively unpopular language, it is harder for people to volunteer. A price to pay.
03:04:47 <sm> there's a great https://github.com/koalaman/shellcheck/wiki/DevGuide, and it looks like you could contribute to this knowing very little haskell
03:10:33 <sm> also, haskell might be relatively unpopular in industry, but it's highly popular among curious software devs. One of the largest IRC channels, etc
03:11:14 <sm> lots of high quality free support, relative to some languages
03:13:27 <sm> ok I suppose python, javascript, C sharp, Java, C++ are not lacking in support
03:15:56 × abradabara quits (~abradabar@185.183.97.187) (Quit: Lost terminal)
03:17:12 <koala_man> boxscape_: yeah there's basically 2-3 people who have made substantial Haskell improvements
03:17:26 <boxscape_> I see
03:18:20 <sm> have there been similar shell-checking tools built in other languages ?
03:18:38 <koala_man> shfmt in Go
03:20:36 <sm> shfmt related projects doesn't mention ShellCheck. Because it doesn't reformat things I suppose
03:22:01 <koala_man> ShellCheck never cared about formatting except as it relates to correctness, and shfmt filled in that gap. It's since added some checking functionality of its own which is neat
03:22:01 <abastro[m]> I wonder how you guys think about block/visual coding, would it make stuffs easier?
03:22:36 <boxscape_> I definitely think coding by writing an ASCII string isn't the pinnacle of user experience, but I'm not sure what a better interface would actually look like
03:23:04 [_] is now known as [itchyjunk]
03:23:10 <sm> it seems usually not to abastro, with a few exceptions with constrained scope (scratch.. that lab ide thing..)
03:24:05 <abastro[m]> Oh, so it should be like, Domain-specific. Right?
03:25:13 <sm> yes, that can be a better fit
03:25:17 <sm> have you tried https://code.world/blocks ?
03:25:48 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 272 seconds)
03:25:53 <sm> it looks like scratch in haskell
03:26:09 <koala_man> one such formatting issue is one of my favorite checks that never triggers, SC2262. If you run alias f='echo foo'; f; then it won't print 'foo' the first time
03:26:18 <koala_man> but it will the second time
03:26:28 <sm> yikes
03:26:31 <koala_man> yup
03:27:05 <sm> as a shell user, I'd never try something that crazy of course
03:27:38 <sm> though, now with flycheck and shellcheck at my back, I totally would 👍️
03:28:08 <koala_man> haha
03:28:26 <sm> you made me dangerous with bash, koala_man
03:29:37 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
03:29:46 <koala_man> haha
03:29:48 <koala_man> oof
03:31:56 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
03:31:57 finn_elija joins (~finn_elij@user/finn-elija/x-0085643)
03:31:57 finn_elija is now known as FinnElija
03:34:03 machinedgod joins (~machinedg@24.105.81.50)
03:34:45 <abastro[m]> How have you felf about haskell, koala_man?
03:38:02 merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
03:42:51 × boxscape_ quits (~boxscape_@p4ff0b60b.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
03:42:54 × Codaraxis quits (~Codaraxis@user/codaraxis) (Ping timeout: 272 seconds)
03:42:57 × terrorjack quits (~terrorjac@static.3.200.12.49.clients.your-server.de) (Quit: The Lounge - https://thelounge.chat)
03:43:49 × machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 240 seconds)
03:44:11 terrorjack joins (~terrorjac@2a01:4f8:1c1e:509a::1)
03:48:01 dsrt^ joins (~dsrt@96-67-120-105-static.hfc.comcastbusiness.net)
03:50:37 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 240 seconds)
03:52:58 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
03:53:28 <jackdk> koala_man: that makes sense - I assume alias expansion happens before the first command in a compound is evaluated?
03:59:59 × waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 252 seconds)
04:00:33 kilolympus joins (~kilolympu@31.205.200.235)
04:02:57 <Axman6> oh ouch, yeah I was trying to figure out whyit would be the case. that's very gross
04:04:05 awpr joins (uid446117@id-446117.lymington.irccloud.com)
04:04:22 × yauhsien quits (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Remote host closed the connection)
04:04:38 <Axman6> so, semicolons are not the same as new lines. that's so gross
04:05:26 yauhsien joins (~yauhsien@61-231-38-131.dynamic-ip.hinet.net)
04:07:05 <Axman6> koala_man: you've ruined my day now, I'm mad about this and I've never even run into the problem, because it now complicated my mental model of the already insane nature of bash
04:07:21 × Unicorn_Princess quits (~Unicorn_P@46-54-248-191.static.kate-wing.si) (Quit: Leaving)
04:08:06 vglfr joins (~vglfr@88.155.118.203)
04:12:25 × merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
04:13:15 × nicbk quits (~nicbk@user/nicbk) (Ping timeout: 240 seconds)
04:15:48 deadmarshal_ joins (~deadmarsh@95.38.112.219)
04:18:39 <hololeap> shellcheck has lsp support?
04:24:22 <abastro[m]> I found it in VSCode, tho it says nothing about lsp
04:24:32 <abastro[m]> https://marketplace.visualstudio.com/items?itemName=timonwong.shellcheck&ssr=false#overview
04:25:07 Codaraxis joins (~Codaraxis@user/codaraxis)
04:25:20 <Axman6> I wonder how shellcheck handles those fun files where someone decides that storing binaries in shell scripts is a good idea...
04:25:48 <abastro[m]> Ewwww
04:26:24 × euandreh quits (~euandreh@2804:14c:33:9fe5:2b3e:70f8:165f:be99) (Ping timeout: 252 seconds)
04:31:25 <monochrom> I hope it is a "utf-8 decoding error" >:)
04:31:48 <Axman6> last time I saw it it was base64'd
04:31:59 <Axman6> I think the vmwaretools installer does this
04:32:00 <monochrom> "switching to EBCDIC mode"
04:32:46 <monochrom> OK, base64 may be just forgiven and ignored.
04:33:31 × lavaman quits (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Remote host closed the connection)
04:34:33 <Axman6> looking at https://kb.vmware.com/s/article/1018414 it might actually be a perl script
04:37:05 <monochrom> ooohhhh now I wonder what shellcheck would complain about a perl script >:)
04:37:25 <jackdk> Axman6: I find that bash is more predictable if you imagine a rushed C programmer wrote the interpreter. The same is true for Python
04:39:41 <abastro[m]> When I somehow unironically like C :<
04:40:29 × yauhsien quits (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Remote host closed the connection)
04:41:05 yauhsien joins (~yauhsien@61-231-38-131.dynamic-ip.hinet.net)
04:44:04 rvbcldud joins (~rvbcldud@2601:602:87f:4220:c526:c452:c7e1:199e)
04:44:14 <Axman6> C is mostly fine for what it is and the time it comes from
04:45:51 × yauhsien quits (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Ping timeout: 260 seconds)
04:47:01 × monochrom quits (trebla@216.138.220.146) (Quit: NO CARRIER)
04:47:06 <abastro[m]> Yea, I mean for low-level / embedded dev
04:47:19 <abastro[m]> Granted, it might be due to my lack of affinity with rust.
04:47:28 × dsrt^ quits (~dsrt@96-67-120-105-static.hfc.comcastbusiness.net) (Remote host closed the connection)
04:47:40 <Axman6> If I did have to do that sort of work these days though, I would probably use it as an excuse to learn rust
04:47:43 × vglfr quits (~vglfr@88.155.118.203) (Ping timeout: 260 seconds)
04:48:50 jack-fs joins (~textual@125-209-162-166.tpgi.com.au)
04:49:14 <Axman6> So stackoverflow gave me access to review queues... and they put in tests to make sure you're up to the task; like showing posts which are spam and making sure you flag them, but also posts from communities you're familliar with which have been already accepted as good, to make sure you also keep the good stuff. it's a kinda cool system
04:50:29 dyeplexer joins (~dyeplexer@user/dyeplexer)
04:51:06 <abastro[m]> I wonder how mainstream rust would have become in embedded/driver dev space
04:51:30 <abastro[m]> I mean, how is rust fairing now there?
04:53:05 euandreh joins (~euandreh@2804:14c:33:9fe5:16b7:58d0:d6fd:f99c)
04:53:51 × kaph quits (~kaph@net-109-116-124-149.cust.vodafonedsl.it) (Remote host closed the connection)
04:54:16 kaph joins (~kaph@net-109-116-124-149.cust.vodafonedsl.it)
04:55:44 × jack-fs quits (~textual@125-209-162-166.tpgi.com.au) (Ping timeout: 272 seconds)
04:56:12 mbuf joins (~Shakthi@223.178.127.254)
05:02:39 monochrom joins (trebla@216.138.220.146)
05:03:06 <Axman6> Aren't they allowing Rust in the linux kernel these days?
05:05:15 <abastro[m]> Did they? How?
05:06:03 <Axman6> https://security.googleblog.com/2021/04/rust-in-linux-kernel.html looks like it would give some good answers tot hat
05:06:42 × quintasan quits (~quassel@quintasan.pl) ()
05:07:15 quintasan joins (~quassel@quintasan.pl)
05:07:39 <abastro[m]> Oh, so rust got actually afloat
05:07:51 <abastro[m]> I envy them a bit
05:07:58 <Axman6> well, it's been in Firefox for years now
05:08:06 <Axman6> it'as not exactly a toy language these days
05:08:50 <abastro[m]> Eek, that implies haskell is toy language :<
05:09:13 <Axman6> why?
05:09:26 <Axman6> It's being used in lots of places commercially
05:09:45 <abastro[m]> Haskell is comparably less popular than rust, you know
05:09:54 <abastro[m]> So if rust is not exactly a toy language.. haskell is..
05:09:54 × zebrag quits (~chris@user/zebrag) (Quit: Konversation terminated!)
05:10:04 <Axman6> If you've used Facebook in the past few years your posts were filtered through the Haskell based spam filtering system there
05:12:14 <abastro[m]> <del>Yea but I do not use facebook so apparently that does not count</del>
05:12:54 <abastro[m]> Btw, does facebook employ haskell/FP programmers then?
05:16:16 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
05:16:51 <Axman6> yes, some of the best. dons is one of them
05:16:59 lavaman joins (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net)
05:17:37 × deadmarshal_ quits (~deadmarsh@95.38.112.219) (Ping timeout: 240 seconds)
05:18:00 <jackdk> abastro[m]: I don't have anything against C or C programmers. But imagining how a C programmer would've implemented something is often a great way to predict its behaviour
05:19:03 × jao quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 256 seconds)
05:19:12 <abastro[m]> Yea, I agree, it is hard
05:19:54 <Axman6> Aww geez, more strings? better do the most confusing thing for the user I can think of...
05:20:54 × Me-me quits (~me-me@user/me-me) (Quit: Disconnecting on purpose.)
05:20:56 <abastro[m]> Hm on a different note, FunctionalDependencies did not make it to GHC2021 it seems
05:21:33 <Axman6> probably they're not clearly a better choice than associated type families or something
05:22:59 Me-me joins (~me-me@tunnel690570-pt.tunnel.tserv12.mia1.ipv6.he.net)
05:24:15 <abastro[m]> Associated type families?
05:24:29 × Me-me quits (~me-me@tunnel690570-pt.tunnel.tserv12.mia1.ipv6.he.net) (Changing host)
05:24:29 Me-me joins (~me-me@user/me-me)
05:29:42 deadmarshal_ joins (~deadmarsh@95.38.112.219)
05:30:29 <Axman6> class Request a where type family Response a :: Type; send :: a -> IO (Response a); instance Request GetObject where type instance Responce GetObject = GetObjectResponse; send :: GetObject -> IO (Response GetObject) -- a.k.a send :: GetObject -> IO GetObjectResponse
05:30:46 <Axman6> stealing an example from jackdk from a day or so ago
05:33:13 whatsupdoc joins (uid509081@id-509081.hampstead.irccloud.com)
05:33:30 <abastro[m]> Oh, the one using type families?
05:33:41 <abastro[m]> IIRC type families are also not in GHC2021
05:34:36 <Axman6> right, they're mostly equivalent to fundeps, so choosing which should be enabled by default makes sense; and IMO it's the sort of extension I would want to know is being used in a file by having a LANGUAGE pragma
05:36:01 <jackdk> I don't think you can do bidirectional inference through an associated TF?
05:36:14 <jackdk> whereas you can do `class C a b | a -> b, b -> a`
05:37:08 <abastro[m]> I see, good rationale
05:38:45 Codaraxis_ joins (~Codaraxis@user/codaraxis)
05:40:05 × benin quits (~benin@183.82.207.30) (Quit: The Lounge - https://thelounge.chat)
05:40:15 × amino_ quits (~amino@94.13.111.159) (Ping timeout: 256 seconds)
05:41:20 bahamas joins (~lucian@84.232.140.158)
05:41:37 <Axman6> yeah they're not completely equivalent
05:43:14 × Codaraxis quits (~Codaraxis@user/codaraxis) (Ping timeout: 272 seconds)
05:43:45 benin joins (~benin@183.82.207.30)
05:45:48 × bahamas quits (~lucian@84.232.140.158) (Ping timeout: 240 seconds)
05:46:09 × _xor quits (~xor@74.215.232.169) (Quit: WeeChat 3.4)
05:52:27 × lavaman quits (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Remote host closed the connection)
05:58:25 yauhsien joins (~yauhsien@61-231-38-131.dynamic-ip.hinet.net)
06:01:09 inversed joins (~inversed@94.13.111.159)
06:05:10 Akiva joins (~Akiva@user/Akiva)
06:08:32 merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
06:08:41 vysn joins (~vysn@user/vysn)
06:19:08 pnotequalnp joins (~pnotequal@207-118-121-128.dyn.centurytel.net)
06:23:46 leungbk` joins (~user@2603-8000-1201-2dd2-1c2f-c4f4-0d21-a4ac.res6.spectrum.com)
06:25:17 × Hash quits (~Hash@hey.howstoned.ru) (Ping timeout: 240 seconds)
06:26:12 × leungbk quits (~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) (Ping timeout: 240 seconds)
06:28:28 × Midjak quits (~Midjak@82.66.147.146) (Quit: This computer has gone to sleep)
06:33:44 Pickchea joins (~private@user/pickchea)
06:34:09 takuan joins (~takuan@178-116-218-225.access.telenet.be)
06:34:11 <abastro[m]> I just found the moment where I thought my algorithm was wrong
06:34:31 <abastro[m]> But actually it was typo in input
06:42:31 × dyeplexer quits (~dyeplexer@user/dyeplexer) (Ping timeout: 260 seconds)
06:42:50 <abastro[m]> I wonder if this code is standard haskell enough:... (full message at https://libera.ems.host/_matrix/media/r0/download/libera.chat/497e661378c1c8fecaea658f6eab322cb7aec18f)
06:42:59 × merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 260 seconds)
06:46:46 × tadyshev quits (uid547048@id-547048.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
06:49:37 × Sgeo_ quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
06:50:35 acidjnk joins (~acidjnk@p200300d0c7049f7644ba050f51358f71.dip0.t-ipconnect.de)
06:51:10 <Axman6> this feels like that brackets problem from a few days ago, but using a queue instead of a stack
06:51:48 karim joins (~karim@156.200.223.2)
06:52:16 <Axman6> it looks fine as far as it is Haskell, but I am struggling a lot with what it actually does
06:53:21 × Maxdamantus quits (~Maxdamant@user/maxdamantus) (Ping timeout: 256 seconds)
06:53:59 Maxdamantus joins (~Maxdamant@user/maxdamantus)
06:57:03 lavaman joins (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net)
06:59:14 Hash joins (~Hash@hey.howstoned.ru)
07:01:53 <abastro[m]> Yep, brackets problem
07:02:05 <abastro[m]> Hmm, perhaps I am bad at writing readable code.. :<
07:02:34 <Axman6> if it's for matching pairs of brackets, then you probably want a stack/list no?
07:02:54 <Axman6> I don't really understand why k is there though, so I probably don't understand the problem at all
07:03:44 <abastro[m]> Oh, I see.
07:04:08 <abastro[m]> It is to exhaustively consume a list into (n, n+k) pairs
07:04:39 <abastro[m]> So, for k = 5 and [1,3,4,6,6,8,9,11], it gives [(1,6),(3,8),(4,9),(6,11)]
07:05:49 <rvbcldud> Hello! I have a function that inserts an element into a list that does not work how I want it to. Currently it can start at an a singleton, go to a Tree with 3 elements, but after this I want to alternate which side I want to add to.
07:06:05 <rvbcldud> treeInsert _ x (Node num left elem right)
07:06:06 <rvbcldud> | left == Leaf = Node num (Node (num-1) Leaf x Leaf) elem right
07:06:08 <rvbcldud> | right == Leaf = Node num left elem (Node (num-1) Leaf x Leaf)
07:06:10 <rvbcldud> | otherwise = Node num newLeft elem right
07:06:12 <rvbcldud> where newLeft = treeInsert 0 x left
07:06:14 <rvbcldud> newRight = treeInsert 0 x right
07:06:16 <rvbcldud> This is my current function
07:06:18 <abastro[m]> (Guess I have to delay my explanation)
07:06:23 <rvbcldud> Sorry!
07:06:25 <Axman6> @where paste
07:06:25 <lambdabot> Help us help you: please paste full code, input and/or output at e.g. https://paste.tomsmeding.com
07:06:26 <abastro[m]> (I mean on my problem)
07:06:40 × zaquest quits (~notzaques@5.130.79.72) (Quit: Leaving)
07:06:45 <abastro[m]> Sorry for confusion, I was describing my algorithm when you came in.
07:07:19 <rvbcldud> https://paste.tomsmeding.com/blIuVvbM
07:07:20 <abastro[m]> I meant to say, I'll explain my algorithm later. What was your problem, rvbcldud? As suggested above, could you make a paste?
07:07:33 <abastro[m]> (Oops, bridge delay)
07:08:19 zaquest joins (~notzaques@5.130.79.72)
07:08:40 <abastro[m]> You want a criteria to decide which side you'd add the element to, I think.
07:08:43 vglfr joins (~vglfr@88.155.118.203)
07:08:45 <rvbcldud> Basically, after it sees that both the right and left are not Leaves ... I want it to add the element to the right and left, alternating
07:08:50 <rvbcldud> Basically
07:09:18 <Axman6> is it possible to do this from the bottom up?
07:09:19 <rvbcldud> Perhaps that is not the best explanation or implementation of what I want to accomplish, but I hope you get what I am saying
07:09:24 <Axman6> rather than top down?
07:09:42 <abastro[m]> What is "alternating" here? So you insert into the tree many times?
07:09:50 <rvbcldud> I am sure, what would you do?
07:10:20 <Axman6> given treeInsert 0 [1,2,3,4,5], what should we get back?
07:11:07 <rvbcldud> I apologize, I did not include my type signature
07:11:29 <Axman6> uh yeah, that's definitely not the right way to call that
07:11:33 pottsy joins (~pottsy@2400:4050:b560:3700:95a9:bb69:4209:aa9b)
07:11:49 <rvbcldud> treeInsert takes an Integer, which we don't have to worry about right now, the element we want to add, and the current list
07:12:15 <Axman6> list? not tree?
07:12:37 <rvbcldud> So I would call something like: treeInsert 0 "B" (Node 1 Leaf "A" Leaf)
07:12:40 <rvbcldud> Tree, my bad
07:13:19 × mvk quits (~mvk@2607:fea8:5cc3:7e00::7980) (Ping timeout: 260 seconds)
07:13:43 mmhat joins (~mmh@55d4e56a.access.ecotel.net)
07:13:57 lortabac joins (~lortabac@2a01:e0a:541:b8f0:4b28:938b:c022:9725)
07:13:59 <rvbcldud> Does that make sense? The output would be (Node 1 (Node 0 Leaf "B" Leaf) "A" Leaf)
07:14:30 <Axman6> sure - what should happen if you insert "C" into that result?
07:15:00 <rvbcldud> We would then have (Node 1 (Node 0 Leaf "B" Leaf) "A" (Node 0 Leaf "C" Leaf)
07:15:15 <Axman6> and then "D"?
07:15:16 <rvbcldud> But NOW I want to add "D" to the left of B
07:15:22 <abastro[m]> Oh, so you want some kind of balance?
07:15:26 <rvbcldud> Exactly
07:15:39 <Axman6> and "E" would go to the right of "B"?
07:15:54 <Axman6> or somewhere right of "A"?
07:16:05 <rvbcldud> I would probably want to put it to the left or right of "c"
07:16:39 <Axman6> this feels a lot like a finger tree
07:16:50 <Axman6> which Data.Sequence is built on
07:17:06 <abastro[m]> Do you have a specific kind of balance you need? Like https://en.wikipedia.org/wiki/AVL_tree or something
07:17:13 <abastro[m]> Oh wait. Finger tree?
07:18:13 <rvbcldud> I don't need a specific balance, I just want balance ... preferably one that isn't too difficult to understand
07:18:20 <Axman6> rvbcldud: if you stored the size of each side, then you could do this pretty easily
07:18:21 <rvbcldud> I am learning haskell, after all
07:18:57 <rvbcldud> like writing a function that calculates the height, given the side
07:18:57 <Axman6> each Node stoores how many elements are in it and below it, and then you always inset into the side with the smaller size
07:19:09 <Axman6> use a smart constructor to ensure those sizes are always kepy up to date
07:19:12 <Axman6> kept*
07:19:40 vorpuni joins (~pvorp@2001:861:3881:c690:72bf:4d2e:4b07:eb6c)
07:21:41 <Axman6> data Tree a = Node { size :: Int, num :: Int, left :: Tree a, elem :: a, right :: Tree a } | Leaf; node :: Int -> a -> Tree a -> Tree a -> Tree a; node n a l r = Node {size = 1 + s l + s r, num = n, left = l, elem = a, right = r} where s Leaf = 0; s Node{size} = size
07:23:32 <Axman6> then to insert, you so something like: insert a (Node s n l e r) | if s l <= s r = node n a (insert a l) r (a lot missing here because I need to leave)
07:24:38 dhouthoo joins (~dhouthoo@178-117-36-167.access.telenet.be)
07:25:50 × mmhat quits (~mmh@55d4e56a.access.ecotel.net) (Ping timeout: 272 seconds)
07:25:52 <rvbcldud> I think I figured out a similar implementation ... although yours is a bit tricky to read for me
07:26:16 <rvbcldud> https://paste.tomsmeding.com/DMmBJMZQ
07:32:47 dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net)
07:36:35 <rvbcldud> Thanks for all your help guys!! It works
07:37:40 neurocyte0917090 joins (~neurocyte@IP-094046076012.dynamic.medianet-world.de)
07:37:41 × neurocyte0917090 quits (~neurocyte@IP-094046076012.dynamic.medianet-world.de) (Changing host)
07:37:41 neurocyte0917090 joins (~neurocyte@user/neurocyte)
07:38:19 × Natch quits (~natch@c-67bae255.014-297-73746f25.bbcust.telenor.se) (Remote host closed the connection)
07:42:08 gehmehgeh joins (~user@user/gehmehgeh)
07:43:26 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
07:43:41 Natch joins (~natch@c-67bae255.014-297-73746f25.bbcust.telenor.se)
07:44:08 ccntrq joins (~Thunderbi@2a01:c22:8401:2f00:927:6de8:e589:73f0)
07:45:20 lainon joins (~lainon@2601:7c0:c500:4d20::ffef)
07:47:51 × Pickchea quits (~private@user/pickchea) (Ping timeout: 260 seconds)
07:49:43 machinedgod joins (~machinedg@24.105.81.50)
07:52:34 zeenk joins (~zeenk@2a02:2f04:a110:7d00:2011:cfed:bad7:3c94)
07:54:59 mikoto-chan joins (~mikoto-ch@84.199.144.235)
07:58:14 cfricke joins (~cfricke@user/cfricke)
08:00:21 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 252 seconds)
08:02:39 july541[m] joins (~july541ma@2001:470:69fc:105::1:e416)
08:03:15 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds)
08:04:24 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
08:06:27 × pnotequalnp quits (~pnotequal@207-118-121-128.dyn.centurytel.net) (Ping timeout: 256 seconds)
08:11:41 alp joins (~alp@user/alp)
08:13:44 MajorBiscuit joins (~MajorBisc@2a02:a461:129d:1:193d:75d8:745d:e91e)
08:15:18 michalz joins (~michalz@185.246.204.61)
08:15:33 merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
08:16:08 Major_Biscuit joins (~MajorBisc@c-001-015-045.client.tudelft.eduvpn.nl)
08:19:56 × MajorBiscuit quits (~MajorBisc@2a02:a461:129d:1:193d:75d8:745d:e91e) (Ping timeout: 245 seconds)
08:24:55 × lainon quits (~lainon@2601:7c0:c500:4d20::ffef) (Ping timeout: 256 seconds)
08:25:17 fendor joins (~fendor@178.115.46.236.wireless.dyn.drei.com)
08:27:22 mc47 joins (~mc47@xmonad/TheMC47)
08:31:59 × tzh quits (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
08:32:15 × ccntrq quits (~Thunderbi@2a01:c22:8401:2f00:927:6de8:e589:73f0) (Ping timeout: 252 seconds)
08:32:33 ccntrq joins (~Thunderbi@2a01:c22:897f:4a00:b1c:1884:168b:a47f)
08:36:22 mmhat joins (~mmh@55d4e56a.access.ecotel.net)
08:38:37 jpds1 joins (~jpds@gateway/tor-sasl/jpds)
08:38:55 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 240 seconds)
08:42:10 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Read error: Connection reset by peer)
08:42:18 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
08:44:09 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
08:48:31 × Akiva quits (~Akiva@user/Akiva) (Ping timeout: 260 seconds)
08:48:48 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 272 seconds)
08:48:59 × acidjnk quits (~acidjnk@p200300d0c7049f7644ba050f51358f71.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
08:54:30 × kaph quits (~kaph@net-109-116-124-149.cust.vodafonedsl.it) (Ping timeout: 272 seconds)
08:58:52 × yauhsien quits (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Remote host closed the connection)
08:59:51 yauhsien joins (~yauhsien@61-231-38-131.dynamic-ip.hinet.net)
09:00:26 × FernandoChu[m] quits (~ryunaqmat@2001:470:69fc:105::1:4dc0) (Quit: You have been kicked for being idle)
09:00:26 × MosheTeutsch[m] quits (~moteutsch@2001:470:69fc:105::1:c250) (Quit: You have been kicked for being idle)
09:04:12 × yauhsien quits (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
09:06:27 dcoutts__ joins (~duncan@host86-167-90-249.range86-167.btcentralplus.com)
09:07:34 × gardnan quits (~max@c-75-70-252-201.hsd1.co.comcast.net) (Quit: Lost terminal)
09:08:57 × dcoutts_ quits (~duncan@host86-167-90-249.range86-167.btcentralplus.com) (Ping timeout: 240 seconds)
09:09:50 _xor joins (~xor@74.215.232.169)
09:12:43 AlexZenon joins (~alzenon@178.34.150.116)
09:12:54 × hsw quits (~hsw@112-104-141-52.adsl.dynamic.seed.net.tw) (Remote host closed the connection)
09:13:10 yauhsien joins (~yauhsien@61-231-38-131.dynamic-ip.hinet.net)
09:13:24 hsw joins (~hsw@2001-b030-2303-0104-0172-0025-0012-0132.hinet-ip6.hinet.net)
09:14:39 × hsw quits (~hsw@2001-b030-2303-0104-0172-0025-0012-0132.hinet-ip6.hinet.net) (Client Quit)
09:14:51 hsw joins (~hsw@2001-b030-2303-0104-0172-0025-0012-0132.hinet-ip6.hinet.net)
09:16:19 × _xor quits (~xor@74.215.232.169) (Quit: brb)
09:21:40 × vglfr quits (~vglfr@88.155.118.203) (Read error: Connection reset by peer)
09:21:53 acidjnk joins (~acidjnk@p200300d0c7049f76ad7ddf43206a2c16.dip0.t-ipconnect.de)
09:22:52 vglfr joins (~vglfr@88.155.118.203)
09:23:31 × karim quits (~karim@156.200.223.2) (Ping timeout: 260 seconds)
09:23:46 kaph joins (~kaph@net-109-116-124-149.cust.vodafonedsl.it)
09:29:32 Alex_test joins (~al_test@178.34.150.116)
09:29:43 AlexNoo joins (~AlexNoo@178.34.150.116)
09:31:14 × kaph quits (~kaph@net-109-116-124-149.cust.vodafonedsl.it) (Quit: Leaving)
09:34:47 kaph joins (~kaph@net-109-116-124-149.cust.vodafonedsl.it)
09:37:46 <siers> is it possible to write code that would make a list that would contain all the cases of an ADT and verify this at compile time? you can check that all inputs of an ADT are handled, but I assume not this
09:40:10 <merijn> siers: What is the use case, exactly?
09:41:58 <siers> merijn, I want the compiler to remind me to write tests about each case for code that handles that data structure
09:42:25 <merijn> -Wall warns about missed cases already?
09:46:19 <lortabac> siers: what do you want to do with all the constructors? just print them?
09:49:39 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 260 seconds)
09:50:07 × vglfr quits (~vglfr@88.155.118.203) (Read error: Connection reset by peer)
09:50:19 vglfr joins (~vglfr@88.155.118.203)
09:51:23 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
09:55:29 toulene9 joins (~toulene@user/toulene)
09:55:49 × toulene quits (~toulene@user/toulene) (Ping timeout: 240 seconds)
09:55:49 toulene9 is now known as toulene
09:59:16 perrierjouet joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
10:01:00 × Natch quits (~natch@c-67bae255.014-297-73746f25.bbcust.telenor.se) (Ping timeout: 272 seconds)
10:11:18 romesrf joins (~romes@2001:8a0:6d13:9700:6d76:5070:aa75:b09)
10:12:51 × haskl quits (~haskl@user/haskl) (Ping timeout: 245 seconds)
10:13:26 Natch joins (~natch@c-67bae255.014-297-73746f25.bbcust.telenor.se)
10:15:48 × vglfr quits (~vglfr@88.155.118.203) (Read error: Connection reset by peer)
10:15:55 vglfr joins (~vglfr@88.155.118.203)
10:16:48 notzmv joins (~zmv@user/notzmv)
10:19:19 × perrierjouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.4.1)
10:19:20 × vglfr quits (~vglfr@88.155.118.203) (Read error: Connection reset by peer)
10:19:34 vglfr joins (~vglfr@88.155.118.203)
10:21:07 × econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity)
10:23:18 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
10:23:37 geekosaur joins (~geekosaur@xmonad/geekosaur)
10:29:48 × vglfr quits (~vglfr@88.155.118.203) (Read error: Connection reset by peer)
10:29:57 × yauhsien quits (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Remote host closed the connection)
10:30:00 vglfr joins (~vglfr@88.155.118.203)
10:30:30 yauhsien joins (~yauhsien@61-231-38-131.dynamic-ip.hinet.net)
10:32:13 × vglfr quits (~vglfr@88.155.118.203) (Read error: Connection reset by peer)
10:32:44 vglfr joins (~vglfr@88.155.118.203)
10:33:23 × zeenk quits (~zeenk@2a02:2f04:a110:7d00:2011:cfed:bad7:3c94) (Quit: Konversation terminated!)
10:35:11 perrierjouet joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
10:35:46 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
10:36:12 haskl joins (~haskl@user/haskl)
10:37:55 × mmhat quits (~mmh@55d4e56a.access.ecotel.net) (Quit: WeeChat 3.4.1)
10:39:13 <maerwald> don't worry, technically the compiler fills out missed cases for you :D
10:39:49 <maerwald> hey, I wonder if you could hook wingman into GHC such that it tries to fill out those instead of throwing error
10:40:04 × vglfr quits (~vglfr@88.155.118.203) (Read error: Connection reset by peer)
10:40:16 vglfr joins (~vglfr@88.155.118.203)
10:42:17 × vglfr quits (~vglfr@88.155.118.203) (Read error: Connection reset by peer)
10:42:48 vglfr joins (~vglfr@88.155.118.203)
10:45:04 <dminuoso> Haha
10:45:37 kuribas joins (~user@ip-188-118-57-242.reverse.destiny.be)
10:45:50 <dminuoso> Who wouldn't want their compiler to provide a guessed implementation for missing code paths.
10:46:31 <kuribas> What was the limitation again with higher kinded types? That type families have to be fully applied?
10:46:37 <maerwald> dminuoso: a truly lazy language
10:47:06 <dminuoso> maerwald: Why not rig GPT3 into the runtime, and all you do is just write a README.md?
10:47:23 × vglfr quits (~vglfr@88.155.118.203) (Ping timeout: 256 seconds)
10:47:33 <dminuoso> This is where we are headed already.
10:47:42 <tomsmeding> not into the runtime, hopefully
10:47:56 × perrierjouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.4.1)
10:47:57 <kuribas> Does that include data families?
10:48:02 <[exa]> tomsmeding: adds situational awareness
10:48:30 × xff0x quits (~xff0x@125x102x200x106.ap125.ftth.ucom.ne.jp) (Ping timeout: 272 seconds)
10:48:32 <kuribas> like MyHKD f = MyHKD {field1 :: f Int, field2 :: f Double}
10:49:27 <kuribas> f cannot be a type family?
10:49:52 <tomsmeding> f cannot be a type family that does case analysis on its argument
10:50:04 <maerwald> dminuoso: does it mean I won't have to code anymore?
10:50:23 <tomsmeding> like, you could have `type family F a where F a = a` and then `MyHKD (F Maybe)`
10:50:30 <kuribas> tomsmeding: so that excludes a data family?
10:50:47 <tomsmeding> because then F is fully applied, even though it resolves to something of kind * -> *
10:50:56 <tomsmeding> I guess so
10:50:58 <romesrf> program synthesis is a real thing :) it does just the kind of thing you mentioined
10:51:24 <kuribas> tomsmeding: now I wrap it with a newtype, and that works :)
10:51:29 <tomsmeding> precisely :)
10:51:31 <maerwald> alright, I'll look for another job then
10:51:33 <tomsmeding> that's the fix usually
10:51:37 <dminuoso> maerwald: To be fair, this already exists. It's called management position. :p
10:52:07 <tomsmeding> it will be many years until I attain a management position
10:52:18 <dminuoso> If you want it at all.
10:52:25 <tomsmeding> many could be >100
10:52:29 × Natch quits (~natch@c-67bae255.014-297-73746f25.bbcust.telenor.se) (Ping timeout: 256 seconds)
10:52:35 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds)
10:52:43 <maerwald> so Haskell is dying after all!
10:55:03 Natch joins (~natch@c-67bae255.014-297-73746f25.bbcust.telenor.se)
10:56:03 <abastro[m]> Whhh
10:56:36 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
10:56:39 <maerwald> an AI will be doing our work and this channel will be occupied by managers instead
10:58:02 <abastro[m]> Indeed
10:59:05 <dminuoso> Heck, if we have plugged GPT into writing code, we might as well go all the way and have just a bunch of GPT3 bots talk to each other here in IRC.
10:59:11 <maerwald> maybe we need to destroy all AI technology to save Haskell
10:59:13 <dminuoso> No need to converse either.
10:59:42 <dminuoso> We already have the occasional markov chain bot :)
11:01:19 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
11:02:26 <jackdk> dminuoso: Why is it you say that We already have the occasional markov chain bot :)?
11:03:24 perrierjouet joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
11:06:40 razetime joins (~quassel@117.193.6.156)
11:07:21 × chenqisu1 quits (~chenqisu1@183.217.201.88) (Quit: Leaving)
11:07:26 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
11:09:56 <abastro[m]> I mean
11:10:07 <abastro[m]> AI would not only threaten haskell
11:10:22 <abastro[m]> It would threaten most fields of study!
11:10:41 <abastro[m]> Clearly, only looks would matter afterwards
11:12:40 ProfSimm joins (~ProfSimm@87.227.196.109)
11:12:47 × ProfSimm quits (~ProfSimm@87.227.196.109) (Remote host closed the connection)
11:13:33 × In0perable quits (~PLAYER_1@fancydata.science) (Quit: All your buffer are belong to us!)
11:14:18 × whatsupdoc quits (uid509081@id-509081.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
11:20:23 Inoperable joins (~PLAYER_1@fancydata.science)
11:28:12 <romesrf> dminuoso: that's a funny idea for an IRC channel. Imagine the conversations
11:29:23 xff0x joins (~xff0x@i121-117-52-147.s41.a013.ap.plala.or.jp)
11:29:29 ProfSimm joins (~ProfSimm@87.227.196.109)
11:29:36 <kuribas> I don't think AI will threaten anything. Except democracy, through facebook...
11:29:37 <geekosaur> M-x psychoanalyze-pinhead
11:29:51 <Franciman> M-x cure-rsi
11:30:00 <Franciman> too futuristic?
11:32:25 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 268 seconds)
11:33:21 × dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Quit: WeeChat 3.4.1)
11:33:53 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
11:39:57 <abastro[m]> I thought we were talking satiristically
11:40:07 <abastro[m]> Satirically*
11:41:35 × romesrf quits (~romes@2001:8a0:6d13:9700:6d76:5070:aa75:b09) (Quit: WeeChat 3.4)
11:43:41 × merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 245 seconds)
11:44:18 merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
11:44:48 <dminuoso> jackdk: Recall fog?
11:45:54 × ProfSimm quits (~ProfSimm@87.227.196.109) (Remote host closed the connection)
11:47:47 Midjak joins (~Midjak@82.66.147.146)
11:48:39 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 260 seconds)
11:50:16 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
11:51:34 × acidjnk quits (~acidjnk@p200300d0c7049f76ad7ddf43206a2c16.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
11:54:05 lainon joins (~lainon@2601:7c0:c500:4d20::ffef)
11:54:13 × mjs2600 quits (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) (Quit: ZNC 1.8.2 - https://znc.in)
11:54:31 × Major_Biscuit quits (~MajorBisc@c-001-015-045.client.tudelft.eduvpn.nl) (Ping timeout: 245 seconds)
11:54:49 × alp quits (~alp@user/alp) (Ping timeout: 256 seconds)
11:57:38 Pickchea joins (~private@user/pickchea)
11:59:13 Major_Biscuit joins (~MajorBisc@2a02:a461:129d:1:193d:75d8:745d:e91e)
12:00:12 × euandreh quits (~euandreh@2804:14c:33:9fe5:16b7:58d0:d6fd:f99c) (Ping timeout: 240 seconds)
12:03:35 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 260 seconds)
12:03:52 <siers> merijn, Wall warns about code that is not added, but not about tests, because the test is dependent on the values which, if a new case is added, won't show a warning, because the types would be satisfied
12:05:40 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
12:07:46 boxscape_ joins (~boxscape_@vpn-44-78.hq.eso.org)
12:07:57 <lortabac> siers: can you give an example? I don't understand what you mean
12:09:11 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
12:09:19 <siers> "data X = A | B; f A = 1; f B = 2". if you add "| C" to X later, you'll be reminded by the compiler to update f, but not reminded to add a C case in tests
12:09:19 × yauhsien quits (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Remote host closed the connection)
12:09:54 yauhsien joins (~yauhsien@61-231-38-131.dynamic-ip.hinet.net)
12:11:08 <lortabac> siers: what's the difference between tests and the rest?
12:11:24 <abastro[m]> Which tests?
12:11:32 <lortabac> maybe they don't do pattern-matching?
12:11:37 <abastro[m]> The test project?
12:11:47 <siers> unit tests
12:11:58 <siers> the test code would be "f A `assert` 1; f B `assert` 2".
12:12:09 vglfr joins (~vglfr@46.96.167.246)
12:12:17 <abastro[m]> (I mean, yourproject:test or something)
12:12:22 <lortabac> maybe you forgot to enable -Wall in the tests
12:12:45 <siers> what would the test code look like? if the tests look like I wrote, Wall won't help
12:12:57 <siers> am I completely off base?
12:13:09 <lortabac> oh sorry I misread your tests :D
12:13:15 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds)
12:13:18 <lortabac> now I understand
12:13:37 × vysn quits (~vysn@user/vysn) (Ping timeout: 240 seconds)
12:13:55 <siers> suppose you had a list of [(X, Int)] for test cases – I would like to know that the Xs had all possible values exactly
12:13:59 <abastro[m]> Oh, ya that is not pattern matching
12:14:06 <abastro[m]> If you are just testing concrete cases
12:14:08 <siers> I am here to be told "no can do"
12:14:17 <lortabac> siers: it's doable
12:14:22 <abastro[m]> Perhaps assert is not a good way to test that
12:14:23 <siers> template haskell?
12:14:39 × yauhsien quits (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
12:14:39 <lortabac> in fact we have a similar problem in my team
12:14:39 <siers> abastro[m], tests are literally all asserts
12:14:42 <abastro[m]> Though `f` is possibly too simple to test imho
12:14:57 <lortabac> and the solution is simply that these cases must be checked during code reviews
12:15:28 <siers> lortabac, haha, yeah, that's a soft solution. I am just checking that there is no obvious way to get the compiler to tell you
12:15:48 <lortabac> you can use Data.Data
12:15:50 vysn joins (~vysn@user/vysn)
12:15:55 × hololeap quits (~hololeap@user/hololeap) (Ping timeout: 240 seconds)
12:16:20 <lortabac> find the number of constructors with Data.Data and compare with the number of unique constructors in the tests
12:16:38 <abastro[m]> Oh, I thought those tests are like equivalent to..
12:17:00 acidjnk joins (~acidjnk@p200300d0c7049f76ad7ddf43206a2c16.dip0.t-ipconnect.de)
12:17:03 <siers> lortabac, I guess that is the solution, yeah
12:17:14 <abastro[m]> g A = fA
12:17:14 <abastro[m]> g B = fB
12:17:14 <abastro[m]> g C = fC
12:17:14 <abastro[m]> And tests that f == g
12:17:23 <siers> that is kind of what I was thinking was the only way
12:17:56 <abastro[m]> Uhm tests are asserts? Oh wait it is.. duh me
12:18:01 <lortabac> there is a function called 'dataTypeConstrs', it should do the job
12:18:04 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
12:18:43 <abastro[m]> Right, if the ADT is complex, approach of defining g and testing against it might not work
12:18:58 <siers> lortabac, nice
12:19:56 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Client Quit)
12:21:28 <lortabac> however the solution proposed by abastro[m] is simpler
12:21:29 × lavaman quits (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Read error: Connection reset by peer)
12:21:48 allbery_b joins (~geekosaur@xmonad/geekosaur)
12:21:48 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
12:21:52 allbery_b is now known as geekosaur
12:21:56 <siers> complex meaning nested?
12:22:09 lavaman joins (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net)
12:22:15 <lortabac> erm no, you still need to verify that all constructors are fed to 'g'
12:22:27 <lortabac> so you are back to square 1
12:22:59 zer0bitz joins (~zer0bitz@dsl-hkibng32-54fbf8-224.dhcp.inet.fi)
12:24:26 <abastro[m]> I mean, g is pattern matching function.
12:24:34 <abastro[m]> So it is subjected to exhaustiveness checker
12:24:46 <abastro[m]> Problem is, ofc, when you dislike having a function g
12:25:02 <lortabac> yes, but if you want to test all the cases you need to do 'g A', 'g B', 'g C'
12:25:13 <lortabac> and the compiler doesn't check that
12:25:44 <siers> you write map assert listTestCases and that's kind of taken care of, because it don't need changing the next time something's added to the ADT and you just check that the list of test cases is long enough
12:25:51 × vglfr quits (~vglfr@46.96.167.246) (Read error: Connection reset by peer)
12:26:04 vglfr joins (~vglfr@46.96.167.246)
12:26:27 <lortabac> yeah, so at some point you need some trick like the one with Data.Data
12:27:15 <lortabac> otherwise you can't check that listTestCases contains all the constructors
12:27:46 <siers> yes, that's the puzzle piece I was wondering about, so my inquiry is resolved
12:28:19 <jackdk> dminuoso: I think so, but mostly I was LARPing the chatty doctor program I had in my emacs once
12:29:09 CiaoSen joins (~Jura@p200300c95735b0002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
12:30:10 <abastro[m]> I guess I need to learn more about testing
12:34:20 mmhat joins (~mmh@55d4e56a.access.ecotel.net)
12:34:50 yauhsien joins (~yauhsien@61-231-38-131.dynamic-ip.hinet.net)
12:37:07 × mmhat quits (~mmh@55d4e56a.access.ecotel.net) (Client Quit)
12:38:37 mmhat joins (~mmh@55d4e56a.access.ecotel.net)
12:42:37 × vglfr quits (~vglfr@46.96.167.246) (Read error: Connection reset by peer)
12:42:48 vglfr joins (~vglfr@46.96.167.246)
12:43:00 × dispater quits (~dispater@user/brprice) (Ping timeout: 240 seconds)
12:43:00 × orcus quits (~orcus@user/brprice) (Ping timeout: 240 seconds)
12:43:02 × lambdabot quits (~lambdabot@haskell/bot/lambdabot) (Remote host closed the connection)
12:44:12 dispater joins (~dispater@user/brprice)
12:44:44 orcus joins (~orcus@user/brprice)
12:45:10 lambdabot joins (~lambdabot@silicon.int-e.eu)
12:45:10 × lambdabot quits (~lambdabot@silicon.int-e.eu) (Changing host)
12:45:10 lambdabot joins (~lambdabot@haskell/bot/lambdabot)
12:46:31 × Major_Biscuit quits (~MajorBisc@2a02:a461:129d:1:193d:75d8:745d:e91e) (Ping timeout: 260 seconds)
12:48:26 Major_Biscuit joins (~MajorBisc@c-001-015-045.client.tudelft.eduvpn.nl)
12:48:42 jakalx joins (~jakalx@base.jakalx.net)
12:49:49 × vglfr quits (~vglfr@46.96.167.246) (Read error: Connection reset by peer)
12:50:24 vglfr joins (~vglfr@46.96.167.246)
12:50:43 × belphegor666 quits (~satan@user/belphegor666) (Ping timeout: 260 seconds)
12:50:58 × bitmapper quits (uid464869@id-464869.lymington.irccloud.com) (Quit: Connection closed for inactivity)
12:55:11 × vglfr quits (~vglfr@46.96.167.246) (Read error: Connection reset by peer)
12:55:20 vglfr joins (~vglfr@46.96.167.246)
12:57:30 × vglfr quits (~vglfr@46.96.167.246) (Read error: Connection reset by peer)
12:57:42 vglfr joins (~vglfr@46.96.167.246)
13:02:47 × vglfr quits (~vglfr@46.96.167.246) (Read error: Connection reset by peer)
13:03:09 vglfr joins (~vglfr@46.96.167.246)
13:04:18 fryguybob joins (~fryguybob@cpe-74-67-169-145.rochester.res.rr.com)
13:04:40 × deadmarshal_ quits (~deadmarsh@95.38.112.219) (Ping timeout: 272 seconds)
13:05:39 × acidjnk quits (~acidjnk@p200300d0c7049f76ad7ddf43206a2c16.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
13:06:36 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 240 seconds)
13:07:27 × ystael quits (~ystael@user/ystael) (Quit: Lost terminal)
13:07:31 × vglfr quits (~vglfr@46.96.167.246) (Ping timeout: 260 seconds)
13:08:05 vglfr joins (~vglfr@46.96.132.108)
13:08:05 __monty__ joins (~toonn@user/toonn)
13:08:54 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
13:10:08 boxscape_25 joins (~boxscape_@p4ff0b60b.dip0.t-ipconnect.de)
13:10:34 × vglfr quits (~vglfr@46.96.132.108) (Read error: Connection reset by peer)
13:10:46 vglfr joins (~vglfr@46.96.132.108)
13:11:43 × boxscape_ quits (~boxscape_@vpn-44-78.hq.eso.org) (Ping timeout: 260 seconds)
13:13:07 × __monty__ quits (~toonn@user/toonn) (Ping timeout: 260 seconds)
13:14:03 × vysn quits (~vysn@user/vysn) (Ping timeout: 260 seconds)
13:15:47 × yauhsien quits (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Remote host closed the connection)
13:15:59 vysn joins (~vysn@user/vysn)
13:16:21 yauhsien joins (~yauhsien@61-231-38-131.dynamic-ip.hinet.net)
13:17:19 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds)
13:19:16 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
13:19:21 × vglfr quits (~vglfr@46.96.132.108) (Ping timeout: 252 seconds)
13:25:43 × cfricke quits (~cfricke@user/cfricke) (Ping timeout: 260 seconds)
13:30:07 alp joins (~alp@user/alp)
13:32:31 × pottsy quits (~pottsy@2400:4050:b560:3700:95a9:bb69:4209:aa9b) (Remote host closed the connection)
13:34:35 pottsy joins (~pottsy@2400:4050:b560:3700:95a9:bb69:4209:aa9b)
13:35:49 deadmarshal_ joins (~deadmarsh@95.38.112.219)
13:40:03 × deadmarshal_ quits (~deadmarsh@95.38.112.219) (Ping timeout: 250 seconds)
13:48:58 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
13:49:31 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
13:49:31 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
13:49:31 wroathe joins (~wroathe@user/wroathe)
13:53:15 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds)
13:54:09 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds)
13:55:14 boxscape_ joins (~boxscape_@p4ff0b60b.dip0.t-ipconnect.de)
14:00:35 zeenk joins (~zeenk@2a02:2f04:a110:7d00:2011:cfed:bad7:3c94)
14:01:46 × lainon quits (~lainon@2601:7c0:c500:4d20::ffef) (Quit: WeeChat 3.4)
14:03:55 × lumberjack123 quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
14:05:02 × Major_Biscuit quits (~MajorBisc@c-001-015-045.client.tudelft.eduvpn.nl) (Ping timeout: 260 seconds)
14:07:25 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
14:16:26 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
14:19:44 Major_Biscuit joins (~MajorBisc@2a02:a461:129d:1:193d:75d8:745d:e91e)
14:21:43 × mikoto-chan quits (~mikoto-ch@84.199.144.235) (Ping timeout: 260 seconds)
14:22:29 × vysn quits (~vysn@user/vysn) (Ping timeout: 256 seconds)
14:24:17 vysn joins (~vysn@user/vysn)
14:25:06 × benin quits (~benin@183.82.207.30) (Quit: Ping timeout (120 seconds))
14:27:34 dextaa_ joins (~dextaa@user/dextaa)
14:30:07 benin joins (~benin@183.82.207.30)
14:33:54 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
14:33:54 allbery_b joins (~geekosaur@xmonad/geekosaur)
14:33:57 allbery_b is now known as geekosaur
14:34:53 Sgeo joins (~Sgeo@user/sgeo)
14:40:35 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
14:40:53 nicbk joins (~nicbk@user/nicbk)
14:42:13 × CiaoSen quits (~Jura@p200300c95735b0002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
14:47:51 × Pickchea quits (~private@user/pickchea) (Ping timeout: 260 seconds)
14:49:52 × boxscape_ quits (~boxscape_@p4ff0b60b.dip0.t-ipconnect.de) (Quit: Connection closed)
14:50:11 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
14:50:11 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
14:50:11 wroathe joins (~wroathe@user/wroathe)
14:50:16 rkrishnan joins (~user@2402:e280:215c:2cd:4a3a:c3a9:68b9:db9a)
14:50:20 × Digit quits (~user@user/digit) (Read error: Connection reset by peer)
14:50:26 acidjnk joins (~acidjnk@p200300d0c7049f76ad7ddf43206a2c16.dip0.t-ipconnect.de)
14:56:24 × benin quits (~benin@183.82.207.30) (Quit: Ping timeout (120 seconds))
14:59:25 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds)
15:01:17 benin joins (~benin@183.82.207.30)
15:11:55 × jpds1 quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 240 seconds)
15:12:48 × kaph quits (~kaph@net-109-116-124-149.cust.vodafonedsl.it) (Read error: Connection reset by peer)
15:13:22 euandreh joins (~euandreh@2804:14c:33:9fe5:966d:f1e8:4bae:826f)
15:14:03 × benin quits (~benin@183.82.207.30) (Quit: Ping timeout (120 seconds))
15:14:22 benin joins (~benin@183.82.207.30)
15:14:53 jpds1 joins (~jpds@gateway/tor-sasl/jpds)
15:15:05 __monty__ joins (~toonn@user/toonn)
15:16:28 waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
15:16:53 kaph joins (~kaph@net-109-116-124-149.cust.vodafonedsl.it)
15:20:40 × yauhsien quits (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Remote host closed the connection)
15:21:41 yauhsien joins (~yauhsien@61-231-38-131.dynamic-ip.hinet.net)
15:26:13 bahamas joins (~lucian@84.232.140.158)
15:26:45 × yauhsien quits (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Ping timeout: 268 seconds)
15:27:26 × euandreh quits (~euandreh@2804:14c:33:9fe5:966d:f1e8:4bae:826f) (Ping timeout: 245 seconds)
15:28:38 alMalsamo joins (~alMalsamo@gateway/tor-sasl/almalsamo)
15:28:41 euandreh joins (~euandreh@2804:14c:33:9fe5:4042:4584:26e0:bc36)
15:31:15 xkuru joins (~xkuru@user/xkuru)
15:33:07 × Major_Biscuit quits (~MajorBisc@2a02:a461:129d:1:193d:75d8:745d:e91e) (Ping timeout: 260 seconds)
15:33:51 cfricke joins (~cfricke@user/cfricke)
15:34:44 Major_Biscuit joins (~MajorBisc@2a02:a461:129d:1:193d:75d8:745d:e91e)
15:34:57 ProfSimm joins (~ProfSimm@87.227.196.109)
15:36:38 jpds1 is now known as jpds
15:41:55 Pickchea joins (~private@user/pickchea)
15:44:01 ec joins (~ec@gateway/tor-sasl/ec)
15:46:51 yauhsien joins (~yauhsien@61-231-38-131.dynamic-ip.hinet.net)
15:48:16 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
15:48:17 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:4b28:938b:c022:9725) (Quit: WeeChat 2.8)
15:49:22 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
15:51:15 × nicbk quits (~nicbk@user/nicbk) (Ping timeout: 240 seconds)
15:53:24 boxscape_ joins (~boxscape_@p4ff0b60b.dip0.t-ipconnect.de)
15:54:51 nicbk joins (~nicbk@user/nicbk)
16:00:46 × Pickchea quits (~private@user/pickchea) (Ping timeout: 245 seconds)
16:03:20 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
16:04:06 lbseale joins (~ep1ctetus@user/ep1ctetus)
16:04:46 belphegor666 joins (~satan@ip-046-223-003-068.um13.pools.vodafone-ip.de)
16:04:55 jpds joins (~jpds@gateway/tor-sasl/jpds)
16:05:48 × bahamas quits (~lucian@84.232.140.158) (Ping timeout: 272 seconds)
16:08:20 × yauhsien quits (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Remote host closed the connection)
16:08:54 × kilolympus quits (~kilolympu@31.205.200.235) (Quit: Quitting IRC :()
16:08:55 yauhsien joins (~yauhsien@61-231-38-131.dynamic-ip.hinet.net)
16:09:12 kilolympus joins (~kilolympu@31.205.200.235)
16:10:09 × belphegor666 quits (~satan@ip-046-223-003-068.um13.pools.vodafone-ip.de) (Ping timeout: 256 seconds)
16:10:42 × razetime quits (~quassel@117.193.6.156) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
16:12:07 belphegor666 joins (~satan@ip-046-223-003-068.um13.pools.vodafone-ip.de)
16:12:49 × Major_Biscuit quits (~MajorBisc@2a02:a461:129d:1:193d:75d8:745d:e91e) (Ping timeout: 250 seconds)
16:14:02 × yauhsien quits (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Ping timeout: 272 seconds)
16:14:58 Major_Biscuit joins (~MajorBisc@c-001-015-045.client.tudelft.eduvpn.nl)
16:16:20 yauhsien joins (~yauhsien@61-231-38-131.dynamic-ip.hinet.net)
16:22:05 tzh joins (~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
16:22:50 Digit joins (~user@user/digit)
16:23:41 × pottsy quits (~pottsy@2400:4050:b560:3700:95a9:bb69:4209:aa9b) (Ping timeout: 265 seconds)
16:24:45 maroloccio joins (~marolocci@pousada3ja.mma.com.br)
16:26:19 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 260 seconds)
16:28:24 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
16:29:05 × Codaraxis_ quits (~Codaraxis@user/codaraxis) (Ping timeout: 256 seconds)
16:29:49 × acidjnk quits (~acidjnk@p200300d0c7049f76ad7ddf43206a2c16.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
16:29:52 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
16:30:17 stiell joins (~stiell@gateway/tor-sasl/stiell)
16:31:39 × michalz quits (~michalz@185.246.204.61) (Read error: No route to host)
16:33:18 alp_ joins (~alp@user/alp)
16:33:43 michalz joins (~michalz@185.246.204.109)
16:33:56 × ProfSimm quits (~ProfSimm@87.227.196.109) (Remote host closed the connection)
16:34:11 ProfSimm joins (~ProfSimm@87.227.196.109)
16:34:26 bahamas joins (~lucian@84.232.140.158)
16:35:49 × alp quits (~alp@user/alp) (Ping timeout: 268 seconds)
16:36:01 × ccntrq quits (~Thunderbi@2a01:c22:897f:4a00:b1c:1884:168b:a47f) (Remote host closed the connection)
16:36:55 × nicbk quits (~nicbk@user/nicbk) (Ping timeout: 240 seconds)
16:37:26 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
16:38:44 gdown joins (~gavin@h69-11-149-231.kndrid.broadband.dynamic.tds.net)
16:42:11 × merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 260 seconds)
16:45:02 × ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
16:45:25 ec joins (~ec@gateway/tor-sasl/ec)
16:45:35 jtm joins (~jtm@user/jtm)
16:46:21 jiribenes joins (~jiribenes@rosa.jiribenes.com)
16:46:57 × rkrishnan quits (~user@2402:e280:215c:2cd:4a3a:c3a9:68b9:db9a) (Ping timeout: 240 seconds)
16:47:04 alp joins (~alp@user/alp)
16:48:29 benin0 joins (~benin@183.82.207.30)
16:49:11 × alp_ quits (~alp@user/alp) (Ping timeout: 260 seconds)
16:50:01 Hanicef joins (~gustaf@81-229-9-108-no92.tbcn.telia.com)
16:50:03 × benin quits (~benin@183.82.207.30) (Ping timeout: 256 seconds)
16:50:03 benin0 is now known as benin
16:50:31 × belphegor666 quits (~satan@ip-046-223-003-068.um13.pools.vodafone-ip.de) (Changing host)
16:50:31 belphegor666 joins (~satan@user/belphegor666)
16:51:00 Guest94 joins (~Guest94@94.54.249.160)
16:51:31 × cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.4.1)
16:51:31 Guest9446 joins (~Guest94@94.54.249.160)
16:52:03 Akiva joins (~Akiva@user/Akiva)
16:52:28 × Guest94 quits (~Guest94@94.54.249.160) (Client Quit)
16:53:08 Guest9446 parts (~Guest94@94.54.249.160) ()
16:53:14 Guest9446 joins (~Guest94@94.54.249.160)
16:56:10 × gdown quits (~gavin@h69-11-149-231.kndrid.broadband.dynamic.tds.net) (Remote host closed the connection)
16:58:48 × ec quits (~ec@gateway/tor-sasl/ec) (Quit: ec)
16:59:07 ec joins (~ec@gateway/tor-sasl/ec)
16:59:31 shiraeeshi joins (~shiraeesh@77.94.25.181)
17:00:08 × ec quits (~ec@gateway/tor-sasl/ec) (Client Quit)
17:00:20 ec joins (~ec@gateway/tor-sasl/ec)
17:09:17 × mbuf quits (~Shakthi@223.178.127.254) (Quit: Leaving)
17:11:17 × bahamas quits (~lucian@84.232.140.158) (Ping timeout: 240 seconds)
17:14:36 cdsmith joins (~cdsmithma@2001:470:69fc:105::284)
17:15:09 <cdsmith> Is there a way to get cabal to print the commands that it's running? I'm trying to get a different build system to do things that I know how to do with cabal.
17:16:54 <cdsmith> (Specifically, building an so file for a c++ library that uses foreign exports from Haskell)
17:17:08 <maerwald> cabal -v3?
17:17:35 <cdsmith> Ah, I should have just tried --verbose before asking. That does it!
17:18:37 × raym quits (~raym@user/raym) (Read error: Connection reset by peer)
17:19:21 raym joins (~raym@user/raym)
17:19:31 erts joins (~erts@user/erts)
17:22:58 fendor_ joins (~fendor@178.115.44.78.wireless.dyn.drei.com)
17:24:20 boxscape_25 is now known as boxscape__
17:25:21 × fendor quits (~fendor@178.115.46.236.wireless.dyn.drei.com) (Ping timeout: 245 seconds)
17:25:56 vglfr joins (~vglfr@46.96.132.108)
17:28:15 × Guest9446 quits (~Guest94@94.54.249.160) (Quit: Client closed)
17:28:32 × kuribas quits (~user@ip-188-118-57-242.reverse.destiny.be) (Remote host closed the connection)
17:29:17 × alp quits (~alp@user/alp) (Ping timeout: 240 seconds)
17:29:41 Benzi-Junior joins (~BenziJuni@dsl-149-64-179.hive.is)
17:34:31 Pickchea joins (~private@user/pickchea)
17:34:51 econo joins (uid147250@user/econo)
17:41:58 gdown joins (~gavin@h69-11-149-231.kndrid.broadband.dynamic.tds.net)
17:44:27 × Hanicef quits (~gustaf@81-229-9-108-no92.tbcn.telia.com) (Quit: leaving)
17:45:14 <Putonlalla> How do you open issues or submit pull requests for this package? It doesn't have a `pngcairo` terminal and the author has made it impossible to add new instances. https://hackage.haskell.org/package/gnuplot
17:47:25 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 240 seconds)
17:47:28 × fendor_ quits (~fendor@178.115.44.78.wireless.dyn.drei.com) (Remote host closed the connection)
17:49:19 <geekosaur> email henning thielemann, I guess, since the listed repo and issue tracker both went away some years ago
17:49:45 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
17:50:32 × yauhsien quits (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Remote host closed the connection)
17:50:42 <Putonlalla> I need a few days to gather enough politeness to do that.
17:51:40 yauhsien joins (~yauhsien@61-231-38-131.dynamic-ip.hinet.net)
17:52:54 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
17:53:16 <Putonlalla> The author should look at the `graphviz` package to learn how to make proper bindings.
17:53:18 <geekosaur> yeh, I know that one only too well
17:53:39 <geekosaur> henning is … opinionated about such things
17:54:58 chomwitt joins (~chomwitt@2a02:587:dc0d:b200:f874:1c07:de06:7cf8)
17:55:32 × pooryorick quits (~pooryoric@87-119-174-173.tll.elisa.ee) (Ping timeout: 240 seconds)
17:56:25 pooryorick joins (~pooryoric@87-119-174-173.tll.elisa.ee)
17:57:59 <Putonlalla> Even looking past the stupid programming style, this issue would have never arisen if the package was engineered properly.
17:58:20 <opqdonut> now I'm curious, how is it impossible to add new instances?
17:58:42 <Putonlalla> The class is exported, but its methods are not.
17:59:13 <opqdonut> ah
17:59:28 <Putonlalla> It's the difference between `C` and `C (..)`.
17:59:36 <opqdonut> yeah
17:59:48 fef joins (~thedawn@user/thedawn)
18:02:42 × justsomeguy quits (~justsomeg@user/justsomeguy) (Quit: WeeChat 3.4)
18:03:29 vicfred joins (~vicfred@user/vicfred)
18:04:57 × vglfr quits (~vglfr@46.96.132.108) (Ping timeout: 240 seconds)
18:08:26 jao joins (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
18:09:50 zebrag joins (~chris@user/zebrag)
18:11:09 bahamas joins (~lucian@84.232.140.158)
18:14:18 Tuplanolla joins (~Tuplanoll@91-159-69-98.elisa-laajakaista.fi)
18:15:53 × bahamas quits (~lucian@84.232.140.158) (Ping timeout: 250 seconds)
18:21:38 × yauhsien quits (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Remote host closed the connection)
18:21:52 jgeerds joins (~jgeerds@55d4548e.access.ecotel.net)
18:22:16 yauhsien joins (~yauhsien@61-231-38-131.dynamic-ip.hinet.net)
18:24:54 × ph88^ quits (~ph88@ip5f5af71f.dynamic.kabel-deutschland.de) (Quit: Leaving)
18:24:57 × boxscape__ quits (~boxscape_@p4ff0b60b.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
18:25:49 × Pickchea quits (~private@user/pickchea) (Ping timeout: 256 seconds)
18:26:24 × boxscape_ quits (~boxscape_@p4ff0b60b.dip0.t-ipconnect.de) (Ping timeout: 272 seconds)
18:26:32 Codaraxis_ joins (~Codaraxis@user/codaraxis)
18:26:57 × yauhsien quits (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
18:27:23 Codaraxis joins (~Codaraxis@user/codaraxis)
18:27:55 × ProfSimm quits (~ProfSimm@87.227.196.109) (Remote host closed the connection)
18:28:07 ProfSimm joins (~ProfSimm@87.227.196.109)
18:28:52 Codaraxis__ joins (~Codaraxis@user/codaraxis)
18:29:54 _ht joins (~quassel@231-169-21-31.ftth.glasoperator.nl)
18:31:13 mvk joins (~mvk@2607:fea8:5cc3:7e00::7980)
18:31:29 × Codaraxis_ quits (~Codaraxis@user/codaraxis) (Ping timeout: 256 seconds)
18:31:42 nicbk joins (~nicbk@user/nicbk)
18:32:03 × Codaraxis quits (~Codaraxis@user/codaraxis) (Ping timeout: 256 seconds)
18:32:34 hololeap joins (~hololeap@user/hololeap)
18:33:42 vglfr joins (~vglfr@46.96.132.108)
18:38:21 × shapr quits (~user@pool-173-73-44-186.washdc.fios.verizon.net) (Remote host closed the connection)
18:42:00 mason0 joins (~bc8147f2@cerf.good1.com)
18:42:04 gurkenglas joins (~gurkengla@dslb-178-012-018-212.178.012.pools.vodafone-ip.de)
18:43:09 × jgeerds quits (~jgeerds@55d4548e.access.ecotel.net) (Ping timeout: 256 seconds)
18:43:20 <mason0> hi. what's a better way of expressing this?
18:43:34 <mason0> > (\n -> foldr (\_ acc -> acc / 2) 100 (replicate n 0)) 3
18:43:36 <lambdabot> 12.5
18:44:05 <mason0> > 100 / 2 / 2 / 2 -- with 3 as an argument
18:44:05 <gurkenglas> Thoughts on HVM? It sounded amazing to me until I heard that "clone's can't clone their own clones" and now it sounds like a scam because surely this pops up all the time...
18:44:07 <lambdabot> 12.5
18:44:25 <gurkenglas> s/clone's/clones/
18:44:31 <tomsmeding> > iterate (/2) 100 !! 3
18:44:32 <lambdabot> 12.5
18:44:49 bahamas joins (~lucian@84.232.140.158)
18:45:32 <mason0> it is prettier and more concise, but won't that create a list from 0 to n?
18:45:44 <tomsmeding> hm?
18:45:49 <tomsmeding> > take 10 (iterate (/2) 100
18:45:51 <tomsmeding> > take 10 (iterate (/2) 100)
18:45:51 <lambdabot> <hint>:1:26: error:
18:45:51 <lambdabot> parse error (possibly incorrect indentation or mismatched brackets)
18:45:53 <lambdabot> [100.0,50.0,25.0,12.5,6.25,3.125,1.5625,0.78125,0.390625,0.1953125]
18:46:03 <mason0> yeah, a list with n elements
18:46:14 <tomsmeding> ah right, I see what you mean
18:46:31 <tomsmeding> well, yours will too with the same reasoning :p
18:46:43 <mason0> yes. but I was looking for an improvement :)
18:46:56 <tomsmeding> but most probably 'iterate' and '!!' will be inlined and the intermediate list fused away
18:47:18 <mason0> so there's no "repeat a function N times" combinator?
18:47:28 <tomsmeding> not in base at least
18:47:36 <tomsmeding> let me check about the fusion
18:48:07 <mason0> mine probably won't create a list at all? I'm not even touching the list arguments
18:48:50 <mason0> apart from pattern matching on (:)
18:49:17 × bahamas quits (~lucian@84.232.140.158) (Ping timeout: 240 seconds)
18:50:00 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
18:50:26 boxscape_ joins (~boxscape_@p4ff0b60b.dip0.t-ipconnect.de)
18:51:00 × justOkay quits (~justache@user/justache) (Read error: Connection reset by peer)
18:51:20 pnotequalnp joins (~pnotequal@207-118-121-128.dyn.centurytel.net)
18:51:57 <tomsmeding> why does ghc not inline interate and !!
18:51:58 justOkay joins (~justache@user/justache)
18:52:37 <tomsmeding> mason0: your foldr/replicate thing has similar Core to the explicit 'foo x 0 = x ; foo x k = foo (x / 2) (k - 1)', but my version just calls iterate and !! from Prelude
18:53:48 <tomsmeding> oh apparently iterate is marked NOINLINE [1]
18:54:01 <tomsmeding> Does anyone in this channel know what that [1] means?
18:54:49 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
18:55:48 <mason0> interesting
18:56:01 <mason0> does this seem like a good name, and good argument order?
18:56:02 <mason0> reapply :: Int -> (a -> a) -> a -> a
18:57:15 <mason0> reapply 3 (++"!") "foo" => "foo!!!"
18:57:19 <mason0> maybe reap? apN?
18:57:27 <tomsmeding> argument order yes, name meh but I honestly don't know anything really better; I might have done 'ntimes' but not sure
18:59:10 <pnotequalnp> composeN
18:59:29 alp joins (~alp@user/alp)
18:59:30 <pnotequalnp> composeN 3 f = f . f . f
19:01:03 <tomsmeding> quite good
19:02:15 × neurocyte0917090 quits (~neurocyte@user/neurocyte) (Quit: The Lounge - https://thelounge.chat)
19:03:15 <tomsmeding> mason0: https://tomsmeding.com/vang/0Ke4zm/report.html
19:03:30 <tomsmeding> apparently I didn't judge the Core correctly
19:04:15 <tomsmeding> with this source https://paste.tomsmeding.com/Zbav9zzQ
19:04:22 <tomsmeding> (pasting the cabal file to show that I'm using -O2)
19:04:41 <byorgey> tomsmeding: the [1] has something to do with phases, it's some kind of hacky way to ensure that various rewriting/inlining rules fire in the right order. I don't know the details though.
19:05:17 <tomsmeding> byorgey: thanks! Can that be the cause that 'iterate' isn't inlined here? (!!) is marked INLINABLE, which sounds promising but it too is not inlined
19:05:48 <gurkenglas> > (\n -> foldr (.) id . replicate n) 3 (/2) 100
19:05:50 <lambdabot> 12.5
19:05:53 <byorgey> no idea. All this stuff is black magic to me.
19:07:30 <byorgey> tomsmeding: that's unfortunate, I always assumed iterate f x !! k would fuse away the intermediate list.
19:07:43 <tomsmeding> gurkenglas: nice, has the same performance (up to .02 ns -- I expect same Core) as the original foldr-replicate version
19:07:55 <tomsmeding> byorgey: me too :p
19:08:01 mjs2600 joins (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net)
19:09:43 <gurkenglas> :t [ala Endo foldMap, foldr (.) id]
19:09:45 <lambdabot> Foldable t => [t (b -> b) -> b -> b]
19:10:19 <tomsmeding> wow ok so using iterate' instead of iterate gives a huge performance improvement; direct-recursive is still faster, but not by much anymore https://tomsmeding.com/vang/HQzhtC/report.html
19:12:02 neurocyte0917090 joins (~neurocyte@IP-094046076012.dynamic.medianet-world.de)
19:12:03 × neurocyte0917090 quits (~neurocyte@IP-094046076012.dynamic.medianet-world.de) (Changing host)
19:12:03 neurocyte0917090 joins (~neurocyte@user/neurocyte)
19:14:06 × ralu quits (~ralu@static.211.245.203.116.clients.your-server.de) (Ping timeout: 252 seconds)
19:15:37 <gurkenglas> > (under (_Wrapping Endo) . stimes) 3 (/2) 100
19:15:39 <lambdabot> 12.5
19:15:40 <tomsmeding> so somehow, `iterate' (/2) x !! k`, where neither iterate' nor !! are inlined, ends up being faster than the foldr-replicate version where everything is inlined and the only calls are to GHC.Prim operations
19:15:55 ralu joins (~ralu@static.211.245.203.116.clients.your-server.de)
19:16:58 <pnotequalnp> Have you tried foldl'?
19:17:04 <pnotequalnp> It should be faster since `/` is strict
19:17:48 × mjs2600 quits (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) (Quit: ZNC 1.8.2 - https://znc.in)
19:19:01 kevin[m]1 joins (~pnotequal@2001:470:69fc:105::a54)
19:20:47 <tomsmeding> interesting, the foldr-replicate version with foldr replaced by foldl' and the lambda flipped, but nothing else, makes it optimise down to the same as the direct recursive one
19:20:51 × ralu quits (~ralu@static.211.245.203.116.clients.your-server.de) (Ping timeout: 260 seconds)
19:20:58 <tomsmeding> and indeed the runtime is the same, i.e. fastest
19:21:35 <tomsmeding> at this point it's 2.15ns for recursive or foldl'-replicate, 5.5ns for iterate'-!!, 10.1ns for foldr-replicate, and 102ns for iterate-!! on my machine
19:22:31 merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
19:22:38 <pnotequalnp> I really want to try benchmarking unlifted versions of stuff but Criterion doesn't support that yet (levity polymorphism yada yada) and I don't feel like implementing it myself.
19:23:21 <tomsmeding> pnotequalnp: why does criterion need to support unlifted levity in order to benchmark it?
19:23:38 × awpr quits (uid446117@id-446117.lymington.irccloud.com) (Quit: Connection closed for inactivity)
19:23:49 <tomsmeding> in any case, the fastest ones are already worker-wrapper transformed to do the actual inner loop on unlifted values only
19:24:39 × neurocyte0917090 quits (~neurocyte@user/neurocyte) (Read error: Connection reset by peer)
19:25:39 neurocyte0917090 joins (~neurocyte@user/neurocyte)
19:28:24 <pnotequalnp> Hmm I suppose I could just use the lower level interface. I've just been thinking about the whnf-type utilities.
19:28:55 <tomsmeding> pnotequalnp: you can use this template https://paste.tomsmeding.com/Zbav9zzQ
19:33:43 ralu joins (~ralu@static.211.245.203.116.clients.your-server.de)
19:34:55 × nicbk quits (~nicbk@user/nicbk) (Ping timeout: 240 seconds)
19:37:06 <gurkenglas> Why is there stimes but not mtimes?
19:37:29 <monochrom> It got the name mconcat.
19:37:35 <gurkenglas> ah ^^
19:37:37 <monochrom> err no, nevermind.
19:37:53 <monochrom> @type stimes
19:37:54 <lambdabot> (Semigroup a, Integral b) => b -> a -> a
19:38:38 <pnotequalnp> Because the monoid version doesn't have a different type.
19:39:12 <monochrom> > stimes 0 ([] :: [Int])
19:39:14 <lambdabot> []
19:39:18 <pnotequalnp> There is mtimesDefault
19:39:28 <pnotequalnp> Which is used as the definition for `stimes` for types that are monoids.
19:39:30 <monochrom> > stimes 0 "x"
19:39:32 <lambdabot> ""
19:39:58 <monochrom> Hrm how does it know that mempty="" exists?
19:40:10 <pnotequalnp> And it's the same thing as the default stimes except it uses mempty for 0 instead of an error
19:40:24 <monochrom> But I don't get an error :)
19:41:03 benin3 joins (~benin@183.82.207.30)
19:41:04 <pnotequalnp> It's overridden on the semigroup instance for lists.
19:41:08 <monochrom> Err nevermind. Yeah.
19:41:12 <gurkenglas> aaaaiiiiieeeee
19:41:21 <pnotequalnp> Since stimes is a class method and not just a polymorphic function.
19:43:17 × benin quits (~benin@183.82.207.30) (Ping timeout: 268 seconds)
19:43:17 benin3 is now known as benin
19:44:59 <gurkenglas> the despair-inducing part is that any two monoid instances for the same semigroup are isomorphic so i can't even really go "but what if someone makes a semigroup with two monoid instances"
19:46:53 <pnotequalnp> Coherence prevents that anyway. Any given semigroup instance can only have one monoid instance based on it.
19:47:01 <gurkenglas> yes i just said that
19:47:28 × mud quits (~mud@user/kadoban) (Quit: quit)
19:47:29 <pnotequalnp> Well I mean, the fact that semigroups can only have one identity is superfluous.
19:47:51 <monochrom> Why is that despair-inducing? I find it comforting and beautiful. :)
19:48:04 <pnotequalnp> Since you can't define multiple monoid instances based on the same semigroup instance to begin with, even if they could have multiple identities, Haskell wouldn't let you write that.
19:48:14 <gurkenglas> you can use the constraints library to get around that haskell limitation i think
19:48:43 <gurkenglas> it's despair-inducing because stimes is *wrong* to refer to mempty but how am i supposed to convince people of this
19:49:35 yauhsien joins (~yauhsien@61-231-38-131.dynamic-ip.hinet.net)
19:49:57 <pnotequalnp> Tell that to all the people writing instance Applicative M where (<*>) = ap :b
19:50:14 <gurkenglas> that's fine, it's just a shortcut
19:50:25 briandaed joins (~root@109.95.142.93.r.toneticgroup.pl)
19:50:53 <monochrom> The robust moral reason is that if the type says Semigroup only, one does not expect it to have access to mempty.
19:50:53 <tomsmeding> why would it be better for stimes to throw an error on 0?
19:51:13 <gurkenglas> tomsmeding: because of the s
19:51:25 <monochrom> This doesn't need "there can be two conflicting ways".
19:51:57 × merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
19:52:44 <monochrom> IOW parametricity is a more robust moral reason.
19:53:12 <monochrom> I mean, as far as moral reasons are concerned. I don't really mind either way.
19:53:36 <gurkenglas> ah the thing that monochrom said inspires in me the argument that i previously failed to find: "forall m. Semigroup m => m" should not have an implementation, but it has "stimes 0 undefined"
19:54:21 <gurkenglas> (or i suppose by modus tollens, and at that point at least you're consistent so no more aaaaiiieee, remove Monoid and put mempty in Semigroup with default implementation stimes 0 undefined)
19:55:23 <tomsmeding> gurkenglas: I guess you're arguing that stimes should not be a class method?
19:56:25 <gurkenglas> tomsmeding: presumably it is a class method because it's sometimes asymptotically faster than the default implementation, and that's valid
19:56:49 <tomsmeding> I kind of follow your and monochrom's argument that morally stimes should throw for 0, to make it have the same behaviour as if it was a top-level function -- inclusion in the class is only to enable a more optimised implementation in some cases. But I'm... just not able to get worked up over this. There are worse things in the design of Haskell :p
19:57:25 <tomsmeding> this is not the hill to die on
19:57:30 <gurkenglas> are there worse newer things, though?
19:57:35 × hololeap quits (~hololeap@user/hololeap) (Ping timeout: 240 seconds)
19:58:07 × maroloccio quits (~marolocci@pousada3ja.mma.com.br) (Quit: WeeChat 3.0)
20:00:13 <pnotequalnp> I was motivated to make something cursed. https://paste.tomsmeding.com/hPK0qgjb
20:00:15 zincy_ joins (~zincy@2a00:23c8:970c:4801:a9ba:a14e:e332:b83f)
20:00:49 <tomsmeding> makes me think of the hack to detect whether ScopedTypeVariables is on
20:00:52 × pnotequalnp quits (~pnotequal@207-118-121-128.dyn.centurytel.net) (Quit: Client closed)
20:01:06 pnotequalnp joins (~pnotequal@207-118-121-128.dyn.centurytel.net)
20:02:19 <pnotequalnp> Oh I haven't seen that, how does it work?
20:02:49 <tomsmeding> pnotequalnp: https://paste.tomsmeding.com/4nHVRS92
20:02:57 Pickchea joins (~private@user/pickchea)
20:03:24 <tomsmeding> what you're really testing is what the implementer of the Semigroup instance did with stimes, not whether the type has a Monoid instance :p
20:03:32 admin[m] joins (~adminzgoc@2001:470:69fc:105::1:51c4)
20:03:41 <pnotequalnp> Yeah it only works if you override stimes like the base instances all do
20:06:02 × briandaed quits (~root@109.95.142.93.r.toneticgroup.pl) (Quit: Lost terminal)
20:07:47 <tomsmeding> pnotequalnp: hm there's this one but there was a clearer one, still searching https://codegolf.stackexchange.com/a/153762
20:08:32 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
20:08:55 Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
20:09:31 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 256 seconds)
20:09:34 × ProfSimm quits (~ProfSimm@87.227.196.109) (Remote host closed the connection)
20:09:53 ProfSimm joins (~ProfSimm@87.227.196.109)
20:10:06 <pnotequalnp> You can use it to recover """type information""" at runtime. https://paste.tomsmeding.com/fpb4A8gQ
20:10:14 Lord_of_Life_ is now known as Lord_of_Life
20:10:22 <pnotequalnp> I wonder if it's possible to magic up a monoid dictionary somehow
20:11:21 <pnotequalnp> By converting the `Either SomeException s` to a `Maybe (DIct (Monoid s))`
20:11:46 pieguy128_ joins (~pieguy128@bras-base-mtrlpq5031w-grc-35-70-24-248-224.dsl.bell.ca)
20:11:50 × pieguy128 quits (~pieguy128@bras-base-mtrlpq5031w-grc-35-70-24-248-224.dsl.bell.ca) (Ping timeout: 260 seconds)
20:11:59 <tomsmeding> to construct a Monoid dict out of thin air using the mempry you got from stimes?
20:12:04 <tomsmeding> *mempty
20:12:16 <pnotequalnp> Yeah
20:12:50 <pnotequalnp> And of course the semigroup dict hidden under the GADT constructor
20:13:15 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Excess Flood)
20:13:20 leah2_ joins (~leah@vuxu.org)
20:15:06 jgeerds joins (~jgeerds@55d4548e.access.ecotel.net)
20:15:10 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
20:16:28 × leah2 quits (~leah@vuxu.org) (Ping timeout: 260 seconds)
20:17:11 × yauhsien quits (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Remote host closed the connection)
20:17:17 <maerwald> I forgot whether Handle's are closed by the GC?
20:18:09 yauhsien joins (~yauhsien@61-231-38-131.dynamic-ip.hinet.net)
20:18:16 × Pickchea quits (~private@user/pickchea) (Quit: Leaving)
20:19:09 Pickchea joins (~private@user/pickchea)
20:20:15 <maerwald> seems so
20:20:16 zyklotomic joins (~ethan@res388d-128-61-90-23.res.gatech.edu)
20:20:51 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
20:21:38 <zyklotomic> i'm not sure how to describe this, i want to restrict in a type signature, a monad to only have MonadWrite, but for it to be the same MonadWrite in the return value
20:21:58 admin[m] parts (~adminzgoc@2001:470:69fc:105::1:51c4) ()
20:22:09 hololeap joins (~hololeap@user/hololeap)
20:22:28 <zyklotomic> so something like (MonadWrite w m1, MonadState s m2) => m1 () -> (m1 and m2) () ?
20:23:07 × yauhsien quits (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
20:23:13 <tomsmeding> how would `(MonadWrite w m) => m () -> m ()` be wrong?
20:23:45 <tomsmeding> and `(MonadWrite w m1, MonadWrite s m2) => m1 () -> m2 ()`
20:24:04 pieguy128 joins (~pieguy128@bras-base-mtrlpq5031w-grc-35-70-24-248-224.dsl.bell.ca)
20:25:02 × pieguy128_ quits (~pieguy128@bras-base-mtrlpq5031w-grc-35-70-24-248-224.dsl.bell.ca) (Ping timeout: 252 seconds)
20:25:30 <zyklotomic> tomsmeding: I also want to modify state in the former, in the latter I want to use the first argument as a callback
20:25:38 <zyklotomic> maybe there is a better way to structure this logic
20:26:14 <zyklotomic> and why (MonadWrite w m)
20:26:37 <zyklotomic> `(MonadWrite w m, MonadState s m) => m () -> m ()` would be wrong for me is because i don't want the first argument to be able to touch state
20:26:45 <tomsmeding> ignoring the constraints for now, just focusing on the type itself -- should be argument monad be the same as the output monad, or not?
20:27:32 <tomsmeding> oh you want the argument to be MonadWrite in w and MonadState in s, but have a static guarantee that the argument cannot actually use that State?
20:27:43 <zyklotomic> now that i think of it, yes, it should. but i'm hoping to yeah, not let myself use state in this case
20:27:47 <zyklotomic> yes, i think you got it
20:28:08 × pieguy128 quits (~pieguy128@bras-base-mtrlpq5031w-grc-35-70-24-248-224.dsl.bell.ca) (Max SendQ exceeded)
20:28:12 <tomsmeding> should the argument have access to other properties of m? Or should it just know that it's working on some monad that has MonadWrite w, not knowing what monad that is?
20:28:28 <dminuoso> You could work with RankNTypes here, if you wanted to badly enough.
20:28:36 pieguy128 joins (~pieguy128@bras-base-mtrlpq5031w-grc-35-70-24-248-224.dsl.bell.ca)
20:28:57 <tomsmeding> yeah, if yes, that would be `(MonadWrite w m, MonadState s m) => (forall m'. MonadWrite w m' => m' ()) -> m ()`
20:29:24 <dminuoso> But honestly, I'd go for `MonadWrite w m => m () -> m ()`
20:29:31 <pnotequalnp> I'm curious if `(MonadWrite w m1, MonadState s m2, m1 ~ m2) => m1 () -> m2 ()` would work, or if GHC is smart enough to carry the instances across the equality.
20:29:39 <tomsmeding> dminuoso: presumably the function that zyklotomic is writing now _does_ need the MonadState
20:29:45 <tomsmeding> otherwise the question is moot
20:30:05 <dminuoso> tomsmeding: So?
20:30:07 <tomsmeding> pnotequalnp: that's equivalent
20:30:40 <dminuoso> tomsmeding: Let's call that function f. f can use MonadState all it wants to, you can still apply it to another polymorphic thing that doesnt have MonadState in its contraints.
20:30:41 <tomsmeding> dminuoso: oh meant "just use `(MonadWrite w m, MonadState s m) => m () -> m ()` ?
20:30:54 <dminuoso> Yeah that then.
20:30:55 <tomsmeding> right, so just not have the static guarantee
20:31:07 <tomsmeding> that's definitely the pragmatic approach :p
20:31:15 <dminuoso> RankNTypes has a big sanity check for me.
20:31:16 <zyklotomic> yeah i guess that works too :D
20:31:27 <zyklotomic> not the most exciting answer though
20:31:44 <dminuoso> Yes, sometimes boring and simple is better.
20:31:54 <tomsmeding> my threshold for using RankNTypes is probably a lot lower than dminuoso's, but I would also give up if the argument needs more stuff from m than just the MonadWrite w
20:32:14 × shiraeeshi quits (~shiraeesh@77.94.25.181) (Quit: Leaving)
20:32:27 <dminuoso> In my experience, trying to be cute with the type system ends up with headaches when type inference doesn't work out, you get bizarre unreadable diagnostics, and after RankNTypes you add 5 more extensions because you feel like "encoding another property into the type system"
20:32:49 <dminuoso> To the point where nobody but you understands whats going on, you have bugs in your type system instead, and the code becomes hard to refactor or extend..
20:33:07 <tomsmeding> heh
20:33:18 <tomsmeding> yeah it definitely depends on how much you're getting out of it
20:34:07 <zyklotomic> tomsmeding: your rank 2 signature should work though right
20:34:25 <tomsmeding> zyklotomic: it should, but only if the argument doesn't need any more information from m than that it's MonadWrite w
20:35:20 <zyklotomic> first time where I can say I experienced a potential real need for rank2/N lol
20:35:25 <dminuoso> It's also my experience that encoding properties in the type system is not done out of necessity in the sense that you regularly violate these properties.
20:35:25 <tomsmeding> like, suppose this function is called f; if at a call site of f, you know that m is WriterT [String] IO, the argument of f can't use the fact that it's in WriterT [String] IO, it just knows "I'm in MonadWrite w m => m"
20:35:29 <zyklotomic> thanks for the discussion / pointers everyone
20:35:30 × alp quits (~alp@user/alp) (Ping timeout: 252 seconds)
20:36:05 <zyklotomic> dminuoso: what do you mean re "violate these properties"
20:36:20 <dminuoso> I think a lot of haskell programmers have a lot of imaginative power, thinking these "but what if you accidentally used state here.." problems into the world - just as a way to justify to themselves to try out fancy type system tricks.
20:36:39 <dminuoso> zyklotomic: Okay, so let me give you an example.
20:36:52 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 272 seconds)
20:37:46 × Pickchea quits (~private@user/pickchea) (Quit: Leaving)
20:37:54 <dminuoso> We have a RADIUS server, and RADIUS broadly is separated into Accounting and Access requests, but they are often multiplexed onto a single TCP/UDP listener. So I used various type tricks to ensure that *access* handlers didn't accidentally produce accountings responses, and accounting handlers dint accidentally produce access responses.
20:38:11 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
20:38:55 <dminuoso> It was completely absurd, because it all boiled down to just 15 lines of code that you can a) just test and b) easily inspect if written in simple style.
20:39:30 <dminuoso> It felt good to argue "You cant possibly misuse this", but the relaity is: I never had misused it before, and I had absolutely no good reason to assume this type of misuse could happen
20:39:55 <dminuoso> The price I paid was everybody looking at the implemention asking tons of "what are all these type tricks going on"
20:40:30 <dminuoso> I've seen some haskellers make the same mistake
20:41:05 Pickchea joins (~private@user/pickchea)
20:42:01 <zyklotomic> lol, that's a very relatable mistake dminuoso
20:42:03 × pgib quits (~textual@173.38.117.90) (Ping timeout: 260 seconds)
20:42:43 <zyklotomic> and probably good enough with just very good comments
20:43:07 <dminuoso> What I really needed was a simple: wrapHandler f = do ty <- requestType; resp <- f; when (radiusType resp != ty) (throwIO (ConstraintViolation "Request/Response type mismatch))
20:43:18 <dminuoso> Inside the server, unconditionally wrapped around the entirety
20:43:25 <dminuoso> There. Done.
20:43:43 <zyklotomic> does put things into perspective
20:43:46 <dminuoso> Sometimes programmers are really good at creating problems for the sole purpose of justifying an engineering solution
20:43:52 <tomsmeding> BuT tHe PeRfOrMaNcE
20:44:03 <Rembane> FUN! :D
20:44:08 <tomsmeding> and that :)
20:44:19 leah2_ is now known as leah2
20:46:13 <zyklotomic> since this is just for homework and myself, going to do the fun route anyways, but def will keep in mind the advice
20:46:52 <tomsmeding> dminuoso: I have the luck that all the code I write, for now, is either for myself or for PL research -- and PL research people are usually quite accepting w.r.t. this stuff :p
20:46:52 shapr joins (~user@pool-173-73-44-186.washdc.fios.verizon.net)
20:47:23 mikail joins (~mikail@2a02:c7f:bd03:2c00:38bf:5983:b068:95f1)
20:47:55 <tomsmeding> zyklotomic: having practice with the fancy stuff is definitely not bad; though for code that is going to be shared with others, dminuoso's advice does indeed apply: have fun, but with moderation
20:47:55 × fef quits (~thedawn@user/thedawn) (Ping timeout: 240 seconds)
20:48:30 <zyklotomic> :)
20:50:00 <mikail> Does anybody have any good references (papers/software apps) of event driven applications in Haskell.
20:50:19 × pnotequalnp quits (~pnotequal@207-118-121-128.dyn.centurytel.net) (Ping timeout: 256 seconds)
20:50:35 <jackdk> I would look at functional reactive programming. What are you trying to do?
20:51:39 <dminuoso> zyklotomic: The project that really kept be at bay was GHC. Structurally there's really no fancy tricks going on. It's essentially just very imperative IO code, with a lot of IORefs being flung around
20:51:51 <dminuoso> Simple is good! :)
20:52:41 <zyklotomic> dminuoso: oddly enough, this is for a compilers hw assignment
20:53:01 <zyklotomic> we did get the autonomy to choose whatever language though
20:53:26 <tomsmeding> is the teacher going to grade the code
20:54:23 <zyklotomic> no, just black box run it
20:54:48 <tomsmeding> interesting assignment
20:55:05 <zyklotomic> yeah, kinda nice to have an excuse to write haskell
20:55:21 <tomsmeding> but yeah, lately I've been messing mostly with compiler-like code transformations, and I've been doing so on well-typed well-scoped De Bruijn ASTs
20:55:26 <tomsmeding> which is... a lot of RankNTypes
20:55:52 <zyklotomic> are those related to De Bruijn indicies, not that i know about what those are either
20:56:09 acidjnk joins (~acidjnk@p200300d0c7049f76ad7ddf43206a2c16.dip0.t-ipconnect.de)
20:56:45 <Rembane> tomsmeding: It sounds painful, how painful is it?
20:57:43 <tomsmeding> Fun! :)
20:57:56 <tomsmeding> but also some type tetris sometimes
20:58:30 × _ht quits (~quassel@231-169-21-31.ftth.glasoperator.nl) (Remote host closed the connection)
21:00:15 <Rembane> Good stuff. :)
21:01:43 fef joins (~thedawn@user/thedawn)
21:04:06 × mikail quits (~mikail@2a02:c7f:bd03:2c00:38bf:5983:b068:95f1) (Ping timeout: 252 seconds)
21:05:43 <tomsmeding> super brief summary: data Idx env t where Z :: Idx (t ': env) t ; S :: Idx env t -> Idx (a ': env) t
21:05:53 <dolio> They seem painful when you're using them. But then when you use something more lax, it's also painful to keep finding variable management errors.
21:05:55 × zincy_ quits (~zincy@2a00:23c8:970c:4801:a9ba:a14e:e332:b83f) (Remote host closed the connection)
21:06:17 <tomsmeding> data Exp env t where Var :: Idx env t -> Exp env t ; App :: Exp env (a -> b) -> Exp env a -> Exp env b ; Lam :: Exp (a ': env) b -> Exp env (a -> b) ; -- etc.
21:06:37 <tomsmeding> dolio: especially with these kinds of code transformations that I'm working with lol
21:08:23 <energizer> why does toGregorian give (Integer, Int, Int) instead of a date?
21:09:35 × Digit quits (~user@user/digit) (Ping timeout: 260 seconds)
21:10:20 <Rembane> energizer: Which toGregorian are you thinking of?
21:11:29 <energizer> oh maybe i did it wrong
21:13:11 <jackdk> Rembane: https://hackage.haskell.org/package/time-1.13/docs/Data-Time-Calendar.html#v:toGregorian probably
21:13:25 <jackdk> The components of the tuple are type aliases IIRC
21:13:42 <Rembane> jackdk: I realized that a bit too late. :)
21:14:47 × tzh quits (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Remote host closed the connection)
21:15:52 tzh joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net)
21:16:03 <energizer> how to construct a DayOfMonth?
21:16:36 × zer0bitz quits (~zer0bitz@dsl-hkibng32-54fbf8-224.dhcp.inet.fi) (Ping timeout: 245 seconds)
21:16:47 × ProfSimm quits (~ProfSimm@87.227.196.109) (Remote host closed the connection)
21:17:02 <monochrom> Click on "DayOfMonth" to discover "type DayOfMonth = ...". Also, what jackdk said.
21:17:06 ProfSimm joins (~ProfSimm@87.227.196.109)
21:17:32 <monochrom> I thought people clicked on all links.
21:17:59 <energizer> DayOfMonth 1 doesnt do what i thought
21:18:16 <jackdk> DayOfMonth is a type alias, not a data declaration
21:18:28 <monochrom> and not a data constructor
21:18:35 pavonia joins (~user@user/siracusa)
21:18:47 <energizer> so that means i'm supposed to just use 1 instead?
21:19:14 <monochrom> Have you learned "type aliases" and what "type Foo = Bool" means?
21:19:56 <energizer> well i guess not if you're asking me that
21:22:19 tzh_ joins (~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
21:24:00 <energizer> ok so i guess my question is, why are these type aliases instead of newtypes
21:24:18 <energizer> er
21:24:41 <energizer> i guess i mean why isnt there such thing as a date
21:24:49 <energizer> it's just (Integer, Int, Int)
21:25:07 alp joins (~alp@user/alp)
21:25:10 pnotequalnp joins (~pnotequal@207-118-121-128.dyn.centurytel.net)
21:25:16 <shapr> Anyone used the validity test library? ( https://github.com/NorfairKing/validity ) I can't figure out how to hook it into hspec.
21:25:27 <energizer> and relatedly, why is Year a type alias instead of a newtype
21:25:34 × Major_Biscuit quits (~MajorBisc@c-001-015-045.client.tudelft.eduvpn.nl) (Quit: WeeChat 3.4)
21:26:00 tomsmeding expects "perhaps they should be newtypes, but it's too late to change now
21:26:09 <energizer> thanks tomsmeding
21:26:17 <tomsmeding> but I don't actually know :p
21:26:20 GuestyMcGuest joins (~GuestyMcG@200.89.69.134)
21:26:54 × tzh quits (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Ping timeout: 272 seconds)
21:27:01 <GuestyMcGuest> Hi, I have a question regarding the installation of ghcup on linux.
21:27:17 <monochrom> Day is already the "date" type you sought.
21:28:05 <geekosaur> GuestyMcGuest, you should just ask your question, not ask to ask
21:29:17 × tzh_ quits (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Remote host closed the connection)
21:29:38 <GuestyMcGuest> Does the installation work for a multi user system? Perusing the procedure, it appears that it installs at user level.
21:29:43 tzh_ joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net)
21:29:52 <koz> GuestyMcGuest: You'd be correct.
21:30:09 <maerwald> GuestyMcGuest: depends how you install it
21:30:24 <koz> maerwald: Wait, you can do a global ghcup-based install?
21:30:30 <maerwald> you can set GHCUP_INSTALL_BASE_PREFIX=/var/ghcup or so
21:30:42 <maerwald> you may have to fix permissions
21:30:59 <koz> Suppose I have several lists, and I wanna itraverse them all in sequence, but not have to concatenate them first. Is there a way I can spell that?
21:31:00 <maerwald> you can also install into /usr/local (but then it's unmanaged)
21:31:17 <koz> Sorry, itraverse_.
21:31:17 <maerwald> ghcup install ghc --isolate=/usr/local --force 8.10.7
21:31:23 <koz> (aka, I don't care about the result)
21:31:40 × tzh_ quits (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Read error: Connection reset by peer)
21:31:44 xax__ joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net)
21:31:44 <maerwald> if you use --isolate, then ghcup won't be able to uninstall
21:31:50 <monochrom> I was the person who single-handedly drove ghcup to have some compatibility with /usr/local installs. >:)
21:32:07 <koz> So I'm hunting for something like `itraverseMany_ :: (Applicative f) => (Int -> a -> f b) -> http://en.wikipedia.org/wiki/Special:Search?go=Go&search=a -> f ()`
21:32:16 <koz> Lolwat.
21:32:33 <maerwald> GuestyMcGuest: so, do you care about uninstallation?
21:32:36 <koz> Do I just want some kind of traverse . traverse nesting?
21:33:04 <sm> so yes, 1 can be interpreted as a DayOfMonth. 1 :: DayOfMonth if you want to be explicit/certain
21:33:53 <GuestyMcGuest> Absolutely, I'm looking for the documentation (as we write :D)
21:34:55 <maerwald> https://www.haskell.org/ghcup/guide/#env-variables
21:34:57 Unicorn_Princess joins (~Unicorn_P@93-103-228-248.dynamic.t-2.net)
21:35:10 <maerwald> and https://www.haskell.org/ghcup/guide/#isolated-installs
21:40:05 yauhsien joins (~yauhsien@61-231-38-131.dynamic-ip.hinet.net)
21:42:01 GuestyMcGuest parts (~GuestyMcG@200.89.69.134) ()
21:42:21 × dhouthoo quits (~dhouthoo@178-117-36-167.access.telenet.be) (Quit: WeeChat 3.4)
21:42:35 × wyrd quits (~wyrd@gateway/tor-sasl/wyrd) (Ping timeout: 240 seconds)
21:43:47 × Batzy quits (~quassel@user/batzy) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
21:44:00 × xax__ quits (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Ping timeout: 272 seconds)
21:44:43 × yauhsien quits (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
21:44:50 <shapr> @paste
21:44:50 <lambdabot> A pastebin: https://paste.debian.net/
21:45:38 <geekosaur> @where paste
21:45:38 <lambdabot> Help us help you: please paste full code, input and/or output at e.g. https://paste.tomsmeding.com
21:46:57 tzh joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net)
21:48:15 × vorpuni quits (~pvorp@2001:861:3881:c690:72bf:4d2e:4b07:eb6c) (Remote host closed the connection)
21:49:10 merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
21:49:31 wyrd joins (~wyrd@gateway/tor-sasl/wyrd)
21:49:57 <tomsmeding> @where lambdabot
21:49:57 <lambdabot> http://haskell.org/haskellwiki/Lambdabot
21:54:23 <shapr> @where shapr
21:54:23 <lambdabot> I run to hug and cuddle shapr
21:54:26 <shapr> yay?
21:54:30 <tomsmeding> :D
21:54:47 × mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection)
21:56:19 <hpc> @where hpc
21:56:19 <lambdabot> http://www.haskell.org/haskellwiki/Haskell_Program_Coverage
21:56:21 <hpc> yep, that's me
21:56:29 <tomsmeding> classic
21:57:32 × pnotequalnp quits (~pnotequal@207-118-121-128.dyn.centurytel.net) (Quit: Client closed)
22:01:50 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
22:05:56 <jackdk> koz: Folds can be combined with <>.
22:06:06 <jackdk> % let x = ("hello", "world")
22:06:06 <yahb> jackdk:
22:06:30 <jackdk> % x ^.. ((_2 <> _1) . traverse)
22:06:30 <yahb> jackdk: "worldhello"
22:06:55 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
22:07:02 <jackdk> % itraverseOf (indexing ((_2 <> _1) . traverse)) (\i a -> print (i, a)) x
22:07:02 <yahb> jackdk: ; <interactive>:50:31: error:; * Couldn't match type `()' with `Char'; arising from a functional dependency between:; constraint `Field1 (String, String) ([Char], [()]) [Char] [()]' arising from a use of `_1'; instance Field1 (a, b) (a', b) a a' at <no location info>; * In the second argument of `(<>)', namely `_1'; In the first argument of `(.)', namely `(_2 <>
22:07:25 <jackdk> % itraverseOf_ (indexing ((_2 <> _1) . traverse)) (\i a -> print (i, a)) x
22:07:25 <yahb> jackdk: (0,'w'); (1,'o'); (2,'r'); (3,'l'); (4,'d'); (5,'h'); (6,'e'); (7,'l'); (8,'l'); (9,'o')
22:07:31 <jackdk> koz: ^
22:07:33 <jackdk> % :quit
22:07:33 <yahb> jackdk:
22:08:40 <jackdk> koz: so you could assemble the lists into a tuple, and use `itraverseOf_ (indexed $ each . traverse)`, I think
22:10:46 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
22:11:02 <jackdk> Axman6: I know you like lens fun ^
22:15:10 yauhsien joins (~yauhsien@61-231-38-131.dynamic-ip.hinet.net)
22:18:54 × perrierjouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Ping timeout: 252 seconds)
22:20:12 × yauhsien quits (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
22:22:41 × merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
22:24:52 × Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
22:25:10 Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
22:27:38 Digit joins (~user@user/digit)
22:28:41 × ec quits (~ec@gateway/tor-sasl/ec) (Quit: ec)
22:33:00 × pwug quits (~pwug@user/pwug) (Read error: Connection reset by peer)
22:37:08 deadmarshal_ joins (~deadmarsh@95.38.229.223)
22:39:51 × michalz quits (~michalz@185.246.204.109) (Remote host closed the connection)
22:41:22 × alp quits (~alp@user/alp) (Remote host closed the connection)
22:41:31 × deadmarshal_ quits (~deadmarsh@95.38.229.223) (Ping timeout: 260 seconds)
22:41:42 alp joins (~alp@user/alp)
22:42:27 k8yun joins (~k8yun@user/k8yun)
22:53:29 × cosimone quits (~user@93-44-187-176.ip98.fastwebnet.it) (Quit: ERC (IRC client for Emacs 27.1))
22:53:44 <Axman6> :o
22:59:55 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 240 seconds)
23:02:31 × acidjnk quits (~acidjnk@p200300d0c7049f76ad7ddf43206a2c16.dip0.t-ipconnect.de) (Ping timeout: 250 seconds)
23:03:25 jpds joins (~jpds@gateway/tor-sasl/jpds)
23:06:43 × gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving)
23:21:05 cosimone joins (~user@93-44-187-176.ip98.fastwebnet.it)
23:22:43 × Tuplanolla quits (~Tuplanoll@91-159-69-98.elisa-laajakaista.fi) (Quit: Leaving.)
23:23:13 × Pickchea quits (~private@user/pickchea) (Quit: Leaving)
23:26:06 pnotequalnp joins (~Srain@207-118-121-128.dyn.centurytel.net)
23:27:14 × vicfred quits (~vicfred@user/vicfred) (Quit: Leaving)
23:29:02 × pnotequalnp quits (~Srain@207-118-121-128.dyn.centurytel.net) (Changing host)
23:29:02 pnotequalnp joins (~Srain@user/pnotequalnp)
23:29:26 pnotequalnp parts (~Srain@user/pnotequalnp) ()
23:29:39 pnotequalnp joins (~Srain@user/pnotequalnp)
23:30:24 × jgeerds quits (~jgeerds@55d4548e.access.ecotel.net) (Ping timeout: 272 seconds)
23:35:11 perrierjouet joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
23:36:13 × pnotequalnp quits (~Srain@user/pnotequalnp) (Remote host closed the connection)
23:40:35 × benin quits (~benin@183.82.207.30) (Quit: The Lounge - https://thelounge.chat)
23:41:38 × Kaipi quits (~Kaiepi@156.34.47.253) (Quit: Leaving)
23:41:53 Kaiepi joins (~Kaiepi@156.34.47.253)
23:43:43 × biberu quits (~biberu@user/biberu) (Read error: Connection reset by peer)
23:44:10 biberu joins (~biberu@user/biberu)
23:48:10 benin joins (~benin@183.82.207.30)
23:48:49 × zyklotomic quits (~ethan@res388d-128-61-90-23.res.gatech.edu) (Ping timeout: 256 seconds)
23:50:04 × TonyStone quits (~TonyStone@2603-7080-8607-c36a-0874-3206-ce5b-fa50.res6.spectrum.com) (Quit: Leaving)
23:50:49 zyklotomic joins (~ethan@res380d-128-61-85-225.res.gatech.edu)
23:54:06 × xkuru quits (~xkuru@user/xkuru) (Read error: Connection reset by peer)
23:55:06 × xff0x quits (~xff0x@i121-117-52-147.s41.a013.ap.plala.or.jp) (Ping timeout: 272 seconds)
23:55:55 TonyStone joins (~TonyStone@2603-7080-8607-c36a-25e7-2817-2baa-33e2.res6.spectrum.com)
23:57:38 × mason0 quits (~bc8147f2@cerf.good1.com) (Quit: CGI:IRC (Session timeout))

All times are in UTC on 2022-03-24.