Logs on 2023-06-28 (liberachat/#haskell)
| 00:00:30 | → | adanwan joins (~adanwan@gateway/tor-sasl/adanwan) |
| 00:01:04 | <Logio> | Oh, the proof I remembered is nearly trivial, since the set of computable numbers is obviously countable, yet the reals are not |
| 00:01:07 | <ncf> | Logio: surely ℝ \ a countable subset is dense in ℝ |
| 00:01:18 | <Logio> | ncf: exactly |
| 00:01:42 | <dolio> | Well, that's pretty expected depending on what you mean, because the reals are uncountable, and algorithms are countable. But the point above was that someone is supposed to point out an uncomputable real, and the things you can point out are also countable. |
| 00:02:20 | <EvanR> | the things you can point out are countable? |
| 00:02:28 | <dolio> | Yeah. |
| 00:02:29 | <c_wraith> | assuming you use language to do the pointing, yhes |
| 00:02:32 | <EvanR> | alrighty |
| 00:02:55 | <c_wraith> | Unless you know a language capable of embedding infinite information in a finite string... |
| 00:02:57 | <EvanR> | that might just devolve into ultrafinitism |
| 00:03:14 | <EvanR> | the things you can point out is actually finite for many reasons |
| 00:03:18 | <dolio> | Well, I'm allowing some idealism. |
| 00:03:30 | <dolio> | Just not the usual amount of BS idealism. |
| 00:06:50 | <EvanR> | but yeah if you try to equate reals with possibly infinite list of Bool, and haskell can compute any computable list of Bool, and you enumerate them all in a lazy list, you can use a diagonal argument to argue we missed something. Whatever it is is uncomputable by definition |
| 00:07:35 | × | cheater quits (~Username@user/cheater) (Quit: Going offline, see ya! (www.adiirc.com)) |
| 00:07:37 | × | driib quits (~driib@vmi931078.contaboserver.net) (Read error: Connection reset by peer) |
| 00:07:56 | → | driib joins (~driib@vmi931078.contaboserver.net) |
| 00:08:39 | <EvanR> | that's totally wrong because the argument involves going over that diagonal |
| 00:09:16 | <EvanR> | clearly something strange in the neighborhood though |
| 00:10:58 | <dolio> | The diagonal argument shows you can't enumerate every computable list of bools. |
| 00:12:11 | <EvanR> | so you can't enumerate all [Bool] producing haskell programs? |
| 00:12:49 | × | Feuermagier quits (~Feuermagi@user/feuermagier) (Read error: Connection reset by peer) |
| 00:12:50 | <dolio> | Not every [Bool] program is a computable list of booleans. |
| 00:12:55 | <dolio> | Some of them diverge. |
| 00:13:23 | <dolio> | In the Bool part of the list part. |
| 00:13:34 | <EvanR> | so the naive version of the list contains bombs that mess up a literate attempt to show the diagonal |
| 00:13:42 | <EvanR> | literal |
| 00:14:52 | <dolio> | If your [[Bool]] contains entries that diverge somewhere, then it doesn't meet the specification to begin with. |
| 00:15:08 | → | wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com) |
| 00:15:09 | × | wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host) |
| 00:15:09 | → | wroathe joins (~wroathe@user/wroathe) |
| 00:15:25 | <dolio> | So it doesn't matter what the diagonal-taking program does with it. |
| 00:16:26 | → | cheater joins (~Username@user/cheater) |
| 00:17:10 | <EvanR> | attempt to filter those out with a timeout or exception handler xD |
| 00:20:20 | <dolio> | Anyhow, this all works entirely in the computable world, for boolean streams. The computable bit streams are computably uncountable. |
| 00:20:34 | → | Feuermagier joins (~Feuermagi@user/feuermagier) |
| 00:21:28 | <EvanR> | I failed to show that there's an uncomputable stream |
| 00:21:37 | × | driib quits (~driib@vmi931078.contaboserver.net) (Remote host closed the connection) |
| 00:21:57 | → | driib joins (~driib@vmi931078.contaboserver.net) |
| 00:22:21 | <dolio> | Well, it's even easier to define Chaitin's bit stream, I think. |
| 00:23:33 | <dolio> | The real number has something fancy going on to somehow be related to probability or something. |
| 00:29:33 | → | Nokurn joins (~jeremiah@cpe-76-86-186-227.socal.res.rr.com) |
| 00:32:23 | → | merijn joins (~merijn@c-001-001-003.client.esciencecenter.eduvpn.nl) |
| 00:33:50 | → | random-jellyfish joins (~random-je@user/random-jellyfish) |
| 00:35:48 | × | driib quits (~driib@vmi931078.contaboserver.net) (Remote host closed the connection) |
| 00:36:02 | × | machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 245 seconds) |
| 00:36:08 | → | driib joins (~driib@vmi931078.contaboserver.net) |
| 00:37:59 | → | o-90 joins (~o-90@gateway/tor-sasl/o-90) |
| 00:38:11 | × | o-90 quits (~o-90@gateway/tor-sasl/o-90) (Remote host closed the connection) |
| 00:43:37 | <[Leary]> | Chaitin's constant is a bit complicated. Instead you can just directly encode a halting oracle into the digits of a real number. |
| 00:45:32 | <EvanR> | is that what the specker sequence above is doing |
| 00:46:06 | × | Nokurn quits (~jeremiah@cpe-76-86-186-227.socal.res.rr.com) (Ping timeout: 260 seconds) |
| 00:51:27 | × | driib quits (~driib@vmi931078.contaboserver.net) (Remote host closed the connection) |
| 00:51:49 | → | driib joins (~driib@vmi931078.contaboserver.net) |
| 00:52:17 | → | hisa38 joins (~hisa38@104-181-102-238.lightspeed.wepbfl.sbcglobal.net) |
| 00:52:28 | <[Leary]> | EvanR: No, that construction is also less direct---it needs to be, since it has a more specific goal. |
| 00:53:10 | → | smoge joins (~smoge@2603-7000-4b42-1100-a4e2-7fcb-30b3-1956.res6.spectrum.com) |
| 01:05:22 | × | driib quits (~driib@vmi931078.contaboserver.net) (Remote host closed the connection) |
| 01:05:43 | → | driib joins (~driib@vmi931078.contaboserver.net) |
| 01:07:11 | × | merijn quits (~merijn@c-001-001-003.client.esciencecenter.eduvpn.nl) (Ping timeout: 264 seconds) |
| 01:11:33 | × | albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection) |
| 01:12:48 | × | myxos quits (~myxos@cpe-65-28-251-121.cinci.res.rr.com) (Quit: myxos) |
| 01:13:01 | → | myxos joins (~myxos@cpe-65-28-251-121.cinci.res.rr.com) |
| 01:14:59 | × | jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 264 seconds) |
| 01:15:07 | → | chromoblob joins (~user@37.113.180.121) |
| 01:17:39 | → | albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8) |
| 01:19:05 | × | driib quits (~driib@vmi931078.contaboserver.net) (Read error: Connection reset by peer) |
| 01:19:26 | → | driib joins (~driib@vmi931078.contaboserver.net) |
| 01:19:32 | × | chromoblob quits (~user@37.113.180.121) (Ping timeout: 246 seconds) |
| 01:23:10 | → | nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net) |
| 01:27:56 | × | nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 246 seconds) |
| 01:32:20 | × | driib quits (~driib@vmi931078.contaboserver.net) (Remote host closed the connection) |
| 01:32:40 | → | driib joins (~driib@vmi931078.contaboserver.net) |
| 01:34:52 | × | waleee quits (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) (Ping timeout: 240 seconds) |
| 01:35:05 | × | geranim0 quits (~geranim0@modemcable182.140-177-173.mc.videotron.ca) (Ping timeout: 240 seconds) |
| 01:36:38 | × | ystael quits (~ystael@user/ystael) (Ping timeout: 252 seconds) |
| 01:37:24 | → | hisa381 joins (~hisa38@104-181-102-238.lightspeed.wepbfl.sbcglobal.net) |
| 01:38:47 | × | hisa38 quits (~hisa38@104-181-102-238.lightspeed.wepbfl.sbcglobal.net) (Ping timeout: 246 seconds) |
| 01:38:48 | hisa381 | is now known as hisa38 |
| 01:44:22 | × | dibblego quits (~dibblego@haskell/developer/dibblego) (Ping timeout: 245 seconds) |
| 01:44:31 | × | driib quits (~driib@vmi931078.contaboserver.net) (Remote host closed the connection) |
| 01:44:51 | → | driib joins (~driib@vmi931078.contaboserver.net) |
| 01:53:11 | → | dibblego joins (~dibblego@122-199-1-30.ip4.superloop.au) |
| 01:53:11 | × | dibblego quits (~dibblego@122-199-1-30.ip4.superloop.au) (Changing host) |
| 01:53:11 | → | dibblego joins (~dibblego@haskell/developer/dibblego) |
| 01:56:44 | × | driib quits (~driib@vmi931078.contaboserver.net) (Remote host closed the connection) |
| 01:57:04 | → | driib joins (~driib@vmi931078.contaboserver.net) |
| 02:08:16 | × | driib quits (~driib@vmi931078.contaboserver.net) (Remote host closed the connection) |
| 02:08:35 | → | driib joins (~driib@vmi931078.contaboserver.net) |
| 02:08:48 | × | xff0x quits (~xff0x@ai098135.d.east.v6connect.net) (Ping timeout: 258 seconds) |
| 02:11:19 | × | bilegeek quits (~bilegeek@2600:1008:b09c:efb7:b7bf:5045:f083:53f7) (Quit: Leaving) |
| 02:15:07 | → | chromoblob joins (~user@37.113.180.121) |
| 02:15:51 | → | dsrt^ joins (~dsrt@24.125.210.85) |
| 02:16:36 | × | [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection) |
| 02:17:24 | → | nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net) |
| 02:18:16 | × | Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Quit: Leaving) |
| 02:18:24 | → | talismanick joins (~user@2601:204:ef01:8ca0::a3e7) |
| 02:19:22 | × | chromoblob quits (~user@37.113.180.121) (Ping timeout: 245 seconds) |
| 02:20:44 | <talismanick> | Is servant-errors superseded by another package? It doesn't work with base >4.14 |
| 02:21:24 | × | driib quits (~driib@vmi931078.contaboserver.net) (Remote host closed the connection) |
| 02:21:44 | → | driib joins (~driib@vmi931078.contaboserver.net) |
| 02:22:37 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija))) |
| 02:22:37 | → | finn_elija joins (~finn_elij@user/finn-elija/x-0085643) |
| 02:22:37 | finn_elija | is now known as FinnElija |
| 02:22:38 | → | Katarushisu0 joins (~Katarushi@cpc147790-finc20-2-0-cust502.4-2.cable.virginm.net) |
| 02:22:47 | × | Katarushisu quits (~Katarushi@cpc147790-finc20-2-0-cust502.4-2.cable.virginm.net) (Ping timeout: 264 seconds) |
| 02:22:47 | Katarushisu0 | is now known as Katarushisu |
| 02:27:29 | × | td_ quits (~td@i5387090F.versanet.de) (Ping timeout: 240 seconds) |
| 02:27:43 | <jackdk> | I have never seen that package before in my life. I tend to use the UVerb stuff in modern servant if I need to be precise about returned codes, but I don't know if that solves your problem. |
| 02:29:40 | → | td_ joins (~td@i5387093D.versanet.de) |
| 02:30:05 | × | driib quits (~driib@vmi931078.contaboserver.net) (Read error: Connection reset by peer) |
| 02:30:25 | → | driib joins (~driib@vmi931078.contaboserver.net) |
| 02:44:33 | × | driib quits (~driib@vmi931078.contaboserver.net) (Remote host closed the connection) |
| 02:44:55 | → | driib joins (~driib@vmi931078.contaboserver.net) |
| 02:45:43 | × | Feuermagier quits (~Feuermagi@user/feuermagier) (Remote host closed the connection) |
| 02:49:40 | → | Feuermagier joins (~Feuermagi@user/feuermagier) |
| 02:50:56 | × | czy quits (~user@host-140-26.ilcub310.champaign.il.us.clients.pavlovmedia.net) (Remote host closed the connection) |
| 02:51:22 | × | dibblego quits (~dibblego@haskell/developer/dibblego) (Ping timeout: 250 seconds) |
| 02:51:55 | <siraben> | can people on the libera side hear me? |
| 02:53:45 | <glguy> | yeah |
| 02:54:25 | → | czy joins (~user@host-140-26.ilcub310.champaign.il.us.clients.pavlovmedia.net) |
| 02:56:17 | → | dibblego joins (~dibblego@122-199-1-30.ip4.superloop.au) |
| 02:56:17 | × | dibblego quits (~dibblego@122-199-1-30.ip4.superloop.au) (Changing host) |
| 02:56:17 | → | dibblego joins (~dibblego@haskell/developer/dibblego) |
| 02:56:58 | → | xff0x joins (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) |
| 02:57:08 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:296e:3128:9bb:592b) |
| 02:59:35 | → | reach joins (~reach@bras-base-toroon2643w-grc-19-74-12-129-40.dsl.bell.ca) |
| 03:02:45 | → | k`` joins (~user@136.56.140.2) |
| 03:04:03 | <k``> | Is there any particular reason that ByteString uses a foreign pointer while Text uses a ByteArray#? |
| 03:04:35 | → | merijn joins (~merijn@c-001-001-003.client.esciencecenter.eduvpn.nl) |
| 03:06:52 | × | myme quits (~myme@2a01:799:d60:e400:5ad3:735a:f98b:c82b) (Ping timeout: 245 seconds) |
| 03:12:30 | <EvanR> | ByteStrings are in pinned memory so they can interact with FFI, there's that |
| 03:13:59 | <probie> | I don't know the reason, but given that `ShortByteString` uses a `ByteArray#`, this was definitely a deliberate choice for `ByteString` |
| 03:15:02 | <k``> | Oh, that's an interesting tradeoff. |
| 03:15:48 | <siraben> | great the bridge is back. is anyone using aarch64 ghc and does profiling work for you? |
| 03:15:50 | <siraben> | specificalyl on macos |
| 03:16:00 | × | aweinstock quits (~aweinstoc@cpe-74-76-189-75.nycap.res.rr.com) (Ping timeout: 260 seconds) |
| 03:19:11 | × | nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 264 seconds) |
| 03:19:11 | × | EvanR quits (~EvanR@user/evanr) (Ping timeout: 264 seconds) |
| 03:27:19 | <glguy> | This might not help you at all, but Without getting that computer, I only know hpc was working |
| 03:29:43 | → | aforemny joins (~aforemny@2001:9e8:6cee:a800:d2af:9715:31a9:a2bb) |
| 03:30:37 | × | aforemny_ quits (~aforemny@2001:9e8:6cc7:2c00:369b:8740:ed39:83be) (Ping timeout: 245 seconds) |
| 03:31:24 | <dolio> | I think FFI was the original motivation. |
| 03:31:48 | <dolio> | Although ByteArray# might not have been all there at the time. |
| 03:32:45 | → | falafel joins (~falafel@2607:fb91:86c:d890:90bb:9d24:bff:51c5) |
| 03:37:11 | × | merijn quits (~merijn@c-001-001-003.client.esciencecenter.eduvpn.nl) (Ping timeout: 264 seconds) |
| 03:41:20 | × | cafkafk quits (~cafkafk@fsf/member/cafkafk) (Ping timeout: 240 seconds) |
| 03:42:15 | <jackdk> | k``: it might be so that `ByteString`s can share data e.g., when you slice out a substring. This is implied by e.g., the haddock for `Data.ByteString.copy`: https://hackage.haskell.org/package/bytestring-0.11.4.0/docs/Data-ByteString.html#v:copy |
| 03:43:10 | <dolio> | You can do that with ByteArray#, too. |
| 03:44:15 | → | cafkafk joins (~cafkafk@fsf/member/cafkafk) |
| 03:45:41 | <jackdk> | Ah, TIL. |
| 03:45:45 | <jackdk> | Thanks. |
| 03:46:44 | <dolio> | It's just a matter of sharing the underlying array. They basically just change the offset/length when slicing. |
| 03:47:26 | <probie> | dolio: I'm fairly sure you're right about it not being available. `ByteArray#` first appears in base 4.11 (which is from 2018) |
| 03:49:05 | <dolio> | I think there were some shenanigans early on that you might not be able to do anymore, too. |
| 03:49:29 | <dolio> | Like, I think you could get an mmaped bytestring. |
| 03:52:54 | <probie> | You can use `Data.ByteString.Unsafe.unsafePackAddressLen` on something which has been mmap-ed |
| 03:55:33 | × | phma quits (~phma@host-67-44-208-154.hnremote.net) (Read error: Connection reset by peer) |
| 03:55:58 | → | phma joins (~phma@host-67-44-208-154.hnremote.net) |
| 04:02:55 | × | davetapley quits (sid666@id-666.uxbridge.irccloud.com) (Server closed connection) |
| 04:03:07 | → | davetapley joins (sid666@id-666.uxbridge.irccloud.com) |
| 04:05:36 | → | _ht joins (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) |
| 04:06:04 | × | reach quits (~reach@bras-base-toroon2643w-grc-19-74-12-129-40.dsl.bell.ca) (Remote host closed the connection) |
| 04:06:26 | → | reach joins (~reach@bras-base-toroon2643w-grc-19-74-12-129-40.dsl.bell.ca) |
| 04:18:35 | × | falafel quits (~falafel@2607:fb91:86c:d890:90bb:9d24:bff:51c5) (Ping timeout: 264 seconds) |
| 04:27:27 | <Axman6> | siraben: you might get better responses if you actually state what problem you're having |
| 04:29:20 | <siraben> | Axman6: I get errors like this |
| 04:29:20 | <siraben> | Could not find module ‘Prelude’ |
| 04:29:20 | <siraben> | Perhaps you haven't installed the profiling libraries for package ‘base-4.17.1.0’? |
| 04:29:20 | <siraben> | Use -v (or `:set -v` in ghci) to see a list of the files searched for. |
| 04:29:32 | <siraben> | when I try to run cabal run project --enable-profiling |
| 04:30:23 | <Axman6> | Hmm, that does seem like the profiling libraries haven't been installed, I would've assumed that GHC releases would |
| 04:31:58 | × | k`` quits (~user@136.56.140.2) (Ping timeout: 260 seconds) |
| 04:33:09 | <siraben> | I'm using Haskell installed via Nix on aarch64-darwin |
| 04:35:44 | <Axman6> | Is there a nix... flag to also install profiling libraries? This sounds more like a nix issue than a ghc one if it's not installing all the libraries |
| 04:36:39 | <jackdk> | Generally nixpkgs haskell builds profiling stuff in the same derivations as the regular versions - I usually see it compile most packages twice for this reason. siraben can you please pastebin the nix expression you are using to get GHC? |
| 04:36:42 | <jackdk> | @where paste |
| 04:36:42 | <lambdabot> | Help us help you: please paste full code, input and/or output at e.g. https://paste.tomsmeding.com |
| 04:40:06 | × | bcoppens_ quits (~bartcopp@vpn2.bartcoppens.be) (Ping timeout: 255 seconds) |
| 04:41:02 | <Axman6> | siraben: this line looks relevant in https://github.com/NixOS/nixpkgs/blob/nixos-23.05/pkgs/development/compilers/ghc/common-hadrian.nix#L61: enableProfiledLibs ? !stdenv.targetPlatform.isAarch64 |
| 04:41:31 | <jackdk> | that comment is likely a restriction imposed by nixpkgs hydra builder rather than anything fundamental |
| 04:42:10 | <Axman6> | yeah - does that mean it could be built locally then? |
| 04:44:19 | <jackdk> | possibly/probably, though you'll have to figure out what calls into that function and how to override the argumetn |
| 04:45:39 | → | bcoppens joins (~bartcopp@vpn2.bartcoppens.be) |
| 04:46:28 | × | jargon quits (~jargon@184.101.72.124) (Remote host closed the connection) |
| 04:46:34 | <siraben> | Ah I see. I'm going to just override it and recompile everything then |
| 04:54:58 | × | bliminse quits (~bliminse@user/bliminse) (Server closed connection) |
| 04:55:12 | → | bliminse joins (~bliminse@user/bliminse) |
| 04:55:18 | × | mizlan quits (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net) (Ping timeout: 250 seconds) |
| 05:07:48 | → | coot joins (~coot@89-69-206-216.dynamic.chello.pl) |
| 05:08:03 | → | mizlan joins (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net) |
| 05:08:22 | × | reach quits (~reach@bras-base-toroon2643w-grc-19-74-12-129-40.dsl.bell.ca) (Ping timeout: 260 seconds) |
| 05:10:37 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 245 seconds) |
| 05:15:44 | → | nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net) |
| 05:16:10 | → | takuan joins (~takuan@178-116-218-225.access.telenet.be) |
| 05:17:55 | × | coot quits (~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot) |
| 05:19:51 | → | trev joins (~trev@user/trev) |
| 05:20:30 | × | nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 260 seconds) |
| 05:21:49 | → | dcoutts joins (~duncan@79.137.104.194) |
| 05:21:56 | → | coot joins (~coot@89-69-206-216.dynamic.chello.pl) |
| 05:22:35 | → | Guest6356 joins (~nacho@181.46.138.68) |
| 05:24:27 | → | falafel joins (~falafel@2607:fb91:86c:d890:8617:efee:edaf:5e3d) |
| 05:31:10 | × | dcoutts quits (~duncan@79.137.104.194) (Read error: Connection reset by peer) |
| 05:31:49 | → | dcoutts joins (~duncan@79.137.104.194) |
| 05:37:07 | × | _ht quits (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Quit: _ht) |
| 05:39:59 | → | michalz joins (~michalz@185.246.207.203) |
| 05:40:08 | × | cafkafk quits (~cafkafk@fsf/member/cafkafk) (Ping timeout: 240 seconds) |
| 05:44:56 | <Guest6356> | :quit |
| 05:45:00 | × | Guest6356 quits (~nacho@181.46.138.68) (Quit: leaving) |
| 05:45:26 | → | nacho_ joins (~nacho@181.46.138.68) |
| 05:45:46 | × | nacho_ quits (~nacho@181.46.138.68) (Client Quit) |
| 05:45:53 | × | falafel quits (~falafel@2607:fb91:86c:d890:8617:efee:edaf:5e3d) (Ping timeout: 246 seconds) |
| 05:48:57 | → | nut joins (~nut@176-151-21-224.abo.bbox.fr) |
| 05:49:40 | → | merijn joins (~merijn@86-86-29-250.fixed.kpn.net) |
| 06:11:41 | × | coot quits (~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot) |
| 06:12:00 | × | mizlan quits (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net) (Ping timeout: 250 seconds) |
| 06:16:02 | <mzg> | Guest6356 had strong ghci habits |
| 06:22:47 | → | priesvitne_sklo joins (~priesvitn@192.216.99.34.bc.googleusercontent.com) |
| 06:23:59 | × | merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 240 seconds) |
| 06:24:12 | × | dcoutts quits (~duncan@79.137.104.194) (Ping timeout: 240 seconds) |
| 06:25:08 | → | coot joins (~coot@89-69-206-216.dynamic.chello.pl) |
| 06:25:26 | × | mauke quits (~mauke@user/mauke) (Ping timeout: 250 seconds) |
| 06:29:46 | × | shriekingnoise quits (~shrieking@186.137.175.87) (Ping timeout: 250 seconds) |
| 06:29:46 | × | coot quits (~coot@89-69-206-216.dynamic.chello.pl) (Client Quit) |
| 06:31:10 | → | coot joins (~coot@89-69-206-216.dynamic.chello.pl) |
| 06:31:56 | <Axman6> | I feel like I should a tear, hackersdelight.org seems to have expired at some point and now has some french, probably squatting, website on it |
| 06:34:53 | <Axman6> | should shed* |
| 06:39:44 | <mzg> | what was that? |
| 06:40:10 | <Axman6> | the website for the book Hacker's Delight, the bit twiddling bible |
| 06:42:10 | → | mizlan joins (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net) |
| 06:42:15 | <jackdk> | http://web.archive.org/web/20180609102750/http://www.hackersdelight.org/ Axman6 |
| 06:46:46 | → | titibandit joins (~titibandi@user/titibandit) |
| 06:46:47 | × | mizlan quits (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net) (Ping timeout: 264 seconds) |
| 06:46:51 | → | acidjnk joins (~acidjnk@p200300d6e7072f43f126f466c3390846.dip0.t-ipconnect.de) |
| 06:47:07 | → | dcoutts joins (~duncan@212.187.244.83) |
| 06:47:25 | <Axman6> | yeah I know, just a shame it's gone. I imagine the page to calculate magic numbers for division by constants no longer works (though I hasve acquired the secret knowledge elsewhere, so no longer need such tools - I'm basically a wizard now) |
| 06:51:19 | <Axman6> | > 1 :: Word |
| 06:51:21 | <lambdabot> | 1 |
| 06:51:58 | <Axman6> | :t (.&.) |
| 06:51:59 | <lambdabot> | Bits a => a -> a -> a |
| 06:52:11 | <Hecate> | oh my fucking god |
| 06:52:28 | <Hecate> | Axman6: I unfortunately understand everything that's written on the squatted page |
| 06:52:42 | <Hecate> | it's automatically-generated SEO content |
| 06:52:51 | → | cafkafk joins (~cafkafk@fsf/member/cafkafk) |
| 06:52:57 | → | jespada joins (~jespada@207.188.139.183) |
| 06:53:24 | × | gaze___ quits (sid387101@id-387101.helmsley.irccloud.com) (Server closed connection) |
| 06:53:33 | → | gaze___ joins (sid387101@id-387101.helmsley.irccloud.com) |
| 06:54:29 | <Axman6> | Yeah I figured :( |
| 06:55:43 | → | jespada_ joins (~jespada@207.188.139.183) |
| 06:57:30 | × | jespada quits (~jespada@207.188.139.183) (Ping timeout: 250 seconds) |
| 06:57:33 | × | ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection) |
| 06:58:20 | → | mizlan joins (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net) |
| 06:58:28 | → | lortabac joins (~lortabac@2a01:e0a:541:b8f0:b445:5ef3:652d:413b) |
| 06:59:18 | → | ec joins (~ec@gateway/tor-sasl/ec) |
| 06:59:50 | × | SanchayanMaity quits (sid478177@id-478177.hampstead.irccloud.com) (Server closed connection) |
| 06:59:59 | → | SanchayanMaity joins (sid478177@id-478177.hampstead.irccloud.com) |
| 07:03:12 | × | random-jellyfish quits (~random-je@user/random-jellyfish) (Quit: Client closed) |
| 07:04:11 | <jade[m]> | is there some nice combinator for `f x = a >>= \p -> unless p (f x)`? Essentially a monadic loop. |
| 07:04:43 | <jade[m]> | I thought about repeat/takeWhile and then a sequence but that doesn't really work because the Bool comes from the bind |
| 07:04:44 | <jackdk> | Axman6: http://web.archive.org/web/20180628171849/http://www.hackersdelight.org/magic.htm seems to be implemented only with client-side JS |
| 07:04:45 | × | edwtjo quits (~edwtjo@fsf/member/edwtjo) (Ping timeout: 240 seconds) |
| 07:06:45 | <dsal> | jade[m]: There's a bunch in here: https://hackage.haskell.org/package/monad-loops-0.4.3/docs/Control-Monad-Loops.html |
| 07:06:48 | <jade[m]> | jade[m]: rather `f x = a >>= \y -> unless (p y) (f x)` |
| 07:07:08 | <jade[m]> | dsal: Thanks, I'm gonna see if I can find it |
| 07:08:09 | → | jespada joins (~jespada@207.188.139.183) |
| 07:09:58 | <jackdk> | at what point does `x` get used for anything? |
| 07:10:04 | × | jespada_ quits (~jespada@207.188.139.183) (Ping timeout: 250 seconds) |
| 07:10:27 | × | titibandit quits (~titibandi@user/titibandit) (Remote host closed the connection) |
| 07:10:38 | <jade[m]> | oh right |
| 07:10:41 | <jade[m]> | it's used in a |
| 07:10:53 | <jade[m]> | `f x = a x >>= \y -> unless (p y) (f x)` |
| 07:11:15 | <c_wraith> | all these free variables hurt my soul |
| 07:11:31 | <jade[m]> | and now I messed up fixity ... imagine parantheses around the a x |
| 07:11:38 | <jade[m]> | c_wraith: I sincerely apologize |
| 07:12:41 | <c_wraith> | Like, I don't know what free variables are supposed to not be free. |
| 07:12:52 | <c_wraith> | I assume p should be bound. |
| 07:13:19 | <jackdk> | so... `x :: a -> m b`, `p :: b -> Bool` but because everything's parametric you could just ask for an `m Bool`? |
| 07:13:55 | <jade[m]> | jackdk: I think so (?) that'd be `whileM` in the package that was suggested |
| 07:14:41 | <jade[m]> | c_wraith: yeah, they should all be bound, I just basically abstracted from my concrete example where these are other functions in the module |
| 07:14:42 | <c_wraith> | well. it'd be whileM_ unless you actually want all the intermediate results |
| 07:14:54 | <jade[m]> | right |
| 07:15:00 | <jackdk> | `foo m = fix $ \loop -> m >>= bool loop (pure ())` |
| 07:23:24 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:296e:3128:9bb:592b) (Remote host closed the connection) |
| 07:24:38 | × | dcoutts quits (~duncan@212.187.244.83) (Ping timeout: 260 seconds) |
| 07:27:43 | → | dcoutts joins (~duncan@212.187.244.83) |
| 07:32:11 | → | edwtjo joins (~edwtjo@h-155-4-52-185.A213.priv.bahnhof.se) |
| 07:32:11 | × | edwtjo quits (~edwtjo@h-155-4-52-185.A213.priv.bahnhof.se) (Changing host) |
| 07:32:11 | → | edwtjo joins (~edwtjo@fsf/member/edwtjo) |
| 07:32:16 | → | merijn joins (~merijn@86-86-29-250.fixed.kpn.net) |
| 07:35:19 | → | chromoblob joins (~user@37.113.180.121) |
| 07:35:50 | → | dcoutts_ joins (~duncan@185.201.60.47) |
| 07:37:48 | × | Xe quits (~cadey@tailscale/xe) (Ping timeout: 250 seconds) |
| 07:38:38 | × | dcoutts quits (~duncan@212.187.244.83) (Ping timeout: 260 seconds) |
| 07:39:02 | → | titibandit joins (~titibandi@user/titibandit) |
| 07:39:20 | → | oo_miguel joins (~Thunderbi@78-11-179-96.static.ip.netia.com.pl) |
| 07:39:41 | <jade[m]> | with parsec I can't find a way to say "any token but eof" |
| 07:40:20 | <jade[m]> | I just want to skip tokens that aren't recognized, but that'd consume EOF and mess up the rest of the parser |
| 07:40:35 | <dminuoso> | satisfy |
| 07:41:11 | <Hecate> | looks like `satisfy` yes |
| 07:41:30 | × | cafkafk quits (~cafkafk@fsf/member/cafkafk) (Remote host closed the connection) |
| 07:41:51 | <dminuoso> | Ah actually no |
| 07:41:52 | → | cafkafk joins (~cafkafk@fsf/member/cafkafk) |
| 07:41:54 | <dminuoso> | eof is not an actual token. |
| 07:41:59 | <dminuoso> | That's the first confusion here. |
| 07:42:11 | <dminuoso> | https://hackage.haskell.org/package/parsec-3.1.16.1/docs/src/Text.Parsec.Combinator.html#eof |
| 07:42:13 | <jade[m]> | yeah eof is defined as notFollowedBy anyToken |
| 07:42:16 | → | hisa387 joins (~hisa38@104-181-102-238.lightspeed.wepbfl.sbcglobal.net) |
| 07:42:44 | <dminuoso> | jade[m]: So dont worry about "eof" because it cant be consumed. |
| 07:43:15 | <dminuoso> | If your parser is already at the end, there's another bug |
| 07:43:25 | <dminuoso> | Likely too much backtracking |
| 07:43:56 | <c_wraith> | well, it's parsec. probably the fact that it doesn't truly backtrack |
| 07:43:57 | <jade[m]> | hm, but when I do `parseFoo <|> (anyToken *> parseFoo)` I get an `unexpected end of input` |
| 07:44:23 | × | hisa38 quits (~hisa38@104-181-102-238.lightspeed.wepbfl.sbcglobal.net) (Ping timeout: 264 seconds) |
| 07:44:23 | hisa387 | is now known as hisa38 |
| 07:44:29 | <jade[m]> | I suppose im not sure what "consumes" means |
| 07:45:00 | × | dibblego quits (~dibblego@haskell/developer/dibblego) (Ping timeout: 240 seconds) |
| 07:46:04 | <dminuoso> | jade[m]: Hard to say with just a snippet. |
| 07:46:14 | <dminuoso> | Chances are your total parser is more than just that, right? |
| 07:46:26 | <c_wraith> | In general, you should know that parsec is *far* less compositional than its api suggests |
| 07:46:30 | <jade[m]> | let me try to cook up a minimal reproducible example |
| 07:46:46 | <chromoblob> | "far less compositional than api suggests" scary |
| 07:46:48 | <dminuoso> | <|> is very sneaky in that it only choses the right side, if the left side has not consumed any input. |
| 07:47:16 | <jade[m]> | dminuoso: so can I just `try` the left side? |
| 07:47:28 | <dminuoso> | Maybe, I dont know your grammar and the rest of your parser. |
| 07:47:35 | <c_wraith> | well, it's necessary but not sufficient. |
| 07:47:47 | → | dibblego joins (~dibblego@122-199-1-30.ip4.superloop.au) |
| 07:47:47 | × | dibblego quits (~dibblego@122-199-1-30.ip4.superloop.au) (Changing host) |
| 07:47:47 | → | dibblego joins (~dibblego@haskell/developer/dibblego) |
| 07:47:48 | <dminuoso> | In parser combinators I found that `try foo <|> bar` or some equivalent tends to be horrid for a variety of reasons. |
| 07:47:59 | <c_wraith> | "sufficient" is a factor of your entire grammar because... as I said, parsec is not compositional |
| 07:47:59 | × | xff0x quits (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 240 seconds) |
| 07:48:02 | <dminuoso> | Manual lookahead and then making a decision tends to be better for sanity and diagnostics. |
| 07:48:29 | <jade[m]> | alright, thank you |
| 07:49:16 | → | xff0x joins (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) |
| 07:50:01 | <chromoblob> | you can't enumerate all computable reals due to undecidability of halting, right? |
| 07:50:20 | <dminuoso> | jade[m]: You could think of <|> as alternating with a lookahead of the first token, irrespective of what your actual combinators express. |
| 07:51:16 | <jade[m]> | hm |
| 07:51:40 | <dminuoso> | And `try` turns it into infinite lookahead. |
| 07:52:47 | <dminuoso> | chromoblob: computable numbers form an infinite set. |
| 07:53:10 | <dminuoso> | Do you care to enumerate them in finite time? |
| 07:53:26 | <c_wraith> | chromoblob: you can enumerate all possible programs, of which all computable reals are a subset. What you can't do is filter out duplicates or programs that do other things. |
| 07:53:50 | <c_wraith> | chromoblob: that is, you can't specify the exact subset that are computable reals |
| 07:54:13 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 07:56:59 | <c_wraith> | I suppose I should say you can't compute the subset which make up computable reals. You can specify them, with vague references to a halting oracle. |
| 07:59:51 | <chromoblob> | so if we disregard oracles, can this "imply" in a sense that set of CR is less than N, yet countable? |
| 08:00:03 | <chromoblob> | i mean, introduce a new notion |
| 08:00:19 | <c_wraith> | I have no idea what you mean by "less than N" there. |
| 08:00:36 | <chromoblob> | if i don't believe in uncomputable functions |
| 08:00:49 | <chromoblob> | there is an injection but not surjection into N |
| 08:01:06 | <dminuoso> | chromoblob: Both are countable. |
| 08:01:21 | <dminuoso> | The distinction you seem to be trying to get at is countable vs uncountable |
| 08:01:25 | <chromoblob> | no no |
| 08:01:48 | → | machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net) |
| 08:02:04 | → | fendor joins (~fendor@2a02:8388:1640:be00:7aca:a77a:4a28:631a) |
| 08:02:08 | <dminuoso> | Proving that no surjection onto N (which is countable itself) can exist is pretty much a proof of countability |
| 08:02:18 | <dminuoso> | s/countability/uncountability/ |
| 08:02:29 | <c_wraith> | it's really about computability, not countability |
| 08:02:34 | <chromoblob> | sorry i mean |
| 08:02:43 | <c_wraith> | Is there a surjection? yes. Is it computable? no. |
| 08:03:18 | <chromoblob> | and if we postulate that no uncomputable functions exist? |
| 08:03:25 | <c_wraith> | I think that's the idea you're hunting for. computable mappings only. |
| 08:04:16 | <chromoblob> | sorry my mistake, i mean, there is no computable injection from N to CR |
| 08:04:30 | <chromoblob> | that's what i mean by "less" |
| 08:04:34 | <chromoblob> | yet CR is countable |
| 08:04:40 | <chromoblob> | that is, it is less than uncounable |
| 08:04:44 | <dminuoso> | chromoblob: I think thats hard to postulate, since there is at least one program that enumerates them all. I think its self evident that it exists, you just cant find it. |
| 08:05:10 | <c_wraith> | dminuoso: I don't think that's true, if you require a "program" to be finite. |
| 08:05:16 | <dminuoso> | c_wraith: thats fair. |
| 08:06:12 | <dminuoso> | 10:04:15 chromoblob | sorry my mistake, i mean, there is no computable injection from N to CR |
| 08:06:16 | <dminuoso> | s/injection/surjection |
| 08:06:29 | <chromoblob> | ahhh right right |
| 08:06:57 | <dminuoso> | uncomputably countable. |
| 08:07:04 | <c_wraith> | chromoblob: Anyway, this is an area that's not usually considered. Set theory rarely actually interacts with computability. |
| 08:07:15 | → | cfricke joins (~cfricke@user/cfricke) |
| 08:07:40 | <c_wraith> | I'm not sure what you'd find if you go exploring in that wilderness. |
| 08:07:58 | <dminuoso> | That is, until monochrom opens up his laptop in the evening and decides this to be a great master thesis for one of his poor souls. |
| 08:07:59 | × | mizlan quits (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net) (Ping timeout: 246 seconds) |
| 08:09:09 | <c_wraith> | it's an area that exposes the social aspect of math. Unless you find some really interesting result, you probably won't get many people interested in what you find. |
| 08:09:43 | <chromoblob> | yeah i just want to restrict myself to "computable mathematics" |
| 08:09:56 | <chromoblob> | i don't believe in uncomputable objects |
| 08:10:20 | <chromoblob> | :D |
| 08:10:22 | <c_wraith> | the computable reals themselves are difficult for that. |
| 08:10:37 | <c_wraith> | Because while the numbers themselves might be computable, equality on them is not. |
| 08:10:48 | <chromoblob> | i'm fiiiine with that |
| 08:10:52 | <c_wraith> | What's the use of numbers you can't check for equality? |
| 08:11:30 | <dminuoso> | I ask myself the same thing about PHP and strings. |
| 08:11:51 | <chromoblob> | well i won't use computable reals for everything, for something i might want to use "number forms", that are just like normal numbers, except they don't exist in the same sense that CRs exist, they are only forms |
| 08:12:07 | <c_wraith> | ah, PHP has found a solution. If it doesn't know what you mean by "equality", it just makes something up! |
| 08:12:35 | <chromoblob> | in other words, i don't want to pretend that one single equality or something else is defined for everything |
| 08:12:44 | <dminuoso> | c_wraith: Oh even when the semantics should be crystal clear it still makes something up. |
| 08:12:57 | <chromoblob> | but maybe what i say is just syntactic nonsense |
| 08:13:06 | <dminuoso> | In PHP the strings '9223372036854775807' and 9223372036854775808' are considered equal. |
| 08:13:14 | <dminuoso> | Because why not. |
| 08:14:05 | <c_wraith> | Pfft, like Haskell's any better. |
| 08:14:06 | <c_wraith> | > 2**53 == 2**53 + 1 |
| 08:14:08 | <lambdabot> | True |
| 08:14:48 | <c_wraith> | (ok, yes. it's better in practice) |
| 08:15:06 | <dminuoso> | c_wraith: That very explicitly taps into Floating. |
| 08:15:17 | <dminuoso> | But I guess you have a fair point. |
| 08:15:28 | <dminuoso> | In PHP mostly strings are sort of polymorphic. |
| 08:15:48 | <dminuoso> | That is, they arent really strings. They are "(re)monomorphized" every time you use it. |
| 08:15:49 | <c_wraith> | and you are right. You have to opt in to that silliness more explicitly in Haskell. That really is better. |
| 08:16:24 | <c_wraith> | Like, I had to choose ** as my operator to opt in! |
| 08:17:11 | <dminuoso> | For what its worth, you had me there for a moment. Although I had not used ** before in Haskell, it felt natural since its sometimes used instead of (^) for power. I had to look up (**) first |
| 08:17:18 | <dminuoso> | In other languages I meant |
| 08:17:53 | × | smoge quits (~smoge@2603-7000-4b42-1100-a4e2-7fcb-30b3-1956.res6.spectrum.com) (Ping timeout: 246 seconds) |
| 08:18:42 | <dminuoso> | And I guess in a world where OverloadedStrings is almost omnipresent, let a = "9223372036854775807"; b = "9223372036854775808" in ... a == b could easily lead to the same result. |
| 08:18:50 | <c_wraith> | > 2^^53 == 2^^53 + 1 -- If I'd used this version, you would have known something was up immediately |
| 08:18:52 | <lambdabot> | True |
| 08:19:11 | <dminuoso> | Gosh, what is (^^) |
| 08:19:24 | <c_wraith> | turns out Haskell has 3 exponentiation operators! |
| 08:19:43 | <dminuoso> | Good thing Haskell isnt use much for numbers, like finance. |
| 08:19:56 | <dminuoso> | Or maybe that's the reason why. |
| 08:20:10 | <c_wraith> | That's... certainly related to the reason why! |
| 08:20:17 | × | tzh quits (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz) |
| 08:21:11 | → | ccapndave joins (~ccapndave@xcpe-62-167-164-19.cgn.res.adslplus.ch) |
| 08:21:15 | <dminuoso> | Next presentation at Haskell eXchange 2023: Serokell presents 2 new exponentiation operators in base |
| 08:21:45 | <c_wraith> | I like that. I can't even predict what they'd do, so it would be perfect! |
| 08:22:05 | <int-e> | dminuoso: they actually (finally) changed that in php 8.0.0 |
| 08:22:11 | × | acidjnk quits (~acidjnk@p200300d6e7072f43f126f466c3390846.dip0.t-ipconnect.de) (Ping timeout: 264 seconds) |
| 08:22:45 | <dminuoso> | int-e: Im almost certain they did not. |
| 08:22:48 | <int-e> | I guess "hash collisions" of the shape "1302E3748121" == "29183E38769" were too dangerous? |
| 08:23:00 | <dminuoso> | What they did fix was various comparisons between numbers and non-numbers |
| 08:23:04 | <dminuoso> | To make them less JavaScripty. |
| 08:23:39 | → | kuribas joins (~user@ip-188-118-57-242.reverse.destiny.be) |
| 08:23:52 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:296e:3128:9bb:592b) |
| 08:24:06 | <int-e> | Well I tested your example and the strings are considered different when using ==. |
| 08:24:11 | <dminuoso> | Mmm |
| 08:24:36 | <int-e> | see also https://www.php.net/manual/en/language.operators.comparison.php |
| 08:25:12 | <dminuoso> | Whats funny is that '' /= 0 being in PHP 8.0 now has the consequence that now '' is less than 0. |
| 08:25:15 | <int-e> | I'm confused, because the docs agree with you for "numeric strings" |
| 08:26:45 | <int-e> | (FWIW, the actual version I'm testing is 8.2.5) |
| 08:28:47 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:296e:3128:9bb:592b) (Ping timeout: 264 seconds) |
| 08:29:56 | <dminuoso> | int-e: https://onlinephp.io/c/3f6cb |
| 08:30:29 | <dminuoso> | Curious. |
| 08:30:36 | <dminuoso> | Maybe there is a PHP option to influence this |
| 08:30:48 | × | dcoutts_ quits (~duncan@185.201.60.47) (Remote host closed the connection) |
| 08:31:28 | <dminuoso> | Seems like it was altered in 5.4 a long time ago. Ah what a shame. |
| 08:31:29 | → | gnalzo joins (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) |
| 08:33:38 | <int-e> | so the docs have been wrong ever since? |
| 08:33:59 | <int-e> | (fun) |
| 08:35:39 | <chromoblob> | dminuoso: "" |
| 08:35:51 | <chromoblob> | crud |
| 08:36:47 | → | chele joins (~chele@user/chele) |
| 08:37:04 | <dminuoso> | int-e: To be absolutely blunt, Im not convinced this behavior in PHP is really that poor. |
| 08:37:31 | <chromoblob> | dminuoso: "there is at least one program that enumerates them all" thing is, i assumed this yesterday, and arrived at a contradiction, and went to sleep thinking i discovered a hole in logic or proof of ultrafinitism or something. i woke up in morning, continued thinking and only then noticed that this step might be wrong :) |
| 08:37:34 | <dminuoso> | In Haskell most programmers are desensitized to just add fromIntegral/realToFrac until things compile |
| 08:37:53 | <dminuoso> | We're certainly not riding the moral high horse here. |
| 08:37:58 | <int-e> | The current behavior? It's probably workable. |
| 08:38:14 | → | mizlan joins (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net) |
| 08:38:32 | <dminuoso> | chromoblob: It depends on whether we admit infinite programs or not. |
| 08:38:47 | <int-e> | The surprise was not comparing two strings as string, and that's gone now. |
| 08:38:48 | <dminuoso> | chromoblob: If we admit them, there is an infinite number of programs that enumerate them all. |
| 08:39:42 | <dminuoso> | chromoblob: That program would contain all programs that itself produces a computable real. |
| 08:39:49 | <chromoblob> | infinite program, as in, productive program whose source is infinite uncomputable string? |
| 08:39:54 | <dminuoso> | Yeah. |
| 08:39:57 | <chromoblob> | hehe |
| 08:40:09 | <int-e> | (Well, to me. I'm sure that some people coming from modern Python will be surprised by the lack of built-in big integers.) |
| 08:40:19 | <dminuoso> | chromoblob: but like I said, that is not computable either. So you cant find it. |
| 08:40:21 | × | Feuermagier quits (~Feuermagi@user/feuermagier) (Read error: Connection reset by peer) |
| 08:40:24 | → | Feuermagier_ joins (~Feuermagi@user/feuermagier) |
| 08:40:24 | Feuermagier_ | is now known as Feuermagier |
| 08:40:39 | <dminuoso> | but even if it was computable, the fact that it would be infinite would be another issue |
| 08:41:01 | <chromoblob> | if it was computable, it would be equivalent to a finite program |
| 08:41:42 | <chromoblob> | just execute the output of the finite program that computes it. |
| 08:44:16 | <chromoblob> | oh, you mean being able to execute infinite programs |
| 08:44:20 | → | Midjak joins (~Midjak@82.66.147.146) |
| 08:44:20 | → | Pickchea joins (~private@user/pickchea) |
| 08:46:26 | <dminuoso> | There is fields that research computability on infinite data. |
| 08:47:42 | <chromoblob> | does this have applications? |
| 08:48:08 | × | azimut_ quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds) |
| 08:48:54 | <merijn> | Keeps roaming gangs of mathematicians of the street? |
| 08:51:22 | <chromoblob> | listen if you EVER try to divide by 0 we will beat you up so hard that you won't be able to tell false and true apart |
| 08:53:27 | <mniip> | is the kmettiverse accepting new features or is it all frozen in only necessary maintenance mode? |
| 08:54:32 | <int-e> | . o O ( 640k features are enough for anybody ) |
| 08:57:23 | <mniip> | maybe what I'm looking for already exists |
| 08:58:16 | → | CiaoSen joins (~Jura@2a05:5800:296:4300:664b:f0ff:fe37:9ef) |
| 08:58:48 | → | barcisz joins (~barcisz@79.191.69.198.ipv4.supernova.orange.pl) |
| 08:58:54 | <mniip> | you can implement `accum :: (a -> b -> a) -> f a -> [(Rep f, b)] -> f a` for any representable f |
| 08:59:16 | × | ezzieyguywuf quits (~Unknown@user/ezzieyguywuf) (Ping timeout: 250 seconds) |
| 08:59:17 | <mniip> | but this generic implementation would be inefficient for e.g. a Vector (length-indexed) |
| 08:59:33 | × | Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 08:59:52 | → | ubert1 joins (~Thunderbi@2a02:8109:abc0:6434:ed16:f40d:d3f1:21f0) |
| 09:00:14 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 09:01:40 | × | ccapndave quits (~ccapndave@xcpe-62-167-164-19.cgn.res.adslplus.ch) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 09:04:35 | <tomsmeding> | mniip: would that scatter the bs onto the f a, combining values using the function? |
| 09:04:48 | <mniip> | yes |
| 09:05:18 | <tomsmeding> | why would that be inefficient for a length-length vector |
| 09:06:56 | → | ccapndave joins (~ccapndave@xcpe-62-167-164-19.cgn.res.adslplus.ch) |
| 09:07:50 | <tomsmeding> | *length-indexed |
| 09:07:51 | <tomsmeding> | brain |
| 09:08:23 | → | acidjnk joins (~acidjnk@p200300d6e7072f4300b5bf6655a1513c.dip0.t-ipconnect.de) |
| 09:09:00 | <int-e> | mniip: do you mean `Key f`? |
| 09:09:35 | → | danse-nr3 joins (~francesco@151.37.79.114) |
| 09:10:20 | <mniip> | Data.Functor.Rep (from adjunctions, the more used package, uses Rep f) |
| 09:10:50 | <mniip> | tomsmeding, because vector has an efficient "accum" method that uses a mutable vector under the hoo |
| 09:10:51 | <mniip> | d |
| 09:10:59 | × | m5zs7k quits (aquares@web10.mydevil.net) (Ping timeout: 246 seconds) |
| 09:11:06 | <int-e> | meh that's confusing |
| 09:11:31 | <tomsmeding> | mniip: ah right, your point is that you can implement accum _generically_ |
| 09:11:46 | <tomsmeding> | but then it will be inefficient for basically everything that's not a cons list |
| 09:11:58 | <tomsmeding> | and even for those |
| 09:12:04 | <int-e> | especially considering that representable-functors is *also* be ekmett |
| 09:12:45 | → | m5zs7k joins (aquares@web10.mydevil.net) |
| 09:13:05 | <tomsmeding> | mniip: how would you implement your accum such that it can accumulate into a cons list (of fixed length, I guess) in time O(list length + number of new values) |
| 09:13:26 | <tomsmeding> | that's surely the easiest case to get efficient, and even there it won't be |
| 09:15:08 | <mniip> | you mean the "slow" kind of length-indexed vector? |
| 09:15:13 | <tomsmeding> | yeah |
| 09:15:42 | <tomsmeding> | data Vec n a where { Nil :: Vec 0 a ; Cons :: a -> Vec n a -> Vec (1 + n) a } |
| 09:15:51 | <int-e> | . o O ( accum' :: Ord (Rep f) => ... ) |
| 09:15:57 | → | gurkenglas joins (~gurkengla@dynamic-046-114-163-231.46.114.pool.telefonica.de) |
| 09:16:41 | × | ccapndave quits (~ccapndave@xcpe-62-167-164-19.cgn.res.adslplus.ch) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 09:16:57 | → | nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net) |
| 09:18:21 | <tomsmeding> | Enum (Rep f) |
| 09:18:25 | <mniip> | use the ordering of Rep (Vec n a) that corresponds to the linked list structure to construct a Map (Rep (Vec n a)) (Endo a) that can be zipped with the list |
| 09:18:47 | <mniip> | can't do much better I'm afraid |
| 09:18:50 | <tomsmeding> | mniip: sure, but that's an implementation that's specific to Vec |
| 09:18:58 | <mniip> | exactly |
| 09:19:07 | <tomsmeding> | if you allow that, you can also do well for actual length-indexed Vec |
| 09:19:10 | <mniip> | the specific implementation of accum is a customization point |
| 09:19:17 | <mniip> | hence typeclass |
| 09:19:20 | <tomsmeding> | using the mutable vector |
| 09:19:53 | <mniip> | I guess I never brought that up in this conversation |
| 09:20:00 | → | Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915) |
| 09:20:04 | <mniip> | I want a typeclass on top of Representable whose method is accum |
| 09:20:06 | <tomsmeding> | but like, if you allow it to be a typeclass, then there's no problem |
| 09:20:20 | → | ccapndave joins (~ccapndave@xcpe-62-167-164-19.cgn.res.adslplus.ch) |
| 09:20:38 | <mniip> | another method could be (//) with a default of = accum (const id) |
| 09:20:45 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 240 seconds) |
| 09:21:46 | × | nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 260 seconds) |
| 09:22:51 | Lord_of_Life_ | is now known as Lord_of_Life |
| 09:24:32 | × | ccapndave quits (~ccapndave@xcpe-62-167-164-19.cgn.res.adslplus.ch) (Ping timeout: 240 seconds) |
| 09:25:56 | <mniip> | even for a generic implementation there are a couple ways to do things that aren't strictly better than eachother |
| 09:26:32 | <mniip> | you can tabulate-foldl: accum f r xs = tabulate \i -> foldl' f (index i r) $ map snd $ filter ((== i) . fst) |
| 09:26:39 | <mniip> | or you can foldl-tabulate: accum f = foldl' \r (i, x) -> tabulate \j -> if i == j then f (index j r) x else index j r |
| 09:27:14 | × | ft quits (~ft@p508db151.dip0.t-ipconnect.de) (Quit: leaving) |
| 09:27:18 | <mniip> | the first one is a good consumer of the list but will produce many intermediate copies of the functor |
| 09:27:41 | <mniip> | the second one will not copy the functor but will retain the list in memory |
| 09:28:04 | <mniip> | oops |
| 09:28:06 | <mniip> | vice versa |
| 09:29:03 | <mniip> | foldl-tabulate will fold well, tabulate-foldl will tabulate well |
| 09:36:51 | <int-e> | I guess a full-blown abstraction would give you a mutable representation that lives in ST, along with thaw and freeze. |
| 09:37:55 | <int-e> | Rather than this minimalistic function-based interface that is basically good for memoization and nothing else. |
| 09:38:56 | × | cafkafk quits (~cafkafk@fsf/member/cafkafk) (Ping timeout: 240 seconds) |
| 09:40:25 | × | mizlan quits (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net) (Ping timeout: 260 seconds) |
| 09:44:05 | → | mizlan joins (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net) |
| 09:47:07 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 09:48:29 | × | mizlan quits (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net) (Ping timeout: 240 seconds) |
| 09:51:05 | → | jstolarek joins (~jstolarek@staticline-31-183-152-161.toya.net.pl) |
| 09:52:21 | × | jstolarek quits (~jstolarek@staticline-31-183-152-161.toya.net.pl) (Client Quit) |
| 09:52:48 | <ncf> | why not https://hackage.haskell.org/package/array-0.5.5.0/docs/Data-Array-IArray.html ? |
| 09:52:57 | <ncf> | can Vector implement that? |
| 09:53:16 | <int-e> | it's not about vector... vectors are just an example |
| 09:53:49 | → | kupenske_oplatky joins (~priesvitn@192.216.99.34.bc.googleusercontent.com) |
| 09:56:18 | × | priesvitne_sklo quits (~priesvitn@192.216.99.34.bc.googleusercontent.com) (Ping timeout: 260 seconds) |
| 09:57:00 | → | cafkafk joins (~cafkafk@fsf/member/cafkafk) |
| 09:57:32 | <mniip> | ncf, IArray is more about using a big datatype like Int as an index and selecting a subrange of it |
| 09:57:47 | <mniip> | Representable is about using an index that's exactly as large as it needs to be |
| 09:58:03 | <jade[m]> | for all it's beauty and simplicity in concept ... parser combinators are really fucking annoying to work with so far |
| 09:58:26 | <jade[m]> | it's probably just a biased view because I kinda suck ... but there's so many things that you expect to work that just don't |
| 09:59:34 | × | barcisz quits (~barcisz@79.191.69.198.ipv4.supernova.orange.pl) (Quit: Connection closed) |
| 10:02:35 | <merijn> | jade[m]: like? |
| 10:03:26 | <merijn> | Also, the ease and pleasantness of parser combinators is strongly correlated with how well designed/thought out your grammar is :p |
| 10:03:37 | → | Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542) |
| 10:04:38 | <jade[m]> | I have no issues besides "ignoring" things, specifically saying "any other character besides .,<>[]+- is a comment" |
| 10:04:55 | <jade[m]> | which is a fucking pain so far |
| 10:05:36 | <merijn> | It shouldn't be? |
| 10:05:39 | <jade[m]> | I'm currently trying to use a parser that simply ignores all characters that are not those explicitly, but then I have issues with eof again ... |
| 10:06:34 | × | xff0x quits (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 260 seconds) |
| 10:07:13 | <ncf> | are you using parser combinators to parse brainfuck? |
| 10:07:19 | <ncf> | why not like, filter |
| 10:07:46 | <jade[m]> | ncf: just for fun |
| 10:07:55 | <jade[m]> | and to like learn them |
| 10:07:57 | <ncf> | oh ok |
| 10:08:14 | → | mizlan joins (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net) |
| 10:08:18 | <jade[m]> | yeah, I could just filter and then map |
| 10:08:29 | <jade[m]> | with some minor parsing for loops |
| 10:08:43 | <jade[m]> | s/minor/minor, manual/ |
| 10:08:54 | → | barcisz joins (~barcisz@79.191.69.198.ipv4.supernova.orange.pl) |
| 10:10:32 | → | mikoto-chan joins (~mikoto-ch@2001:999:250:4dd:a906:9bc2:bbb9:3aff) |
| 10:11:03 | × | nut quits (~nut@176-151-21-224.abo.bbox.fr) (Quit: WeeChat 3.5) |
| 10:11:56 | × | econo_ quits (uid147250@id-147250.tinside.irccloud.com) (Quit: Connection closed for inactivity) |
| 10:12:38 | × | mizlan quits (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net) (Ping timeout: 260 seconds) |
| 10:13:27 | × | talismanick quits (~user@2601:204:ef01:8ca0::a3e7) (Remote host closed the connection) |
| 10:13:40 | → | talismanick joins (~user@2601:204:ef01:8ca0::a3e7) |
| 10:16:07 | <merijn> | jade[m]: part of the problem is that brainfuck is so simple you get almost no off the convenience/power of parser combinators |
| 10:16:13 | <merijn> | So of course it's gonna feel kinda scuffed |
| 10:16:49 | → | geranim0 joins (~geranim0@modemcable182.140-177-173.mc.videotron.ca) |
| 10:17:13 | <jade[m]> | that's fair, yeah |
| 10:17:22 | <mniip> | you'd have catMaybes <$> many ((Just <$> ((Inc <$ char '+') <|> ...)) <|> (Nothing <$ anyChar)) |
| 10:17:28 | <mniip> | I don't see what the problem is |
| 10:18:06 | <merijn> | mniip: That's because you're an expert ;) |
| 10:18:12 | → | ezzieyguywuf joins (~Unknown@user/ezzieyguywuf) |
| 10:18:21 | <mniip> | an advanced intermediate beginner maybe |
| 10:19:09 | × | talismanick quits (~user@2601:204:ef01:8ca0::a3e7) (Read error: Connection reset by peer) |
| 10:19:22 | → | talismanick joins (~user@2601:204:ef01:8ca0::a3e7) |
| 10:22:47 | <jade[m]> | <mniip> "you'd have catMaybes <$> many..." <- I wanted to try something along those lines but was too stupid haha |
| 10:23:05 | <jade[m]> | I always forget catMaybes as a way to build a list from optional values |
| 10:23:49 | <jade[m]> | thanks |
| 10:25:23 | <jade[m]> | <mniip> "an advanced intermediate..." <- what does that make me, heh |
| 10:26:09 | <mniip> | in lieu of "how to learn haskell in less that 5 years", I've been using haskell for about a decade now and sometimes I still feel like I know nothing |
| 10:26:13 | → | mizlan joins (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net) |
| 10:26:35 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:296e:3128:9bb:592b) |
| 10:28:12 | <jade[m]> | I guess that makes sense with the depth that haskell has |
| 10:28:29 | <merijn> | mniip: See, I think all the people writing the complicated type level singletons stuff know nothing instead :p |
| 10:29:34 | <jade[m]> | It just gives me some kind of existential crisis to hear all of this after learning haskell for like a year or so haha |
| 10:29:52 | <mniip> | using parser combinators after a year is a good milestone |
| 10:29:57 | <merijn> | Haskell is as complicated as you make it |
| 10:30:04 | <merijn> | And some people just make it too complicated :p |
| 10:30:15 | → | reach joins (~reach@bras-base-toroon2643w-grc-19-74-12-129-40.dsl.bell.ca) |
| 10:30:30 | <mniip> | I hope that's not a stab at representable functors :P |
| 10:31:11 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:296e:3128:9bb:592b) (Ping timeout: 264 seconds) |
| 10:31:39 | <jade[m]> | mniip: My journey so far has been fun, but I don't think follows the usual direction of learning haskell. I learned the basics and once I learned dependent types (sort of) existed went into those head-first with the ... expected ... outcome |
| 10:32:01 | <jade[m]> | took a step back and learned the more usual things |
| 10:33:20 | <jade[m]> | The biggest milestone was probably finally understanding monads which happened way to late and was sort of underwhelming |
| 10:33:29 | <jade[m]> | "it's *just* that?" |
| 10:33:40 | <merijn> | jade[m]: If it was underwhelming that probably means you got it right now :p |
| 10:34:40 | × | reach quits (~reach@bras-base-toroon2643w-grc-19-74-12-129-40.dsl.bell.ca) (Ping timeout: 260 seconds) |
| 10:35:10 | <jade[m]> | but yeah, sorry for my rambling up there haha |
| 10:35:35 | <jade[m]> | tl;dr I love haskell it's just really complicated |
| 10:35:36 | <ncf> | one does not simply understand monads |
| 10:38:19 | × | Pickchea quits (~private@user/pickchea) (Quit: Leaving) |
| 10:38:51 | <mniip> | you mean they're literally just monoids in the category of endofunctors? |
| 10:39:56 | <jade[m]> | that originally took a bit longer to understand than the general concept but I think I get that one too (sort of, maybe, perhaps) by now |
| 10:41:49 | <dminuoso> | If it hadnt been for that shrouded mystery of monads, I wouldnt have learned Haskell. |
| 10:42:24 | <mniip> | I mean that's unironically how I think of them occasionally |
| 10:42:55 | <mniip> | being able to "flatten" an arbitrary number of layers (maybe 0) into 1 in an associative/unital way |
| 10:43:04 | <dminuoso> | The primary reason I learned it was because I felt challenged by the Haskell Book slogan "Perhaps you were just looking for the 18 billionth* monad tutorial, certain that this time around you will understand monads once and for all." and told myself, "Okay, whats the big fuzz. Let me just jump in and learn Monads without this book direcftly" |
| 10:43:58 | → | __monty__ joins (~toonn@user/toonn) |
| 10:44:12 | <dminuoso> | And indeed, I dived into category theory for some 2-3 weeks, understood the joke somewhat, went back to the editor, and was unable to do anything with IO. |
| 10:44:29 | <dminuoso> | It was very inefficent learning. |
| 10:45:22 | → | bontaq joins (~user@ool-45779b84.dyn.optonline.net) |
| 10:46:38 | <mniip> | an interesting nuance is that programmers and mathematicians use monads for rather different purposes |
| 10:46:45 | <mniip> | almost opposite purposes you could say |
| 10:46:53 | <dminuoso> | mniip: The strange part about the mathematics of monad is that the laws that look a) beautiful but unrelatable in category theory, b) ugly and unrelatable in terms of (>>=) is just stuff we take for granted. |
| 10:47:05 | <ncf> | mniip: why opposite? |
| 10:47:12 | × | mikoto-chan quits (~mikoto-ch@2001:999:250:4dd:a906:9bc2:bbb9:3aff) (Quit: WeeChat 3.8) |
| 10:47:16 | <dminuoso> | Very roughly the associativity law is just another way of phrasing "inlining things doesnt alter the meaning" |
| 10:47:49 | <dminuoso> | Or moving things into separate "routines/functions" does not alter the meaning. |
| 10:48:09 | <mniip> | so there's a variety of ways to split a monad into an adjunction. Programmers mostly care about the kleisli category of a monad, which is sort of the initial splitting; mathematicians care about the category of algebras, which is the terminal splitting |
| 10:48:35 | <ncf> | ah, that opposite |
| 10:48:38 | <dminuoso> | mniip: Do you have a favoured view on applicatives? Do you also think of them as monoids in the category of endofunctors? |
| 10:48:57 | <mniip> | no, it's weird and relates to strength of monads |
| 10:49:22 | <mniip> | I almost never think about day convolutions if that's what you're asking |
| 10:49:36 | <__monty__> | /wg 14 |
| 10:49:49 | <__monty__> | Nothing to see here, carry on. |
| 10:50:24 | <mniip> | rather I think of them as lax monoidal functors |
| 10:50:39 | <mniip> | you have a family of liftA{n} that associate as much as possible |
| 10:52:38 | <jade[m]> | I just sit there, banging two rocks together being like "`<*>` go brr" |
| 10:52:48 | <jade[m]> | very different perspectives |
| 10:53:12 | <mniip> | any non-recursive applicative computation can be rewritten as a liftA{n} of some "root" effects and a combining function, where n is statically known |
| 10:53:47 | <danse-nr3> | what do you mean by liftA{n} there? |
| 10:53:58 | <mniip> | the recursive case isn't qualitatively different it's just that you can't always untie an infinite knot :P |
| 10:54:04 | <ncf> | :t liftA2 |
| 10:54:06 | <lambdabot> | Applicative f => (a -> b -> c) -> f a -> f b -> f c |
| 10:54:07 | <mniip> | liftA2, liftA3 etc |
| 10:54:13 | <mniip> | liftA0 = pure, liftA1 = fmap |
| 10:54:45 | <danse-nr3> | right was kind of obvious, thanks |
| 10:57:48 | <danse-nr3> | i almost never use those liftA{n} functions |
| 10:59:10 | × | barcisz quits (~barcisz@79.191.69.198.ipv4.supernova.orange.pl) (Quit: Connection closed) |
| 10:59:14 | <danse-nr3> | possibly because they are equivalent to composing with <$> and <*>? That approach looks more readable to me |
| 11:00:31 | <mniip> | depends on if you're doing horizontal or vertical composition |
| 11:00:55 | <mniip> | :t liftA2 . liftA2 . liftA2 |
| 11:00:56 | <lambdabot> | (Applicative f1, Applicative f2, Applicative f3) => (a -> b -> c) -> f1 (f2 (f3 a)) -> f1 (f2 (f3 b)) -> f1 (f2 (f3 c)) |
| 11:01:34 | <danse-nr3> | oooh |
| 11:04:30 | × | machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 250 seconds) |
| 11:05:08 | × | chromoblob quits (~user@37.113.180.121) (Ping timeout: 240 seconds) |
| 11:06:05 | <danse-nr3> | although a type like f3 (f2 (f1 a)) ... makes me think of monad stacks, otherwise it seems uncommon to compose through that many layers. Probably i have a view still attached to object-orientation, where adding a wrapper type, albeit polymorphic, still means one tends to keep functions on "enclosed" types inside an abstraction. But then, even the concept of "type wrapper" and "enclosed" types in an object-oriented perspective on these |
| 11:06:25 | → | xff0x joins (~xff0x@2405:6580:b080:900:18df:4359:44d4:6329) |
| 11:06:33 | → | machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net) |
| 11:06:42 | <danse-nr3> | * come from an object-oriented perspective on these |
| 11:07:29 | <danse-nr3> | this mindset is hard to change ^^; |
| 11:08:11 | <mniip> | I've seen people implement ad-hoc combinators like <<*>> on the spot |
| 11:08:18 | <dminuoso> | I tend to think of Applicative as a conceptual parallelized mappend in the sense of liftA2 (,) |
| 11:08:24 | <dminuoso> | % :t liftA2 (,) |
| 11:08:25 | <yahb2> | <interactive>:1:1: error: ; Variable not in scope: liftA2 :: (a0 -> b0 -> (a0, b0)) -> t |
| 11:08:29 | <dminuoso> | % import Control.Applicative |
| 11:08:29 | <yahb2> | <no output> |
| 11:08:31 | <dminuoso> | % :t liftA2 (,) |
| 11:08:31 | <yahb2> | liftA2 (,) :: Applicative f => f a -> f b -> f (a, b) |
| 11:08:42 | <dminuoso> | So often I think of this being the signature method of Applicative |
| 11:08:43 | <mniip> | uncurry |
| 11:09:05 | <mniip> | :t uncurry (liftA2 (,)) |
| 11:09:06 | <lambdabot> | Applicative f => (f a, f b) -> f (a, b) |
| 11:09:31 | <dminuoso> | Sure that works too. |
| 11:09:32 | <mniip> | this is essentially the definition of "lax monoidal" |
| 11:09:36 | <danse-nr3> | what confuses me about Applicative is that purescript has quite different definitions for these, and i tend to like those |
| 11:09:47 | <danse-nr3> | * them |
| 11:09:59 | <ncf> | :t pure @() |
| 11:10:01 | <lambdabot> | error: |
| 11:10:01 | <lambdabot> | Pattern syntax in expression context: pure@() |
| 11:10:01 | <lambdabot> | Did you mean to enable TypeApplications? |
| 11:10:03 | <mniip> | you have a Hom(FA (x) FB, F (A (x) B)), natural in A, B |
| 11:10:03 | <dminuoso> | mniip: Im not too deeply familiar. In my mind its just that liftA2 (,) fully encapsulates the notion of parallel effects. |
| 11:10:14 | <dminuoso> | Hence diamond. |
| 11:10:31 | <mniip> | what does purescript use? |
| 11:11:05 | <danse-nr3> | hmm have to look them up, but the diverging holds my mind from taking these abstractions too seriously |
| 11:11:15 | <mniip> | dminuoso, same but in an 'n-ary' sense as opposed to a binary operation and a unit |
| 11:11:33 | <mniip> | the difference between liftA2 and liftA2 (,) is just yoneda |
| 11:12:27 | <dminuoso> | Right, the n-ary generalization stems from the isomorphism ((a,b),c) ~~~ (a,(b,c)) |
| 11:12:40 | <dminuoso> | Regarding yoneda, Ill have to ponder about that relationship |
| 11:12:54 | <danse-nr3> | purescript's Applicative just defines pure https://pursuit.purescript.org/packages/purescript-prelude/3.0.0/docs/Control.Applicative, being based on an Apply with apply :: forall b a. f (a -> b) -> f a -> f b |
| 11:13:03 | <mniip> | I think they're called lawvere theories? |
| 11:13:29 | <ncf> | that's just splitting the typeclass into two |
| 11:13:53 | <danse-nr3> | yes, probably, but everyone's brain is different, that is quite meaningful to me |
| 11:13:59 | <ncf> | pointed endofunctor and... semigroup in the category of endofunctors? |
| 11:14:23 | × | acidjnk quits (~acidjnk@p200300d6e7072f4300b5bf6655a1513c.dip0.t-ipconnect.de) (Ping timeout: 264 seconds) |
| 11:14:31 | <mniip> | rather than talking about a limited set of fixed arity operations (e.g. nullary pure and binary liftA2), you talk about operations of all arities at once |
| 11:16:45 | <mniip> | been a while since I've read the relevant literature, but I find it useful to think about e.g. "ternary concatenation" on equal grounds with binary concatenation |
| 11:16:59 | <mniip> | just the kinda lawvere vibe of it |
| 11:17:30 | × | CiaoSen quits (~Jura@2a05:5800:296:4300:664b:f0ff:fe37:9ef) (Ping timeout: 260 seconds) |
| 11:18:34 | <mniip> | re: Applicative/Apply, there's a zoo of intermediate typeclasses you could come up with |
| 11:18:40 | <mniip> | sometimes I wish haskell had more, but oh well |
| 11:18:44 | × | dibblego quits (~dibblego@haskell/developer/dibblego) (Ping timeout: 240 seconds) |
| 11:19:47 | → | dibblego joins (~dibblego@122-199-1-30.ip4.superloop.au) |
| 11:19:47 | × | dibblego quits (~dibblego@122-199-1-30.ip4.superloop.au) (Changing host) |
| 11:19:47 | → | dibblego joins (~dibblego@haskell/developer/dibblego) |
| 11:20:49 | <danse-nr3> | i was lost many messages ago, but intuitively i think if one has more essential, split classes, then they can be composed and made up a more powerful foundation. But of course purescript came later so it was easier for them |
| 11:22:03 | <mniip> | groups have a few axioms, and you can pretty much toggle them on and off at will, yielding different algebraic objects |
| 11:22:13 | <mniip> | e.g. this cube https://commons.wikimedia.org/wiki/File:Magma_to_group4.svg |
| 11:22:29 | <mniip> | some of these tend to come up more, but doesn't mean the others are useless |
| 11:23:25 | <ncf> | https://en.wikipedia.org/wiki/Template:Group-like_structures |
| 11:23:31 | <mniip> | should we have a class for each of them? Should we have free constructions for every irreducible arrow? for every arrow? |
| 11:23:51 | <mniip> | I don't know the answer |
| 11:24:13 | <ncf> | i was investigating "free monad on a semigroupad" the other day |
| 11:24:38 | <ncf> | i.e. the endofunctor equivalent of Semigroup a => Monoid (Maybe a) |
| 11:25:05 | <ncf> | turns out it's a bit annoying because you need a sort of "quasijoin" operation m (Either a (m a)) -> m a |
| 11:25:48 | <mniip> | by "semigroupad" you mean join but no return? |
| 11:25:53 | <ncf> | yeah |
| 11:26:08 | <mniip> | so you just need to adjoin an identity? |
| 11:26:26 | <ncf> | yes, that's what Either a (m a) does |
| 11:26:30 | <mniip> | doesn't data Free s a = Pure a | Effectful (s a) - |
| 11:26:33 | <mniip> | yeah exactly |
| 11:26:41 | <ncf> | now implement join |
| 11:27:09 | <mniip> | ah of course |
| 11:27:36 | <ncf> | it's quite interesting that you don't run into this problem with the usual "free monad on a (pointed) endofunctor" |
| 11:28:00 | <ncf> | lists turn out to be better behaved than Maybes at the endofunctor-with-composition level |
| 11:28:11 | × | mizlan quits (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net) (Ping timeout: 246 seconds) |
| 11:28:57 | <mniip> | it's moreso that the free monad reassociates 1 + M + M.M + ... as 1 + M.(1 + M.( ... )) |
| 11:29:12 | <ncf> | yeah |
| 11:29:27 | <mniip> | or rather, that the first can be reassocaited into the second but not necessarily the other way around |
| 11:30:04 | <ncf> | if M preserves coproducts then it works out, but that's rarely the case |
| 11:30:21 | <ncf> | funnily enough i couldn't find an M that doesn't have a quasijoin : M.(1 + M) → M |
| 11:31:15 | <ncf> | (obviously every monad has that, so i was looking among the `Bind`s-that-aren't-Monads, which there aren't many in haskell) |
| 11:31:32 | <ncf> | notably Map k has that |
| 11:33:41 | <mniip> | what about lists of even length |
| 11:34:41 | <mniip> | it's a semigroupad because concatMap preserves the property, but you cannot join [pure (), [(), ()]] |
| 11:35:14 | × | xff0x quits (~xff0x@2405:6580:b080:900:18df:4359:44d4:6329) (Ping timeout: 260 seconds) |
| 11:36:56 | → | xff0x joins (~xff0x@2405:6580:b080:900:18df:4359:44d4:6329) |
| 11:37:29 | <ncf> | oh nice |
| 11:37:42 | <ncf> | clearly i didn't look very hard lol |
| 11:37:50 | → | misterfish joins (~misterfis@84-53-85-146.bbserv.nl) |
| 11:38:00 | → | CiaoSen joins (~Jura@2a05:5800:296:4300:664b:f0ff:fe37:9ef) |
| 11:41:02 | <mniip> | example from someone else: also Const Void |
| 11:42:38 | × | ceoltb^ quits (~ceoltb@24.125.210.85) (Ping timeout: 250 seconds) |
| 11:43:05 | → | gemmaro joins (~user@240f:74:d1f0:1:ba1:e787:c9e:b1dc) |
| 11:43:22 | → | ceoltb^ joins (~ceoltb@24.125.210.85) |
| 11:43:33 | <ncf> | why doesn't absurd work? |
| 11:44:21 | <mniip> | hmm? |
| 11:44:56 | <mniip> | oh sorry, you do have quasijoin, it's just an example of a semigroupad |
| 11:45:02 | <ncf> | right |
| 11:45:48 | <ncf> | i think Const s is always an example if s is a semigroup |
| 11:46:21 | <ncf> | er wait i'm thinking of Apply |
| 11:51:01 | × | mon_aaraj quits (~montchncs@2001:470:69fc:105::8e6b) (Server closed connection) |
| 11:51:16 | → | mon_aaraj joins (~montchncs@2001:470:69fc:105::8e6b) |
| 11:51:44 | × | gnyeki quits (~gnyeki@user/gnyeki) (Ping timeout: 250 seconds) |
| 11:51:52 | → | gnyeki joins (~gnyeki@li578-216.members.linode.com) |
| 11:51:52 | × | gnyeki quits (~gnyeki@li578-216.members.linode.com) (Changing host) |
| 11:51:52 | → | gnyeki joins (~gnyeki@user/gnyeki) |
| 11:53:46 | × | mncheck-m quits (~mncheck@193.224.205.254) (Read error: Connection reset by peer) |
| 11:53:54 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (Ping timeout: 250 seconds) |
| 11:54:06 | → | takuan joins (~takuan@178-116-218-225.access.telenet.be) |
| 11:59:58 | → | mizlan joins (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net) |
| 12:00:22 | → | waleee joins (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) |
| 12:03:47 | → | shailangsa joins (~shailangs@host86-186-142-69.range86-186.btcentralplus.com) |
| 12:04:38 | × | mizlan quits (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net) (Ping timeout: 260 seconds) |
| 12:08:21 | → | arkeet` joins (~arkeet@moriya.ca) |
| 12:08:38 | × | arkeet quits (~arkeet@moriya.ca) (Ping timeout: 250 seconds) |
| 12:08:38 | arkeet` | is now known as arkeet |
| 12:11:08 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "") |
| 12:14:54 | → | chromoblob joins (~user@37.113.180.121) |
| 12:14:57 | → | mmhat joins (~mmh@p200300f1c722e40aee086bfffe095315.dip0.t-ipconnect.de) |
| 12:14:58 | → | [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470) |
| 12:16:02 | → | flupe15 joins (~flupe@145.94.32.126) |
| 12:16:45 | <flupe15> | Hello! Could anyone help me diagnose this regression in Haskell's type families over GADTS? https://gist.github.com/flupe/08a4c945723cd42fd1f7ddf8f20a2545 |
| 12:16:52 | × | misterfish quits (~misterfis@84-53-85-146.bbserv.nl) (Ping timeout: 250 seconds) |
| 12:17:21 | <flupe15> | This code typechecked fine with GHC 8.10 but 9 and above no longer allows this "simple" code, as unifying indices properly seem to no longer work as required |
| 12:17:52 | <flupe15> | has there been a known change to type-family/GADT pattern-matching unification? |
| 12:19:03 | → | mizlan joins (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net) |
| 12:19:25 | × | danse-nr3 quits (~francesco@151.37.79.114) (Read error: Connection reset by peer) |
| 12:20:49 | × | mmhat quits (~mmh@p200300f1c722e40aee086bfffe095315.dip0.t-ipconnect.de) (Quit: WeeChat 4.0.0) |
| 12:26:44 | → | gensyst joins (~gensyst@user/gensyst) |
| 12:26:50 | × | connrs quits (~connrs@user/connrs) (Ping timeout: 250 seconds) |
| 12:27:05 | → | connrs_ joins (~connrs@user/connrs) |
| 12:27:11 | <gensyst> | Why is memory profiling (-hc) showing me this https://litter.catbox.moe/9r7mh7.png but top showing me over 5 GB of memory usage? How could this be happening? |
| 12:27:42 | <gensyst> | According to the profile, the memory goes to max around 2 gigs and then drops, repeatedly |
| 12:27:51 | <gensyst> | but according to top, the memory grows steadily and never drops |
| 12:28:04 | connrs_ | is now known as connrs |
| 12:28:22 | <gensyst> | s/2 gigs/1.5 gigs |
| 12:30:54 | <lortabac> | gensyst: have you read this? https://downloads.haskell.org/ghc/latest/docs/users_guide/hints.html#hints-os-memory |
| 12:32:21 | <merijn> | gensyst: because nothing is ever it simple as it seems and top's number aren't incorrect, just wildly poinltess/misleading |
| 12:32:48 | <lortabac> | gensyst: also https://downloads.haskell.org/ghc/latest/docs/users_guide/runtime_control.html?highlight=delay#rts-flag---disable-delayed-os-memory-return |
| 12:33:51 | <merijn> | I mean, there is, essentially 0 value in returning memory to the OS, beyond "making top show lower numbers" |
| 12:34:18 | <merijn> | Well, I guess if you had truly giant livesets for a short while, returning stuff might ease pressure on swap |
| 12:34:29 | <lortabac> | in general it's a bad idea to monitor an application's memory usage with top |
| 12:34:36 | <lortabac> | in general I use EKG |
| 12:34:40 | <gensyst> | lortabac, merijn thanks so much - no i had not seen that crucial info! |
| 12:34:55 | <gensyst> | however, shouldn't there be at least SOME drop in top memory use, based on those profile drops? |
| 12:35:00 | <gensyst> | or no drops at all? |
| 12:35:02 | <gensyst> | (by default) |
| 12:36:09 | <lortabac> | I don't know |
| 12:36:31 | <merijn> | gensyst: Depends which top column you're looking at? |
| 12:36:44 | <gensyst> | merijn, MEM% |
| 12:36:51 | <gensyst> | sorry %MEM |
| 12:38:56 | → | codolio joins (~dolio@130.44.134.54) |
| 12:38:58 | × | dolio quits (~dolio@130.44.134.54) (Ping timeout: 250 seconds) |
| 12:39:11 | <gensyst> | i'm literally seeing 50% memory use, just because i run it long enough, (even though profiling imagine shows no leaks, as mentioned) |
| 12:39:30 | <gensyst> | is this expected? is this happening because linux memory management is smart enough? |
| 12:39:43 | <gensyst> | and e.g. it would get freed if other programs wanted the ram? |
| 12:39:57 | <gensyst> | but it stays at 50% and grows even more because nobody else wants the memory? |
| 12:40:06 | × | xff0x quits (~xff0x@2405:6580:b080:900:18df:4359:44d4:6329) (Ping timeout: 260 seconds) |
| 12:41:32 | <merijn> | I need to check what top's MEM even refers too |
| 12:41:48 | <mniip> | flupe15, you need to either enable CUSKs (deprecated I think?), or write a standalone kind signature: type ConsTree :: forall a n b. Tree a n -> BRAL a n b -> BRAL a n (Bsucc b); type family ConsTree t ral where ... |
| 12:41:49 | → | xff0x joins (~xff0x@ai098135.d.east.v6connect.net) |
| 12:42:44 | → | kupi joins (uid212005@id-212005.hampstead.irccloud.com) |
| 12:43:00 | <_________> | gensyst: you can have no memory leaks and unbounded memory usage at the same time. if the memory usage of your program grows over time you might have a problem ;) |
| 12:43:15 | <merijn> | The profile isn't unbounded, though |
| 12:43:21 | <merijn> | At any rate, this is weird |
| 12:43:47 | <merijn> | According to my top manual,. %MEM is showing resident memory |
| 12:43:56 | × | waleee quits (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) (Ping timeout: 240 seconds) |
| 12:44:17 | <merijn> | So if the profile is going up to 1.2GB then this has to be some tiny machine with 3-4 GB RAM? Is this a Pi or something? |
| 12:44:36 | <merijn> | Or, alternate hypothesis |
| 12:44:43 | <merijn> | You have a memory leak in non-Haskell code |
| 12:45:02 | <jade[m]> | <mniip> "you'd have catMaybes <$> many..." <- I tried this btw and have the same issues with unexpected eof's when it should (?) work |
| 12:45:09 | <gensyst> | it's machine with 20gb ram. only haskell code. |
| 12:45:11 | <jade[m]> | im probably doing something stupidly wrong |
| 12:45:20 | <merijn> | gensyst: *something* is off |
| 12:45:21 | <mniip> | jade[m], what parsing combinator library are you using |
| 12:45:33 | <merijn> | There's no way that profile of 1.2GB should report 50% RES o.O |
| 12:45:46 | <merijn> | jade[m]: Are you terminating your parser with eof? |
| 12:45:47 | <mniip> | there's a good chance you're being bitten by unintuitive semantics of <|> |
| 12:45:54 | × | incertia quits (~incertia@209.122.71.127) (Ping timeout: 250 seconds) |
| 12:46:05 | → | incertia_ joins (~incertia@209.122.71.127) |
| 12:46:06 | <jade[m]> | that's what I was pointed at before and it didn't really help |
| 12:46:11 | <jade[m]> | merijn: yes |
| 12:46:26 | <merijn> | Can you pastebin the entire code and test input + error? |
| 12:46:29 | incertia_ | is now known as incertia |
| 12:46:32 | <jade[m]> | jade[m]: I tried `try` but I was also told that wasn't gonna be enozgh |
| 12:46:39 | <jade[m]> | merijn: sure, give me a second |
| 12:46:52 | <mniip> | does the "comment" anyChar perchance take precedence over ']' |
| 12:46:53 | <gensyst> | Apologies for mentioning 50% (that was a number from another production program). In my example program, it was lower. merijn, it should report a max of 4x right? 4.8gb max. So that's in line with the 5gb i mentioned in my first comment above. right? |
| 12:47:00 | <lortabac> | flupe15: I'd open an issue on the GHC repo |
| 12:47:14 | <flupe15> | mniip: thanks indeed a standalone kind signature did the trick! still, given the errors produced by ghc i wouldn't have expected this to be the problem |
| 12:47:39 | <merijn> | gensyst: Can you run the test with "+RTS -sstderr" and pastebin the output? |
| 12:48:02 | <mniip> | I'm not 100% sure what it's trying to do without CUSKs or StandaloneKindSignatures |
| 12:48:25 | <jade[m]> | mniip: it shouldn't as I first try to parse one of `+-<>,.` and then `[` stuff `]` *and then* anything else |
| 12:48:29 | <jade[m]> | but let me just paste this |
| 12:49:05 | <mniip> | yes but if you have "[foo]" then it might parse ] as a comment and then be like where's the closing ]? |
| 12:49:59 | <jade[m]> | https://paste.tomsmeding.com/qogYMcXD |
| 12:50:05 | <mniip> | if you have stuff = `+-<>,.` <|> `[` stuff `]` <|> anything else, then the inner invocation of stuff will consider ] a comment and break the outer |
| 12:50:48 | <mniip> | yes that's exactly what's going on in your code |
| 12:51:25 | <jade[m]> | ok, what can I do about that= |
| 12:51:29 | <jade[m]> | s/=/? |
| 12:52:07 | <ncf> | exclude ] from comments, or `try` harder |
| 12:52:30 | <mniip> | refactor the grammar |
| 12:53:11 | <jade[m]> | I'll try, thanks for the hints |
| 12:53:20 | <jade[m]> | pun not intended |
| 12:53:54 | <mniip> | loop = `[` (manyTill `]` atom); atom = `+-<>,.` | loop | comment |
| 12:54:12 | → | Guest|65 joins (~Guest|65@130.41.120.97) |
| 12:54:48 | <mniip> | your issue would be solved if you had a fully backtracking parser (as ncf alluded to), but I think in this case that would be prohibitively expensive |
| 12:55:12 | <jade[m]> | yeah, at that point I would be much better off just doing it manually |
| 12:56:54 | × | geranim0 quits (~geranim0@modemcable182.140-177-173.mc.videotron.ca) (Ping timeout: 260 seconds) |
| 12:58:16 | <jade[m]> | mniip: this is already what my AST looks like, atleast |
| 12:58:51 | <mniip> | `Z = many Y <* X` corresponds to `Z -> W X, W -> Y W | epsilon` aka `Z -> Y Z | X` |
| 12:59:25 | <mniip> | you want `Z -> X | Y Z` instead, so that considering ] a closing bracket rather than a comment is the leftmost derivation |
| 12:59:37 | <mniip> | that's what `Z = manyTill X Y` does |
| 13:00:02 | → | reach joins (~reach@bras-base-toroon2643w-grc-19-74-12-129-40.dsl.bell.ca) |
| 13:00:14 | <jade[m]> | ok that actually makes a lot of sense (I think) |
| 13:00:28 | <jade[m]> | we recently had grammars in class and it was explained horribly |
| 13:02:48 | <mniip> | caveat: "]" is still a valid program because it will be considered a comment |
| 13:04:40 | × | bontaq quits (~user@ool-45779b84.dyn.optonline.net) (Remote host closed the connection) |
| 13:05:12 | <jade[m]> | and you'd solve that by saying "a comment is anything but ]"? |
| 13:06:42 | <mniip> | can't think of any other good way |
| 13:07:06 | <ncf> | you could separate lexing from parsing, as the former is really just filter |
| 13:07:25 | <mniip> | you could use a syntactic monoid :) |
| 13:07:33 | <ncf> | then you don't have to deal with comments in parsing at all, so no risk of treating ] as a comment |
| 13:08:06 | <ncf> | mniip: wouldn't that only recognise regular languages |
| 13:08:26 | <mniip> | it wouldn't be a finite monoid |
| 13:08:32 | <ncf> | oh right |
| 13:08:49 | <mniip> | this is like the bicyclic monoid but with data |
| 13:08:57 | × | reach quits (~reach@bras-base-toroon2643w-grc-19-74-12-129-40.dsl.bell.ca) (Ping timeout: 245 seconds) |
| 13:09:58 | <mniip> | I guess the bottom line is that you should make up your mind, what comes first: the balanced paren structure of [ ], or the fact that everything that doesn't parse is a comment? |
| 13:10:10 | <mniip> | these are conflicting requirements |
| 13:10:57 | × | mizlan quits (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net) (Remote host closed the connection) |
| 13:11:20 | <jade[m]> | mhm I understand |
| 13:11:28 | <jade[m]> | this was very helpful, thanks a bunch |
| 13:11:43 | → | mizlan joins (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net) |
| 13:16:57 | → | bontaq joins (~user@ool-45779b84.dyn.optonline.net) |
| 13:18:27 | → | nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net) |
| 13:21:52 | × | mizlan quits (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net) (Ping timeout: 250 seconds) |
| 13:23:08 | × | nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 240 seconds) |
| 13:23:10 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 250 seconds) |
| 13:23:59 | → | Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915) |
| 13:24:01 | → | shriekingnoise joins (~shrieking@186.137.175.87) |
| 13:25:47 | × | mechap quits (~mechap@user/mechap) (Ping timeout: 264 seconds) |
| 13:26:15 | → | mechap joins (~mechap@user/mechap) |
| 13:29:05 | → | ystael joins (~ystael@user/ystael) |
| 13:29:14 | <mniip> | jade[m], https://play.haskell.org/saved/RzdgtGxy |
| 13:30:39 | <jade[m]> | Thanks for making me feel stupid 😭 |
| 13:30:47 | <jade[m]> | (/j) |
| 13:31:46 | × | flupe15 quits (~flupe@145.94.32.126) (Quit: Client closed) |
| 13:32:16 | × | dibblego quits (~dibblego@haskell/developer/dibblego) (Ping timeout: 250 seconds) |
| 13:32:34 | → | dibblego joins (~dibblego@122-199-1-30.ip4.superloop.au) |
| 13:32:34 | × | dibblego quits (~dibblego@122-199-1-30.ip4.superloop.au) (Changing host) |
| 13:32:35 | → | dibblego joins (~dibblego@haskell/developer/dibblego) |
| 13:33:38 | <ncf> | cute |
| 13:34:05 | × | gnalzo quits (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 3.8) |
| 13:34:05 | → | wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com) |
| 13:34:06 | × | wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host) |
| 13:34:06 | → | wroathe joins (~wroathe@user/wroathe) |
| 13:34:06 | <mniip> | this is really useful if you want to have efficient updating of syntax highlighting as you edit, or intellisense |
| 13:34:08 | <mniip> | for brainfuck |
| 13:34:31 | <ncf> | definitely must-haves |
| 13:36:15 | <ncf> | tentative explanation: a (potentially incomplete) brainfuck program has the form ...]...]...[...[... where each of the ... stands for a valid brainfuck program; Syn represents that, where the first series of ... before ] are in the first list and the last series of ... after [ are in the second list; you can then combine Syns recursively in a straightforward way, and extract a valid program from a |
| 13:36:16 | <ncf> | Syn if both lists are empty (thus [] are balanced) |
| 13:37:00 | <ncf> | each character embeds as a Syn, where ] has a single incomplete program to the left and nothing in the middle and vice-versa for [ |
| 13:41:21 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 13:43:06 | × | canta quits (~canta@user/canta) (Ping timeout: 250 seconds) |
| 13:43:32 | × | df quits (~ben@justworks.xyz) (Ping timeout: 250 seconds) |
| 13:44:24 | × | mei quits (~mei@user/mei) (Ping timeout: 250 seconds) |
| 13:45:25 | → | df joins (~ben@justworks.xyz) |
| 13:46:21 | → | Pickchea joins (~private@user/pickchea) |
| 13:48:37 | → | mei joins (~mei@user/mei) |
| 13:50:28 | × | Guest|65 quits (~Guest|65@130.41.120.97) (Ping timeout: 250 seconds) |
| 13:51:45 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds) |
| 13:53:06 | → | captnemo joins (~captnemo@193.32.127.239) |
| 13:54:22 | × | cfricke quits (~cfricke@user/cfricke) (Ping timeout: 250 seconds) |
| 13:54:32 | → | stallmanator2 joins (~stallmana@user/stallmanator) |
| 13:54:40 | → | cfricke joins (~cfricke@user/cfricke) |
| 13:55:52 | → | canta joins (~canta@user/canta) |
| 13:56:06 | × | stallmanator quits (~stallmana@user/stallmanator) (Ping timeout: 250 seconds) |
| 13:56:06 | stallmanator2 | is now known as stallmanator |
| 13:58:32 | → | ridcully_ joins (~ridcully@p57b52f2c.dip0.t-ipconnect.de) |
| 13:58:35 | × | amir quits (sid22336@user/amir) (Server closed connection) |
| 13:58:44 | → | amir joins (sid22336@user/amir) |
| 14:00:00 | × | ridcully quits (~ridcully@p57b52f2c.dip0.t-ipconnect.de) (Ping timeout: 250 seconds) |
| 14:00:17 | × | haritz quits (~hrtz@user/haritz) (Quit: ZNC 1.8.2+deb2 - https://znc.in) |
| 14:00:29 | → | haritz joins (~hrtz@2a02:8010:65b5:0:6009:6384:e3cb:2220) |
| 14:00:30 | × | haritz quits (~hrtz@2a02:8010:65b5:0:6009:6384:e3cb:2220) (Changing host) |
| 14:00:30 | → | haritz joins (~hrtz@user/haritz) |
| 14:02:10 | × | jle` quits (~jle`@cpe-23-240-75-236.socal.res.rr.com) (Ping timeout: 250 seconds) |
| 14:03:09 | → | Xe joins (~cadey@tailscale/xe) |
| 14:04:01 | → | jle` joins (~jle`@cpe-23-240-75-236.socal.res.rr.com) |
| 14:04:19 | → | mizlan joins (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net) |
| 14:05:01 | × | andreas303 quits (andreas303@is.drunk.and.ready-to.party) (Server closed connection) |
| 14:05:07 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b))) |
| 14:05:08 | → | allbery_b joins (~geekosaur@xmonad/geekosaur) |
| 14:05:12 | allbery_b | is now known as geekosaur |
| 14:05:21 | → | andreas303 joins (andreas303@is.drunk.and.ready-to.party) |
| 14:07:22 | → | barcisz joins (~barcisz@public-gprs657031.centertel.pl) |
| 14:10:07 | × | gemmaro quits (~user@240f:74:d1f0:1:ba1:e787:c9e:b1dc) (Remote host closed the connection) |
| 14:12:15 | × | johnw quits (~johnw@76-234-69-149.lightspeed.frokca.sbcglobal.net) (Ping timeout: 260 seconds) |
| 14:16:46 | × | YoungFrog quits (~youngfrog@2a02:a03f:ca07:f900:9506:825b:e271:15c3) (Quit: ZNC 1.7.x-git-3-96481995 - https://znc.in) |
| 14:17:06 | → | YoungFrog joins (~youngfrog@2a02:a03f:ca07:f900:3d0c:c380:8be9:54d4) |
| 14:22:06 | × | xff0x quits (~xff0x@ai098135.d.east.v6connect.net) (Ping timeout: 250 seconds) |
| 14:24:12 | → | xff0x joins (~xff0x@ai098135.d.east.v6connect.net) |
| 14:24:35 | × | ubert quits (~Thunderbi@p200300ecdf0b5713a8f894b1f77d0827.dip0.t-ipconnect.de) (Ping timeout: 246 seconds) |
| 14:24:36 | × | barcisz quits (~barcisz@public-gprs657031.centertel.pl) (Quit: Connection closed) |
| 14:24:36 | ubert1 | is now known as ubert |
| 14:25:19 | → | ub joins (~Thunderbi@p200300ecdf0b57c57ef837ab9eeb4127.dip0.t-ipconnect.de) |
| 14:27:05 | → | misterfish joins (~misterfis@84-53-85-146.bbserv.nl) |
| 14:27:26 | → | danse-nr3 joins (~francesco@151.35.81.64) |
| 14:29:43 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 14:30:24 | → | reach joins (~reach@bras-base-toroon2643w-grc-19-74-12-129-40.dsl.bell.ca) |
| 14:33:06 | → | acidjnk joins (~acidjnk@p200300d6e7072f43a445df600121d0b6.dip0.t-ipconnect.de) |
| 14:34:11 | × | cfricke quits (~cfricke@user/cfricke) (Ping timeout: 264 seconds) |
| 14:37:11 | × | CiaoSen quits (~Jura@2a05:5800:296:4300:664b:f0ff:fe37:9ef) (Ping timeout: 246 seconds) |
| 14:37:14 | × | reach quits (~reach@bras-base-toroon2643w-grc-19-74-12-129-40.dsl.bell.ca) (Ping timeout: 260 seconds) |
| 14:42:35 | → | mithromdir joins (uid591745@user/mithromdir) |
| 14:45:04 | × | anpad quits (~pandeyan@user/anpad) (Ping timeout: 250 seconds) |
| 14:45:15 | → | pandeyan joins (~pandeyan@135-180-53-134.fiber.dynamic.sonic.net) |
| 14:47:32 | → | biberu\ joins (~biberu@user/biberu) |
| 14:49:07 | <Guillaum[m]> | Do you know an easy way to detect that a symbol is imported from a reexport and that it exists another import which may reduce my dependencies. For example, if I import "foo" in module C from module B, but that's actually a reexport from module A, importing it directly from A instead of B would lead to reduced dependencies, rebuild, ... |
| 14:50:42 | × | ByronJohnson quits (~bairyn@50-250-232-19-static.hfc.comcastbusiness.net) (Ping timeout: 250 seconds) |
| 14:51:08 | × | biberu quits (~biberu@user/biberu) (Ping timeout: 250 seconds) |
| 14:51:08 | biberu\ | is now known as biberu |
| 14:52:19 | → | ByronJohnson joins (~bairyn@50-250-232-19-static.hfc.comcastbusiness.net) |
| 14:54:32 | × | nick__ quits (~nick@2600:8807:9084:7800:700f:eda2:f145:7a7) (Ping timeout: 240 seconds) |
| 14:54:39 | → | ddellacosta joins (~ddellacos@146.70.168.100) |
| 14:55:54 | × | simpleauthority quits (~simpleaut@user/simpleauthority) (Ping timeout: 250 seconds) |
| 14:57:04 | → | simpleauthority joins (~simpleaut@user/simpleauthority) |
| 14:57:52 | → | dminuoso_ joins (~dminuoso@user/dminuoso) |
| 14:58:15 | × | dminuoso quits (~dminuoso@user/dminuoso) (Read error: Connection reset by peer) |
| 15:02:24 | × | opqdonut quits (opqdonut@pseudo.fixme.fi) (Ping timeout: 250 seconds) |
| 15:02:31 | → | opqdonut joins (opqdonut@pseudo.fixme.fi) |
| 15:05:59 | × | lortabac quits (~lortabac@2a01:e0a:541:b8f0:b445:5ef3:652d:413b) (Quit: WeeChat 2.8) |
| 15:08:54 | × | lawt quits (~lawt@129.159.36.129) (Ping timeout: 250 seconds) |
| 15:09:20 | × | tomku quits (~tomku@user/tomku) (Ping timeout: 250 seconds) |
| 15:09:34 | → | tomku joins (~tomku@user/tomku) |
| 15:10:51 | → | lawt joins (~lawt@129.159.36.129) |
| 15:12:48 | × | Midjak quits (~Midjak@82.66.147.146) (Ping timeout: 250 seconds) |
| 15:16:59 | <mniip> | Guillaum[m], this might backfire because some reexports are intentional |
| 15:17:12 | <mniip> | I don't suppose you want to import Map from Data.Map.Internal, or seq from GHC.Prim |
| 15:18:35 | × | captnemo quits (~captnemo@193.32.127.239) (Ping timeout: 264 seconds) |
| 15:19:16 | → | nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net) |
| 15:19:18 | × | jespada quits (~jespada@207.188.139.183) (Ping timeout: 250 seconds) |
| 15:19:42 | × | mechap quits (~mechap@user/mechap) (Ping timeout: 260 seconds) |
| 15:20:35 | → | mechap joins (~mechap@user/mechap) |
| 15:24:04 | × | nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 250 seconds) |
| 15:24:04 | → | jespada joins (~jespada@207.188.139.183) |
| 15:24:54 | codolio | is now known as dolio |
| 15:24:56 | × | Natch quits (~natch@c-9e07225c.038-60-73746f7.bbcust.telenor.se) (Ping timeout: 250 seconds) |
| 15:27:08 | → | fweht joins (uid404746@id-404746.lymington.irccloud.com) |
| 15:28:22 | → | Natch joins (~natch@c-9e07225c.038-60-73746f7.bbcust.telenor.se) |
| 15:28:27 | → | szkl joins (uid110435@id-110435.uxbridge.irccloud.com) |
| 15:28:51 | × | ubert quits (~Thunderbi@2a02:8109:abc0:6434:ed16:f40d:d3f1:21f0) (Remote host closed the connection) |
| 15:28:51 | ub | is now known as ubert |
| 15:29:04 | → | ubert1 joins (~Thunderbi@2a02:8109:abc0:6434:9beb:5d8a:2bea:fc3b) |
| 15:29:42 | × | gnyeki quits (~gnyeki@user/gnyeki) (Ping timeout: 250 seconds) |
| 15:31:26 | → | gnyeki joins (~gnyeki@li578-216.members.linode.com) |
| 15:31:26 | × | gnyeki quits (~gnyeki@li578-216.members.linode.com) (Changing host) |
| 15:31:26 | → | gnyeki joins (~gnyeki@user/gnyeki) |
| 15:31:43 | × | Pickchea quits (~private@user/pickchea) (Quit: Leaving) |
| 15:37:37 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 15:39:49 | → | mauke joins (~mauke@user/mauke) |
| 15:40:10 | → | captnemo joins (~captnemo@193.32.127.239) |
| 15:46:02 | → | barcisz joins (~barcisz@pw-wifi1.wifi.pw.edu.pl) |
| 15:49:52 | <gensyst> | What is the max memory usage of a Map (Data.Map.Strict) with 10,000 entries of type Map (ByteString, ByteString) Word16? |
| 15:50:05 | <gensyst> | where both bytestrings are max 5 bytes long. |
| 15:50:22 | <merijn> | gensyst: oh! |
| 15:50:52 | <merijn> | gensyst: You never posted the "+RTS -sstderr" output, but *this* question gives me a whole new hypothesis |
| 15:50:56 | × | misterfish quits (~misterfis@84-53-85-146.bbserv.nl) (Ping timeout: 250 seconds) |
| 15:51:09 | <merijn> | gensyst: are you, by any chance, parsing large-ish bytestrings into short chunks? |
| 15:51:49 | <gensyst> | merijn, I'm only parsing files line by line (and those two bytestrings are just a part of each line) |
| 15:52:02 | <gensyst> | but yeah those files are hundreds of megs each, but i don't see the problem because i'm streaming through them |
| 15:52:09 | <gensyst> | i.e. nt reading them into ram at once |
| 15:52:12 | <gensyst> | not* |
| 15:52:18 | <merijn> | gensyst: Except...you might be :) |
| 15:52:23 | <mauke> | theoretically unbounded |
| 15:52:38 | <merijn> | gensyst: Chunks of ByteString are just indices into the bytestring you are parsing them from |
| 15:52:52 | <merijn> | and the original BS can't be GCed until the references are |
| 15:53:09 | <merijn> | gensyst: So, depending on how you parse those short 5 byte chunks, they *might* be keeping the entire line alive |
| 15:53:18 | <merijn> | gensyst: Which would explain the giant saw-tooth memory profile |
| 15:53:36 | <merijn> | gensyst: See also: https://hackage.haskell.org/package/bytestring-0.11.4.0/docs/Data-ByteString.html#v:copy |
| 15:54:00 | <merijn> | gensyst: Additionally, for very short chunks there is also the ShortByteString type, which should have less overhead |
| 15:54:41 | <mauke> | alternatively, Word64 |
| 15:55:13 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:296e:3128:9bb:592b) |
| 15:57:19 | <gensyst> | thanks! this is very interesting. i'll look into this |
| 15:57:33 | → | econo_ joins (uid147250@id-147250.tinside.irccloud.com) |
| 15:58:28 | → | Sciencentistguy3 joins (~sciencent@hacksoc/ordinary-member) |
| 16:00:02 | × | Sciencentistguy quits (~sciencent@hacksoc/ordinary-member) (Ping timeout: 250 seconds) |
| 16:00:02 | Sciencentistguy3 | is now known as Sciencentistguy |
| 16:00:46 | → | solaire joins (~solaire@024-158-116-019.res.spectrum.com) |
| 16:00:51 | → | zmt00 joins (~zmt00@user/zmt00) |
| 16:02:00 | × | zmt01 quits (~zmt00@user/zmt00) (Ping timeout: 240 seconds) |
| 16:02:11 | × | pavonia quits (~user@user/siracusa) (Quit: Bye!) |
| 16:05:47 | × | chele quits (~chele@user/chele) (Remote host closed the connection) |
| 16:06:32 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:296e:3128:9bb:592b) (Remote host closed the connection) |
| 16:07:02 | → | _ht joins (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) |
| 16:08:15 | × | captnemo quits (~captnemo@193.32.127.239) (Quit: WeeChat 3.8) |
| 16:08:30 | × | kuribas quits (~user@ip-188-118-57-242.reverse.destiny.be) (Quit: ERC (IRC client for Emacs 27.1)) |
| 16:08:42 | × | danse-nr3 quits (~francesco@151.35.81.64) (Ping timeout: 250 seconds) |
| 16:15:29 | × | machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 240 seconds) |
| 16:16:45 | <gensyst> | merijn, This was it! Just adding copy for those two bytestrings fixed entire memory bloat. Thank you. |
| 16:18:43 | → | connrs_ joins (~connrs@user/connrs) |
| 16:18:49 | → | captnemo joins (~captnemo@193.32.127.239) |
| 16:19:06 | × | connrs quits (~connrs@user/connrs) (Ping timeout: 250 seconds) |
| 16:19:12 | connrs_ | is now known as connrs |
| 16:20:55 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 16:20:55 | × | captnemo quits (~captnemo@193.32.127.239) (Remote host closed the connection) |
| 16:21:18 | → | captnemo joins (~captnemo@193.32.127.239) |
| 16:24:57 | → | nick__ joins (~nick@wsip-174-78-110-18.pn.at.cox.net) |
| 16:25:21 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 16:26:18 | × | jespada quits (~jespada@207.188.139.183) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 16:27:08 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 16:29:37 | <nick__> | I'm trying to make type b polymorphic with type a. I can do this easily using "type B = A" but then any function definition that is say b -> b a also will fit in. I assume I need to do something like "newtype B = A B", but then it seems that B isn't polymorphic with A and I get type errors. I could implement type classes, but I want B to be a subset of A but no object A to be a B. |
| 16:31:52 | × | ddellacosta quits (~ddellacos@146.70.168.100) (Ping timeout: 240 seconds) |
| 16:34:03 | → | ddellacosta joins (~ddellacos@146.70.166.10) |
| 16:35:05 | × | nckx quits (~nckx@tobias.gr) (Changing host) |
| 16:35:05 | → | nckx joins (~nckx@guix/contributor/nckx) |
| 16:36:46 | × | barcisz quits (~barcisz@pw-wifi1.wifi.pw.edu.pl) (Quit: Connection closed) |
| 16:39:20 | × | titibandit quits (~titibandi@user/titibandit) (Remote host closed the connection) |
| 16:40:20 | × | thegeekinside quits (~thegeekin@189.217.90.138) (Ping timeout: 250 seconds) |
| 16:40:39 | → | thegeekinside joins (~thegeekin@189.217.90.138) |
| 16:44:05 | <ncf> | the key word you're looking for is "subtyping", and haskell does not have that |
| 16:44:54 | <ski> | nick__ : it's unclear what you mean by "polymorphic" |
| 16:45:06 | × | michalz quits (~michalz@185.246.207.203) (Ping timeout: 250 seconds) |
| 16:45:07 | <ncf> | yes it took me ages to parse |
| 16:45:09 | → | eggplantade joins (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) |
| 16:45:18 | <ski> | what does "B isn't polymorphic with A" even mean ? |
| 16:45:50 | → | michalz joins (~michalz@185.246.207.217) |
| 16:46:04 | <glguy> | I feel like I'd know about it if we did, but do we have something in base for doing checked numeric conversions where you get a Nothing if the value doesn't fit into the target type? |
| 16:46:08 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds) |
| 16:46:16 | <glguy> | other than me manually doing the bounds checks first |
| 16:46:19 | <ski> | "I want B to be a subset of A but no object A to be a B." -- this implies that no object is of type `B', btw |
| 16:47:47 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 16:48:42 | <Guillaum[m]> | mniip: you are right. Well, guess I'll have to write a manual tool with more smartness. |
| 16:49:18 | <glguy> | Perhaps this is what we have: https://hackage.haskell.org/package/int-cast |
| 16:49:47 | × | kupenske_oplatky quits (~priesvitn@192.216.99.34.bc.googleusercontent.com) (Ping timeout: 264 seconds) |
| 16:51:58 | → | ripspin joins (~chatzilla@1.145.136.115) |
| 16:52:02 | <nick__> | ski : what I mean by polymorphic is any time a appears in a function definition b can be used as an a as well. Literally the definition of the world b has "multiple forms." But I'm not looking for an equivalence between a and b (i.e. using type B = A). I'm looking for an implication (i.e. if I have a B, then I can give you an A, but if I give you an A, then it is not necessarily a B). |
| 16:55:30 | <nick__> | "I want B to be a subset of A but no object A to be a B." -- this implies that no object is of type `B', btw" -- Not following you here. If you instantiate an object B then you have an object B, but it can also be an object A. If you instantiate an object A, then you do not necessarily get an object B (though, it does not mean that it can't be converted to an object B at least logically). |
| 16:57:07 | <int-e> | But you wrote that you want "no object A to be a B". Evidently that's not what you meant. |
| 16:58:40 | <nick__> | Yes that's correct |
| 16:58:43 | × | tomsmeding quits (~tomsmedin@static.21.109.88.23.clients.your-server.de) (Server closed connection) |
| 16:58:58 | → | tomsmeding joins (~tomsmedin@static.21.109.88.23.clients.your-server.de) |
| 16:59:32 | <nick__> | the compiler would reject any object A with a function definition of B, but the comiler will not reject an object B when fed into a type definition of func :: A -> A |
| 16:59:34 | → | danse-nr3 joins (~francesco@151.35.67.174) |
| 16:59:49 | × | ddrone[m] quits (~ddronemat@2001:470:69fc:105::3:70d5) (Server closed connection) |
| 17:00:02 | → | ddrone[m] joins (~ddronemat@2001:470:69fc:105::3:70d5) |
| 17:00:53 | <nick__> | ugh pasting shit from vim is such a pain, why do all pastebin sites suck. |
| 17:02:00 | <ncf> | yes that particular shape of polymorphism is called subtyping. haskell has parametric polymorphism and typeclasses |
| 17:02:41 | <nick__> | since it seems like there's some confusion here's what I'm looking to avoid https://paste.tomsmeding.com/vyVC1pY3 |
| 17:02:49 | <nick__> | everything is equivalent |
| 17:03:04 | <nick__> | I want String2 to imply String, but String to not imply String2 |
| 17:03:06 | <nick__> | That's all |
| 17:03:46 | <nick__> | ncf: so what I'm looking for is impossible in Haskell correct? |
| 17:04:01 | <ncf> | yes |
| 17:04:06 | <jade[m]> | why would you want that indirection |
| 17:04:25 | <jade[m]> | is there any reasonable use-case where using a newtype isn't sufficient |
| 17:04:26 | <nick__> | it doesn't matter why I'd want it if its impossible |
| 17:04:38 | <nick__> | yes |
| 17:04:42 | <nick__> | when using type is sufficient |
| 17:04:44 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 17:04:59 | <mniip> | haskell has subtyping via specialization |
| 17:05:03 | <ncf> | well you don't actually want to have a String2 type that's a subtype of String for no reason. what are you trying to accomplish? |
| 17:05:31 | <mniip> | you can implicitly turn a `(forall a. F a)` into a `F ()` but not the other way around |
| 17:11:33 | <nick__> | The thing is you can have mnay different kinds of strings. If you have a string of a regular form, it can be helpful keep that string separate from instances that may be malformed. For example, maybe you have an application that outputs yaml, json, or whatever. If the application encodes that string itself, then we can be sure its properly formed (assuming the code is correct), where if you're |
| 17:11:34 | <nick__> | taking that string from an untrusted source (say from IO or something), then it doesn't make sense to make that a String2, but rather just a String. However, its inconvienient to create two functions for each String and String2. It makes more sense to write one function for a String, and String2 will just be recognized as a String. However, if you input a String into a function definition of |
| 17:11:36 | <nick__> | String2, then I would expect the compiler to fail because if I verified that the String was properly formed, I would have made it a String2, and therefore the compiler will complain and rightfully so. I'm not really sure why asking this question is so confusing, what am I not communicating to you. |
| 17:12:14 | <mniip> | In haskell you use newtypes for this purpose |
| 17:12:16 | <jade[m]> | that sounds like a newtype wrapper |
| 17:12:27 | <nick__> | But really, I'm not trying to examine the implementation details. I'm asking a specific question about haskell and types |
| 17:12:41 | <mniip> | And yes you explicitly unwrap a VerifiedString into a String |
| 17:12:42 | × | mechap quits (~mechap@user/mechap) (Ping timeout: 245 seconds) |
| 17:12:49 | <nick__> | the problem with using newtype though is that it then does not complain when you have a function definition using String2 |
| 17:13:55 | → | mechap joins (~mechap@user/mechap) |
| 17:14:23 | → | tzh joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net) |
| 17:14:33 | <mniip> | type is a transparent alias and newtype is an opaque one |
| 17:14:46 | <nick__> | https://paste.tomsmeding.com/UnpSeLJH |
| 17:14:49 | <mniip> | You're asking for something that is half transparent half opaque? |
| 17:15:00 | <nick__> | look charIter2 does not fail for String or [Char] |
| 17:15:05 | <nick__> | That is not the functionality I'm looking for |
| 17:15:44 | <nick__> | I'm looking for charIter to succeed with String String2 [Char] but charIter must fail with String and [Char] and only succeed with String2 |
| 17:16:11 | <nick__> | however, when you use newtype, then using charIter2 with String2 gives a type error. |
| 17:17:11 | <mniip> | newtype is how people normally do it |
| 17:17:36 | <nick__> | https://paste.tomsmeding.com/W5h4KT61 |
| 17:17:36 | <mniip> | subtyping is fundamentally in conflict with bidirectional type inference |
| 17:18:13 | <nick__> | Now with that newtype declaration String2 breask when trying to use charIter, resulting in having to create two different functions that do the same thing. |
| 17:18:48 | <nick__> | but using newtype I think you have to use typeclasses correct? |
| 17:18:57 | <nick__> | and implement each one |
| 17:18:59 | <mniip> | "have to"? |
| 17:19:06 | × | eggplantade quits (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 17:19:22 | <nick__> | well otherwise how would the compiler know how to apply a String function to String2? |
| 17:19:35 | <mniip> | You tell it explicitly to unwrap |
| 17:19:39 | <nick__> | look at my last pastebin |
| 17:19:43 | <nick__> | it breaks using newtype |
| 17:19:47 | <mniip> | I know |
| 17:20:04 | <ncf> | yes, if you want to be able to call the same function on String and String2 you need a typeclass |
| 17:20:38 | <ncf> | sadly IsString only has fromString |
| 17:20:42 | <nick__> | but then you got to do something like deriving (Show) or whatever functionality you want to be applied, and change the function definitions accordingly? |
| 17:21:02 | <nick__> | you can't just use charIter :: String -> IO() correct? |
| 17:21:35 | <ncf> | yeah, if you want to use charIter :: String -> IO () then you have to use charIter . toString |
| 17:22:09 | <nick__> | resulting in two functions which is the newtype wrapper you're talking about? |
| 17:22:37 | <nick__> | Its still better than copy/pasting the entire function though |
| 17:23:20 | <mniip> | Depending on the use case I would not even define a second function |
| 17:23:27 | <mniip> | Just unwrap at use sites |
| 17:24:14 | × | byte quits (~byte@user/byte) (Quit: Quitting...) |
| 17:24:34 | → | byte joins (~byte@user/byte) |
| 17:24:39 | <mniip> | If that's prohibitive, make a helper function |
| 17:25:01 | <jade[m]> | with a newtype you can also coerce |
| 17:25:03 | <mniip> | If it's imperative that the two functions be named the same, make a typeclass method |
| 17:25:19 | <mniip> | coerce kind of defeats the purpose of the newtype somewhat |
| 17:26:22 | × | ubert1 quits (~Thunderbi@2a02:8109:abc0:6434:9beb:5d8a:2bea:fc3b) (Remote host closed the connection) |
| 17:26:58 | <mniip> | Again, XY problem here, what do you *actually* need to do? |
| 17:29:35 | <nick__> | this is what I actually need to do |
| 17:29:41 | <nick__> | I'm not sure what your question is |
| 17:29:53 | <nick__> | I want to understand how the typing system works |
| 17:30:16 | <nick__> | Not following why you need an actual usecase, its just about not having a million type definitions everywhere |
| 17:30:29 | <jade[m]> | you can just use the type itself then |
| 17:30:32 | <nick__> | yo |
| 17:30:37 | <nick__> | that doesn't work |
| 17:30:41 | <nick__> | because its an equivalence |
| 17:30:46 | <nick__> | I might as well not have String2 then |
| 17:30:54 | <nick__> | because everything is just like String |
| 17:30:57 | <jade[m]> | yes, type is an alias |
| 17:31:04 | <nick__> | exactly I dont want an alias |
| 17:31:08 | <nick__> | I've said as much |
| 17:31:11 | <mniip> | Ok so, "how the typesystem works" is we have opaque and transparent aliases |
| 17:31:17 | <mniip> | But not whatever you want |
| 17:31:29 | <nick__> | that means nothing to me, perhaps you could explain? |
| 17:31:38 | <nick__> | how that even relates to what I'm doing |
| 17:32:12 | <mauke> | you're not doing anything, you're just trying to understand the type system |
| 17:32:13 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Quit: Leaving) |
| 17:32:31 | <nick__> | yeah so I can properly use types and not have a million function definitions everywhere |
| 17:32:43 | <mniip> | newtype is opaque: you need to explicitly wrap and unwrap, type is transparent: both happen implicitly |
| 17:32:44 | × | mechap quits (~mechap@user/mechap) (Quit: WeeChat 4.0.0) |
| 17:32:49 | <jade[m]> | I think they are asking for what you acttually need |
| 17:32:54 | <mauke> | well, the easiest way to not have a million definitions is ... to not do that |
| 17:33:01 | <mniip> | You want one side to be explicit and the other implicit, we don't have that |
| 17:33:19 | <nick__> | mauke: exactly! |
| 17:33:28 | <nick__> | now you're speaking my language! |
| 17:33:37 | <mauke> | <nick__> ugh pasting shit from vim is such a pain <- if you're running vim locally, you should be able to use its clipboard integration (even in a terminal) |
| 17:33:54 | <mauke> | also known as "+y |
| 17:34:32 | × | cafkafk quits (~cafkafk@fsf/member/cafkafk) (Ping timeout: 240 seconds) |
| 17:36:58 | → | AlexNoo_ joins (~AlexNoo@94.233.241.5) |
| 17:37:25 | → | cafkafk joins (~cafkafk@fsf/member/cafkafk) |
| 17:38:24 | × | AlexZenon quits (~alzenon@178.34.150.66) (Ping timeout: 250 seconds) |
| 17:39:14 | → | ft joins (~ft@p508db151.dip0.t-ipconnect.de) |
| 17:39:53 | → | geekosaur joins (~geekosaur@xmonad/geekosaur) |
| 17:40:12 | × | AlexNoo quits (~AlexNoo@178.34.150.66) (Ping timeout: 240 seconds) |
| 17:40:47 | × | Alex_test quits (~al_test@178.34.150.66) (Ping timeout: 264 seconds) |
| 17:42:52 | <nick__> | Is this what you guys are talking about? https://paste.tomsmeding.com/mbX5n9OW |
| 17:43:05 | <nick__> | I'm just trying to figure out how you handle this type of issue? |
| 17:43:34 | → | AlexZenon joins (~alzenon@94.233.241.5) |
| 17:44:22 | <jade[m]> | don't use the show instance for that |
| 17:44:37 | <jade[m]> | just unwrap the newtype via a pattern match |
| 17:44:39 | <nick__> | well I've been asking how you guys would handle it |
| 17:44:42 | <nick__> | so how would you do it? |
| 17:44:50 | <mauke> | pattern matching |
| 17:44:56 | <nick__> | example? |
| 17:45:04 | <jade[m]> | charIter2 (String2 str) = ... |
| 17:45:06 | <mauke> | or record syntax with implicit accessors that do the matching for you |
| 17:45:28 | <nick__> | oh how would a record syntax look? |
| 17:45:48 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 17:45:59 | <mauke> | newtype String2 = String2{ fromString2 :: String } |
| 17:46:43 | <mauke> | which tells the compiler to generate the equivalent of: fromString2 x = case x of String2 s -> s |
| 17:47:28 | <nick__> | yeah, so you've created a type that is a String2 but has a name/value pair that is a String? |
| 17:47:39 | <nick__> | is how I'm reading that? |
| 17:47:46 | <jade[m]> | that's what records are, yeah |
| 17:48:00 | <nick__> | yeah I guess that makes sense |
| 17:48:08 | <jade[m]> | essentially just giving names to fields inside a datatype |
| 17:48:09 | <nick__> | just seems unintuitive |
| 17:48:16 | <jade[m]> | with no runtime overhead |
| 17:48:21 | <jade[m]> | (afaik) |
| 17:48:26 | × | ripspin quits (~chatzilla@1.145.136.115) (Remote host closed the connection) |
| 17:48:43 | <mauke> | I wouldn't call it a name/value pair because at runtime it's just the value |
| 17:48:57 | <jade[m]> | yeah that's what I was trying to express |
| 17:49:01 | × | Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 17:49:23 | <mauke> | in particular, operationally fromString2 is the identity function |
| 17:49:39 | → | Alex_test joins (~al_test@94.233.241.5) |
| 17:49:59 | <nick__> | So wait, lets say you had an int included in the record as well. Is it still just the two values? or is it a datatype that contains two values? |
| 17:50:02 | <mniip> | "how you guys would handle it" is a completely different question that has also been answered earlier |
| 17:50:19 | <mauke> | nick__: that's a compiler error because newtype can only wrap exactly one thing |
| 17:50:22 | <mniip> | here's a more practical example: https://paste.tomsmeding.com/ZO7L4NbL |
| 17:50:26 | <nick__> | ah true |
| 17:50:27 | <nick__> | ok |
| 17:50:30 | <jade[m]> | nick__: two fields would not allow you to use `newtype` |
| 17:50:48 | <nick__> | yeah that's on the wikipage I remember |
| 17:51:05 | <mauke> | so the use of a record field name with newtype is slightly cheeky |
| 17:51:23 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 17:51:46 | <mniip> | god I wish GHC would just let me define a newtype gadt where the only field is a coercion |
| 17:53:55 | → | waleee joins (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) |
| 17:54:14 | × | solaire quits (~solaire@024-158-116-019.res.spectrum.com) (Ping timeout: 246 seconds) |
| 17:55:11 | → | solaire joins (~solaire@024-158-116-019.res.spectrum.com) |
| 17:56:42 | × | fweht quits (uid404746@id-404746.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 17:58:57 | → | EvanR joins (~EvanR@user/evanr) |
| 18:01:20 | → | wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com) |
| 18:01:20 | × | wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host) |
| 18:01:20 | → | wroathe joins (~wroathe@user/wroathe) |
| 18:03:56 | AlexNoo_ | is now known as AlexNoo |
| 18:09:23 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection) |
| 18:11:50 | → | FinnElija joins (~finn_elij@user/finn-elija/x-0085643) |
| 18:12:22 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 260 seconds) |
| 18:16:58 | × | danse-nr3 quits (~francesco@151.35.67.174) (Ping timeout: 250 seconds) |
| 18:19:35 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:296e:3128:9bb:592b) |
| 18:22:21 | × | totbwf quits (sid402332@id-402332.uxbridge.irccloud.com) (Server closed connection) |
| 18:22:35 | → | totbwf joins (sid402332@id-402332.uxbridge.irccloud.com) |
| 18:23:57 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:296e:3128:9bb:592b) (Ping timeout: 245 seconds) |
| 18:24:29 | × | coot quits (~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot) |
| 18:25:40 | → | misterfish joins (~misterfis@84-53-85-146.bbserv.nl) |
| 18:28:09 | → | mechap joins (~mechap@user/mechap) |
| 18:30:34 | × | misterfish quits (~misterfis@84-53-85-146.bbserv.nl) (Ping timeout: 260 seconds) |
| 18:32:02 | × | ubert quits (~Thunderbi@p200300ecdf0b57c57ef837ab9eeb4127.dip0.t-ipconnect.de) (Ping timeout: 246 seconds) |
| 18:33:49 | → | ubert joins (~Thunderbi@p548c89d1.dip0.t-ipconnect.de) |
| 18:35:14 | × | waleee quits (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) (Ping timeout: 260 seconds) |
| 18:37:04 | → | eggplantade joins (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) |
| 18:39:28 | → | Tuplanolla joins (~Tuplanoll@91-159-68-236.elisa-laajakaista.fi) |
| 18:51:54 | → | Pickchea joins (~private@user/pickchea) |
| 19:04:14 | × | gensyst quits (~gensyst@user/gensyst) (Quit: Leaving) |
| 19:07:06 | → | geranim0 joins (~geranim0@modemcable182.140-177-173.mc.videotron.ca) |
| 19:11:25 | → | coot joins (~coot@89-69-206-216.dynamic.chello.pl) |
| 19:14:20 | → | reach joins (~reach@bras-base-toroon2643w-grc-19-74-12-129-40.dsl.bell.ca) |
| 19:17:14 | × | geranim0 quits (~geranim0@modemcable182.140-177-173.mc.videotron.ca) (Ping timeout: 260 seconds) |
| 19:17:50 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 19:18:25 | → | taupiqueur joins (~taupiqueu@2a02-8440-721b-8c5d-393a-ef3b-a3c7-d0b1.rev.sfr.net) |
| 19:18:27 | × | fendor quits (~fendor@2a02:8388:1640:be00:7aca:a77a:4a28:631a) (Remote host closed the connection) |
| 19:20:45 | → | nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net) |
| 19:21:59 | × | reach quits (~reach@bras-base-toroon2643w-grc-19-74-12-129-40.dsl.bell.ca) (Remote host closed the connection) |
| 19:22:43 | → | reach joins (~reach@74.12.129.40) |
| 19:25:38 | × | nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 260 seconds) |
| 19:36:21 | → | pavonia joins (~user@user/siracusa) |
| 19:40:02 | × | captnemo quits (~captnemo@193.32.127.239) (Quit: WeeChat 3.8) |
| 19:42:53 | → | jero98772 joins (~jero98772@2800:484:1d7f:5d36::4) |
| 19:45:52 | × | reach quits (~reach@74.12.129.40) (Remote host closed the connection) |
| 19:46:11 | × | hisa38 quits (~hisa38@104-181-102-238.lightspeed.wepbfl.sbcglobal.net) (Ping timeout: 264 seconds) |
| 19:46:15 | → | reach joins (~reach@bras-base-toroon2643w-grc-19-74-12-129-40.dsl.bell.ca) |
| 19:47:52 | × | Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection) |
| 19:54:18 | × | _ht quits (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Quit: _ht) |
| 20:01:17 | × | trev quits (~trev@user/trev) (Quit: trev) |
| 20:03:40 | × | merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 258 seconds) |
| 20:04:22 | × | jero98772 quits (~jero98772@2800:484:1d7f:5d36::4) (Ping timeout: 260 seconds) |
| 20:07:08 | × | reach quits (~reach@bras-base-toroon2643w-grc-19-74-12-129-40.dsl.bell.ca) (Ping timeout: 240 seconds) |
| 20:08:49 | → | machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net) |
| 20:08:51 | → | hisa38 joins (~hisa38@104-181-102-238.lightspeed.wepbfl.sbcglobal.net) |
| 20:17:20 | × | ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds) |
| 20:17:55 | → | ec joins (~ec@gateway/tor-sasl/ec) |
| 20:18:26 | × | remedan quits (~remedan@ip-94-112-0-18.bb.vodafone.cz) (Ping timeout: 246 seconds) |
| 20:25:09 | × | robobub quits (uid248673@id-248673.uxbridge.irccloud.com) (Quit: Connection closed for inactivity) |
| 20:31:05 | → | merijn joins (~merijn@c-001-001-003.client.esciencecenter.eduvpn.nl) |
| 20:35:52 | → | danse-nr3 joins (~francesco@151.37.109.27) |
| 20:36:21 | → | remedan joins (~remedan@ip-94-112-0-18.bb.vodafone.cz) |
| 20:37:47 | × | Alex_test quits (~al_test@94.233.241.5) (Ping timeout: 264 seconds) |
| 20:39:30 | × | AlexZenon quits (~alzenon@94.233.241.5) (Ping timeout: 240 seconds) |
| 20:39:50 | × | AlexNoo quits (~AlexNoo@94.233.241.5) (Ping timeout: 260 seconds) |
| 20:48:30 | → | misterfish joins (~misterfis@84-53-85-146.bbserv.nl) |
| 21:02:30 | → | geranim0 joins (~geranim0@modemcable182.140-177-173.mc.videotron.ca) |
| 21:04:34 | × | merijn quits (~merijn@c-001-001-003.client.esciencecenter.eduvpn.nl) (Ping timeout: 260 seconds) |
| 21:05:30 | × | misterfish quits (~misterfis@84-53-85-146.bbserv.nl) (Ping timeout: 260 seconds) |
| 21:06:44 | × | geranim0 quits (~geranim0@modemcable182.140-177-173.mc.videotron.ca) (Remote host closed the connection) |
| 21:07:36 | × | coot quits (~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot) |
| 21:08:59 | × | foul_owl quits (~kerry@71.212.137.212) (Ping timeout: 264 seconds) |
| 21:10:43 | × | josias quits (~mottmatri@2001:470:69fc:105::b6c) (Server closed connection) |
| 21:10:55 | → | josias joins (~mottmatri@2001:470:69fc:105::b6c) |
| 21:10:57 | × | gurkenglas quits (~gurkengla@dynamic-046-114-163-231.46.114.pool.telefonica.de) (Read error: Connection reset by peer) |
| 21:15:28 | × | tinwood quits (~tinwood@canonical/tinwood) (Server closed connection) |
| 21:15:41 | → | tinwood joins (~tinwood@general.default.akavanagh.uk0.bigv.io) |
| 21:15:42 | × | tinwood quits (~tinwood@general.default.akavanagh.uk0.bigv.io) (Changing host) |
| 21:15:42 | → | tinwood joins (~tinwood@canonical/tinwood) |
| 21:16:30 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
| 21:17:44 | × | cafkafk quits (~cafkafk@fsf/member/cafkafk) (Ping timeout: 240 seconds) |
| 21:19:02 | × | chromoblob quits (~user@37.113.180.121) (Ping timeout: 260 seconds) |
| 21:22:16 | → | cafkafk joins (~cafkafk@fsf/member/cafkafk) |
| 21:23:13 | → | foul_owl joins (~kerry@157.97.134.168) |
| 21:25:49 | → | titibandit joins (~titibandi@user/titibandit) |
| 21:39:00 | × | mizlan quits (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net) (Ping timeout: 240 seconds) |
| 21:39:45 | × | ddellacosta quits (~ddellacos@146.70.166.10) (Quit: WeeChat 3.8) |
| 21:40:09 | × | michalz quits (~michalz@185.246.207.217) (Remote host closed the connection) |
| 21:40:18 | → | mizlan joins (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net) |
| 21:41:12 | × | sphynx quits (~xnyhps@2a02:2770:3:0:216:3eff:fe67:3288) (Server closed connection) |
| 21:41:25 | → | sphynx joins (~xnyhps@2a02:2770:3:0:216:3eff:fe67:3288) |
| 21:44:42 | × | mizlan quits (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net) (Ping timeout: 260 seconds) |
| 21:46:09 | → | FinnBoat joins (~user@rul16-h01-176-151-21-224.dsl.sta.abo.bbox.fr) |
| 21:57:28 | × | FinnBoat quits (~user@rul16-h01-176-151-21-224.dsl.sta.abo.bbox.fr) (Remote host closed the connection) |
| 21:58:58 | → | mizlan joins (~mizlan@c-73-63-223-227.hsd1.ca.comcast.net) |
| 22:01:13 | × | TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Quit: So long and thanks for all the fish) |
| 22:01:33 | × | Pickchea quits (~private@user/pickchea) (Quit: Leaving) |
| 22:03:50 | × | taupiqueur quits (~taupiqueu@2a02-8440-721b-8c5d-393a-ef3b-a3c7-d0b1.rev.sfr.net) (Ping timeout: 260 seconds) |
| 22:06:32 | × | mithromdir quits (uid591745@user/mithromdir) (Quit: Connection closed for inactivity) |
| 22:13:32 | × | oo_miguel quits (~Thunderbi@78-11-179-96.static.ip.netia.com.pl) (Ping timeout: 240 seconds) |
| 22:15:36 | → | bratwurst joins (~dfadsva@2604:3d09:207f:f650::a8c) |
| 22:19:12 | × | nick__ quits (~nick@wsip-174-78-110-18.pn.at.cox.net) (Ping timeout: 250 seconds) |
| 22:20:30 | × | titibandit quits (~titibandi@user/titibandit) (Remote host closed the connection) |
| 22:22:07 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 22:25:05 | → | TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker) |
| 22:25:50 | × | acidjnk quits (~acidjnk@p200300d6e7072f43a445df600121d0b6.dip0.t-ipconnect.de) (Ping timeout: 246 seconds) |
| 22:27:35 | × | remedan quits (~remedan@ip-94-112-0-18.bb.vodafone.cz) (Ping timeout: 264 seconds) |
| 22:28:14 | → | remedan joins (~remedan@ip-94-112-0-18.bb.vodafone.cz) |
| 22:28:32 | × | TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Read error: Connection reset by peer) |
| 22:28:34 | × | __monty__ quits (~toonn@user/toonn) (Quit: leaving) |
| 22:29:40 | → | wroathe joins (~wroathe@user/wroathe) |
| 22:36:28 | × | Vq quits (~vq@90-227-195-9-no77.tbcn.telia.com) (Server closed connection) |
| 22:36:37 | → | Vq joins (~vq@90-227-195-9-no77.tbcn.telia.com) |
| 22:37:30 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 22:38:23 | × | danse-nr3 quits (~francesco@151.37.109.27) (Ping timeout: 264 seconds) |
| 22:39:41 | sumpwa- | is now known as sumpwa |
| 22:43:30 | × | dibblego quits (~dibblego@haskell/developer/dibblego) (Ping timeout: 260 seconds) |
| 22:47:17 | → | dmenz joins (~dmenz@2804:14d:5cd4:85fb:176f:8705:81c:687a) |
| 22:47:42 | × | ubert quits (~Thunderbi@p548c89d1.dip0.t-ipconnect.de) (Quit: ubert) |
| 22:51:14 | → | dibblego joins (~dibblego@122-199-1-30.ip4.superloop.au) |
| 22:51:14 | × | dibblego quits (~dibblego@122-199-1-30.ip4.superloop.au) (Changing host) |
| 22:51:14 | → | dibblego joins (~dibblego@haskell/developer/dibblego) |
| 22:57:07 | × | dolio quits (~dolio@130.44.134.54) (Quit: ZNC 1.8.2 - https://znc.in) |
| 22:57:46 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 250 seconds) |
| 22:58:11 | × | Tuplanolla quits (~Tuplanoll@91-159-68-236.elisa-laajakaista.fi) (Quit: Leaving.) |
| 22:58:52 | → | merijn joins (~merijn@86-86-29-250.fixed.kpn.net) |
| 22:58:52 | → | dolio joins (~dolio@130.44.134.54) |
| 23:02:26 | × | dolio quits (~dolio@130.44.134.54) (Client Quit) |
| 23:05:59 | × | merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 264 seconds) |
| 23:10:56 | × | cafkafk quits (~cafkafk@fsf/member/cafkafk) (Ping timeout: 240 seconds) |
| 23:13:53 | → | cafkafk joins (~cafkafk@fsf/member/cafkafk) |
| 23:22:16 | → | nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net) |
| 23:24:20 | → | jero98772 joins (~jero98772@2800:484:1d7f:5d36::4) |
| 23:27:00 | × | nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 240 seconds) |
| 23:31:19 | × | cafkafk quits (~cafkafk@fsf/member/cafkafk) (Remote host closed the connection) |
| 23:31:41 | → | cafkafk joins (~cafkafk@fsf/member/cafkafk) |
| 23:44:58 | → | mauke_ joins (~mauke@user/mauke) |
| 23:46:03 | × | mechap quits (~mechap@user/mechap) (Quit: WeeChat 4.0.0) |
| 23:46:58 | × | mauke quits (~mauke@user/mauke) (Ping timeout: 260 seconds) |
| 23:46:58 | mauke_ | is now known as mauke |
| 23:51:54 | → | mechap joins (~mechap@user/mechap) |
All times are in UTC on 2023-06-28.