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.