2022-01-26 00:00:13 +0100 | <tomsmeding> | I knew this existed in some form, just forgot the name ;) |
2022-01-26 00:00:17 +0100 | <SrPx> | anyway, I realized mergesort is terrible for already sorted lists |
2022-01-26 00:00:28 +0100 | <SrPx> | so I have no idea why quacksort is faster than sort for truly random lists |
2022-01-26 00:00:54 +0100 | <SrPx> | the whole point was to make it faster by making it more likely for deep calls to be already sorted |
2022-01-26 00:01:10 +0100 | <SrPx> | so yea idk what is going on and i need to go :pp |
2022-01-26 00:01:12 +0100 | <SrPx> | thanks though, was fun |
2022-01-26 00:07:17 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:7175:fef6:491:2dba) (Remote host closed the connection) |
2022-01-26 00:08:13 +0100 | Henson | (~kvirc@107-179-133-201.cpe.teksavvy.com) (Ping timeout: 240 seconds) |
2022-01-26 00:08:15 +0100 | __monty__ | (~toonn@user/toonn) (Quit: leaving) |
2022-01-26 00:09:08 +0100 | wombat875 | (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) |
2022-01-26 00:10:17 +0100 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection) |
2022-01-26 00:12:24 +0100 | rtsn | (~nstr@user/rtsn) (Quit: Lost terminal) |
2022-01-26 00:15:25 +0100 | machinedgod | (~machinedg@24.105.81.50) (Ping timeout: 240 seconds) |
2022-01-26 00:16:42 +0100 | alp | (~alp@user/alp) |
2022-01-26 00:17:15 +0100 | <tomsmeding> | SrPx: quacksort infinite loops if the first element of the list is maximal |
2022-01-26 00:17:26 +0100 | <tomsmeding> | because then everything ends up in the first bucket ;) |
2022-01-26 00:17:43 +0100 | <tomsmeding> | yay quickcheck |
2022-01-26 00:19:19 +0100 | <SrPx> | lol! |
2022-01-26 00:19:23 +0100 | <SrPx> | good catch |
2022-01-26 00:19:47 +0100 | <SrPx> | the algorithm only would really make sense if `p` is a reasonable pivot |
2022-01-26 00:20:02 +0100 | <SrPx> | now, the question is, would it still be faster on random lists if that's the case? |
2022-01-26 00:20:18 +0100 | <SrPx> | i have no idea, but I posted it here just in case anyone wants to play with the algo: https://stackoverflow.com/questions/70856865/why-quacksort-is-2x-faster-than-data-lists-sort-for-r… |
2022-01-26 00:22:43 +0100 | <monochrom> | If you pick your pivot uniformly randomly, or equivalently the list is a random shuffle so if you pick your pivot by deterministic position-in-list it's as good as random, then there are two theorems that apply: |
2022-01-26 00:23:05 +0100 | <monochrom> | 1. The expected time is Θ(n lg n) |
2022-01-26 00:23:30 +0100 | <monochrom> | 2. With high probability the worst-case time is Θ(n lg n). |
2022-01-26 00:24:53 +0100 | <monochrom> | More precise statement for #2: If you accept a larger constant multiplier K for the worst-case time K * n lg n, then the probability of making it is also higher. |
2022-01-26 00:25:22 +0100 | <monochrom> | (I forgot the most precise statement i.e. how high the probability is in terms of K.) |
2022-01-26 00:27:07 +0100 | <monochrom> | If it is any consolation, in this the 21st century where every troll and blackhat is out to try to DoS you, the best and only known defense is randomization. |
2022-01-26 00:28:49 +0100 | <SrPx> | isn't that the case for mergesort in general? |
2022-01-26 00:29:18 +0100 | <monochrom> | Heh OK but people complain about mergesort's constant multiplier being large. |
2022-01-26 00:29:34 +0100 | <monochrom> | @quote monochrom performance.freak |
2022-01-26 00:29:34 +0100 | <lambdabot> | monochrom says: Programmers are control freaks, performance freaks, monopoly freaks. |
2022-01-26 00:29:41 +0100 | <monochrom> | Fresh out of the oven today! |
2022-01-26 00:30:22 +0100 | Morrow_ | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) |
2022-01-26 00:31:43 +0100 | <dsal> | OO programmers are super freaks |
2022-01-26 00:31:45 +0100 | AlexNoo_ | (~AlexNoo@178.34.162.240) |
2022-01-26 00:31:49 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:7175:fef6:491:2dba) |
2022-01-26 00:31:53 +0100 | <monochrom> | haha |
2022-01-26 00:32:11 +0100 | <Axman6> | this |
2022-01-26 00:33:51 +0100 | Morrow | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 256 seconds) |
2022-01-26 00:34:57 +0100 | AlexNoo | (~AlexNoo@178.34.150.81) (Ping timeout: 240 seconds) |
2022-01-26 00:34:57 +0100 | Henson | (~kvirc@107-179-133-201.cpe.teksavvy.com) |
2022-01-26 00:34:59 +0100 | AlexZenon | (~alzenon@178.34.150.81) (Ping timeout: 256 seconds) |
2022-01-26 00:34:59 +0100 | Alex_test | (~al_test@178.34.150.81) (Ping timeout: 256 seconds) |
2022-01-26 00:35:31 +0100 | <EvanR> | is superfreak a superclass of freak or a subclass |
2022-01-26 00:36:28 +0100 | <geekosaur> | "yes" |
2022-01-26 00:37:03 +0100 | CHUD | (~CHUD@host-80-41-89-108.as13285.net) (Ping timeout: 256 seconds) |
2022-01-26 00:37:10 +0100 | <monochrom> | What does the Dilbert Substitutability Principle say? >:) |
2022-01-26 00:37:28 +0100 | <tomsmeding> | maerwald: isn't your go code wrong for lists of length 3? it does one pass with m=1 and i=0, i doesn't become 2 because 2 !< 3-2, then m doesn't become 2 because 2 !< 3-2, so it... exits, and never looked at the third element of the list? |
2022-01-26 00:38:01 +0100 | <Axman6> | tomsmeding: you could have stopped after the fifth word |
2022-01-26 00:38:49 +0100 | Alex_test | (~al_test@178.34.162.240) |
2022-01-26 00:38:50 +0100 | <tomsmeding> | Axman6: hm? |
2022-01-26 00:38:56 +0100 | <tomsmeding> | it's late here, have mercy |
2022-01-26 00:38:56 +0100 | CiaoSen | (~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 250 seconds) |
2022-01-26 00:38:59 +0100 | AlexZenon | (~alzenon@178.34.162.240) |
2022-01-26 00:39:04 +0100 | <monochrom> | "isn't your go code wrong" :) |
2022-01-26 00:39:07 +0100 | <Axman6> | "isn't your go code wrong" is usually true :P |
2022-01-26 00:39:34 +0100 | <tomsmeding> | I mean, I'm not a fan of go, but people occasionally write correct code in it :p |
2022-01-26 00:40:00 +0100 | <monochrom> | "isn't your code wrong" for language agnosticity :) |
2022-01-26 00:40:08 +0100 | <janus> | even "isn't _your_ go code" would usually be true :P |
2022-01-26 00:40:32 +0100 | <tomsmeding> | janus: now _that_ one is indeed accurate |
2022-01-26 00:40:54 +0100 | <monochrom> | Is this like a new version of "what does it mean to be a good person?" :) |
2022-01-26 00:40:59 +0100 | <geekosaur> | mine certainly would be (I don't know go, so…) |
2022-01-26 00:41:17 +0100 | <Axman6> | you can defer learning |
2022-01-26 00:43:11 +0100 | <geekosaur> | I'm in no hurry. if anything I want to poke at rust |
2022-01-26 00:46:31 +0100 | <monochrom> | Ugh so today's lesson is "don't mess with sorting algorithms"? Both attempts today prove to be incorrect... |
2022-01-26 00:46:52 +0100 | <geekosaur> | bobblesort :þ |
2022-01-26 00:48:29 +0100 | <tomsmeding> | SrPx: with a really cheap fix for the inconvenient-pivot issue (can certainly be done more efficiently), quacksort is now a little bit slower than Data.List.sort |
2022-01-26 00:48:47 +0100 | <tomsmeding> | but good news, my STArray based bottom-up mergesort is about twice as fast! (but not lazy) |
2022-01-26 00:49:08 +0100 | <SrPx> | ah STArray should really destroy any pure algo |
2022-01-26 00:49:12 +0100 | <SrPx> | how did you fix the pivot? |
2022-01-26 00:49:33 +0100 | <tomsmeding> | https://paste.tomsmeding.com/RVS64Lfd |
2022-01-26 00:49:38 +0100 | <Axman6> | would be interesting to compare to the discromination package's sorting stuff too |
2022-01-26 00:49:51 +0100 | <tomsmeding> | in a really ugly and inefficient way, feel free to improve :p |
2022-01-26 00:50:00 +0100 | <tomsmeding> | Axman6: feel free to incorporate, should be easy |
2022-01-26 00:50:04 +0100 | <tomsmeding> | I'm going to bed :p |
2022-01-26 00:50:32 +0100 | <Axman6> | %! cabal install discrimination |
2022-01-26 00:50:32 +0100 | <yahb> | Axman6: [Segmentation fault] |
2022-01-26 00:50:36 +0100 | <Axman6> | =) |
2022-01-26 00:50:42 +0100 | <tomsmeding> | lolwat |
2022-01-26 00:50:52 +0100 | tomsmeding | is afk |
2022-01-26 00:50:54 +0100 | Morrow | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) |
2022-01-26 00:53:07 +0100 | Morrow | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Read error: Connection reset by peer) |
2022-01-26 00:53:18 +0100 | Morrow | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) |
2022-01-26 00:54:47 +0100 | Morrow_ | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 268 seconds) |
2022-01-26 00:55:43 +0100 | lavaman | (~lavaman@98.38.249.169) |
2022-01-26 00:55:50 +0100 | jespada | (~jespada@87.74.36.188) (Ping timeout: 250 seconds) |
2022-01-26 00:57:22 +0100 | jespada | (~jespada@87.74.36.188) |
2022-01-26 00:57:57 +0100 | soxen | (~bob@pool-173-54-217-168.nwrknj.fios.verizon.net) (Ping timeout: 240 seconds) |
2022-01-26 00:59:54 +0100 | <SrPx> | tomsmeding: idk I think if we go the ST route we are kinda giving up on the essence of haskell |
2022-01-26 00:59:56 +0100 | <SrPx> | i like purity |
2022-01-26 01:00:17 +0100 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) |
2022-01-26 01:02:29 +0100 | <dsal> | ST is awesome. |
2022-01-26 01:03:25 +0100 | <hpc> | purity is just a convenient side-effect of first-class IO :P |
2022-01-26 01:03:59 +0100 | <SrPx> | not sure I agree, I'd rather maintain a mutable mergesort in Rust than how it looks like in Haskell, for example |
2022-01-26 01:04:13 +0100 | <SrPx> | but for pure algorithms, Haskell is just lightyears ahead |
2022-01-26 01:04:17 +0100 | <SrPx> | but I guess it is a matter of taste |
2022-01-26 01:04:32 +0100 | little_mac | (~little_ma@2601:410:4300:3ce0:88e2:d81e:ca89:4a84) (Remote host closed the connection) |
2022-01-26 01:04:44 +0100 | <hpc> | SrPx: that was mostly a joke |
2022-01-26 01:05:06 +0100 | <hpc> | but i quite like being able to throw IO actions around without having to do goofy () -> whatever functions |
2022-01-26 01:05:16 +0100 | <SrPx> | I meant that I don't agree ST is so awesome |
2022-01-26 01:05:22 +0100 | <hpc> | oh, yeah |
2022-01-26 01:05:26 +0100 | <EvanR> | SrPx, ST is a pure computation |
2022-01-26 01:05:28 +0100 | <SrPx> | interestingly I do agree with what you said |
2022-01-26 01:05:34 +0100 | little_mac | (~little_ma@2601:410:4300:3ce0:e0d9:54a6:eecc:ef77) |
2022-01-26 01:05:40 +0100 | <hpc> | hah |
2022-01-26 01:05:49 +0100 | Erutuon | (~Erutuon@user/erutuon) (Ping timeout: 240 seconds) |
2022-01-26 01:05:55 +0100 | <SrPx> | EvanR: it is a pure computation wrapped in 7 layers of obtuse abstractions |
2022-01-26 01:05:59 +0100 | <hpc> | SrPx: try this one on for size, haskell is my favorite imperative language and perl is my favorite functional language |
2022-01-26 01:06:07 +0100 | <SrPx> | to represent an impure computation |
2022-01-26 01:06:11 +0100 | <EvanR> | don't look at how many layers everything else has |
2022-01-26 01:06:27 +0100 | <EvanR> | we want our layers to be air tight, which ST is |
2022-01-26 01:06:34 +0100 | <EvanR> | like everything else pure here |
2022-01-26 01:07:00 +0100 | <SrPx> | I look at the code. The code is just ugly. The kind of thing I'd rather touch than work with in my career |
2022-01-26 01:07:16 +0100 | <SrPx> | perhaps my experience is affected by when I *had* to mess with ST a lot, a few years ago |
2022-01-26 01:07:21 +0100 | <SrPx> | things might be way better by now |
2022-01-26 01:07:52 +0100 | <EvanR> | giving someone, or yourself in the future, a pure function that you can just use and works, even if it uses impurity behind the scenes, is good |
2022-01-26 01:08:10 +0100 | <EvanR> | otoh if someone or yourself in the future has to work on the insides for whatever reason, not so good |
2022-01-26 01:08:19 +0100 | <EvanR> | but that's another story |
2022-01-26 01:08:58 +0100 | <EvanR> | putting lego bricks together to make stuff is fun, messing with molten thermoplastic that lego bricks come from, not so great |
2022-01-26 01:09:03 +0100 | Erutuon | (~Erutuon@user/erutuon) |
2022-01-26 01:10:22 +0100 | <dsal> | It's still a container that has specific rules you know things about. |
2022-01-26 01:10:25 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::ee17) (Remote host closed the connection) |
2022-01-26 01:12:40 +0100 | <SrPx> | hmmmm |
2022-01-26 01:13:21 +0100 | <EvanR> | an ST value is a container? 🤔 |
2022-01-26 01:13:33 +0100 | <geekosaur> | tomsmeding, I just realized that what I gave you will malfunction at the end of a line, although you may not care. /foo($|[^.]|\.($|[^c]|c($|[^o]|o($|[^m]))))/i *now* it's ugly :) |
2022-01-26 01:13:53 +0100 | <geekosaur> | an ST computation is a container |
2022-01-26 01:13:53 +0100 | <hololeap> | something else to note is that ST is a monad and you can run pure code in it just like you can with IO or anything else |
2022-01-26 01:14:27 +0100 | <geekosaur> | within which you can use impurity as long as you don't let it leak out, and the container prevents you from making such leaks |
2022-01-26 01:14:45 +0100 | <EvanR> | interesting take on the containing |
2022-01-26 01:14:53 +0100 | <dolio> | ST is a way of calculating a pure result with an impure method, with a mechanism for ensuring that the impurity is localized. It's not just a pure representation of an impure method like IO. |
2022-01-26 01:14:56 +0100 | <EvanR> | it doesn't contain a result, it contains the state thread |
2022-01-26 01:15:07 +0100 | <geekosaur> | that's more or less what "state thread" means |
2022-01-26 01:15:31 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::ee17) |
2022-01-26 01:15:38 +0100 | ChaiTRex | (~ChaiTRex@user/chaitrex) (Remote host closed the connection) |
2022-01-26 01:15:54 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2022-01-26 01:16:03 +0100 | ChaiTRex | (~ChaiTRex@user/chaitrex) |
2022-01-26 01:16:36 +0100 | <geekosaur> | once upon a time I had a script to work those regexes for me since it's pretty mechanical… then came pcre |
2022-01-26 01:16:37 +0100 | <EvanR> | containing in the sense of imprisoning something |
2022-01-26 01:17:26 +0100 | <EvanR> | where as containers package is about eventually letting the things out |
2022-01-26 01:17:48 +0100 | <geekosaur> | well, you are letting something out. just not the impurity with it |
2022-01-26 01:17:52 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::ee17) (Remote host closed the connection) |
2022-01-26 01:23:32 +0100 | <geekosaur> | (ironically it was a perl script. perl was around for a while before pcre appeared) |
2022-01-26 01:24:02 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2022-01-26 01:25:56 +0100 | Morrow_ | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) |
2022-01-26 01:27:28 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::ee17) |
2022-01-26 01:28:20 +0100 | Morrow | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 250 seconds) |
2022-01-26 01:28:57 +0100 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds) |
2022-01-26 01:28:57 +0100 | haskellberryfinn | (~nut@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 240 seconds) |
2022-01-26 01:30:00 +0100 | Morrow | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) |
2022-01-26 01:30:40 +0100 | CHUD | (~CHUD@host-80-41-89-108.as13285.net) |
2022-01-26 01:32:00 +0100 | ix | (~ix@2a02:8010:674f:0:cda6:d05:f0d7:4922) (Remote host closed the connection) |
2022-01-26 01:32:09 +0100 | ix | (~ix@2a02:8010:674f:0:cda6:d05:f0d7:4922) |
2022-01-26 01:32:18 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::ee17) (Remote host closed the connection) |
2022-01-26 01:32:47 +0100 | Morrow_ | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 256 seconds) |
2022-01-26 01:33:39 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::ee17) |
2022-01-26 01:37:52 +0100 | Gurkenglas | (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 250 seconds) |
2022-01-26 01:38:25 +0100 | lavaman | (~lavaman@98.38.249.169) |
2022-01-26 01:38:28 +0100 | Swahili | (~Swahili@a95-94-208-187.cpe.netcabo.pt) |
2022-01-26 01:38:42 +0100 | dsrt^ | (~dsrt@96-86-240-178-static.hfc.comcastbusiness.net) |
2022-01-26 01:41:04 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::ee17) (Remote host closed the connection) |
2022-01-26 01:41:41 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:7175:fef6:491:2dba) (Remote host closed the connection) |
2022-01-26 01:41:52 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:7175:fef6:491:2dba) |
2022-01-26 01:42:13 +0100 | CHUD | (~CHUD@host-80-41-89-108.as13285.net) (Ping timeout: 256 seconds) |
2022-01-26 01:43:45 +0100 | justsomeguy | (~justsomeg@user/justsomeguy) |
2022-01-26 01:44:22 +0100 | joo-_ | (~joo-_@fsf/member/joo--) (Ping timeout: 250 seconds) |
2022-01-26 01:45:57 +0100 | Erutuon | (~Erutuon@user/erutuon) (Ping timeout: 240 seconds) |
2022-01-26 01:46:15 +0100 | joo-_ | (~joo-_@80-62-116-31-mobile.dk.customer.tdc.net) |
2022-01-26 01:48:18 +0100 | Midjak | (~Midjak@may53-1-78-226-116-92.fbx.proxad.net) (Quit: This computer has gone to sleep) |
2022-01-26 01:48:29 +0100 | romesrf | (~romes@44.190.189.46.rev.vodafone.pt) |
2022-01-26 01:48:57 +0100 | <romesrf> | hey everyone |
2022-01-26 01:48:57 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 240 seconds) |
2022-01-26 01:49:59 +0100 | <geekosaur> | o/ |
2022-01-26 01:51:00 +0100 | Guest44 | (~Guest44@44.190.189.46.rev.vodafone.pt) |
2022-01-26 01:52:11 +0100 | <monochrom> | ST is like a space telescope that shields noisy infrared from desired infrared signals... >:) |
2022-01-26 01:52:33 +0100 | Gurkenglas | (~Gurkengla@dslb-090-186-104-244.090.186.pools.vodafone-ip.de) |
2022-01-26 01:52:52 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::ee17) |
2022-01-26 01:53:05 +0100 | <geekosaur> | are st tutorials the new monad tutorials? |
2022-01-26 01:53:11 +0100 | <romesrf> | AHA |
2022-01-26 01:53:41 +0100 | <romesrf> | it'd be good because i haven't gotten into the ST yet, though i do have simon's paper waiting on my bedside table |
2022-01-26 01:53:53 +0100 | <monochrom> | You also have to unfold it like you unwrap a burrito! |
2022-01-26 01:55:25 +0100 | <romesrf> | it's funny i really like burritos but i can't like that <<<<<<analogy>>>>>> |
2022-01-26 01:55:44 +0100 | <monochrom> | It's OK, I'm joking :) |
2022-01-26 01:56:12 +0100 | <romesrf> | i know ;) |
2022-01-26 01:56:19 +0100 | <geekosaur> | late nite on #haskell þ |
2022-01-26 01:56:49 +0100 | <geekosaur> | (well, early night but it feels late to me because I got up several hours earlier than I ought've) |
2022-01-26 02:01:20 +0100 | cyphase | (~cyphase@user/cyphase) |
2022-01-26 02:02:40 +0100 | alt-romes | (~romes@44.190.189.46.rev.vodafone.pt) |
2022-01-26 02:04:19 +0100 | Guest44 | (~Guest44@44.190.189.46.rev.vodafone.pt) (Ping timeout: 256 seconds) |
2022-01-26 02:04:44 +0100 | romesrf | (~romes@44.190.189.46.rev.vodafone.pt) (Ping timeout: 250 seconds) |
2022-01-26 02:08:18 +0100 | mvk | (~mvk@2607:fea8:5cdc:bf00::a2bf) |
2022-01-26 02:09:30 +0100 | Gurkenglas | (~Gurkengla@dslb-090-186-104-244.090.186.pools.vodafone-ip.de) (Ping timeout: 250 seconds) |
2022-01-26 02:10:26 +0100 | alt-romes | (~romes@44.190.189.46.rev.vodafone.pt) (Quit: WeeChat 3.4) |
2022-01-26 02:11:15 +0100 | alp | (~alp@user/alp) (Ping timeout: 268 seconds) |
2022-01-26 02:11:42 +0100 | albet70 | (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection) |
2022-01-26 02:12:32 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 240 seconds) |
2022-01-26 02:14:53 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) |
2022-01-26 02:15:37 +0100 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) |
2022-01-26 02:15:48 +0100 | Erutuon | (~Erutuon@user/erutuon) |
2022-01-26 02:16:37 +0100 | CHUD | (~CHUD@host-80-41-89-108.as13285.net) |
2022-01-26 02:17:48 +0100 | albet70 | (~xxx@2400:8902::f03c:92ff:fe60:98d8) |
2022-01-26 02:21:09 +0100 | <dsal> | EvanR: Yeah, I didn't even think of container as "bucket" as much as "containment." Words are weird. |
2022-01-26 02:23:00 +0100 | xsperry | (~xs@user/xsperry) |
2022-01-26 02:25:04 +0100 | cynomys | (~cynomys@user/cynomys) |
2022-01-26 02:27:01 +0100 | xkuru | (~xkuru@user/xkuru) (Read error: Connection reset by peer) |
2022-01-26 02:27:08 +0100 | <int-e> | The burrito analogy is still brilliant... because it kind of works and I suspect there's pretty unanimous agreement that it fails to capture the essence of monads :P |
2022-01-26 02:28:38 +0100 | <int-e> | (burritos are just leaky containers :-P) |
2022-01-26 02:29:27 +0100 | mcgroin | (~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 256 seconds) |
2022-01-26 02:32:33 +0100 | vysn | (~vysn@user/vysn) |
2022-01-26 02:33:04 +0100 | lispy | (~lispy4@84.69.59.93) |
2022-01-26 02:33:17 +0100 | wombat875 | (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) (Quit: WeeChat 2.2-dev) |
2022-01-26 02:35:37 +0100 | xsperry | (~xs@user/xsperry) (Ping timeout: 240 seconds) |
2022-01-26 02:36:29 +0100 | <remexre> | is there something for reformatting deriving-Show'd values to have "friendlier" whitespace? |
2022-01-26 02:39:03 +0100 | <ephemient> | @hackage pretty-simple |
2022-01-26 02:39:03 +0100 | <lambdabot> | https://hackage.haskell.org/package/pretty-simple |
2022-01-26 02:39:49 +0100 | <remexre> | thanks! |
2022-01-26 02:40:37 +0100 | n3rdy1 | (~n3rdy1@2600:1700:4570:3480:1b88:50f:dae0:9293) (Ping timeout: 240 seconds) |
2022-01-26 02:41:21 +0100 | yauhsien | (~yauhsien@61-231-17-3.dynamic-ip.hinet.net) |
2022-01-26 02:43:29 +0100 | xsperry | (~xs@user/xsperry) |
2022-01-26 02:44:10 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::ee17) (Remote host closed the connection) |
2022-01-26 02:45:06 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::ee17) |
2022-01-26 02:45:10 +0100 | lbseale | (~ep1ctetus@user/ep1ctetus) |
2022-01-26 02:47:38 +0100 | <sm> | or |
2022-01-26 02:47:38 +0100 | <sm> | @hackage pretty-show |
2022-01-26 02:47:38 +0100 | <lambdabot> | https://hackage.haskell.org/package/pretty-show |
2022-01-26 02:47:42 +0100 | FroskyArr | (~froskyarr@120.239.9.244) |
2022-01-26 02:49:20 +0100 | zaquest | (~notzaques@5.130.79.72) (Remote host closed the connection) |
2022-01-26 02:50:58 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) |
2022-01-26 02:50:58 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
2022-01-26 02:50:58 +0100 | wroathe | (~wroathe@user/wroathe) |
2022-01-26 02:54:22 +0100 | zaquest | (~notzaques@5.130.79.72) |
2022-01-26 02:55:40 +0100 | whatsupdoc | (uid509081@id-509081.hampstead.irccloud.com) |
2022-01-26 02:58:32 +0100 | xsperry | (~xs@user/xsperry) (Ping timeout: 240 seconds) |
2022-01-26 03:00:44 +0100 | lbseale | (~ep1ctetus@user/ep1ctetus) (Read error: Connection reset by peer) |
2022-01-26 03:01:41 +0100 | mmhat | (~mmh@55d40230.access.ecotel.net) (Quit: WeeChat 3.4) |
2022-01-26 03:01:58 +0100 | ec | (~ec@gateway/tor-sasl/ec) |
2022-01-26 03:09:49 +0100 | deadmarshal | (~deadmarsh@95.38.116.147) |
2022-01-26 03:12:37 +0100 | werneta | (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 240 seconds) |
2022-01-26 03:14:13 +0100 | deadmarshal | (~deadmarsh@95.38.116.147) (Ping timeout: 256 seconds) |
2022-01-26 03:14:35 +0100 | werneta | (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) |
2022-01-26 03:20:41 +0100 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.4) |
2022-01-26 03:20:57 +0100 | neurocyte0917090 | (~neurocyte@user/neurocyte) (Ping timeout: 240 seconds) |
2022-01-26 03:21:37 +0100 | xff0x | (~xff0x@2001:1a81:53ac:af00:ba25:4d71:4d47:a3a5) (Ping timeout: 240 seconds) |
2022-01-26 03:21:54 +0100 | <pfurla-matrix> | Does anybody recalls what is the Java/JVM equivalent of MVar? |
2022-01-26 03:22:53 +0100 | x88x88x | (~x88x88x@149.28.53.172) (Read error: Connection reset by peer) |
2022-01-26 03:23:05 +0100 | CHUD | (~CHUD@host-80-41-89-108.as13285.net) (Ping timeout: 256 seconds) |
2022-01-26 03:23:14 +0100 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) |
2022-01-26 03:23:27 +0100 | <monochrom> | The "synchronized" reserved word. |
2022-01-26 03:23:52 +0100 | xff0x | (~xff0x@2001:1a81:53ec:e00:db2b:9281:840d:9e3c) |
2022-01-26 03:24:06 +0100 | <monochrom> | OK, there may be something in the library that's closer, but I bet they are based upon "synchronized". |
2022-01-26 03:24:23 +0100 | xsperry | (~xs@user/xsperry) |
2022-01-26 03:24:33 +0100 | ec | (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
2022-01-26 03:25:13 +0100 | <monochrom> | Well, "synchronized" and the "wait()" method. |
2022-01-26 03:25:46 +0100 | Guest|redshift1 | (~Guest|red@165.16.48.46) |
2022-01-26 03:26:13 +0100 | soft | (~soft@2001:470:69fc:105::c75) (Quit: Client limit exceeded: 20000) |
2022-01-26 03:27:43 +0100 | ec | (~ec@gateway/tor-sasl/ec) |
2022-01-26 03:29:53 +0100 | <pfurla-matrix> | yeah, I could do that, but I was hoping something would take care of the synchronized for me already |
2022-01-26 03:30:57 +0100 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) |
2022-01-26 03:32:52 +0100 | SummerSonw | (~The_viole@203.77.49.232) |
2022-01-26 03:37:58 +0100 | ensyde | (~ensyde@2600:1700:2050:1040:6816:2795:9c3:9492) (Read error: Connection reset by peer) |
2022-01-26 03:41:07 +0100 | <int-e> | pfurla-matrix: http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/Slot.html rather suggests that there's nothing doing that directly in the standard library |
2022-01-26 03:41:20 +0100 | soft | (~soft@2001:470:69fc:105::c75) |
2022-01-26 03:43:07 +0100 | <int-e> | and yeah, having language blessed re-entrant monitors built in goes a long way towards explaining that. |
2022-01-26 03:43:32 +0100 | yauhsien | (~yauhsien@61-231-17-3.dynamic-ip.hinet.net) (Ping timeout: 240 seconds) |
2022-01-26 03:49:36 +0100 | <sm> | \o/! Someone other than me recommended HTAC. |
2022-01-26 03:49:36 +0100 | <sm> | https://www.reddit.com/r/haskell/comments/sc41tj/learn_haskell_by_doing/hu5x46p |
2022-01-26 03:54:51 +0100 | califax- | (~califax@user/califx) |
2022-01-26 03:57:22 +0100 | Guest|redshift1 | (~Guest|red@165.16.48.46) (Quit: Connection closed) |
2022-01-26 03:58:21 +0100 | califax | (~califax@user/califx) (Ping timeout: 276 seconds) |
2022-01-26 03:58:21 +0100 | califax- | califax |
2022-01-26 04:00:07 +0100 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds) |
2022-01-26 04:08:05 +0100 | <ephemient> | pfurla-matrix: BlockingQueue of size 1? |
2022-01-26 04:08:42 +0100 | <pfurla-matrix> | ephemient: yeah, that's a good one, I might end up doing exactly that |
2022-01-26 04:08:45 +0100 | ec | (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
2022-01-26 04:14:16 +0100 | Swahili | (~Swahili@a95-94-208-187.cpe.netcabo.pt) (Remote host closed the connection) |
2022-01-26 04:14:17 +0100 | td_ | (~td@muedsl-82-207-238-208.citykom.de) (Ping timeout: 256 seconds) |
2022-01-26 04:15:55 +0100 | td_ | (~td@94.134.91.245) |
2022-01-26 04:18:53 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::ee17) (Remote host closed the connection) |
2022-01-26 04:35:09 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::ee17) |
2022-01-26 04:39:17 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::ee17) (Ping timeout: 240 seconds) |
2022-01-26 04:39:31 +0100 | Adran | (~adran@botters/adran) (Quit: Este é o fim.) |
2022-01-26 04:40:36 +0100 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 276 seconds) |
2022-01-26 04:41:08 +0100 | zebrag | (~chris@user/zebrag) |
2022-01-26 04:41:29 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::ee17) |
2022-01-26 04:41:33 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::ee17) (Remote host closed the connection) |
2022-01-26 04:42:01 +0100 | terrorjack | (~terrorjac@2a01:4f8:1c1e:509a::1) (Quit: The Lounge - https://thelounge.chat) |
2022-01-26 04:42:05 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::ee17) |
2022-01-26 04:42:37 +0100 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) |
2022-01-26 04:43:14 +0100 | terrorjack | (~terrorjac@2a01:4f8:1c1e:509a::1) |
2022-01-26 04:43:39 +0100 | zebrag | (~chris@user/zebrag) (Client Quit) |
2022-01-26 04:46:17 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::ee17) (Ping timeout: 240 seconds) |
2022-01-26 04:46:54 +0100 | Adran | (adran@botters/adran) |
2022-01-26 04:51:08 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 250 seconds) |
2022-01-26 04:53:10 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) |
2022-01-26 05:01:02 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 240 seconds) |
2022-01-26 05:01:07 +0100 | yauhsien | (~yauhsien@61-231-17-3.dynamic-ip.hinet.net) |
2022-01-26 05:04:08 +0100 | geranim0 | (~geranim0@d-132-204-221-88.res.umontreal.ca) |
2022-01-26 05:05:17 +0100 | yauhsien | (~yauhsien@61-231-17-3.dynamic-ip.hinet.net) (Ping timeout: 240 seconds) |
2022-01-26 05:08:24 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) |
2022-01-26 05:08:24 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
2022-01-26 05:08:24 +0100 | wroathe | (~wroathe@user/wroathe) |
2022-01-26 05:10:35 +0100 | <justsomeguy> | So, I was asking myself "How do you measure the complexity of an expression in the pure lambda calculus?", and came across some versions of the lambda calculus that have explicit rules about how to perform reductions, using rewrite rules, and also sometimes using annotations for when to share results of sub-expressions. Has anyone else recently looked into this stuff -- what do you think? |
2022-01-26 05:11:31 +0100 | <justsomeguy> | (I don't really understand the subject, as you can tell, but I think the question is interesting, and it's neat to see so many approaches to coming up with and answer.) |
2022-01-26 05:13:43 +0100 | <justsomeguy> | I mean, maybe I doesn't even make sense to ask how to measure a lambda expression unless I'm talking about a particular implementation of the lambda calculus. |
2022-01-26 05:14:11 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::ee17) |
2022-01-26 05:14:35 +0100 | justsomeguy | brushes aside his half-baked theory questions and goes back to debugging his crummy hangman game. |
2022-01-26 05:15:57 +0100 | waleee | (~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4) (Ping timeout: 240 seconds) |
2022-01-26 05:16:17 +0100 | ralu | (~ralu@static.211.245.203.116.clients.your-server.de) (Ping timeout: 240 seconds) |
2022-01-26 05:18:32 +0100 | dolio | (~dolio@130.44.130.54) (Quit: ZNC 1.8.2 - https://znc.in) |
2022-01-26 05:18:57 +0100 | SummerSonw | (~The_viole@203.77.49.232) (Ping timeout: 240 seconds) |
2022-01-26 05:20:12 +0100 | ralu | (~ralu@static.211.245.203.116.clients.your-server.de) |
2022-01-26 05:21:17 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 240 seconds) |
2022-01-26 05:21:28 +0100 | <c_wraith> | there is some sort of notion of "steps required to reduce" |
2022-01-26 05:21:41 +0100 | <c_wraith> | There's even theory on minimizing that - optimal evaluation. |
2022-01-26 05:22:11 +0100 | <c_wraith> | (it turns out optimal evaluation isn't really optimal for computers most of the time - it's too expensive to figure out what the optimal approach is) |
2022-01-26 05:25:54 +0100 | <davean> | Just doing it can be better than doing it well |
2022-01-26 05:25:58 +0100 | dolio | (~dolio@130.44.130.54) |
2022-01-26 05:25:58 +0100 | img | (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in) |
2022-01-26 05:26:16 +0100 | img | (~img@user/img) |
2022-01-26 05:27:23 +0100 | shriekingnoise | (~shrieking@201.231.16.156) (Ping timeout: 256 seconds) |
2022-01-26 05:29:29 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) |
2022-01-26 05:29:29 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
2022-01-26 05:29:29 +0100 | wroathe | (~wroathe@user/wroathe) |
2022-01-26 05:30:40 +0100 | Jing | (~hedgehog@240e:390:7c53:a7e1:b574:732d:3b12:8f10) |
2022-01-26 05:32:17 +0100 | mvk | (~mvk@2607:fea8:5cdc:bf00::a2bf) (Ping timeout: 240 seconds) |
2022-01-26 05:32:42 +0100 | <justsomeguy> | I came across two cool resources... Someone linked to Barry Jay's Closure Calculus. There is also https://researchportal.bath.ac.uk/en/projects/typed-lambda-calculi-with-sharing-and-unsharing. I tried to summarize them, but realized I don't understand them well enought to do that. |
2022-01-26 05:34:11 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 256 seconds) |
2022-01-26 05:34:29 +0100 | little_mac | (~little_ma@2601:410:4300:3ce0:e0d9:54a6:eecc:ef77) (Remote host closed the connection) |
2022-01-26 05:35:31 +0100 | little_mac | (~little_ma@2601:410:4300:3ce0:dc0a:b5a8:5147:7a4f) |
2022-01-26 05:39:48 +0100 | deadmarshal | (~deadmarsh@95.38.116.147) |
2022-01-26 05:42:46 +0100 | shriekingnoise | (~shrieking@201.231.16.156) |
2022-01-26 05:43:09 +0100 | dut | (~dut@user/dut) |
2022-01-26 05:46:57 +0100 | Erutuon | (~Erutuon@user/erutuon) (Ping timeout: 240 seconds) |
2022-01-26 05:48:28 +0100 | SummerSonw | (~The_viole@203.77.49.232) |
2022-01-26 05:49:35 +0100 | PigDude | (~PigDude@159.203.16.199) () |
2022-01-26 05:50:41 +0100 | <dsal> | Trying out copilot. It wrote this function for me: `sortStringsByNumber = sortBy (compare `on` (read . head . words))` |
2022-01-26 05:52:07 +0100 | shailangsa | (~shailangs@host86-185-98-37.range86-185.btcentralplus.com) (Ping timeout: 256 seconds) |
2022-01-26 05:53:32 +0100 | SummerSonw | (~The_viole@203.77.49.232) (Ping timeout: 250 seconds) |
2022-01-26 05:56:41 +0100 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) |
2022-01-26 05:57:43 +0100 | <dsal> | I typed `doesThisHalt` and it just spat out a solution to the halting problem: https://www.irccloud.com/pastebin/CnZCMWic/halting.hs |
2022-01-26 05:57:56 +0100 | <ephemient> | sortOn f is supposedly better than sortBy (comparing f), isn't it? at least the docs say it has better performance |
2022-01-26 05:59:09 +0100 | <int-e> | ephemient: it depends on whether f is cheap or expensive and a bit on how big the results of f are |
2022-01-26 05:59:32 +0100 | <int-e> | (since sortOn will store those results while the list is being sorted) |
2022-01-26 06:00:47 +0100 | p3n | (~p3n@217.198.124.246) (Quit: ZNC 1.8.2 - https://znc.in) |
2022-01-26 06:01:03 +0100 | p3n | (~p3n@2a00:19a0:3:7c:0:d9c6:7cf6:1) |
2022-01-26 06:04:10 +0100 | <g> | sortBy (comparing snd) would be better than sortOn snd |
2022-01-26 06:04:21 +0100 | vysn | (~vysn@user/vysn) (Ping timeout: 268 seconds) |
2022-01-26 06:04:26 +0100 | <g> | Or any other record selector, for example |
2022-01-26 06:09:01 +0100 | bontaq | (~user@ool-45779fe5.dyn.optonline.net) (Ping timeout: 240 seconds) |
2022-01-26 06:09:34 +0100 | vglfr | (~vglfr@46.96.147.122) (Ping timeout: 250 seconds) |
2022-01-26 06:11:08 +0100 | <ephemient> | sure. I expect sortOn is defined as something like map fst . sortBy (comparing snd) . map (id &&& f) so if sortOn snd were better than sortBy (comparing snd), it would be better to replace that, and again, and again… which would be absurd |
2022-01-26 06:11:37 +0100 | geranim0 | (~geranim0@d-132-204-221-88.res.umontreal.ca) (Ping timeout: 240 seconds) |
2022-01-26 06:12:11 +0100 | <ephemient> | but in the case of f = read . head . words that copilot learned from somewhere, which would that be? |
2022-01-26 06:12:23 +0100 | <ephemient> | although I guess that might require benchmarking to determine |
2022-01-26 06:13:20 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) |
2022-01-26 06:13:20 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
2022-01-26 06:13:20 +0100 | wroathe | (~wroathe@user/wroathe) |
2022-01-26 06:13:40 +0100 | <ephemient> | that `doesThisHalt` is… curious. what kind of code did copilot learn that from |
2022-01-26 06:17:03 +0100 | lionhairdino | (~jacoo@121.131.39.82) |
2022-01-26 06:17:57 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 240 seconds) |
2022-01-26 06:18:37 +0100 | <dsal> | It's interesting because it like, does something, I just don't know where `halt` comes from. My first attempt to solve the halting problem, I let it create the signature which it decided should be `:: [Int] -> Bool` and then the implementation was `doesThisHalt xs = (length xs) == (length $ filter (==0) xs)` |
2022-01-26 06:25:24 +0100 | <int-e> | does extended exposure to copilot lead to brain damage? |
2022-01-26 06:25:54 +0100 | <int-e> | (these examples are pretty painful) |
2022-01-26 06:27:15 +0100 | <dsal> | Haha. Yeah. The examples so far have been pretty terrible. |
2022-01-26 06:28:05 +0100 | Erutuon | (~Erutuon@user/erutuon) |
2022-01-26 06:30:17 +0100 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds) |
2022-01-26 06:33:59 +0100 | <monochrom> | Wait, does copilot guess from your meaningful function names? |
2022-01-26 06:34:25 +0100 | <monochrom> | Is it like a marriage of GPT3 and genetic algorithms? >:) |
2022-01-26 06:35:07 +0100 | <monochrom> | Does it understand "awesomeHaskellCompiler"? >:) |
2022-01-26 06:35:09 +0100 | shailangsa | (~shailangs@host86-185-98-37.range86-185.btcentralplus.com) |
2022-01-26 06:40:40 +0100 | <dsal> | monochrom: I don't think it thinks that's supposed to do something: `awesomeHaskellCompiler :: Compiler` |
2022-01-26 06:41:11 +0100 | <int-e> | gruesomeHaskellCompiler (short... ah let's just leave it at the long version) |
2022-01-26 06:41:41 +0100 | <dsal> | I changed it to a verb: https://www.irccloud.com/pastebin/oFaoUzPE/compile.hs |
2022-01-26 06:42:24 +0100 | <EvanR> | it is pitch black |
2022-01-26 06:42:34 +0100 | <monochrom> | Haha wait am I seeing it outsourcing the job to ghc? |
2022-01-26 06:42:34 +0100 | <EvanR> | you've been eaten by a gruesome haskell compiler |
2022-01-26 06:42:55 +0100 | <dsal> | monochrom: Yeah, kind of cheating. |
2022-01-26 06:42:59 +0100 | <monochrom> | This is smarter than most students :) |
2022-01-26 06:43:02 +0100 | <dsal> | That's not the kind of cheating I'm trying to do. |
2022-01-26 06:44:05 +0100 | <monochrom> | Sad to say it understands ExceptT and System.Process better than most querents in this channel! |
2022-01-26 06:44:06 +0100 | <int-e> | dsal: what do you want? `compileHaskellCode _ = let _ = "todo" in fix error` |
2022-01-26 06:44:55 +0100 | <dsal> | I wanted it to write hugs. |
2022-01-26 06:46:00 +0100 | <int-e> | hugs are incompatible with current social distancing rules |
2022-01-26 06:46:28 +0100 | <monochrom> | haha |
2022-01-26 06:46:33 +0100 | <dsal> | I asked it to write me a function called "fixedPointOfFunction" and it came up with `fixedPointOfFunction :: (a -> a) -> a -> a; fixedPointOfFunction f x = let x' = f x in if x' == x then x' else fixedPointOfFunction f x'` |
2022-01-26 06:47:21 +0100 | wyrd | (~wyrd@gateway/tor-sasl/wyrd) (Ping timeout: 276 seconds) |
2022-01-26 06:53:58 +0100 | wyrd | (~wyrd@gateway/tor-sasl/wyrd) |
2022-01-26 06:54:07 +0100 | <monochrom> | That's not bad in the sense of fixed points in real analysis. |
2022-01-26 06:54:50 +0100 | <int-e> | I have written that code, sans the overly polymorphic signature |
2022-01-26 06:54:57 +0100 | cheater | (~Username@user/cheater) (Ping timeout: 240 seconds) |
2022-01-26 06:56:43 +0100 | <int-e> | and possibly cosmetic differences, including relying on ghc's opportunistic CSE: stabilize f x | x == f x = x | otherwise = stabilize f (f x) |
2022-01-26 06:58:06 +0100 | little_mac | (~little_ma@2601:410:4300:3ce0:dc0a:b5a8:5147:7a4f) (Remote host closed the connection) |
2022-01-26 06:59:45 +0100 | ishutin | (~ishutin@84-236-1-73.pool.digikabel.hu) (Ping timeout: 256 seconds) |
2022-01-26 07:01:20 +0100 | ishutin | (~ishutin@87-97-82-177.pool.digikabel.hu) |
2022-01-26 07:01:55 +0100 | Morrow_ | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) |
2022-01-26 07:02:26 +0100 | Erutuon | (~Erutuon@user/erutuon) (Ping timeout: 250 seconds) |
2022-01-26 07:04:17 +0100 | Morrow | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 256 seconds) |
2022-01-26 07:04:53 +0100 | <xerox> | :t let g f x = maybe x (g f) (f x) in g -- reminds me of this |
2022-01-26 07:04:54 +0100 | <lambdabot> | (a -> Maybe a) -> a -> a |
2022-01-26 07:05:14 +0100 | Morrow | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) |
2022-01-26 07:05:20 +0100 | Erutuon | (~Erutuon@user/erutuon) |
2022-01-26 07:05:48 +0100 | Morrow_ | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Read error: Connection reset by peer) |
2022-01-26 07:06:05 +0100 | Morrow_ | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) |
2022-01-26 07:06:34 +0100 | bliminse_ | (~bliminse@host86-188-36-166.range86-188.btcentralplus.com) |
2022-01-26 07:06:45 +0100 | <ephemient> | > let fix f x = y where ys = iterate f x; (y, _):_ = dropWhile (uncurry (/=)) $ zip ys (tail ys) in fix cos 0 -- I vaguely remember something like this happening the other day but don't remember context |
2022-01-26 07:06:46 +0100 | <lambdabot> | 0.7390851332151607 |
2022-01-26 07:06:55 +0100 | bliminse | (~bliminse@host86-188-36-178.range86-188.btcentralplus.com) (Ping timeout: 256 seconds) |
2022-01-26 07:09:17 +0100 | Morrow | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 240 seconds) |
2022-01-26 07:11:38 +0100 | <dsal> | GHCI doesn't bring symbols from :{ into scope. Is this normal or am I doing something wrong (other than trying to use :{) ? |
2022-01-26 07:12:32 +0100 | <monochrom> | Works for me. |
2022-01-26 07:12:37 +0100 | Morrow_ | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 240 seconds) |
2022-01-26 07:12:57 +0100 | <monochrom> | I entered "f x = x + 1" and "g x = f x + 1" between :{ and :} |
2022-01-26 07:13:12 +0100 | <monochrom> | Outside, f 4 and g 4 give expected answers. |
2022-01-26 07:13:48 +0100 | <dsal> | This ghci is kind of mangled for various reasons. Oh, I have more than one computer. This is the one that has the broken readline thing as well. |
2022-01-26 07:14:28 +0100 | <monochrom> | That's one more moving parts thrown into the wrench or some mixed up metaphor, yeah. :) |
2022-01-26 07:16:08 +0100 | <dsal> | The ghci from ghcup works. |
2022-01-26 07:16:37 +0100 | Morrow | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) |
2022-01-26 07:17:06 +0100 | cheater | (~Username@user/cheater) |
2022-01-26 07:24:49 +0100 | <dsal> | I'm confused by this data-fix hylomorphism. How does one use this? `:: Functor f => (f b -> b) -> (a -> f a) -> a -> b` |
2022-01-26 07:25:24 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 250 seconds) |
2022-01-26 07:26:18 +0100 | <dsal> | It's supposed to be "anamorphism followed by catamorphism" so I guess the first function is the catamorphism and the second is the anamorphism. But it looks like a ~ b. |
2022-01-26 07:27:24 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) |
2022-01-26 07:28:26 +0100 | emf | (~emf@2620:10d:c090:400::5:fe1a) |
2022-01-26 07:29:25 +0100 | <dsal> | That's the same signature recursion-schemes uses. |
2022-01-26 07:32:24 +0100 | takuan | (~takuan@178-116-218-225.access.telenet.be) |
2022-01-26 07:33:09 +0100 | dut | (~dut@user/dut) (Quit: Leaving) |
2022-01-26 07:37:58 +0100 | slowButPresent | (~slowButPr@user/slowbutpresent) (Quit: leaving) |
2022-01-26 07:39:46 +0100 | Morrow_ | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) |
2022-01-26 07:40:43 +0100 | <dsal> | I was thinking about going to be early a couple hours ago. Maybe I'll do that instead. |
2022-01-26 07:42:18 +0100 | Morrow | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 250 seconds) |
2022-01-26 07:43:20 +0100 | tzh | (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz) |
2022-01-26 07:45:07 +0100 | <c_wraith> | dsal: works just fine when a is not the same type as b. Though... Uh... It's a bit of a funny one. |
2022-01-26 07:50:03 +0100 | <prasad> | :q |
2022-01-26 07:50:14 +0100 | prasad | (~user@c-73-170-49-136.hsd1.ca.comcast.net) (Remote host closed the connection) |
2022-01-26 07:51:04 +0100 | _ht | (~quassel@2a02:a468:b619:1:8a98:8031:2935:e3fc) |
2022-01-26 07:54:40 +0100 | <dsal> | c_wraith: I'm going to try to understand it in The Future. My `fold . unfoldr f` thing was easy to write, but I want to do sightly better |
2022-01-26 07:59:56 +0100 | mikoto-chan | (~mikoto-ch@213.177.151.239) |
2022-01-26 08:00:32 +0100 | Morrow | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) |
2022-01-26 08:01:03 +0100 | lispy | (~lispy4@84.69.59.93) (Quit: Leaving) |
2022-01-26 08:04:21 +0100 | Morrow_ | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 256 seconds) |
2022-01-26 08:05:21 +0100 | azimut_ | (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 276 seconds) |
2022-01-26 08:05:55 +0100 | alp | (~alp@user/alp) |
2022-01-26 08:07:00 +0100 | deadmarshal | (~deadmarsh@95.38.116.147) (Ping timeout: 250 seconds) |
2022-01-26 08:10:45 +0100 | xsperry | (~xs@user/xsperry) (Read error: Connection reset by peer) |
2022-01-26 08:14:08 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) |
2022-01-26 08:14:08 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
2022-01-26 08:14:08 +0100 | wroathe | (~wroathe@user/wroathe) |
2022-01-26 08:14:22 +0100 | mikoto-chan | (~mikoto-ch@213.177.151.239) (Ping timeout: 250 seconds) |
2022-01-26 08:14:49 +0100 | deadmarshal | (~deadmarsh@95.38.116.147) |
2022-01-26 08:14:59 +0100 | cynomys | (~cynomys@user/cynomys) (Remote host closed the connection) |
2022-01-26 08:16:22 +0100 | cfricke | (~cfricke@user/cfricke) |
2022-01-26 08:19:24 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 268 seconds) |
2022-01-26 08:19:46 +0100 | gehmehgeh | (~user@user/gehmehgeh) |
2022-01-26 08:19:47 +0100 | mbuf | (~Shakthi@122.173.242.184) |
2022-01-26 08:23:12 +0100 | michalz | (~michalz@185.246.204.37) |
2022-01-26 08:23:17 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 240 seconds) |
2022-01-26 08:25:31 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) |
2022-01-26 08:27:32 +0100 | zmt00 | (~zmt00@user/zmt00) (Ping timeout: 240 seconds) |
2022-01-26 08:30:21 +0100 | ensyde | (~ensyde@2600:1700:2050:1040:3990:b270:fa9e:e455) |
2022-01-26 08:32:14 +0100 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) |
2022-01-26 08:32:37 +0100 | lortabac | (~lortabac@2a01:e0a:541:b8f0:71ea:518b:f248:7591) |
2022-01-26 08:35:15 +0100 | xsperry | (~xs@user/xsperry) |
2022-01-26 08:38:37 +0100 | emf | (~emf@2620:10d:c090:400::5:fe1a) (Ping timeout: 240 seconds) |
2022-01-26 08:39:25 +0100 | akegalj | (~akegalj@141-136-245-236.dsl.iskon.hr) |
2022-01-26 08:39:25 +0100 | little_mac | (~little_ma@2601:410:4300:3ce0:45a2:92d3:66c6:d0a1) |
2022-01-26 08:41:01 +0100 | xsperry | (~xs@user/xsperry) (Read error: Connection reset by peer) |
2022-01-26 08:44:23 +0100 | xsperry | (~xs@user/xsperry) |
2022-01-26 08:47:26 +0100 | Chewt | (~hayden@2601:1c0:8101:7310::144a) |
2022-01-26 08:51:40 +0100 | CHUD | (~CHUD@host-80-41-89-108.as13285.net) |
2022-01-26 08:51:55 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) (Quit: WeeChat 3.4) |
2022-01-26 08:53:59 +0100 | gioyik | (~gioyik@gateway/tor-sasl/gioyik) (Quit: WeeChat 3.3) |
2022-01-26 08:54:00 +0100 | dhouthoo | (~dhouthoo@178-117-36-167.access.telenet.be) |
2022-01-26 08:54:45 +0100 | xsperry | (~xs@user/xsperry) (Read error: Connection reset by peer) |
2022-01-26 08:56:17 +0100 | CHUD | (~CHUD@host-80-41-89-108.as13285.net) (Ping timeout: 256 seconds) |
2022-01-26 08:56:21 +0100 | SummerSonw | (~The_viole@203.77.49.232) |
2022-01-26 08:56:55 +0100 | shriekingnoise | (~shrieking@201.231.16.156) (Quit: Quit) |
2022-01-26 08:58:06 +0100 | mikoto-chan | (~mikoto-ch@84.199.144.235) |
2022-01-26 08:59:13 +0100 | Sgeo | (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
2022-01-26 08:59:50 +0100 | cosimone | (~user@93-44-185-255.ip98.fastwebnet.it) |
2022-01-26 09:01:10 +0100 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 250 seconds) |
2022-01-26 09:04:26 +0100 | xsperry | (~xs@user/xsperry) |
2022-01-26 09:06:05 +0100 | vysn | (~vysn@user/vysn) |
2022-01-26 09:06:21 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) |
2022-01-26 09:06:29 +0100 | coot | (~coot@89-64-85-93.dynamic.chello.pl) |
2022-01-26 09:08:35 +0100 | Major_Biscuit | (~MajorBisc@86-88-79-148.fixed.kpn.net) |
2022-01-26 09:10:42 +0100 | lortabac | (~lortabac@2a01:e0a:541:b8f0:71ea:518b:f248:7591) (Ping timeout: 250 seconds) |
2022-01-26 09:11:47 +0100 | lortabac | (~lortabac@2a01:e0a:541:b8f0:23a9:7efc:99f6:4072) |
2022-01-26 09:12:49 +0100 | chele | (~chele@user/chele) |
2022-01-26 09:14:57 +0100 | mc47 | (~mc47@xmonad/TheMC47) |
2022-01-26 09:16:20 +0100 | p3n | (~p3n@2a00:19a0:3:7c:0:d9c6:7cf6:1) (Ping timeout: 250 seconds) |
2022-01-26 09:16:49 +0100 | p3n | (~p3n@217.198.124.246) |
2022-01-26 09:21:39 +0100 | AlexNoo_ | AlexNoo |
2022-01-26 09:28:35 +0100 | fef | (~thedawn@user/thedawn) |
2022-01-26 09:28:59 +0100 | fendor | (~fendor@77.119.167.8.wireless.dyn.drei.com) |
2022-01-26 09:30:20 +0100 | <dminuoso_> | megaparsec question. Let's say I want to parse "foo" are separated by dots with a trailing dot. Naively I tried: thingBetween `sepBy1` chunk ".", but that cant parse `"foo.foo.", as megaparsec will rightfully expect a trailing "foo" |
2022-01-26 09:30:56 +0100 | <dminuoso_> | I can of course parse this as: many (thingBetween <* chunk ".") |
2022-01-26 09:31:19 +0100 | <dminuoso_> | Ah hold on. |
2022-01-26 09:31:32 +0100 | <dminuoso_> | As I was writing the second part of it, I realized I simply need two completely separate parsers. |
2022-01-26 09:31:41 +0100 | <dminuoso_> | Thanks for being a rubber duck. |
2022-01-26 09:32:13 +0100 | <tomsmeding> | dminuoso_: many (thingBetween <* chunk ".") ? |
2022-01-26 09:32:18 +0100 | <tomsmeding> | or some, perhaps |
2022-01-26 09:32:38 +0100 | <dminuoso_> | tomsmeding: No my problem was I wanted to find a way to do both with a leading dot and without. |
2022-01-26 09:32:58 +0100 | <dminuoso_> | But it means I must in one place use `many (thingBetween <* chunk ".")` and `thingBetween `sepBy1` chunk "."` for the other |
2022-01-26 09:33:15 +0100 | <dminuoso_> | In attoparsec I merely used the latter, and it worked out just fine due to backtracking |
2022-01-26 09:33:26 +0100 | <tomsmeding> | "separated by dots with a trailing dot" to me means a dot after each foo |
2022-01-26 09:33:37 +0100 | <dminuoso_> | Sure |
2022-01-26 09:34:50 +0100 | <tomsmeding> | but if you solved your own problem already don't listen to me :) |
2022-01-26 09:35:13 +0100 | jgeerds | (~jgeerds@55d4a547.access.ecotel.net) |
2022-01-26 09:35:26 +0100 | <dminuoso_> | Next up I should rewrite this parser with alex/happy. |
2022-01-26 09:35:53 +0100 | ubert1 | (~Thunderbi@p200300ecdf09940ed781da24ea780c96.dip0.t-ipconnect.de) |
2022-01-26 09:36:04 +0100 | <dminuoso_> | What's the minimal dependency footprint I can bring? Surely I can preexecute alex/happy and just ship the generated lexer/parser files right? |
2022-01-26 09:36:52 +0100 | <dminuoso_> | https://github.com/glguy/config-value looks like it |
2022-01-26 09:37:04 +0100 | Gurkenglas | (~Gurkengla@dslb-090-186-104-244.090.186.pools.vodafone-ip.de) |
2022-01-26 09:37:32 +0100 | ph88^ | (~ph88@ip5f5af71f.dynamic.kabel-deutschland.de) (Ping timeout: 240 seconds) |
2022-01-26 09:38:00 +0100 | xff0x | (~xff0x@2001:1a81:53ec:e00:db2b:9281:840d:9e3c) (Ping timeout: 250 seconds) |
2022-01-26 09:38:20 +0100 | Major_Biscuit | (~MajorBisc@86-88-79-148.fixed.kpn.net) (Ping timeout: 268 seconds) |
2022-01-26 09:39:04 +0100 | xff0x | (~xff0x@2001:1a81:53ec:e00:81a4:7fd8:2f5d:f55d) |
2022-01-26 09:44:37 +0100 | ph88^ | (~ph88@2a02:8109:9e00:71d0:a803:7e6c:9fe5:13b9) |
2022-01-26 09:45:31 +0100 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer) |
2022-01-26 09:46:24 +0100 | gentauro | (~gentauro@user/gentauro) (Quit: leaving) |
2022-01-26 09:48:11 +0100 | kuribas | (~user@ptr-25vy0i9nxqs797laykw.18120a2.ip6.access.telenet.be) |
2022-01-26 09:50:21 +0100 | machinedgod | (~machinedg@24.105.81.50) |
2022-01-26 09:51:36 +0100 | sprout | (~quassel@2a02:a467:ccd6:1:8844:e45a:1aab:92c2) |
2022-01-26 09:53:13 +0100 | little_mac | (~little_ma@2601:410:4300:3ce0:45a2:92d3:66c6:d0a1) (Remote host closed the connection) |
2022-01-26 09:54:18 +0100 | gentauro | (~gentauro@user/gentauro) |
2022-01-26 09:55:36 +0100 | sprout_ | (~quassel@2a02:a467:ccd6:1:5d8f:20db:5ddd:bcf4) (Ping timeout: 268 seconds) |
2022-01-26 09:57:02 +0100 | simmsb | (~simmsb@2001:470:69fc:105::1:55c3) (Quit: Client limit exceeded: 20000) |
2022-01-26 09:58:13 +0100 | <tomsmeding> | Axman6: I tried Data.Discrimination.Sorting.sort because I was curious, and it seems it's at roughly the same performance in my test as Data.List.sort |
2022-01-26 09:58:21 +0100 | <tomsmeding> | though the quickcheck tests are MUCH slower for some reasons |
2022-01-26 09:58:24 +0100 | <tomsmeding> | s/.$// |
2022-01-26 09:58:27 +0100 | simmsb | (~simmsb@2001:470:69fc:105::1:55c3) |
2022-01-26 09:58:35 +0100 | <tomsmeding> | like, taking 10x as long |
2022-01-26 09:58:57 +0100 | <tomsmeding> | perhaps it has a higher constant factor for short lists? quickcheck only tests lists with lengths [0..99] |
2022-01-26 09:59:16 +0100 | <tomsmeding> | Axman6: actually, not Data.List.sort, but quacksort lol |
2022-01-26 10:01:22 +0100 | Major_Biscuit | (~MajorBisc@c-001-019-027.client.tudelft.eduvpn.nl) |
2022-01-26 10:05:05 +0100 | dminuoso_ | dminuoso |
2022-01-26 10:05:14 +0100 | <c_wraith> | quacksort? Is that like a single pass of bubble sort? "most lists are nearly sorted already, this will be fine!" |
2022-01-26 10:05:31 +0100 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) |
2022-01-26 10:05:59 +0100 | Midjak | (~Midjak@may53-1-78-226-116-92.fbx.proxad.net) |
2022-01-26 10:06:07 +0100 | xkuru | (~xkuru@user/xkuru) |
2022-01-26 10:06:42 +0100 | vysn | (~vysn@user/vysn) (Ping timeout: 268 seconds) |
2022-01-26 10:07:49 +0100 | max22- | (~maxime@lfbn-ren-1-1026-62.w92-139.abo.wanadoo.fr) |
2022-01-26 10:09:20 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:7175:fef6:491:2dba) (Remote host closed the connection) |
2022-01-26 10:09:35 +0100 | jle` | (~jle`@cpe-23-240-75-236.socal.res.rr.com) (Ping timeout: 256 seconds) |
2022-01-26 10:09:48 +0100 | <tomsmeding> | c_wraith: something written by SrPx last night, bit of a simplistic mix of mergesort and quicksort |
2022-01-26 10:10:16 +0100 | <tomsmeding> | and is slightly slower (~30%) than Data.List.sort in my tests, but I fixed a bug in their code in a really inefficient way |
2022-01-26 10:10:34 +0100 | <tomsmeding> | c_wraith: https://paste.tomsmeding.com/RVS64Lfd |
2022-01-26 10:11:07 +0100 | jle` | (~jle`@cpe-23-240-75-236.socal.res.rr.com) |
2022-01-26 10:12:47 +0100 | <c_wraith> | that's the fixed code? That seems to have weird inefficiencies all over |
2022-01-26 10:13:02 +0100 | shailangsa | (~shailangs@host86-185-98-37.range86-185.btcentralplus.com) () |
2022-01-26 10:13:23 +0100 | <tomsmeding> | yeah that's the fixed code |
2022-01-26 10:13:59 +0100 | <tomsmeding> | c_wraith: this was their original code https://gist.github.com/VictorTaelin/2a1cf354ea710f1eae1b6d15281813ca |
2022-01-26 10:14:38 +0100 | <tomsmeding> | (the bug was that if the first element is maximal, all elements fall into one bucket and it loops infinitely) |
2022-01-26 10:15:03 +0100 | <c_wraith> | why are you passing information into quack and place that is always derived exactly the same way from other parameters? |
2022-01-26 10:15:15 +0100 | <tomsmeding> | yeah I dunno |
2022-01-26 10:15:24 +0100 | <tomsmeding> | but I would expect ghc to optimise that one particular thing out |
2022-01-26 10:15:39 +0100 | dminuoso | (~dminuoso@static.88-198-218-68.clients.your-server.de) (Changing host) |
2022-01-26 10:15:39 +0100 | dminuoso | (~dminuoso@user/dminuoso) |
2022-01-26 10:15:57 +0100 | <c_wraith> | I care less about that and more about how it makes the code harder to read |
2022-01-26 10:17:32 +0100 | allbery_b | (~geekosaur@xmonad/geekosaur) |
2022-01-26 10:17:32 +0100 | geekosaur | (~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b))) |
2022-01-26 10:17:35 +0100 | allbery_b | geekosaur |
2022-01-26 10:20:15 +0100 | <tomsmeding> | c_wraith: is quacksort2 here more readable? https://paste.tomsmeding.com/hyJfdqVt |
2022-01-26 10:22:24 +0100 | <c_wraith> | a lot |
2022-01-26 10:23:58 +0100 | caro | akhesacaro |
2022-01-26 10:29:11 +0100 | <c_wraith> | also, that looks like it goes O(n^2) on inputs like [9,7,5,3,1,2,4,6,8,10] |
2022-01-26 10:30:16 +0100 | <tomsmeding> | c_wraith: yeah, the naive pivot selection doesn't ensure n log n |
2022-01-26 10:30:36 +0100 | <tomsmeding> | also the benchmark is on random lists, which is quite relevant to interpreting the results |
2022-01-26 10:30:56 +0100 | <c_wraith> | Data.List.sort is O(n) on inputs like that. |
2022-01-26 10:32:15 +0100 | SummerSonw | (~The_viole@203.77.49.232) (Ping timeout: 256 seconds) |
2022-01-26 10:32:29 +0100 | cosimone | (~user@93-44-185-255.ip98.fastwebnet.it) (Remote host closed the connection) |
2022-01-26 10:36:39 +0100 | haskellberryfinn | (~nut@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) |
2022-01-26 10:38:51 +0100 | flipchan | (~filip@user/flipchan) |
2022-01-26 10:43:28 +0100 | <tomsmeding> | c_wraith: benchmarked against inputs like that ([1], [1,2], [3,1,2], [3,1,2,4], etc.), you get the desc-asc ones here: https://tomsmeding.com/f/sorting-comparison-criterion-1.html |
2022-01-26 10:43:40 +0100 | <tomsmeding> | i.e. confirms your observation :p |
2022-01-26 10:43:50 +0100 | <tomsmeding> | hint: click the x-axis on the overview chart to switch to log scale |
2022-01-26 10:44:25 +0100 | <c_wraith> | that's a cool UI |
2022-01-26 10:44:34 +0100 | <tomsmeding> | yeah, criterion is cool |
2022-01-26 10:44:43 +0100 | <c_wraith> | I've never used its HTML output |
2022-01-26 10:45:21 +0100 | <tomsmeding> | if you use criterion's defaultMain, just pass '-o out.html' to the executable |
2022-01-26 10:45:29 +0100 | <merijn> | c_wraith: to be fair, O(n^2) worst case is accurate for quicksort :p |
2022-01-26 10:45:42 +0100 | <tomsmeding> | merijn: not if you have a well-chosen pivot (which this one doesn't) |
2022-01-26 10:45:53 +0100 | <merijn> | *insert my usual rant that the only thing quicksort has going for it is the marketing from it's name* |
2022-01-26 10:47:03 +0100 | <c_wraith> | Oh. Here's what I don't get about that algorithm. The merge should always be doing (++) |
2022-01-26 10:47:10 +0100 | <tomsmeding> | SrPx: https://tomsmeding.com/f/sorting-comparison-criterion-1.html -- also posting this to you in case you're interested |
2022-01-26 10:47:32 +0100 | <c_wraith> | it's a quicksort with a slower string concatenation named "merge" |
2022-01-26 10:48:24 +0100 | <tomsmeding> | that is correct lol |
2022-01-26 10:48:49 +0100 | <tomsmeding> | doesn't do much to its benchmark time though |
2022-01-26 10:48:56 +0100 | <c_wraith> | no, it's not much slower |
2022-01-26 10:49:16 +0100 | <c_wraith> | chasing the pointers costs much more time than the comparisons |
2022-01-26 10:50:01 +0100 | <tomsmeding> | much more, I'm only seeing a 1% improvement or something |
2022-01-26 10:50:15 +0100 | <tomsmeding> | well, maybe 4% |
2022-01-26 10:50:46 +0100 | <c_wraith> | did you actually verify the results are still sorted? |
2022-01-26 10:50:59 +0100 | <c_wraith> | I might have analyzed it incorrectly! |
2022-01-26 10:51:04 +0100 | vglfr | (~vglfr@88.155.70.5) |
2022-01-26 10:51:30 +0100 | <tomsmeding> | quickcheck is okay with it |
2022-01-26 10:51:48 +0100 | <tomsmeding> | which isn't a proof, but gives me pretty good confidence |
2022-01-26 10:52:01 +0100 | <c_wraith> | yeah, sounds pretty good |
2022-01-26 10:52:19 +0100 | <tomsmeding> | in case you're interested, combined chart: https://tomsmeding.com/f/sorting-comparison-criterion-2.html |
2022-01-26 10:52:57 +0100 | shailangsa | (~shailangs@host86-185-98-37.range86-185.btcentralplus.com) |
2022-01-26 10:55:29 +0100 | OscarH_ | (~OscarH@90.201.86.195) (Ping timeout: 252 seconds) |
2022-01-26 10:58:35 +0100 | bjourne | (~bjourne@2001:6b0:1:1140:42bf:ff4:f8fa:50e5) (Quit: Konversation terminated!) |
2022-01-26 10:58:40 +0100 | Jing | (~hedgehog@240e:390:7c53:a7e1:b574:732d:3b12:8f10) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2022-01-26 10:59:12 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2022-01-26 10:59:26 +0100 | lavaman | (~lavaman@98.38.249.169) |
2022-01-26 11:00:58 +0100 | Erutuon | (~Erutuon@user/erutuon) (Ping timeout: 268 seconds) |
2022-01-26 11:01:31 +0100 | coot | (~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot) |
2022-01-26 11:02:00 +0100 | coot | (~coot@89-64-85-93.dynamic.chello.pl) |
2022-01-26 11:02:46 +0100 | SummerSonw | (~The_viole@203.77.49.232) |
2022-01-26 11:03:16 +0100 | OscarH | (~OscarH@2a02:c7f:a0da:ae00:ba27:ebff:fe84:d2f4) |
2022-01-26 11:08:57 +0100 | ensyde | (~ensyde@2600:1700:2050:1040:3990:b270:fa9e:e455) (Ping timeout: 240 seconds) |
2022-01-26 11:09:45 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:7175:fef6:491:2dba) |
2022-01-26 11:10:40 +0100 | amk | (~amk@109.255.169.126) (Remote host closed the connection) |
2022-01-26 11:11:06 +0100 | michalz | (~michalz@185.246.204.37) (Read error: No route to host) |
2022-01-26 11:11:40 +0100 | amk | (~amk@109.255.169.126) |
2022-01-26 11:12:17 +0100 | michalz | (~michalz@185.246.204.37) |
2022-01-26 11:14:02 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:7175:fef6:491:2dba) (Ping timeout: 240 seconds) |
2022-01-26 11:14:17 +0100 | Jing | (~hedgehog@240e:390:7c53:a7e1:491:83dc:6241:13db) |
2022-01-26 11:16:22 +0100 | cosimone | (~user@93-44-185-255.ip98.fastwebnet.it) |
2022-01-26 11:19:39 +0100 | Midjak | (~Midjak@may53-1-78-226-116-92.fbx.proxad.net) (Quit: Leaving) |
2022-01-26 11:23:17 +0100 | mvk | (~mvk@2607:fea8:5cdc:bf00::a2bf) |
2022-01-26 11:24:30 +0100 | yauhsien | (~yauhsien@61-231-17-3.dynamic-ip.hinet.net) |
2022-01-26 11:26:15 +0100 | ph88^ | (~ph88@2a02:8109:9e00:71d0:a803:7e6c:9fe5:13b9) (Ping timeout: 268 seconds) |
2022-01-26 11:26:28 +0100 | ph88^ | (~ph88@ip5f5af71f.dynamic.kabel-deutschland.de) |
2022-01-26 11:26:28 +0100 | aeka | (~aeka@user/hiruji) (Quit: ZNC 1.8.2 - https://znc.in) |
2022-01-26 11:26:40 +0100 | CHUD | (~CHUD@host-80-41-89-108.as13285.net) |
2022-01-26 11:27:57 +0100 | aeka | (~aeka@2606:6080:1001:18:8d41:9604:d435:36b6) |
2022-01-26 11:28:37 +0100 | yauhsien | (~yauhsien@61-231-17-3.dynamic-ip.hinet.net) (Ping timeout: 240 seconds) |
2022-01-26 11:30:59 +0100 | CHUD | (~CHUD@host-80-41-89-108.as13285.net) (Ping timeout: 256 seconds) |
2022-01-26 11:31:56 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) |
2022-01-26 11:31:56 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
2022-01-26 11:31:56 +0100 | wroathe | (~wroathe@user/wroathe) |
2022-01-26 11:34:10 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2022-01-26 11:35:18 +0100 | wyrd | (~wyrd@gateway/tor-sasl/wyrd) (Ping timeout: 276 seconds) |
2022-01-26 11:36:37 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 240 seconds) |
2022-01-26 11:37:06 +0100 | wyrd | (~wyrd@gateway/tor-sasl/wyrd) |
2022-01-26 11:46:17 +0100 | davros | (~davros@host86-184-180-214.range86-184.btcentralplus.com) (Ping timeout: 240 seconds) |
2022-01-26 11:47:37 +0100 | vglfr | (~vglfr@88.155.70.5) (Ping timeout: 256 seconds) |
2022-01-26 11:49:19 +0100 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 256 seconds) |
2022-01-26 11:49:34 +0100 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) |
2022-01-26 11:51:05 +0100 | coot | (~coot@89-64-85-93.dynamic.chello.pl) (Remote host closed the connection) |
2022-01-26 11:51:29 +0100 | coot | (~coot@2a02:a310:e03f:8500:5cc8:47c:8ec0:b827) |
2022-01-26 11:54:47 +0100 | <kuribas> | If haskell is great because of its expressive typesystem, wouldn't idris be better, since the type level is just the language? |
2022-01-26 11:55:17 +0100 | <kuribas> | types are just values, so expressing something in a type is as simple as expressing it in a value. |
2022-01-26 11:55:32 +0100 | <[exa]> | it might be the delicate separation of the concerns that makes it great. |
2022-01-26 11:56:11 +0100 | <kuribas> | haskell? |
2022-01-26 11:56:18 +0100 | <[exa]> | yes |
2022-01-26 11:56:29 +0100 | <dminuoso> | Mmm, is there any alex-mode for emacs? |
2022-01-26 11:56:42 +0100 | <kuribas> | I am not even sure haskell is "great". |
2022-01-26 11:57:15 +0100 | <dminuoso> | kuribas: Counter argument, haskell is great for simple things like highly reusable ADTs such as Maybe. |
2022-01-26 11:57:39 +0100 | <dminuoso> | Simple and elegant ways to define and discriminate on ADTs is what I love most. :) |
2022-01-26 11:57:41 +0100 | <kuribas> | dminuoso: you can have that with dependently typed languages? |
2022-01-26 11:57:45 +0100 | <dminuoso> | Sure you can. |
2022-01-26 11:57:51 +0100 | <dminuoso> | But I dont care for dependently typed things. |
2022-01-26 11:57:53 +0100 | Morrow_ | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) |
2022-01-26 11:57:57 +0100 | <dminuoso> | In fact, I dont leverage the type system much in Haskell |
2022-01-26 11:58:26 +0100 | <kuribas> | dminuoso: how do you make a specification then? |
2022-01-26 11:58:37 +0100 | <kuribas> | it's strictly separate from the code? |
2022-01-26 11:58:47 +0100 | <dminuoso> | Mostly in tests |
2022-01-26 11:58:57 +0100 | <dminuoso> | Or completely separate, yes. |
2022-01-26 11:58:58 +0100 | davros | (~davros@host86-184-82-149.range86-184.btcentralplus.com) |
2022-01-26 11:59:32 +0100 | Morrow | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 240 seconds) |
2022-01-26 11:59:56 +0100 | <dminuoso> | I'd rather have our team able to work on my code, than be the sole maintainer with grand delusions about my code being bug-free. |
2022-01-26 12:00:12 +0100 | <dminuoso> | It's just more productive this way :) |
2022-01-26 12:00:18 +0100 | <kuribas> | bug-free or "correctness" is an illusion. |
2022-01-26 12:00:26 +0100 | <dminuoso> | Indeed |
2022-01-26 12:00:59 +0100 | <kuribas> | Most of that time you get a vague spec, which can be interpreted in many ways. |
2022-01-26 12:02:20 +0100 | <kuribas> | more interesting is "consistent with itself and the rest of the system". |
2022-01-26 12:02:44 +0100 | mikoto-chan | (~mikoto-ch@84.199.144.235) (Ping timeout: 250 seconds) |
2022-01-26 12:03:11 +0100 | Morrow | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) |
2022-01-26 12:04:13 +0100 | <kuribas> | IMO one of the primary benefits of DT can be to express the API spec in the code, and show it's consistent with the implementation. |
2022-01-26 12:04:32 +0100 | <kuribas> | Like servant, but the spec can be just a value. |
2022-01-26 12:05:01 +0100 | <kuribas> | you could even calculate the spec from another spec :) |
2022-01-26 12:06:37 +0100 | Morrow_ | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 240 seconds) |
2022-01-26 12:07:16 +0100 | vglfr | (~vglfr@88.155.70.5) |
2022-01-26 12:07:16 +0100 | <kuribas> | Or for exampe to prove that your API matches the database schema. |
2022-01-26 12:07:29 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::ee17) (Remote host closed the connection) |
2022-01-26 12:07:31 +0100 | <kuribas> | True you can do this in tests as well. |
2022-01-26 12:07:41 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::ee17) |
2022-01-26 12:09:58 +0100 | ekai-zendo[m] | (~ekai-zend@2001:470:69fc:105::1:7756) |
2022-01-26 12:14:34 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2022-01-26 12:15:35 +0100 | haskellberryfinn | (~nut@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 268 seconds) |
2022-01-26 12:17:16 +0100 | dsrt^ | (~dsrt@96-86-240-178-static.hfc.comcastbusiness.net) (Remote host closed the connection) |
2022-01-26 12:21:32 +0100 | jgeerds | (~jgeerds@55d4a547.access.ecotel.net) (Ping timeout: 240 seconds) |
2022-01-26 12:26:28 +0100 | econo | (uid147250@user/econo) (Quit: Connection closed for inactivity) |
2022-01-26 12:30:02 +0100 | ekai-zendo[m] | ekai[m] |
2022-01-26 12:30:07 +0100 | ph88^ | (~ph88@ip5f5af71f.dynamic.kabel-deutschland.de) (Ping timeout: 256 seconds) |
2022-01-26 12:31:28 +0100 | tubogram4 | (~tubogram@user/tubogram) (Quit: See ya later!) |
2022-01-26 12:34:02 +0100 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds) |
2022-01-26 12:35:49 +0100 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) |
2022-01-26 12:41:07 +0100 | timmot | (~timmot@207.148.85.201) |
2022-01-26 12:42:03 +0100 | jakalx | (~jakalx@base.jakalx.net) () |
2022-01-26 12:42:48 +0100 | Gurkenglas | (~Gurkengla@dslb-090-186-104-244.090.186.pools.vodafone-ip.de) (Read error: Connection reset by peer) |
2022-01-26 12:43:14 +0100 | Gurkenglas | (~Gurkengla@dslb-090-186-104-244.090.186.pools.vodafone-ip.de) |
2022-01-26 12:48:19 +0100 | <dminuoso> | Servant stretches it quite far, honestly. Perhaps OpenAPI with a static code generator is ultimately the most pragmatic thing. |
2022-01-26 12:48:38 +0100 | <dminuoso> | Especially if it could generate client/server stub code, similar to say CORBA IDL compilers |
2022-01-26 12:49:29 +0100 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
2022-01-26 12:49:50 +0100 | <dminuoso> | Fighting for servant to keep everything inside the type system makes it difficult to extend it. To implement custom combinators you need to have advanced type-level skills and work with large portions of mostly undocumented code. |
2022-01-26 12:50:17 +0100 | Morrow_ | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) |
2022-01-26 12:50:20 +0100 | <dminuoso> | And the diagnostics are quite poor as well - even generic servant suffers from various poor ergonomics. |
2022-01-26 12:50:23 +0100 | <dminuoso> | Not to mention the performance impact. |
2022-01-26 12:50:37 +0100 | <dminuoso> | We have a relatively small servant library, but compiling the servant glue code alone takes over 2 minutes here. |
2022-01-26 12:51:42 +0100 | Morrow | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Read error: Connection reset by peer) |
2022-01-26 12:52:17 +0100 | Morrow | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) |
2022-01-26 12:55:03 +0100 | Morrow_ | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 268 seconds) |
2022-01-26 12:58:37 +0100 | vysn | (~vysn@user/vysn) |
2022-01-26 12:59:49 +0100 | Morrow_ | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) |
2022-01-26 13:02:20 +0100 | Morrow | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Read error: Connection reset by peer) |
2022-01-26 13:02:32 +0100 | Morrow | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) |
2022-01-26 13:03:04 +0100 | Akiva | (~Akiva@user/Akiva) (Ping timeout: 268 seconds) |
2022-01-26 13:03:49 +0100 | Morrow_ | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 240 seconds) |
2022-01-26 13:06:37 +0100 | Morrow | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 240 seconds) |
2022-01-26 13:06:57 +0100 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds) |
2022-01-26 13:08:50 +0100 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) |
2022-01-26 13:12:04 +0100 | jakalx | (~jakalx@base.jakalx.net) |
2022-01-26 13:15:42 +0100 | yauhsien | (~yauhsien@61-231-17-3.dynamic-ip.hinet.net) |
2022-01-26 13:16:47 +0100 | on^ | (~on@96-86-240-178-static.hfc.comcastbusiness.net) |
2022-01-26 13:19:20 +0100 | geranim0 | (~geranim0@d-132-204-221-88.res.umontreal.ca) |
2022-01-26 13:26:05 +0100 | Guest52 | (~Guest52@80-100-97-100.ip.xs4all.nl) |
2022-01-26 13:26:30 +0100 | max22- | (~maxime@lfbn-ren-1-1026-62.w92-139.abo.wanadoo.fr) (Ping timeout: 268 seconds) |
2022-01-26 13:31:32 +0100 | ec | (~ec@gateway/tor-sasl/ec) |
2022-01-26 13:32:44 +0100 | jgeerds | (~jgeerds@55d4a547.access.ecotel.net) |
2022-01-26 13:34:39 +0100 | yauhsien | (~yauhsien@61-231-17-3.dynamic-ip.hinet.net) (Remote host closed the connection) |
2022-01-26 13:39:49 +0100 | HotblackDesiato_ | (~HotblackD@gateway/tor-sasl/hotblackdesiato) (Remote host closed the connection) |
2022-01-26 13:40:32 +0100 | Guest52 | (~Guest52@80-100-97-100.ip.xs4all.nl) (Ping timeout: 240 seconds) |
2022-01-26 13:40:43 +0100 | <dminuoso> | tomsmeding: Hah I recall why I wanted it this way. So this is a domain label parser (which roughly just produces [String] for each label). I wanted to use: `(label `sepBy` chunk ".") <* chunk "."` as to neatly allow "." to be parsed. |
2022-01-26 13:41:33 +0100 | <dminuoso> | The elegant form would be to rather to pretend that absolute domains are relative domains too, with the final label being empty |
2022-01-26 13:41:37 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 240 seconds) |
2022-01-26 13:42:03 +0100 | <dminuoso> | Which incidentally is the original intent in DNS |
2022-01-26 13:42:10 +0100 | yauhsien | (~yauhsien@61-231-17-3.dynamic-ip.hinet.net) |
2022-01-26 13:42:21 +0100 | ph88^ | (~ph88@ip5f5af71f.dynamic.kabel-deutschland.de) |
2022-01-26 13:43:45 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) |
2022-01-26 13:44:24 +0100 | __monty__ | (~toonn@user/toonn) |
2022-01-26 13:46:37 +0100 | yauhsien | (~yauhsien@61-231-17-3.dynamic-ip.hinet.net) (Ping timeout: 240 seconds) |
2022-01-26 13:51:30 +0100 | kjak | (~kjak@pool-108-45-56-21.washdc.fios.verizon.net) (Ping timeout: 250 seconds) |
2022-01-26 13:54:23 +0100 | alp | (~alp@user/alp) (Remote host closed the connection) |
2022-01-26 13:54:42 +0100 | alp | (~alp@user/alp) |
2022-01-26 13:56:09 +0100 | <tomsmeding> | dminuoso: heh nice hack |
2022-01-26 13:56:17 +0100 | <tomsmeding> | which, as you say, is not actually really a hack |
2022-01-26 14:00:11 +0100 | <dminuoso> | Well it doesnt work with megaparsec anymore |
2022-01-26 14:00:42 +0100 | <dminuoso> | Im kind of curious how to parse an absolute domain name representation into labels, turning "." into the empty list of labels |
2022-01-26 14:01:10 +0100 | HotblackDesiato | (~HotblackD@gateway/tor-sasl/hotblackdesiato) |
2022-01-26 14:03:00 +0100 | <dminuoso> | Of course I can special case this with the monadic power, where I first try and parse for `chunk "." *> eof`, and if that fails I fallback to the other logic |
2022-01-26 14:03:21 +0100 | <dminuoso> | But I dislike having to waste those CPU cycles for an edge case nobody will ever use.. |
2022-01-26 14:04:33 +0100 | <tomsmeding> | dminuoso: many alphaNum `sepBy1` char '.', then filter on empties? |
2022-01-26 14:04:42 +0100 | <dminuoso> | tomsmeding: That will fail. |
2022-01-26 14:04:47 +0100 | <tomsmeding> | (parsec language, not megaparsec) |
2022-01-26 14:04:53 +0100 | <tomsmeding> | counterexample? |
2022-01-26 14:05:08 +0100 | <dminuoso> | Oh. |
2022-01-26 14:05:10 +0100 | <dminuoso> | Mmm |
2022-01-26 14:05:17 +0100 | <dminuoso> | tomsmeding: Yeah, so here comes the problem |
2022-01-26 14:05:46 +0100 | <dminuoso> | tomsmeding: The label parser cannot be bootstrapped from `many`eable in my acse |
2022-01-26 14:06:02 +0100 | <dminuoso> | Well, strictly speaking I could I guess. |
2022-01-26 14:06:13 +0100 | <tomsmeding> | dminuoso: as long as it will never parse a dot, it's fine, right? |
2022-01-26 14:06:20 +0100 | <tomsmeding> | can wrap it in 'optional' maybe |
2022-01-26 14:07:28 +0100 | <dminuoso> | tomsmeding: So yeah, the ugly truth is domain name representations are not well defined, so strictly speaking I can admit whatever I want. |
2022-01-26 14:07:36 +0100 | <dminuoso> | even a dot in principle is admissable |
2022-01-26 14:07:43 +0100 | <tomsmeding> | that makes no sense |
2022-01-26 14:07:43 +0100 | <dminuoso> | the wire protocol allows for dots inside a domain label |
2022-01-26 14:08:09 +0100 | <dminuoso> | tomsmeding: what you read as `foo.bar.` is just a representation, and that representation is not standardized. equivalently, there's no such standardized input format. |
2022-01-26 14:08:10 +0100 | <tomsmeding> | how is someone going to provide a domain name component containing a dot? |
2022-01-26 14:08:17 +0100 | <tomsmeding> | right |
2022-01-26 14:08:21 +0100 | <dminuoso> | that's for you to decide. maybe escape characters? |
2022-01-26 14:08:25 +0100 | <tomsmeding> | :p |
2022-01-26 14:08:37 +0100 | <tomsmeding> | or punycode |
2022-01-26 14:08:45 +0100 | <dminuoso> | sure |
2022-01-26 14:09:08 +0100 | <dminuoso> | I really want to do this with alex/happy, but they dont work on arbitrary bytestrings. |
2022-01-26 14:09:10 +0100 | <dminuoso> | :( |
2022-01-26 14:09:35 +0100 | <dminuoso> | Perhaps I should just use them, and simply forbid bytesequences outside the ASCII planes. |
2022-01-26 14:09:44 +0100 | <dminuoso> | And then have the alex output turn the labels back into bytestrings |
2022-01-26 14:09:48 +0100 | <dminuoso> | Or *happy rather |
2022-01-26 14:10:41 +0100 | <dminuoso> | tomsmeding: So the problem with your `many` is that I cant allow arbitrary characters (for irrelevant reasons) unless I allow for escape cahracters |
2022-01-26 14:10:42 +0100 | <tomsmeding> | dminuoso: I'm still not sure how exactly your envisioned grammar is different from "label `endBy` char '.'" |
2022-01-26 14:11:00 +0100 | <dminuoso> | Uh hold on |
2022-01-26 14:11:06 +0100 | <dminuoso> | Never seen endBy |
2022-01-26 14:11:10 +0100 | fendor_ | (~fendor@77.119.174.56.wireless.dyn.drei.com) |
2022-01-26 14:11:23 +0100 | <tomsmeding> | just one of the convenience combinators |
2022-01-26 14:11:37 +0100 | <tomsmeding> | in parsec: endBy p sep = many (do{ x <- p; _ <- sep; return x }) |
2022-01-26 14:13:27 +0100 | <dminuoso> | tomsmeding: Oh hah I was thinking about it all wrong. |
2022-01-26 14:13:36 +0100 | fendor | (~fendor@77.119.167.8.wireless.dyn.drei.com) (Ping timeout: 250 seconds) |
2022-01-26 14:13:38 +0100 | <dminuoso> | absDomainLabelsP = DomainLabels <$> label `endBy` M.chunk "." |
2022-01-26 14:13:39 +0100 | <dminuoso> | relDomainLabelsP = DomainLabels <$> label `sepBy` M.chunk "." |
2022-01-26 14:13:41 +0100 | <dminuoso> | So simple.. |
2022-01-26 14:14:09 +0100 | <dminuoso> | Guess I should use `char` rather than `chunk` as well |
2022-01-26 14:15:23 +0100 | <tomsmeding> | relOrAbsDomainLabelsP = DomainLabels <$> label `sepBy` M.char '.' <* optional (char '.') |
2022-01-26 14:15:48 +0100 | <tomsmeding> | can even case on the optional result to know which one it is :) |
2022-01-26 14:16:12 +0100 | xff0x | (~xff0x@2001:1a81:53ec:e00:81a4:7fd8:2f5d:f55d) (Ping timeout: 250 seconds) |
2022-01-26 14:16:14 +0100 | <dminuoso> | For our use case we only ever care about absolute domains anyway |
2022-01-26 14:16:22 +0100 | <dminuoso> | The other one is just added for completeness. :) |
2022-01-26 14:17:17 +0100 | xff0x | (~xff0x@2001:1a81:53ec:e00:324f:b25a:5d11:7fc0) |
2022-01-26 14:18:32 +0100 | Major_Biscuit | (~MajorBisc@c-001-019-027.client.tudelft.eduvpn.nl) (Ping timeout: 240 seconds) |
2022-01-26 14:19:48 +0100 | TheCoffeMaker | (~TheCoffeM@user/thecoffemaker) |
2022-01-26 14:24:07 +0100 | gaff | (~gaff@49.207.213.209) |
2022-01-26 14:24:28 +0100 | jgeerds | (~jgeerds@55d4a547.access.ecotel.net) (Ping timeout: 268 seconds) |
2022-01-26 14:24:28 +0100 | Clint | (~Clint@user/clint) (Ping timeout: 268 seconds) |
2022-01-26 14:24:37 +0100 | TheCoffeMaker | (~TheCoffeM@user/thecoffemaker) (Ping timeout: 240 seconds) |
2022-01-26 14:24:42 +0100 | <dminuoso> | tomsmeding: Mmm, the absDomainLabelsP still doesnt parse "." |
2022-01-26 14:24:53 +0100 | <dminuoso> | But I understand why |
2022-01-26 14:25:15 +0100 | Major_Biscuit | (~MajorBisc@86-88-79-148.fixed.kpn.net) |
2022-01-26 14:25:42 +0100 | <gaff> | does `read "0b11111111" :: Int` work if you set the "BinaryLiterals" extension? when i tried, it throws an exception in GHCi. |
2022-01-26 14:26:31 +0100 | <tomsmeding> | gaff: I think the BinaryLiterals extension just modifies the syntax that ghc accepts, it doesn't modify the semantics of any library functios |
2022-01-26 14:27:13 +0100 | <tomsmeding> | imagine, if one file in your project has the extension on, and another file has not, would 'read' return two different things in both files? What if you call a function from the other file in one file, which in turn calls read? Madness! |
2022-01-26 14:27:34 +0100 | <dminuoso> | tomsmeding: I have an evil cunning plan. |
2022-01-26 14:27:43 +0100 | <dminuoso> | I will simply prepend a null byte to the original string, and then fixup the grammar |
2022-01-26 14:27:56 +0100 | <dminuoso> | (well put it at the end I mean) |
2022-01-26 14:27:58 +0100 | <tomsmeding> | dminuoso: how does your 'label' parser even look if you're considering this |
2022-01-26 14:28:05 +0100 | <gaff> | tomsmeding: well, `read "0xFF00" :: Int` works ... so why not? |
2022-01-26 14:28:17 +0100 | <dminuoso> | tomsmeding: absDomainLabelsP = DomainLabels <$> label `endBy` M.char (c2w '.') <* M.char 0 |
2022-01-26 14:28:20 +0100 | <tomsmeding> | dminuoso: also if you're putting it at the end anyway, what about replacing your detection of that null byte with 'eof' |
2022-01-26 14:28:32 +0100 | <dminuoso> | Sorry hold on |
2022-01-26 14:28:33 +0100 | <tomsmeding> | dminuoso: I meant 'label' |
2022-01-26 14:28:34 +0100 | <dminuoso> | No I meant: |
2022-01-26 14:28:43 +0100 | <tomsmeding> | gaff: because that has always worked :p |
2022-01-26 14:28:55 +0100 | <dminuoso> | tomsmeding: I dont want to use the monadic power |
2022-01-26 14:29:06 +0100 | <tomsmeding> | ah |
2022-01-26 14:29:06 +0100 | <dminuoso> | my honor forbids it |
2022-01-26 14:29:18 +0100 | <tomsmeding> | is there an actual practical reason you don't want to use it? |
2022-01-26 14:29:23 +0100 | <dminuoso> | Not at all |
2022-01-26 14:29:26 +0100 | <tomsmeding> | cool |
2022-01-26 14:29:56 +0100 | <tomsmeding> | still, if you allow choice, then you probably had that null-byte recogniser in an alternative there; just replace that with 'eof'? |
2022-01-26 14:29:57 +0100 | <geekosaur> | "Reading integers |
2022-01-26 14:29:57 +0100 | <geekosaur> | GHC’s implementation of the Read class for integral types accepts hexadecimal and octal literals (the code in the Haskell 98 report doesn’t)." |
2022-01-26 14:30:04 +0100 | <dminuoso> | If I had some formal education in grammar, I would probably just specify a grammar and then match the megaparsec to follow this |
2022-01-26 14:30:08 +0100 | <geekosaur> | nothing about binary literals |
2022-01-26 14:30:50 +0100 | <gaff> | geekosaur: i see ... so why have binary literals? |
2022-01-26 14:30:59 +0100 | <merijn> | gaff: Why not? |
2022-01-26 14:30:59 +0100 | <tomsmeding> | gaff: another way to look at this: 'read' doesn't parse haskell, it parses something that looks like a subset of haskell. By extension that means that if you add a language extensions that modifies ghc's understanding of "haskell", 'read' doesn't change. |
2022-01-26 14:31:01 +0100 | <dminuoso> | geekosaur: Arguably, if GHC modifies what GHC accepts syntactically, the generated Read instances should be altered as well. :p |
2022-01-26 14:31:03 +0100 | <gaff> | what's the extension for? |
2022-01-26 14:31:03 +0100 | <geekosaur> | dunno, I didn't propose them |
2022-01-26 14:31:09 +0100 | <dminuoso> | Of course that's completely unreasonable given the open-world assumption |
2022-01-26 14:31:14 +0100 | <merijn> | gaff: For writing binary numbers as literals? |
2022-01-26 14:31:14 +0100 | <tomsmeding> | % :set -XBinaryLiterals |
2022-01-26 14:31:14 +0100 | <yahb> | tomsmeding: |
2022-01-26 14:31:16 +0100 | <tomsmeding> | % 0b1010 |
2022-01-26 14:31:17 +0100 | <yahb> | tomsmeding: 10 |
2022-01-26 14:31:17 +0100 | xff0x | (~xff0x@2001:1a81:53ec:e00:324f:b25a:5d11:7fc0) (Ping timeout: 240 seconds) |
2022-01-26 14:31:39 +0100 | <geekosaur> | anyone can propose an extension to ghc |
2022-01-26 14:31:52 +0100 | <tomsmeding> | dminuoso: see my argument about two modules having differing extension sets :p |
2022-01-26 14:31:58 +0100 | <merijn> | I mean, wanting to write specific bit patterns is pretty common in programming. Especially when interfacing with binary file formats, network protocols, etc. the ability to directly write bit patterns is kinda convenient |
2022-01-26 14:32:05 +0100 | <geekosaur> | it's more likely to be accepted if it includes an implementation |
2022-01-26 14:32:06 +0100 | <gaff> | dminuoso: i agree with you what you said ... i don't understand the other side of the argument |
2022-01-26 14:32:16 +0100 | <dminuoso> | tomsmeding: I think this is one of those cases where the extension isn't well suited for Haskell. There's clearly a strange and surprising interaction. |
2022-01-26 14:32:29 +0100 | xff0x | (~xff0x@2001:1a81:53ec:e00:6733:4fa5:6e13:2687) |
2022-01-26 14:32:30 +0100 | Morrow | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) |
2022-01-26 14:32:58 +0100 | CHUD | (~CHUD@host-80-41-89-108.as13285.net) |
2022-01-26 14:33:07 +0100 | <gaff> | tomsmeding: by the way, your argument about extensions would all extensions |
2022-01-26 14:33:10 +0100 | <tomsmeding> | evidently it is indeed surprising to some, which makes it surprising overall. Though I personally don't find it surprising that a language syntax modification doesn't change the behaviour of a library function :) |
2022-01-26 14:33:13 +0100 | <merijn> | tbh, I think it's easier to just kill off Read |
2022-01-26 14:33:21 +0100 | <dminuoso> | Read and Show both should be gone. |
2022-01-26 14:33:26 +0100 | <merijn> | Read is just bad, besides moderate convenience benefit while writing |
2022-01-26 14:33:29 +0100 | <merijn> | Show is fine I think |
2022-01-26 14:33:34 +0100 | <dminuoso> | Show should use Text. |
2022-01-26 14:33:41 +0100 | <merijn> | Most bad show instances are a result of people wanting to use Read :p |
2022-01-26 14:33:46 +0100 | <dminuoso> | The amount of showT I use in my code base is absurd. |
2022-01-26 14:33:59 +0100 | ac | (~aloiscoch@2001:470:69fc:105::65) |
2022-01-26 14:34:02 +0100 | <dminuoso> | I use Show as poor mans pretty. |
2022-01-26 14:36:13 +0100 | <gaff> | merijn: so writing bit pattersn is important, but reading them is not? |
2022-01-26 14:36:44 +0100 | <merijn> | gaff: Dynamically modifying class instances (like Show) is an absolute nightmare idea. Ideally Haskell Prime (ahaha! Funny, I make it sound like that will ever happen) to include a bunch of the benign numeric literal extension into the report, making them standard, then updating Read to accept them |
2022-01-26 14:37:06 +0100 | <merijn> | gaff: It is. But if you're using Read you're already messing up, so I don't particularly care about Read supporting them. |
2022-01-26 14:37:25 +0100 | CHUD | (~CHUD@host-80-41-89-108.as13285.net) (Ping timeout: 256 seconds) |
2022-01-26 14:37:26 +0100 | <geekosaur> | harder these days as modifying Read is libraries committee, not ghc committee, and libraries is much more conservative |
2022-01-26 14:37:30 +0100 | <merijn> | I would actually argue Read not supporing them is "Good (TM)", since it'll hopefull deter people from thinking Read is a remotely sane choice |
2022-01-26 14:37:46 +0100 | frosky_ | (~froskyarr@120.239.9.244) |
2022-01-26 14:37:57 +0100 | <kuribas> | dminuoso: exactly, servant is painful because you have a different language at type level. |
2022-01-26 14:38:10 +0100 | <gaff> | merijn: so instead of `Read`, what do you use? |
2022-01-26 14:38:10 +0100 | <kuribas> | dminuoso: with DT, you could just do all this at value level. |
2022-01-26 14:38:23 +0100 | <merijn> | gaff: (mega)parsec and attoparsec |
2022-01-26 14:38:28 +0100 | <gaff> | ah |
2022-01-26 14:38:34 +0100 | <gaff> | gee |
2022-01-26 14:38:38 +0100 | <dminuoso> | kuribas: I think this is an equally bad here for this use case. |
2022-01-26 14:38:47 +0100 | <merijn> | gaff: For "one of" numbers there's also the Numeric module in base |
2022-01-26 14:38:52 +0100 | <dminuoso> | This type of problem is better suited to a domain specific language and code generation tools. |
2022-01-26 14:38:54 +0100 | <geekosaur> | read uses a half-assed, slow, ambiguous (but then it tries to hide it) parser |
2022-01-26 14:39:05 +0100 | <kuribas> | dminuoso: well, DT is kind of code generation. |
2022-01-26 14:39:22 +0100 | <tomsmeding> | gaff: suppose I have one module A, that calls 'read "0b10". I have another module B that sets BinaryLiterals and also calls 'read "0b10"'. Furthermore, A defines a function 'foo' that itself calls 'read "0b10"', and B has a function 'bar' that calls A.foo . Should 'bar' succeed? |
2022-01-26 14:39:33 +0100 | <merijn> | gaff: Which has readers for bin, oct, decimal, hex, and even custom versions |
2022-01-26 14:39:39 +0100 | <dminuoso> | merijn: Im slowly thinking we should use less megaparsec and more alex/happy |
2022-01-26 14:39:53 +0100 | <dminuoso> | Im slowly experiencing the wonders of these ancient and almost forgotten tools. |
2022-01-26 14:40:00 +0100 | <merijn> | dminuoso: I don't think it's worth it for most human readable formats |
2022-01-26 14:40:12 +0100 | SwarmCollective | (~joseph@2603-6011-bc02-b600-af23-4557-ff2b-bd76.res6.spectrum.com) (Remote host closed the connection) |
2022-01-26 14:40:12 +0100 | eL_Bart0 | (eL_Bart0@dietunichtguten.org) (Read error: Connection reset by peer) |
2022-01-26 14:40:15 +0100 | <merijn> | dminuoso: alex/happy are *great* if you have a grammar that's set in stone |
2022-01-26 14:40:15 +0100 | <dminuoso> | Predictably high performance and acceptable diagnostics? Yes please. |
2022-01-26 14:40:17 +0100 | FroskyArr | (~froskyarr@120.239.9.244) (Ping timeout: 240 seconds) |
2022-01-26 14:40:27 +0100 | pieguy128 | (~pieguy128@bras-base-mtrlpq5031w-grc-52-65-93-194-105.dsl.bell.ca) (Ping timeout: 256 seconds) |
2022-01-26 14:40:33 +0100 | <dminuoso> | merijn: Maybe that's the problem, people not formally specifying grammars for what they want. |
2022-01-26 14:40:34 +0100 | SwarmCollective | (~joseph@2603-6011-bc02-b600-2151-3d00-3640-3cd8.res6.spectrum.com) |
2022-01-26 14:40:35 +0100 | <merijn> | Most time I write a parser in megaparsec, my grammar is *not* set in stone and kinda half-assed |
2022-01-26 14:40:40 +0100 | <gaff> | merijn: yeah, i know. but don't you think haskell should have a `Read`, a better one even if the current stuff has many things amiss? |
2022-01-26 14:41:11 +0100 | <dminuoso> | merijn: Like, have you tried parsing markdown? What is the original markdown syntax even? Who knows, even the reference implementation is bugged with respect to their own examples. |
2022-01-26 14:41:12 +0100 | <merijn> | gaff: The API of Read is just kinda bad for doing anything efficient. Read is *horribly* slow |
2022-01-26 14:41:18 +0100 | <kuribas> | dminuoso: code generation is messy. |
2022-01-26 14:41:20 +0100 | <merijn> | dminuoso: Markdown is just it's own hell |
2022-01-26 14:41:27 +0100 | <gaff> | ok |
2022-01-26 14:41:39 +0100 | <merijn> | dminuoso: I'm thinking more of "parsing output from my own programs" |
2022-01-26 14:41:47 +0100 | <dminuoso> | gaff: Not to mention that Read has absolutely no diagnostics for when it doesnt parse. |
2022-01-26 14:42:19 +0100 | <gaff> | dminuoso: i agree, but i am arguing for a "better" read. |
2022-01-26 14:42:19 +0100 | <dminuoso> | merijn: I tend to define interchange formats (say via JSON). So at least you have a kind of schema inside that. |
2022-01-26 14:42:36 +0100 | <merijn> | dminuoso: Half of the time I'm using megaparsec to parse some ad hoc format my own code outputs somewhere else. Usually simple enough that a "proper grammar" is more work than necessary, but *not* using parser combinators would make the input really annoying to deal with |
2022-01-26 14:43:55 +0100 | pieguy128 | (~pieguy128@bas1-montreal02-65-92-163-251.dsl.bell.ca) |
2022-01-26 14:44:49 +0100 | <gaff> | thanks everyone |
2022-01-26 14:44:56 +0100 | gaff | (~gaff@49.207.213.209) () |
2022-01-26 14:45:59 +0100 | <merijn> | In general I think the Numeric module is one of those base modules that is more obscure than it should be |
2022-01-26 14:46:05 +0100 | eL_Bart0 | (eL_Bart0@dietunichtguten.org) |
2022-01-26 14:46:32 +0100 | <geekosaur> | yes |
2022-01-26 14:46:39 +0100 | <geekosaur> | in several senses |
2022-01-26 14:48:20 +0100 | <dminuoso> | Python definitely has an advantage with respect to easing beginners into solving immediate problems by giving them simple tools to parse and and process data. |
2022-01-26 14:49:03 +0100 | <dminuoso> | Not that I prefer it, but from a beginners perspective I can see how Haskell might seem unwieldy when it's not even obvious and simple how to "take a file and process it" given just base. |
2022-01-26 14:50:09 +0100 | <merijn> | Sure. |
2022-01-26 14:50:30 +0100 | <merijn> | It's just one of those things where "what's easy for beginners" and "what is good long term" are not remotely the same |
2022-01-26 14:54:41 +0100 | deadmarshal | (~deadmarsh@95.38.116.147) (Ping timeout: 268 seconds) |
2022-01-26 14:55:04 +0100 | deadmarshal | (~deadmarsh@95.38.112.231) |
2022-01-26 14:56:07 +0100 | Guest52 | (~Guest52@80-100-97-100.ip.xs4all.nl) |
2022-01-26 14:56:59 +0100 | tubogram4 | (~tubogram@user/tubogram) |
2022-01-26 14:57:37 +0100 | <maerwald> | dminuoso: even as a non-beginner, it's confusing |
2022-01-26 14:59:33 +0100 | Morrow_ | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) |
2022-01-26 15:01:40 +0100 | Morrow | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Read error: Connection reset by peer) |
2022-01-26 15:01:59 +0100 | bontaq | (~user@ool-45779fe5.dyn.optonline.net) |
2022-01-26 15:02:49 +0100 | Morrow | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) |
2022-01-26 15:04:33 +0100 | Morrow_ | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 268 seconds) |
2022-01-26 15:05:57 +0100 | tubogram4 | (~tubogram@user/tubogram) (Quit: See ya later!) |
2022-01-26 15:07:32 +0100 | pieguy128 | (~pieguy128@bas1-montreal02-65-92-163-251.dsl.bell.ca) (Ping timeout: 240 seconds) |
2022-01-26 15:08:01 +0100 | tubogram4 | (~tubogram@user/tubogram) |
2022-01-26 15:08:11 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::ee17) (Remote host closed the connection) |
2022-01-26 15:08:48 +0100 | tubogram4 | (~tubogram@user/tubogram) (Client Quit) |
2022-01-26 15:12:48 +0100 | wombat875 | (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) |
2022-01-26 15:13:12 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:7175:fef6:491:2dba) |
2022-01-26 15:13:29 +0100 | tubogram4 | (~tubogram@user/tubogram) |
2022-01-26 15:15:31 +0100 | tubogram4 | (~tubogram@user/tubogram) (Client Quit) |
2022-01-26 15:15:51 +0100 | max22- | (~maxime@2a01cb0883359800c869e03b4284e26a.ipv6.abo.wanadoo.fr) |
2022-01-26 15:16:15 +0100 | tubogram4 | (~tubogram@user/tubogram) |
2022-01-26 15:16:32 +0100 | whatsupdoc | (uid509081@id-509081.hampstead.irccloud.com) (Quit: Connection closed for inactivity) |
2022-01-26 15:17:17 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:7175:fef6:491:2dba) (Ping timeout: 240 seconds) |
2022-01-26 15:17:18 +0100 | wombat875 | (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) (Ping timeout: 250 seconds) |
2022-01-26 15:18:49 +0100 | pieguy128 | (~pieguy128@bas8-montreal02-65-93-195-202.dsl.bell.ca) |
2022-01-26 15:18:54 +0100 | wyrd | (~wyrd@gateway/tor-sasl/wyrd) (Ping timeout: 276 seconds) |
2022-01-26 15:19:04 +0100 | wombat875 | (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) |
2022-01-26 15:22:05 +0100 | deadmarshal_ | (~deadmarsh@95.38.116.86) |
2022-01-26 15:22:23 +0100 | deadmarshal | (~deadmarsh@95.38.112.231) (Ping timeout: 256 seconds) |
2022-01-26 15:25:08 +0100 | wyrd | (~wyrd@gateway/tor-sasl/wyrd) |
2022-01-26 15:27:17 +0100 | wombat875 | (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) (Ping timeout: 240 seconds) |
2022-01-26 15:28:21 +0100 | wombat875 | (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) |
2022-01-26 15:30:58 +0100 | Morrow_ | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) |
2022-01-26 15:32:24 +0100 | haskellberryfinn | (~nut@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) |
2022-01-26 15:32:41 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) |
2022-01-26 15:32:41 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
2022-01-26 15:32:41 +0100 | wroathe | (~wroathe@user/wroathe) |
2022-01-26 15:35:23 +0100 | Morrow | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 268 seconds) |
2022-01-26 15:38:23 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) |
2022-01-26 15:38:50 +0100 | Morrow | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) |
2022-01-26 15:41:57 +0100 | Morrow_ | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 240 seconds) |
2022-01-26 15:43:18 +0100 | Morrow | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 250 seconds) |
2022-01-26 15:43:21 +0100 | on^ | (~on@96-86-240-178-static.hfc.comcastbusiness.net) (Remote host closed the connection) |
2022-01-26 15:45:37 +0100 | wombat875 | (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) (Ping timeout: 256 seconds) |
2022-01-26 15:46:24 +0100 | <dminuoso> | tomsmeding: https://gitlab.com/wobcom/haskell/dns-patterns/-/blob/master/lib/Network/DNS/Pattern.hs#L165-169 |
2022-01-26 15:46:29 +0100 | <dminuoso> | I decided to special case it after all. |
2022-01-26 15:46:39 +0100 | shailangsa | (~shailangs@host86-185-98-37.range86-185.btcentralplus.com) () |
2022-01-26 15:46:45 +0100 | <dminuoso> | I feel like this is still cheating, Im looking for something grammatically pleasing |
2022-01-26 15:49:13 +0100 | <tomsmeding> | dminuoso: you can't get around branching on whether you have the root domain somehow, because you have to act differently depending on whether the input starts with a dot (root domain, nothing can come after) or not (non-root domain, must have a label then dot then etc.) |
2022-01-26 15:49:34 +0100 | <tomsmeding> | the branch doesn't need lookahead though, so it's all good :) |
2022-01-26 15:50:12 +0100 | <dminuoso> | tomsmeding: I can get around it if I employ my "append a nul byte" trick though. |
2022-01-26 15:50:30 +0100 | <tomsmeding> | can you? |
2022-01-26 15:51:07 +0100 | SummerSonw | (~The_viole@203.77.49.232) (Read error: Connection reset by peer) |
2022-01-26 15:52:13 +0100 | shriekingnoise | (~shrieking@201.231.16.156) |
2022-01-26 15:52:19 +0100 | epolanski | (uid312403@id-312403.helmsley.irccloud.com) |
2022-01-26 15:54:37 +0100 | mvk | (~mvk@2607:fea8:5cdc:bf00::a2bf) (Ping timeout: 240 seconds) |
2022-01-26 15:55:15 +0100 | imalsogreg | (~imalsogre@c-73-133-206-117.hsd1.md.comcast.net) |
2022-01-26 15:57:53 +0100 | <dminuoso> | tomsmeding: Yes, given that now my labels permit nul bytes |
2022-01-26 15:58:05 +0100 | <dminuoso> | Or.. |
2022-01-26 15:58:07 +0100 | <dminuoso> | mmm. |
2022-01-26 15:58:20 +0100 | <tomsmeding> | you'd need to _prepend_ a nul byte, right? |
2022-01-26 15:58:32 +0100 | <tomsmeding> | that would work |
2022-01-26 15:58:43 +0100 | <tomsmeding> | but I find that uglier than fixing the grammar, which is what you've done now |
2022-01-26 15:58:46 +0100 | <tomsmeding> | but subjective |
2022-01-26 15:58:46 +0100 | <dminuoso> | No it would not |
2022-01-26 15:58:51 +0100 | <dminuoso> | Because I have to get that nul byte out again |
2022-01-26 15:58:55 +0100 | waleee | (~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4) |
2022-01-26 15:59:03 +0100 | <tomsmeding> | though you could do that with an fmap |
2022-01-26 15:59:15 +0100 | <dminuoso> | an fmap1 really |
2022-01-26 15:59:24 +0100 | <tomsmeding> | fmap1? |
2022-01-26 15:59:30 +0100 | <dminuoso> | Sure, consider this input: |
2022-01-26 15:59:40 +0100 | tomsmeding | has a meeting now but will be back later and see your stuff |
2022-01-26 15:59:43 +0100 | <dminuoso> | "\NUL." |
2022-01-26 16:00:05 +0100 | <dminuoso> | If I prepend a \NUL, this ends up producing DomainLabels ["\NUL\NUL"] |
2022-01-26 16:00:08 +0100 | <dminuoso> | And similarly: |
2022-01-26 16:00:22 +0100 | <dminuoso> | "\NUL.\NUL. would produce DomainLabels ["\NUL\NUL", "\NUL"] |
2022-01-26 16:00:36 +0100 | <dminuoso> | I cant just fmap over the result |
2022-01-26 16:00:48 +0100 | soxen | (~bob@pool-173-54-217-168.nwrknj.fios.verizon.net) |
2022-01-26 16:00:51 +0100 | <dminuoso> | I must only drop the first character on the first element |
2022-01-26 16:01:10 +0100 | <dminuoso> | hence `fmap1` (which just maps over the first element) |
2022-01-26 16:03:58 +0100 | dyeplexer | (~dyeplexer@user/dyeplexer) |
2022-01-26 16:05:02 +0100 | <sshine> | oh, like 'fmap f (First xs)'? https://hackage.haskell.org/package/base-4.16.0.0/docs/Data-Monoid.html#t:First |
2022-01-26 16:06:42 +0100 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "") |
2022-01-26 16:06:42 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 250 seconds) |
2022-01-26 16:09:20 +0100 | cfricke | (~cfricke@user/cfricke) (Quit: WeeChat 3.3) |
2022-01-26 16:10:05 +0100 | wombat875 | (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) |
2022-01-26 16:11:06 +0100 | wombat875 | (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) (Client Quit) |
2022-01-26 16:12:17 +0100 | FroskyArr | (~froskyarr@203.175.13.219) |
2022-01-26 16:12:59 +0100 | bliminse_ | bliminse |
2022-01-26 16:14:17 +0100 | frosky_ | (~froskyarr@120.239.9.244) (Ping timeout: 240 seconds) |
2022-01-26 16:14:49 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) |
2022-01-26 16:14:49 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
2022-01-26 16:14:49 +0100 | wroathe | (~wroathe@user/wroathe) |
2022-01-26 16:15:27 +0100 | CHUD | (~CHUD@host-80-41-89-108.as13285.net) |
2022-01-26 16:15:59 +0100 | <kuribas> | merijn: there should be a language which is easy for beginners, but also with clear semantics. |
2022-01-26 16:16:14 +0100 | <dminuoso> | kuribas: golang is that. |
2022-01-26 16:16:20 +0100 | <dminuoso> | It's probably part of its success story. |
2022-01-26 16:16:44 +0100 | <dminuoso> | If only it had tools to write scalable software.. |
2022-01-26 16:17:20 +0100 | CHUD | (~CHUD@host-80-41-89-108.as13285.net) (Remote host closed the connection) |
2022-01-26 16:19:16 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 250 seconds) |
2022-01-26 16:19:26 +0100 | akegalj | (~akegalj@141-136-245-236.dsl.iskon.hr) (Quit: leaving) |
2022-01-26 16:19:48 +0100 | Sgeo | (~Sgeo@user/sgeo) |
2022-01-26 16:22:04 +0100 | <merijn> | kuribas: I'm not sure that's possible, tbh |
2022-01-26 16:30:24 +0100 | gaff | (~gaff@49.207.213.209) |
2022-01-26 16:31:27 +0100 | <gaff> | someone suggested a few minutes back that `Numeric` module has function to read binary literals, but i don't see it there. |
2022-01-26 16:32:26 +0100 | <gaff> | `readBin` not there in `Numeric` |
2022-01-26 16:32:33 +0100 | Clint | (~Clint@user/clint) |
2022-01-26 16:32:59 +0100 | <merijn> | https://hackage.haskell.org/package/base-4.16.0.0/docs/Numeric.html#v:readBin |
2022-01-26 16:33:06 +0100 | <merijn> | Are you looking at the right version? |
2022-01-26 16:34:27 +0100 | <gaff> | but it is not showing up on GHCi. i am using 8.10.4 |
2022-01-26 16:34:47 +0100 | <merijn> | Ah, looks like it's fairly new |
2022-01-26 16:35:03 +0100 | <merijn> | You can use readInt to make your own easily enough, though |
2022-01-26 16:35:31 +0100 | <gaff> | merijn: it is fairly new |
2022-01-26 16:35:53 +0100 | <gaff> | my base is 4.14, the link you have posted, the base version is 4.16 |
2022-01-26 16:35:56 +0100 | <gaff> | no wonder |
2022-01-26 16:36:13 +0100 | pooryorick | (~pooryoric@87-119-174-173.tll.elisa.ee) (Ping timeout: 240 seconds) |
2022-01-26 16:37:07 +0100 | <gaff> | merijn: thanks a bunch, anyway. nice to know it exists in the future :) |
2022-01-26 16:39:53 +0100 | <geekosaur> | why are you on 8.10.4 instead of 8.10.7? (although 8.10.7 still doesn't have readBin, it does have a number of bugfixes and Apple M1 support) |
2022-01-26 16:40:26 +0100 | <merijn> | geekosaur: Inertia? :p |
2022-01-26 16:40:37 +0100 | waleee | (~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4) (Ping timeout: 240 seconds) |
2022-01-26 16:40:48 +0100 | <gaff> | geekosaur: i am using an old macbook air laptop, so i am risking a newer version because of my OS. |
2022-01-26 16:41:13 +0100 | <gaff> | sorry, i am not risking a newer version because of my OS |
2022-01-26 16:41:43 +0100 | <gaff> | thanks for the information anyway. |
2022-01-26 16:41:45 +0100 | <merijn> | I mean, how old are we talking? |
2022-01-26 16:42:06 +0100 | <gaff> | gee, 9 years old |
2022-01-26 16:42:19 +0100 | <gaff> | nearly 10 years |
2022-01-26 16:42:26 +0100 | <merijn> | oof, ok, that's more extreme than me :p |
2022-01-26 16:42:39 +0100 | <gaff> | yeah, but it is going well |
2022-01-26 16:42:53 +0100 | alex[m] | (~alexchete@2001:470:69fc:105::1:1001) (Quit: Client limit exceeded: 20000) |
2022-01-26 16:42:57 +0100 | geekosaur | remembers his old macbook air |
2022-01-26 16:43:08 +0100 | <gaff> | 8.10.4 GHC installation was a rollercoster .... so |
2022-01-26 16:43:11 +0100 | alex[m] | (~alexchete@2001:470:69fc:105::1:1001) |
2022-01-26 16:43:12 +0100 | pooryorick | (~pooryoric@87-119-174-173.tll.elisa.ee) |
2022-01-26 16:43:31 +0100 | <geekosaur> | battery eventually went kaput, held onto it for a while and then decided I was never going to use it again and ditched it |
2022-01-26 16:44:07 +0100 | <gaff> | geekosaur: my battery holding well, though. did change one 5 years back. |
2022-01-26 16:46:53 +0100 | <gaff> | thnaks |
2022-01-26 16:46:58 +0100 | gaff | (~gaff@49.207.213.209) () |
2022-01-26 16:48:15 +0100 | prrxddq[m] | (~prrxddqma@2001:470:69fc:105::1:4f72) (Quit: Client limit exceeded: 20000) |
2022-01-26 16:48:46 +0100 | SridharRatnakuma | (~sridmatri@2001:470:69fc:105::1c2) (Quit: Client limit exceeded: 20000) |
2022-01-26 16:50:05 +0100 | slack1256 | (~slack1256@191.125.227.221) |
2022-01-26 16:56:25 +0100 | haskellberryfinn | (~nut@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Quit: WeeChat 3.3) |
2022-01-26 16:56:58 +0100 | soxen | (~bob@pool-173-54-217-168.nwrknj.fios.verizon.net) (Ping timeout: 250 seconds) |
2022-01-26 16:57:35 +0100 | haskellberryfinn | (~nut@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) |
2022-01-26 17:00:06 +0100 | FroskyArr | (~froskyarr@203.175.13.219) (Remote host closed the connection) |
2022-01-26 17:00:30 +0100 | FroskyArr | (~froskyarr@203.175.13.219) |
2022-01-26 17:09:24 +0100 | Guest|81 | (~Guest|81@49.37.170.120) |
2022-01-26 17:09:43 +0100 | Guest|81 | (~Guest|81@49.37.170.120) (Client Quit) |
2022-01-26 17:12:43 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) (Quit: WeeChat 3.3) |
2022-01-26 17:13:00 +0100 | justsomeguy | (~justsomeg@user/justsomeguy) (Ping timeout: 250 seconds) |
2022-01-26 17:16:16 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) |
2022-01-26 17:18:38 +0100 | slack1256 | (~slack1256@191.125.227.221) (Remote host closed the connection) |
2022-01-26 17:20:29 +0100 | yauhsien_ | (~yauhsien@61-231-17-3.dynamic-ip.hinet.net) |
2022-01-26 17:24:24 +0100 | imalsogreg | (~imalsogre@c-73-133-206-117.hsd1.md.comcast.net) (Remote host closed the connection) |
2022-01-26 17:24:53 +0100 | yauhsien_ | (~yauhsien@61-231-17-3.dynamic-ip.hinet.net) (Ping timeout: 250 seconds) |
2022-01-26 17:25:22 +0100 | imalsogreg | (~imalsogre@c-73-133-206-117.hsd1.md.comcast.net) |
2022-01-26 17:26:02 +0100 | qwedfg | (~qwedfg@user/qwedfg) (Quit: ZNC - https://znc.in) |
2022-01-26 17:28:14 +0100 | <tomsmeding> | dminuoso: well you have to fmap (in the parser monad) fmap1 (on the list) |
2022-01-26 17:28:15 +0100 | prrxddq[m] | (~prrxddqma@2001:470:69fc:105::1:4f72) |
2022-01-26 17:28:27 +0100 | SridharRatnakuma | (~sridmatri@2001:470:69fc:105::1c2) |
2022-01-26 17:28:45 +0100 | <tomsmeding> | I don't see how _appending_ \NUL would help with making this parse with less choice |
2022-01-26 17:29:00 +0100 | <tomsmeding> | though maybe at this point I'm beating a dead horse :p |
2022-01-26 17:29:12 +0100 | lortabac | (~lortabac@2a01:e0a:541:b8f0:23a9:7efc:99f6:4072) (Quit: WeeChat 2.8) |
2022-01-26 17:29:28 +0100 | imalsogreg | (~imalsogre@c-73-133-206-117.hsd1.md.comcast.net) (Ping timeout: 250 seconds) |
2022-01-26 17:29:52 +0100 | dschrempf | (~dominik@070-207.dynamic.dsl.fonira.net) |
2022-01-26 17:30:30 +0100 | qwedfg | (~qwedfg@user/qwedfg) |
2022-01-26 17:31:34 +0100 | thomas_ | (~thomas@2a02:a03f:666e:c500:92eb:d341:15bc:3f3d) |
2022-01-26 17:32:01 +0100 | imalsogreg | (~imalsogre@c-73-133-206-117.hsd1.md.comcast.net) |
2022-01-26 17:34:45 +0100 | ec | (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
2022-01-26 17:38:25 +0100 | ShalokShalom | (~ShalokSha@194-118-168-233.hdsl.highway.telekom.at) |
2022-01-26 17:38:31 +0100 | <ShalokShalom> | hi there |
2022-01-26 17:38:55 +0100 | <ShalokShalom> | I read about a new version of Haskell, that has a selection of extensions build in |
2022-01-26 17:39:04 +0100 | <ShalokShalom> | What version is this? |
2022-01-26 17:39:57 +0100 | econo | (uid147250@user/econo) |
2022-01-26 17:40:31 +0100 | <geekosaur> | 9.2.1 has -XGHC2021 which turns on a selection of extensions. this extension is enabled by default |
2022-01-26 17:41:01 +0100 | <ShalokShalom> | thanks a lot |
2022-01-26 17:41:42 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:7175:fef6:491:2dba) |
2022-01-26 17:42:34 +0100 | ShalokShalom | (~ShalokSha@194-118-168-233.hdsl.highway.telekom.at) (Client Quit) |
2022-01-26 17:43:28 +0100 | mbuf | (~Shakthi@122.173.242.184) (Quit: Leaving) |
2022-01-26 17:45:02 +0100 | yauhsien_ | (~yauhsien@61-231-17-3.dynamic-ip.hinet.net) |
2022-01-26 17:47:36 +0100 | CHUD | (~CHUD@host-80-41-89-108.as13285.net) |
2022-01-26 17:48:08 +0100 | lbseale | (~ep1ctetus@user/ep1ctetus) |
2022-01-26 17:48:18 +0100 | Akiva | (~Akiva@user/Akiva) |
2022-01-26 17:49:49 +0100 | o | (~niko@libera/staff/niko) (Ping timeout: 633 seconds) |
2022-01-26 17:49:50 +0100 | yauhsien_ | (~yauhsien@61-231-17-3.dynamic-ip.hinet.net) (Ping timeout: 250 seconds) |
2022-01-26 17:51:57 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 240 seconds) |
2022-01-26 17:52:00 +0100 | myShoggoth | (~myShoggot@97-120-67-120.ptld.qwest.net) |
2022-01-26 17:54:07 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) |
2022-01-26 17:57:23 +0100 | zmt00 | (~zmt00@user/zmt00) |
2022-01-26 17:59:20 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:7175:fef6:491:2dba) (Remote host closed the connection) |
2022-01-26 18:01:37 +0100 | werneta | (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 256 seconds) |
2022-01-26 18:02:31 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:7175:fef6:491:2dba) |
2022-01-26 18:04:29 +0100 | mvk | (~mvk@2607:fea8:5cdc:bf00::a2bf) |
2022-01-26 18:05:06 +0100 | <janus> | is 9.0.2 more reliable than 9.2.1? |
2022-01-26 18:05:19 +0100 | <maerwald> | probably |
2022-01-26 18:07:05 +0100 | <geekosaur> | certainly more reliable on apple m1, because of late severe bugs found in the native codegen |
2022-01-26 18:07:17 +0100 | lionhairdino | (~jacoo@121.131.39.82) (Ping timeout: 240 seconds) |
2022-01-26 18:07:39 +0100 | FroskyArr | (~froskyarr@203.175.13.219) (Remote host closed the connection) |
2022-01-26 18:07:55 +0100 | zebrag | (~chris@user/zebrag) |
2022-01-26 18:08:04 +0100 | FroskyArr | (~froskyarr@203.175.13.219) |
2022-01-26 18:11:46 +0100 | <c_wraith> | It probably still has a lot of the 9.0 new-feature bugs (as opposed to regressions) that 9.2 fixed, though. |
2022-01-26 18:12:14 +0100 | <ephemient> | would ghc-9.2.1 with -fllvm be better than 9.0.2 then? (I don't have an M1, just curious) |
2022-01-26 18:12:16 +0100 | <c_wraith> | If you're not looking for bleeding edge stuff, it's definitely the right choice. |
2022-01-26 18:13:01 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection) |
2022-01-26 18:13:30 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) |
2022-01-26 18:14:38 +0100 | wombat875 | (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) |
2022-01-26 18:14:45 +0100 | <geekosaur> | -fllvm is not generally recommended for any platform but apple m1s. the codegen bugs in 9.2.1 only affect m1s |
2022-01-26 18:17:43 +0100 | <janus> | c_wraith: which is definitely the right choice? you seem affirmative but that is inconsistent with ephemient's question |
2022-01-26 18:19:34 +0100 | <EvanR> | to quickly reload a haskell "file", module, that has changed and say use the new version of some top level data value there, would mueval work? |
2022-01-26 18:19:41 +0100 | <EvanR> | some kind of eval solution |
2022-01-26 18:19:50 +0100 | <geekosaur> | 9.0.2 is most recently released and fixes the bugs in 9.0.1. 9.2.1 has several bugs but all of them are in new features in the 9.2 series, so unloess you need those features I'd stick with 9.0.2 or even 8.10.7 |
2022-01-26 18:20:18 +0100 | <geekosaur> | (lots of people have not upgraded from 8.10.7 yet) |
2022-01-26 18:21:33 +0100 | <sclv> | with m1 its sort of a bad story all round in my experience. i couldn't get the llvm stuff working right, but also afaik its the only option. |
2022-01-26 18:21:34 +0100 | werneta | (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) |
2022-01-26 18:22:27 +0100 | <sclv> | that said, i'm using an m1 and 9.2.1 without llvm because i'm developing and not deploying, so i can live with buggy codegen for a smooth dev experience at the moment :-P |
2022-01-26 18:22:56 +0100 | imalsogreg | (~imalsogre@c-73-133-206-117.hsd1.md.comcast.net) (Remote host closed the connection) |
2022-01-26 18:23:03 +0100 | <c_wraith> | janus: I meant 9.0.2 is right unless you need bleeding-edge features that work better (or only exist) in 9.2 |
2022-01-26 18:23:59 +0100 | ph88^ | (~ph88@ip5f5af71f.dynamic.kabel-deutschland.de) (Quit: Leaving) |
2022-01-26 18:24:31 +0100 | <janus> | sclv: do you expect these issues to be resolved by 9.2.2? |
2022-01-26 18:24:41 +0100 | ec | (~ec@gateway/tor-sasl/ec) |
2022-01-26 18:25:20 +0100 | emf | (~emf@2601:602:9400:8f0:435:b386:5ad4:6eb2) |
2022-01-26 18:25:33 +0100 | <geekosaur> | that's the plan. although they intended to release 9.2.2 by the end of the month, and that's fast approaching :( |
2022-01-26 18:26:21 +0100 | CHUD | (~CHUD@host-80-41-89-108.as13285.net) (Ping timeout: 256 seconds) |
2022-01-26 18:27:07 +0100 | <c_wraith> | hackage has finally mostly caught up with 9.2 |
2022-01-26 18:27:19 +0100 | <janus> | Olkiluoto 3 is also supposed to be grid-connected at the end of this month :O bad omen o_O |
2022-01-26 18:27:27 +0100 | <geekosaur> | stackage hasn't though |
2022-01-26 18:27:40 +0100 | <geekosaur> | lts is still 8.10.7, nightly 9.0.2 |
2022-01-26 18:28:14 +0100 | <janus> | gonna be exciting to see when the first ghc9 lts will come, i don't really understand the decision process |
2022-01-26 18:28:42 +0100 | fef | (~thedawn@user/thedawn) (Ping timeout: 276 seconds) |
2022-01-26 18:28:46 +0100 | <c_wraith> | It's almost certain there won't be a 9.x LTS until at least 9.2.2 |
2022-01-26 18:29:16 +0100 | <janus> | oh, why? nightly has 3k packages, seems all right |
2022-01-26 18:30:09 +0100 | <c_wraith> | wanting to wait for features to stabilize more than in 9.0, and codegen to stabilize more than in 9.2.1 |
2022-01-26 18:31:04 +0100 | <janus> | seems super subjetive, i don't understand how this is even measured |
2022-01-26 18:31:30 +0100 | <janus> | i must be blessed since i am not having problems on 9.0 |
2022-01-26 18:31:39 +0100 | <geekosaur> | is there even an objective measure relevant to stackage? |
2022-01-26 18:32:32 +0100 | thomas_ | (~thomas@2a02:a03f:666e:c500:92eb:d341:15bc:3f3d) (Quit: Leaving) |
2022-01-26 18:32:35 +0100 | <EvanR> | ah mueval seems to be totally sandboxed... is there no way to get at the value that the string represents for the host's purposes |
2022-01-26 18:32:43 +0100 | <geekosaur> | also one relevant issue for 9.x is there is no hls support for either 9.0.2 or 9.2.1 yet, and they're having trouble with that support if I understood discussion in #ghc yesterday correctly |
2022-01-26 18:32:49 +0100 | leibniz | (~leibniz@cpc101088-sgyl37-2-0-cust22.18-2.cable.virginm.net) |
2022-01-26 18:33:24 +0100 | <geekosaur> | EvanR, even ghc-api is boxed for that purpose |
2022-01-26 18:33:51 +0100 | <geekosaur> | there are ways to force reloading but they're not easy. most of the easy mechanisms create a completely independent "session" |
2022-01-26 18:33:54 +0100 | <janus> | when lts-18 was released, amazing m1 support and hls support was not a requirement. i don't think it is totally logical that it now would be |
2022-01-26 18:34:22 +0100 | <leibniz> | how do i uninstall haskell |
2022-01-26 18:34:23 +0100 | <leibniz> | ? |
2022-01-26 18:34:44 +0100 | <janus> | aaargh is it you, fog? |
2022-01-26 18:34:56 +0100 | <geekosaur> | if you installed it via your package manager, use your package manager. if you installed via ghcup, use ghcup |
2022-01-26 18:35:04 +0100 | <EvanR> | ghc-api... |
2022-01-26 18:35:27 +0100 | <maerwald> | leibniz: windows? |
2022-01-26 18:35:47 +0100 | <leibniz> | maerwald: yup |
2022-01-26 18:35:54 +0100 | <maerwald> | leibniz: I have a video for you lol |
2022-01-26 18:36:08 +0100 | <maerwald> | https://www.youtube.com/watch?v=bB4fmQiUYPw&t=152s |
2022-01-26 18:36:41 +0100 | <leibniz> | its titled "install" but i want "unistall" it has this also? |
2022-01-26 18:36:45 +0100 | <maerwald> | yes |
2022-01-26 18:36:53 +0100 | <leibniz> | ok thanks |
2022-01-26 18:37:23 +0100 | <leibniz> | janus: is it important? |
2022-01-26 18:37:27 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:7175:fef6:491:2dba) (Remote host closed the connection) |
2022-01-26 18:37:56 +0100 | CHUD | (~CHUD@host-80-41-89-108.as13285.net) |
2022-01-26 18:38:25 +0100 | <janus> | yes, because a lot of people have already lost confidence in fog, and they deserve to know that they are now spending their time with the same person (with a new name) |
2022-01-26 18:39:13 +0100 | <leibniz> | ah, right, it *is* important |
2022-01-26 18:39:29 +0100 | <leibniz> | so its a lifetime deplatforming? |
2022-01-26 18:39:35 +0100 | <leibniz> | and an associated dox |
2022-01-26 18:39:37 +0100 | <leibniz> | !? |
2022-01-26 18:39:45 +0100 | ec | (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
2022-01-26 18:39:48 +0100 | <leibniz> | and this is community ethos!? |
2022-01-26 18:40:53 +0100 | <EvanR> | so ghc API is how mueval, plugins library, all these hot code live code thingies work? |
2022-01-26 18:41:08 +0100 | <leibniz> | are you trying to encourage a form of communication, whereby even if i *associate* with my past code, that other comunity members will start a "pile on" (actually now an *illigal* form of cyberbullying) |
2022-01-26 18:41:23 +0100 | little_mac | (~little_ma@2601:410:4300:3ce0:4001:9094:16f1:84ab) |
2022-01-26 18:41:50 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection) |
2022-01-26 18:41:53 +0100 | <c_wraith> | janus: well, I've got a sample bit of code that works really nicely on ghc 9.2 but gives "sorry, we didn't implement that yet" errors on GHC 9.0.2 :P |
2022-01-26 18:42:11 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) |
2022-01-26 18:42:19 +0100 | <leibniz> | because if your trying to make that part of the haskell communities standard response to *people*, i would strongly discourage that |
2022-01-26 18:43:04 +0100 | <leibniz> | there have been numerous instances of people accusing each other of being bots, etc. |
2022-01-26 18:43:11 +0100 | <leibniz> | haskell has no place for this behaviour |
2022-01-26 18:43:11 +0100 | vicfred | (~vicfred@user/vicfred) |
2022-01-26 18:43:19 +0100 | <maerwald> | leibniz: did you manage to uninstall? |
2022-01-26 18:43:53 +0100 | <leibniz> | i was slightly perturbed, will try to watch the video again. apologies |
2022-01-26 18:46:10 +0100 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 250 seconds) |
2022-01-26 18:46:25 +0100 | <leibniz> | maerwald: its not clear that if the previous install was not via ghcup, that this install script would work. do you know if thats the case? |
2022-01-26 18:46:57 +0100 | <maerwald> | leibniz: do you have the uninstall script? |
2022-01-26 18:47:40 +0100 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) |
2022-01-26 18:48:59 +0100 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) |
2022-01-26 18:49:38 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) (Quit: WeeChat 3.3) |
2022-01-26 18:50:25 +0100 | zebrag | (~chris@user/zebrag) (Quit: Konversation terminated!) |
2022-01-26 18:50:37 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) |
2022-01-26 18:51:35 +0100 | SwarmCollective | (~joseph@2603-6011-bc02-b600-2151-3d00-3640-3cd8.res6.spectrum.com) (Remote host closed the connection) |
2022-01-26 18:51:58 +0100 | SwarmCollective | (~joseph@2603-6011-bc02-b600-b30f-c0b6-681c-4c69.res6.spectrum.com) |
2022-01-26 18:54:48 +0100 | <EvanR> | System.Eval.Haskell> xy <- eval @((),Char,Bool) "((), 'c', True)" [] |
2022-01-26 18:54:59 +0100 | <EvanR> | <command line>: cannot satisfy -package plugins |
2022-01-26 18:55:01 +0100 | <EvanR> | so close xD |
2022-01-26 18:55:10 +0100 | thevishy | (~Nishant@2405:201:f005:c007:39ad:8b3b:de67:f2a2) (Quit: Leaving) |
2022-01-26 18:56:29 +0100 | slowButPresent | (~slowButPr@user/slowbutpresent) |
2022-01-26 18:57:32 +0100 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds) |
2022-01-26 18:58:32 +0100 | zebrag | (~chris@user/zebrag) |
2022-01-26 18:58:39 +0100 | <leibniz> | maerwald: its busy installing some ancient version of ghc and complaining about not being on the path |
2022-01-26 18:58:54 +0100 | CiaoSen | (~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de) |
2022-01-26 18:58:56 +0100 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) |
2022-01-26 18:59:58 +0100 | Jing | (~hedgehog@240e:390:7c53:a7e1:491:83dc:6241:13db) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2022-01-26 19:01:26 +0100 | <[exa]> | how much ancient btw? |
2022-01-26 19:01:34 +0100 | <leibniz> | 8.10 |
2022-01-26 19:01:46 +0100 | <leibniz> | i had 9.2 before |
2022-01-26 19:01:48 +0100 | <[exa]> | that's not that bad |
2022-01-26 19:02:03 +0100 | <EvanR> | https://i.imgur.com/urwQYaR.png |
2022-01-26 19:02:07 +0100 | <leibniz> | i think there is a breaking change though, i was using the new records dot syntax |
2022-01-26 19:02:20 +0100 | <EvanR> | I'm on 8.10.7 |
2022-01-26 19:02:25 +0100 | chele | (~chele@user/chele) (Remote host closed the connection) |
2022-01-26 19:02:35 +0100 | <EvanR> | I don't hate it |
2022-01-26 19:02:36 +0100 | <leibniz> | speaking of new features, has anyone had a chance to experiment with linear types much yet? |
2022-01-26 19:02:37 +0100 | dyeplexer | (~dyeplexer@user/dyeplexer) (Ping timeout: 240 seconds) |
2022-01-26 19:03:46 +0100 | <maerwald> | leibniz: I don't understand. I thought you want to uninstall |
2022-01-26 19:03:48 +0100 | <leibniz> | hmm, the uninstall script didnt unistall the old version |
2022-01-26 19:03:49 +0100 | <[exa]> | hm the OverloadedRecordDot might be there since 9.2, yes |
2022-01-26 19:03:50 +0100 | <maerwald> | now you're installing? |
2022-01-26 19:04:16 +0100 | <leibniz> | thats how you get the uninstall script according to the video |
2022-01-26 19:04:21 +0100 | <maerwald> | lol |
2022-01-26 19:04:30 +0100 | <leibniz> | i ran the script, and it just removed the ghcup version |
2022-01-26 19:04:32 +0100 | <leibniz> | not much good |
2022-01-26 19:04:39 +0100 | <maerwald> | xD |
2022-01-26 19:04:45 +0100 | <[exa]> | I'd delete it manually tbh |
2022-01-26 19:04:53 +0100 | <leibniz> | seems that way |
2022-01-26 19:05:10 +0100 | <[exa]> | on windows that's the safest way anyway |
2022-01-26 19:05:12 +0100 | <leibniz> | im just not sure how it points to the appdata local repo or wherever it puts all the packages |
2022-01-26 19:05:18 +0100 | pavonia | (~user@user/siracusa) (Quit: Bye!) |
2022-01-26 19:05:22 +0100 | <EvanR> | I see plugins is old enough that it doesn't understand how cabal works anymore |
2022-01-26 19:05:32 +0100 | <leibniz> | like which cabal and which ghc it uses has always been a total mystery |
2022-01-26 19:06:09 +0100 | <leibniz> | wasnt there some kind of sandbox thing? |
2022-01-26 19:06:25 +0100 | <leibniz> | i dont want to have to resort to stack for everything |
2022-01-26 19:06:43 +0100 | <EvanR> | I still don't have stack |
2022-01-26 19:06:47 +0100 | <EvanR> | for anything |
2022-01-26 19:06:57 +0100 | <leibniz> | but cabal keeps breaking |
2022-01-26 19:07:00 +0100 | <EvanR> | ? |
2022-01-26 19:07:05 +0100 | <EvanR> | not for me |
2022-01-26 19:07:29 +0100 | <leibniz> | probably you dont accidently do terrible things like unregistering base |
2022-01-26 19:07:38 +0100 | <sclv> | don't worry about uninstalling. |
2022-01-26 19:07:44 +0100 | <sclv> | just install a new fresh clean version, full stop |
2022-01-26 19:07:47 +0100 | ec | (~ec@gateway/tor-sasl/ec) |
2022-01-26 19:07:53 +0100 | <sclv> | and make sure your path points to it, done |
2022-01-26 19:09:39 +0100 | wyrd | (~wyrd@gateway/tor-sasl/wyrd) (Ping timeout: 276 seconds) |
2022-01-26 19:09:43 +0100 | <leibniz> | ahh, ok, now i see some environemtal variables like CABAL_DIR and appdata\cabal\roaming\bin on path |
2022-01-26 19:10:11 +0100 | <leibniz> | i guess i could just go to each of these locations and delete everything |
2022-01-26 19:10:29 +0100 | <EvanR> | I don't need to unregister base since I only use things in cabal isolation |
2022-01-26 19:10:30 +0100 | <leibniz> | i wouldnt want anything it could end up somehow splicing into a newer build |
2022-01-26 19:10:57 +0100 | <leibniz> | EvanR even v2 commands nolonger work, everything is totally broken. idk how |
2022-01-26 19:11:12 +0100 | <c_wraith> | probably because of a belief in uninstalling things |
2022-01-26 19:11:28 +0100 | <leibniz> | this is what i was thinking. that i would have to reinstall windows |
2022-01-26 19:11:32 +0100 | <EvanR> | actually, haskell was the only thing I really had working on windows before I got on this linux lifeboat a few months back |
2022-01-26 19:11:44 +0100 | <EvanR> | uninstall windows xD |
2022-01-26 19:12:02 +0100 | <leibniz> | EvanR: same. haskell forces me to reinstall windows so regularly that no other programs survive |
2022-01-26 19:12:04 +0100 | coot | (~coot@2a02:a310:e03f:8500:5cc8:47c:8ec0:b827) (Quit: coot) |
2022-01-26 19:12:23 +0100 | <leibniz> | good language! |
2022-01-26 19:12:38 +0100 | <EvanR> | why would haskell force you to reinstall windows, I dare ask |
2022-01-26 19:12:49 +0100 | <leibniz> | c_wraith 18:11:13 |
2022-01-26 19:12:49 +0100 | <leibniz> | probably because of a belief in uninstalling things |
2022-01-26 19:12:54 +0100 | <leibniz> | this kind of logic^ |
2022-01-26 19:13:01 +0100 | <monochrom> | For the record, other windows users don't feel forced to reinstall windows for haskell. |
2022-01-26 19:13:13 +0100 | <leibniz> | i cant safely ensure i dodnt delete everything that could cause something to go wrong |
2022-01-26 19:13:30 +0100 | <leibniz> | so its like, one wrong cabal command from total OS disruption |
2022-01-26 19:13:36 +0100 | <EvanR> | um |
2022-01-26 19:13:49 +0100 | <leibniz> | monochrom: probably they dont refuse to use v2 because they are unable to read |
2022-01-26 19:14:16 +0100 | <leibniz> | if there was a "clean reinstall" thing... but i guess thats what stack is for |
2022-01-26 19:14:25 +0100 | <leibniz> | but whenever i mention stack people are like "pah" |
2022-01-26 19:15:12 +0100 | <leibniz> | basically, i think probably if i really carfully see anything haskell related on path, and delete it.. but by that time its easier just to reinstall windows |
2022-01-26 19:17:03 +0100 | <leibniz> | i guess the problem is the ghc team do things like ghcup so they can ensure the install can be reversed. but the chocolatey toolchain is advised via the haskell platform - it should be uninstallable |
2022-01-26 19:17:04 +0100 | MatrixTravelerbo | (~voyagert2@2001:470:69fc:105::22) (K-Lined) |
2022-01-26 19:17:17 +0100 | <leibniz> | like, its not as if it were obtained in a totally untoward way |
2022-01-26 19:17:23 +0100 | <maerwald> | leibniz: chocolatey has a uninstall method |
2022-01-26 19:17:27 +0100 | <sclv> | https://docs.chocolatey.org/en-us/choco/commands/uninstall |
2022-01-26 19:17:28 +0100 | <leibniz> | aha!! |
2022-01-26 19:17:30 +0100 | <leibniz> | nice |
2022-01-26 19:17:39 +0100 | tzh | (~tzh@c-24-21-73-154.hsd1.or.comcast.net) |
2022-01-26 19:18:20 +0100 | coot | (~coot@89-64-85-93.dynamic.chello.pl) |
2022-01-26 19:19:42 +0100 | <maerwald> | it's a little annoying, because there's a uninstall order to follow |
2022-01-26 19:20:26 +0100 | <leibniz> | hmm, google nolonger sends me to the choco install section when i search for haskell platform |
2022-01-26 19:20:31 +0100 | <leibniz> | now i find ghcup |
2022-01-26 19:20:40 +0100 | <sm> | I don't say pah leibniz . stack has always been great at windows support |
2022-01-26 19:20:54 +0100 | <leibniz> | +1 |
2022-01-26 19:21:25 +0100 | <leibniz> | well, if they are going to advise users go via ghcup from now on, then i shouldnt be using chocolatey anymore i guess |
2022-01-26 19:21:46 +0100 | <leibniz> | so if i just reinstall windows and use ghcup from now on at least if i break anything i can reinstall everything easily |
2022-01-26 19:21:47 +0100 | <maerwald> | not sure stack has a uninstaller though on windows? |
2022-01-26 19:21:52 +0100 | <leibniz> | stupid v1 conflicts |
2022-01-26 19:22:14 +0100 | <leibniz> | i cant find how to unsintall via chocolatey |
2022-01-26 19:22:32 +0100 | <leibniz> | neither choco unisntall haskell, or choco unisntall haskell-platform work |
2022-01-26 19:22:47 +0100 | <maerwald> | try 'choco uninstall cabal' first |
2022-01-26 19:23:06 +0100 | <leibniz> | yeah that works |
2022-01-26 19:23:15 +0100 | <leibniz> | and then ghc? |
2022-01-26 19:23:19 +0100 | <maerwald> | yeah |
2022-01-26 19:23:24 +0100 | <maerwald> | that's what I said with uninstall order |
2022-01-26 19:23:31 +0100 | <leibniz> | actually, maybe i dont need to uninstall ghc |
2022-01-26 19:23:50 +0100 | <maerwald> | well, good luck having multiple tools install ghc |
2022-01-26 19:23:58 +0100 | <leibniz> | Unable to uninstall 'cabal 3.6.2.0' because 'ghc 9.2.1, haskell-dev 0.0.1' depend on it |
2022-01-26 19:24:06 +0100 | gehmehgeh | (~user@user/gehmehgeh) (Remote host closed the connection) |
2022-01-26 19:24:08 +0100 | <maerwald> | yeah, uninstall ghc first |
2022-01-26 19:24:10 +0100 | <maerwald> | :D |
2022-01-26 19:24:38 +0100 | <maerwald> | chocolatey is really not great at usability |
2022-01-26 19:24:46 +0100 | gehmehgeh | (~user@user/gehmehgeh) |
2022-01-26 19:24:58 +0100 | <leibniz> | haskell-dev first, then ghc, then cabal, seems to work |
2022-01-26 19:25:08 +0100 | <leibniz> | (uninstall order) |
2022-01-26 19:25:41 +0100 | <EvanR> | once I used ghcup on windows, everything worked much better. Now I'm using ghcup on ubuntu |
2022-01-26 19:25:57 +0100 | <EvanR> | I also use it on osx |
2022-01-26 19:26:01 +0100 | <EvanR> | full house |
2022-01-26 19:26:04 +0100 | <leibniz> | so now that i have managed to unistall via chocolatey, should i reinstall there too? |
2022-01-26 19:26:15 +0100 | <leibniz> | seems to get the more up to dat ghc version |
2022-01-26 19:27:22 +0100 | <leibniz> | EvanR: ok fine, if thats the way to go ill just do that |
2022-01-26 19:27:30 +0100 | <leibniz> | how to make it get the 9.2.2 though? |
2022-01-26 19:27:42 +0100 | <EvanR> | the UI lets you select ghc version |
2022-01-26 19:27:44 +0100 | <maerwald> | 9.2.2? |
2022-01-26 19:28:02 +0100 | <leibniz> | erp, 9.2.1 |
2022-01-26 19:28:07 +0100 | <maerwald> | EvanR: there's no TUI in windows :( |
2022-01-26 19:28:24 +0100 | <EvanR> | ah, however it lets you select |
2022-01-26 19:28:29 +0100 | <maerwald> | leibniz: after installation, open a powershell user session and type 'ghcup install ghc latest' |
2022-01-26 19:29:30 +0100 | Ram-Z | (~Ram-Z@li1814-254.members.linode.com) (Quit: ZNC - http://znc.in) |
2022-01-26 19:29:36 +0100 | <leibniz> | the installation get a ghc though, and it takes ages |
2022-01-26 19:29:43 +0100 | <leibniz> | cant i get ghcup without? |
2022-01-26 19:29:45 +0100 | ProfSimm | (~ProfSimm@87.227.196.109) |
2022-01-26 19:30:00 +0100 | <maerwald> | yeah |
2022-01-26 19:30:01 +0100 | <leibniz> | https://www.haskell.org/ghcup/ |
2022-01-26 19:30:08 +0100 | <maerwald> | you can |
2022-01-26 19:30:08 +0100 | <leibniz> | im pasting that into powershell |
2022-01-26 19:30:49 +0100 | <leibniz> | hmm, but i ran the unistaller and it unistalled everything |
2022-01-26 19:31:03 +0100 | <leibniz> | now i dont have ghcup andymore, and that command installed a ghc last time i ran it |
2022-01-26 19:31:10 +0100 | <leibniz> | so how can i? |
2022-01-26 19:31:10 +0100 | <maerwald> | wait a second |
2022-01-26 19:31:30 +0100 | imalsogreg | (~imalsogre@2601:147:300:f930::ee17) |
2022-01-26 19:31:47 +0100 | Ram-Z | (Ram-Z@2a01:7e01::f03c:91ff:fe57:d2df) |
2022-01-26 19:32:03 +0100 | <maerwald> | Set-ExecutionPolicy Bypass -Scope Process -Force;[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072;Invoke-Command -ScriptBlock ([ScriptBlock]::Create((Invoke-WebRequest https://www.haskell.org/ghcup/sh/bootstrap-haskell.ps1 -UseBasicParsing))) -ArgumentList $true, $true |
2022-01-26 19:32:05 +0100 | Akiva | (~Akiva@user/Akiva) (Ping timeout: 250 seconds) |
2022-01-26 19:32:18 +0100 | <maerwald> | note the additional ", $true" at the end |
2022-01-26 19:32:24 +0100 | gehmehgeh | (~user@user/gehmehgeh) (Ping timeout: 276 seconds) |
2022-01-26 19:32:40 +0100 | coot | (~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot) |
2022-01-26 19:32:56 +0100 | <leibniz> | what does that do? |
2022-01-26 19:33:14 +0100 | <maerwald> | that will make it just install ghcup and nothing else |
2022-01-26 19:33:20 +0100 | <maerwald> | so you decide after installation what to install |
2022-01-26 19:33:30 +0100 | <maerwald> | see https://www.haskell.org/ghcup/guide/#basic-usage |
2022-01-26 19:33:50 +0100 | <leibniz> | this is some dark art |
2022-01-26 19:33:56 +0100 | <leibniz> | this extra true flag |
2022-01-26 19:34:03 +0100 | <leibniz> | totally obscure |
2022-01-26 19:34:05 +0100 | <maerwald> | windows powershell makes it extra hard |
2022-01-26 19:34:16 +0100 | gehmehgeh | (~user@user/gehmehgeh) |
2022-01-26 19:34:18 +0100 | <maerwald> | there's no other sane way to do this in a single command |
2022-01-26 19:34:27 +0100 | grabb0id[m] | (~alangmatr@2001:470:69fc:105::b489) (Quit: Client limit exceeded: 20000) |
2022-01-26 19:34:32 +0100 | <leibniz> | choco install ghcup would be good! |
2022-01-26 19:34:47 +0100 | grabb0id[m] | (~alangmatr@2001:470:69fc:105::b489) |
2022-01-26 19:34:54 +0100 | Tuplanolla | (~Tuplanoll@91-159-68-166.elisa-laajakaista.fi) |
2022-01-26 19:34:58 +0100 | <geekosaur> | seems a bit weird to me, using an installer to install an installer |
2022-01-26 19:35:44 +0100 | <leibniz> | ah yeah i guess, to get chocolatey its; |
2022-01-26 19:35:46 +0100 | <leibniz> | Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) |
2022-01-26 19:35:50 +0100 | <EvanR> | if you start with neither, if you could conceptually run them on each other to form a yinyang of hypothetical GHCs |
2022-01-26 19:35:54 +0100 | <leibniz> | same gibberish |
2022-01-26 19:35:59 +0100 | <maerwald> | yeah |
2022-01-26 19:36:17 +0100 | <leibniz> | to get python i type pythin in the microsoft store |
2022-01-26 19:36:23 +0100 | <leibniz> | python* |
2022-01-26 19:36:35 +0100 | <leibniz> | its gets pip and everything which you used to have to do seperately in windows |
2022-01-26 19:36:44 +0100 | <leibniz> | they seem to have used the store to their advantage |
2022-01-26 19:37:00 +0100 | <maerwald> | well, how do you get stuff into the windows store? |
2022-01-26 19:37:02 +0100 | <EvanR> | you didn't want to get ghcup and ghc at the same time, you wanted to do it separately |
2022-01-26 19:37:28 +0100 | <leibniz> | maerwald: idk, cross compile it to android, put it on the play store and then migrate it!?!? |
2022-01-26 19:37:39 +0100 | <leibniz> | might be an easier way... |
2022-01-26 19:37:44 +0100 | <geekosaur> | I'm glad I'm not the only one who makes that typo ("pythin") |
2022-01-26 19:37:51 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:7175:fef6:491:2dba) |
2022-01-26 19:38:13 +0100 | <maerwald> | android? |
2022-01-26 19:38:15 +0100 | ec | (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
2022-01-26 19:38:22 +0100 | <maerwald> | ok, I'll pass |
2022-01-26 19:38:34 +0100 | <leibniz> | EvanR: i guess whatever .msi installer the store runs behind the scenes could basically just get ghcup and then use it to get ghc and cabal and stack |
2022-01-26 19:38:42 +0100 | jgeerds | (~jgeerds@55d4a547.access.ecotel.net) |
2022-01-26 19:38:50 +0100 | <EvanR> | pythin, son of python, son of pythong, son of cnut |
2022-01-26 19:38:52 +0100 | <leibniz> | maerwald: i mean, it would be cool to know how to do that |
2022-01-26 19:38:53 +0100 | CHUD | (~CHUD@host-80-41-89-108.as13285.net) (Ping timeout: 256 seconds) |
2022-01-26 19:39:19 +0100 | <leibniz> | for the monitization |
2022-01-26 19:39:41 +0100 | <leibniz> | probably if i had been able to publish to the play store i would have long ago escaped this compiler hell |
2022-01-26 19:39:44 +0100 | <polyphem> | maybe reinstall of windows store helps ... |
2022-01-26 19:39:49 +0100 | <leibniz> | lol |
2022-01-26 19:40:19 +0100 | <EvanR> | I don't lose sleep over ghc not having a .msi install experience |
2022-01-26 19:40:29 +0100 | neceve | (~quassel@2.26.93.228) |
2022-01-26 19:40:48 +0100 | Ocelot | (~ocelot@50-78-208-189-static.hfc.comcastbusiness.net) |
2022-01-26 19:40:50 +0100 | <maerwald> | to publish on windows store you first need to obtain a developer certificate and pay for it |
2022-01-26 19:40:50 +0100 | <leibniz> | it used to though, the regression seems ominous, as if they are actually *losing* personel |
2022-01-26 19:41:17 +0100 | <leibniz> | maerwald: probably they have a python foundation or something |
2022-01-26 19:41:25 +0100 | <maerwald> | and then you pay for a developer account at MS store too |
2022-01-26 19:41:28 +0100 | <EvanR> | I guess I'm lucky not having most of my time occupied with installing and uninstalling things |
2022-01-26 19:41:46 +0100 | <leibniz> | wierd how MS research cant even afford a MS publishers account... |
2022-01-26 19:41:55 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:7175:fef6:491:2dba) (Remote host closed the connection) |
2022-01-26 19:42:01 +0100 | <leibniz> | youd think they would fund themselves or something |
2022-01-26 19:42:04 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:7175:fef6:491:2dba) |
2022-01-26 19:42:42 +0100 | <leibniz> | EvanR: yes, that |
2022-01-26 19:43:23 +0100 | <leibniz> | i can remember spending hours with msys, mingw and cygwin, trying to build unix things before they finally made wsl |
2022-01-26 19:43:34 +0100 | <EvanR> | on the uninstall front, I've had success just deleting a directory and if I had added env vars at some point, undoing that |
2022-01-26 19:43:54 +0100 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 268 seconds) |
2022-01-26 19:44:18 +0100 | <maerwald> | given that HF is so excited about windows... maybe they should start creating a dev accounts on MS store and obtain signing certificates |
2022-01-26 19:44:31 +0100 | nvmd | (~nvmd@user/nvmd) |
2022-01-26 19:44:50 +0100 | <maerwald> | and talk to python foundation on how they managed to do that |
2022-01-26 19:44:54 +0100 | <EvanR> | in before visual studio includes haskell as one of the new project options? xD |
2022-01-26 19:45:23 +0100 | <EvanR> | haskellution |
2022-01-26 19:45:24 +0100 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) |
2022-01-26 19:45:26 +0100 | <polyphem> | leibnitz: you said your windows is "clean" apart from ghc , and you have lots of experience with unix-tools , why dont install linux and use ghcup in there, would make abetter dev experience ? |
2022-01-26 19:45:33 +0100 | _xor | (~xor@dsl-50-5-233-169.fuse.net) (Read error: Connection reset by peer) |
2022-01-26 19:45:58 +0100 | <leibniz> | i have an install on wsl too |
2022-01-26 19:46:04 +0100 | <leibniz> | there is slight latency |
2022-01-26 19:46:10 +0100 | <leibniz> | i prefer to use the native version |
2022-01-26 19:46:16 +0100 | <leibniz> | also it has issues with the path |
2022-01-26 19:46:26 +0100 | <leibniz> | backslashes in particular |
2022-01-26 19:46:53 +0100 | <polyphem> | switch to a real linux ... i mean |
2022-01-26 19:47:02 +0100 | <leibniz> | i had a script that pplaced things onto the /mnt/c/usr/home directory, so it could use a nix install which required wsl |
2022-01-26 19:47:12 +0100 | <leibniz> | but it would be way better if nix just worked on windows |
2022-01-26 19:47:26 +0100 | <leibniz> | polyphem: i think your missing the point |
2022-01-26 19:47:44 +0100 | <leibniz> | it needs to work for users, so they dont have to abandon their chosen OS! |
2022-01-26 19:47:46 +0100 | _xor | (~xor@dsl-50-5-233-169.fuse.net) |
2022-01-26 19:47:46 +0100 | <polyphem> | leibniz: i think you are missing the point |
2022-01-26 19:47:56 +0100 | _xor | (~xor@dsl-50-5-233-169.fuse.net) (Read error: Connection reset by peer) |
2022-01-26 19:48:07 +0100 | <leibniz> | sure |
2022-01-26 19:48:33 +0100 | <polyphem> | seems like your chosen Os gives you headache ... |
2022-01-26 19:48:38 +0100 | matijja | (~matijja@193.77.181.201) (Quit: ZNC 1.8.1 - https://znc.in) |
2022-01-26 19:49:18 +0100 | <leibniz> | listen, at the point where the community of a language starts accusing the worlds most common opperating system of being the problem in their toolchain, i think that is the point where that language begins to seem stupid to the rest of the world. this is not ok. |
2022-01-26 19:49:30 +0100 | <yushyin> | polyphem: but don't force linux on anyone ... |
2022-01-26 19:49:38 +0100 | ubert1 | (~Thunderbi@p200300ecdf09940ed781da24ea780c96.dip0.t-ipconnect.de) (Remote host closed the connection) |
2022-01-26 19:49:49 +0100 | <leibniz> | haskell on windows has never been bad |
2022-01-26 19:49:58 +0100 | <sm> | leibniz, you're right. It does seem like a thing the HF could and probably will invest in |
2022-01-26 19:50:01 +0100 | <leibniz> | unix libs on windows are another issue entierly! |
2022-01-26 19:50:13 +0100 | <geekosaur> | polyphem, to be fair ghc's windows story is kinda atrocious. mingw is a hack to try to pretend windows is a unixlike |
2022-01-26 19:50:28 +0100 | matijja | (~matijja@193.77.181.201) |
2022-01-26 19:50:35 +0100 | <leibniz> | but now i can just use wsl for things like cblas, so its fine |
2022-01-26 19:50:42 +0100 | <leibniz> | windows, again, to the rescue |
2022-01-26 19:50:59 +0100 | Major_Biscuit | (~MajorBisc@86-88-79-148.fixed.kpn.net) (Ping timeout: 256 seconds) |
2022-01-26 19:51:01 +0100 | <geekosaur> | (iirc the haskell foundation wants to hire someone to improve things there) |
2022-01-26 19:51:02 +0100 | <leibniz> | "oh just use bare metal linux" - really though, why? |
2022-01-26 19:51:23 +0100 | quintasan | (~quassel@quintasan.pl) (Quit: quintasan) |
2022-01-26 19:51:36 +0100 | <leibniz> | wsl is fine, only sligt latency, and just for things like nix pushes to amazon servers, where the slight latency is no issue |
2022-01-26 19:51:40 +0100 | <yushyin> | wsl(2) is a misnomer, it's not a subsystem anymore |
2022-01-26 19:51:43 +0100 | <geekosaur> | I use bare metal linux because I've been using unixes since 1981. it's still a lousy experience for most people though |
2022-01-26 19:51:53 +0100 | <polyphem> | i heard that leibniz's interest involve haskell and unix-tools and i think he had less headache if he would use a real linux , especially since he stated that his current windos is "clean2 ... |
2022-01-26 19:52:02 +0100 | <leibniz> | maybe for blas opperations its not so great though, i dont want to have to train nets through an OS latency |
2022-01-26 19:52:14 +0100 | <leibniz> | hmm, maybe a bare metal linux wouldnt actually be a bad idea |
2022-01-26 19:53:07 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) |
2022-01-26 19:53:07 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
2022-01-26 19:53:07 +0100 | wroathe | (~wroathe@user/wroathe) |
2022-01-26 19:53:42 +0100 | <leibniz> | polyphem: well, since the choco tools are actually capable of an unistall, and now i have ghcup, maybe i wont need to keep reinstalling windows, and can actually have other apps! |
2022-01-26 19:53:56 +0100 | <geekosaur> | I man, I ran Mac for years so I could get the power of unix with a UX that didn't make me want to kill myself |
2022-01-26 19:54:12 +0100 | <geekosaur> | *I mean |
2022-01-26 19:54:13 +0100 | _xor | (~xor@dsl-50-5-233-169.fuse.net) |
2022-01-26 19:54:46 +0100 | <sm> | I really don't think you ever need to be reinstalling windows for haskell. Just learn a little more about where things are |
2022-01-26 19:55:02 +0100 | Guest52 | (~Guest52@80-100-97-100.ip.xs4all.nl) (Ping timeout: 240 seconds) |
2022-01-26 19:55:05 +0100 | <leibniz> | its wierd, the girl upstairs started laughing just as you mentioned suicidal ideations resulting from being an essential dev in fundamentally important technology |
2022-01-26 19:55:20 +0100 | <leibniz> | now she is banging at the floor angrily, id better go |
2022-01-26 19:55:51 +0100 | <Ocelot> | Godspeed. |
2022-01-26 19:56:57 +0100 | leibniz | (~leibniz@cpc101088-sgyl37-2-0-cust22.18-2.cable.virginm.net) (Quit: Connection closed) |
2022-01-26 19:57:49 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 240 seconds) |
2022-01-26 19:57:58 +0100 | <EvanR> | alright, so ghc API is a rabbit hole but potentially powerful |
2022-01-26 19:58:18 +0100 | <EvanR> | I guess that's potentially redundant |
2022-01-26 19:59:22 +0100 | nunggu | (~q@user/nunggu) (Remote host closed the connection) |
2022-01-26 19:59:29 +0100 | machinedgod | (~machinedg@24.105.81.50) (Ping timeout: 256 seconds) |
2022-01-26 19:59:52 +0100 | nunggu | (~q@user/nunggu) |
2022-01-26 19:59:55 +0100 | <monochrom> | No, there are many powerless rabbit holes :) |
2022-01-26 20:00:13 +0100 | <monochrom> | And many powerful non-holes. |
2022-01-26 20:00:46 +0100 | <monochrom> | A powerful drill is a powerful co-hole, for example >:) |
2022-01-26 20:01:45 +0100 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds) |
2022-01-26 20:01:55 +0100 | lispy | (~lispy4@84.69.59.93) |
2022-01-26 20:01:58 +0100 | _xor | (~xor@dsl-50-5-233-169.fuse.net) (Read error: Connection reset by peer) |
2022-01-26 20:02:27 +0100 | <EvanR> | >There is a similar problem for plugins. If a module uses a plugin then depending on the ABI of a plugin is usually not enough. Modules defining plugins expose one identifier plugin :: Plugin and so the ABI does not often change. |
2022-01-26 20:02:59 +0100 | <maerwald[m]> | nix on windows? Like... the worst of both worlds? |
2022-01-26 20:03:01 +0100 | <EvanR> | is this talking about dynamically loaded modules, or compiler plugins |
2022-01-26 20:03:16 +0100 | <geekosaur> | that sounds like compiler plugin abi |
2022-01-26 20:03:36 +0100 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) |
2022-01-26 20:03:44 +0100 | <EvanR> | oof |
2022-01-26 20:03:47 +0100 | quintasan | (~quassel@quintasan.pl) |
2022-01-26 20:03:48 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:7175:fef6:491:2dba) (Remote host closed the connection) |
2022-01-26 20:04:03 +0100 | mixfix41 | (~homefame@user/mixfix41) |
2022-01-26 20:04:22 +0100 | <EvanR> | come on haskell pretend to be a dynamic language |
2022-01-26 20:04:43 +0100 | <monochrom> | @quote monochrom hugs |
2022-01-26 20:04:43 +0100 | <lambdabot> | No quotes match. My mind is going. I can feel it. |
2022-01-26 20:04:48 +0100 | <monochrom> | ugh |
2022-01-26 20:04:49 +0100 | <geekosaur> | if you want module plugins you probably want https://hackage.haskell.org/package/plugins |
2022-01-26 20:05:01 +0100 | <EvanR> | I've been messing with that for the last few hours |
2022-01-26 20:05:02 +0100 | coot | (~coot@89-64-85-93.dynamic.chello.pl) |
2022-01-26 20:05:07 +0100 | <geekosaur> | oh |
2022-01-26 20:05:12 +0100 | <lispy> | html is the world's most popular dynamic programming language, consider learning it |
2022-01-26 20:05:12 +0100 | nvmd | (~nvmd@user/nvmd) (Quit: Later, nerds.) |
2022-01-26 20:05:36 +0100 | <EvanR> | currently fails to mediate with ghc behind the scenes with a command line error like "unable to satisfy -package plugins" |
2022-01-26 20:06:00 +0100 | <EvanR> | on github, the maintainer says "I don't know how this library works, I just accept pull requests and update hackage" |
2022-01-26 20:06:06 +0100 | <geekosaur> | mm, are you using stack or cabal v2? I think that package expects to be globally installed |
2022-01-26 20:06:12 +0100 | <monochrom> | @quote monochrom runghc |
2022-01-26 20:06:12 +0100 | <lambdabot> | monochrom says: just add #! /usr/bin/runghc to your haskell file. then type errors occur at runtime only. |
2022-01-26 20:06:14 +0100 | <EvanR> | really |
2022-01-26 20:06:17 +0100 | <monochrom> | That. :) |
2022-01-26 20:06:42 +0100 | <EvanR> | globally installed... alright |
2022-01-26 20:06:44 +0100 | ec | (~ec@gateway/tor-sasl/ec) |
2022-01-26 20:06:50 +0100 | EvanR | tightens belt |
2022-01-26 20:06:58 +0100 | <geekosaur> | cabal install --lib |
2022-01-26 20:07:06 +0100 | <monochrom> | Yeah plugin was in the era of v1. v2 didn't exist. |
2022-01-26 20:07:16 +0100 | <monochrom> | plugins |
2022-01-26 20:07:33 +0100 | _xor | (~xor@dsl-50-5-233-169.fuse.net) |
2022-01-26 20:07:57 +0100 | max22- | (~maxime@2a01cb0883359800c869e03b4284e26a.ipv6.abo.wanadoo.fr) (Ping timeout: 268 seconds) |
2022-01-26 20:09:10 +0100 | _xor | (~xor@dsl-50-5-233-169.fuse.net) (Read error: Connection reset by peer) |
2022-01-26 20:09:35 +0100 | _xor | (~xor@dsl-50-5-233-169.fuse.net) |
2022-01-26 20:09:54 +0100 | <monochrom> | Ironically v2 solves "depending on the ABI of a plugin is usually not enough". v2 says you depend on complete build context. |
2022-01-26 20:09:57 +0100 | ralu | (~ralu@static.211.245.203.116.clients.your-server.de) (Ping timeout: 240 seconds) |
2022-01-26 20:10:52 +0100 | abrar_ | (~abrar@static-108-2-152-54.phlapa.fios.verizon.net) (Quit: WeeChat 3.1) |
2022-01-26 20:10:55 +0100 | <EvanR> | so... remove plugins from the project build-depends |
2022-01-26 20:10:57 +0100 | merijn | (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds) |
2022-01-26 20:11:04 +0100 | <monochrom> | Then again v2 redefines "ABI" to mean complete build context :) |
2022-01-26 20:11:08 +0100 | <EvanR> | install --lib plugins globally |
2022-01-26 20:11:12 +0100 | abrar | (~abrar@static-108-2-152-54.phlapa.fios.verizon.net) |
2022-01-26 20:12:02 +0100 | <EvanR> | now the program depends on a combination of sandboxed packages and global packages |
2022-01-26 20:12:04 +0100 | CHUD | (~CHUD@host-80-41-89-108.as13285.net) |
2022-01-26 20:12:31 +0100 | deadmarshal_ | (~deadmarsh@95.38.116.86) (Ping timeout: 256 seconds) |
2022-01-26 20:12:32 +0100 | <geekosaur> | yes. I don't think there's a good fix or workaround for that |
2022-01-26 20:12:34 +0100 | <EvanR> | also, leaving the dir and doing cabal install --lib plugins doesn't seem to do anything |
2022-01-26 20:12:49 +0100 | <EvanR> | I guess it's already installed |
2022-01-26 20:13:41 +0100 | <EvanR> | did I already say this, if plugins is unmaintained, how does it even still work with newer ghc |
2022-01-26 20:14:08 +0100 | <EvanR> | confirm... it worked |
2022-01-26 20:14:15 +0100 | nunggu | (~q@user/nunggu) (Remote host closed the connection) |
2022-01-26 20:14:17 +0100 | coot | (~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot) |
2022-01-26 20:14:34 +0100 | <geekosaur> | someone submitted a pull request for it |
2022-01-26 20:14:37 +0100 | <monochrom> | In this case, since there is no need to rebuild, "cabal install --lib" does not have to waste time, it just has to update your environment file. (You can see it is changed.) |
2022-01-26 20:15:19 +0100 | <monochrom> | I guess the GHC API has not changed that much. |
2022-01-26 20:16:16 +0100 | <geekosaur> | I would not be surprised to find it doesn't work with 9.0.2 or 9.2.1, but 8.10.7 is proibably fine. (ghc-api has been changing a lot especially in 9.2.1, actually) |
2022-01-26 20:16:25 +0100 | <monochrom> | Or rather, plugins just needs to ask GHC API to load things. That part doesn't change a lot. |
2022-01-26 20:16:26 +0100 | <EvanR> | well that eval succeeds is serendipitous |
2022-01-26 20:17:01 +0100 | ircbrowse_tom | (~ircbrowse@2a01:4f8:1c1c:9319::1) |
2022-01-26 20:17:02 +0100 | Server | +Cnt |
2022-01-26 20:18:17 +0100 | tomsmeding | (~tomsmedin@tomsmeding.com) (Quit: ZNC 1.8.2 - https://znc.in) |
2022-01-26 20:19:15 +0100 | waleee | (~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4) |
2022-01-26 20:19:42 +0100 | <EvanR> | the eval action takes about 2 seconds of latency |
2022-01-26 20:19:58 +0100 | <EvanR> | to turn "True" into Just True xD |
2022-01-26 20:20:12 +0100 | <EvanR> | > True |
2022-01-26 20:20:14 +0100 | <lambdabot> | True |
2022-01-26 20:20:18 +0100 | <EvanR> | lambdabot is faster |
2022-01-26 20:20:55 +0100 | Akiva | (~Akiva@user/Akiva) |
2022-01-26 20:21:16 +0100 | ralu | (~ralu@static.211.245.203.116.clients.your-server.de) |
2022-01-26 20:21:18 +0100 | <monochrom> | Does it still take 2 seconds the 2nd time? |
2022-01-26 20:21:45 +0100 | <monochrom> | I think that there is a lot of dynamic lazy loading that was forced the 1st time. |
2022-01-26 20:23:41 +0100 | <EvanR> | 2 seconds for the first eval, then 0.2 seconds for each subsequent eval |
2022-01-26 20:23:42 +0100 | gehmehgeh | (~user@user/gehmehgeh) (Remote host closed the connection) |
2022-01-26 20:23:52 +0100 | <EvanR> | pretty good |
2022-01-26 20:24:13 +0100 | gehmehgeh | (~user@user/gehmehgeh) |
2022-01-26 20:24:42 +0100 | <EvanR> | 0.2 might be too slow turn around for linux torvalds though |
2022-01-26 20:24:49 +0100 | <EvanR> | linus* |
2022-01-26 20:25:25 +0100 | <EvanR> | eval takes a list of module names, but it says on stderr it can't find any |
2022-01-26 20:25:43 +0100 | <geekosaur> | you're probably still building a new runtime environment for each expression. if you rearrange things to keep one around instead of naïvelyy calling eval each time, does it get any faster? |
2022-01-26 20:25:46 +0100 | <EvanR> | I guess I need to use the more elaborate call that allows flags to be specified |
2022-01-26 20:26:17 +0100 | <EvanR> | good point |
2022-01-26 20:26:20 +0100 | Major_Biscuit | (~MajorBisc@2a02:a461:129d:1:193d:75d8:745d:e91e) |
2022-01-26 20:26:22 +0100 | _xor | (~xor@dsl-50-5-233-169.fuse.net) (Read error: Connection reset by peer) |
2022-01-26 20:26:28 +0100 | <geekosaur> | might have to dig into the source of eval to see how to do that though |
2022-01-26 20:26:33 +0100 | lbseale | (~ep1ctetus@user/ep1ctetus) (Read error: Connection reset by peer) |
2022-01-26 20:26:48 +0100 | _xor | (~xor@dsl-50-5-233-169.fuse.net) |
2022-01-26 20:26:58 +0100 | _xor | (~xor@dsl-50-5-233-169.fuse.net) (Read error: Connection reset by peer) |
2022-01-26 20:27:17 +0100 | _xor | (~xor@dsl-50-5-233-169.fuse.net) |
2022-01-26 20:27:38 +0100 | <geekosaur> | or better yet the source to ghci, which is almost standalone by design |
2022-01-26 20:27:43 +0100 | <EvanR> | it calls out to ghc |
2022-01-26 20:27:59 +0100 | <EvanR> | using a command line |
2022-01-26 20:28:06 +0100 | <geekosaur> | ghc -e? that'd do it |
2022-01-26 20:28:19 +0100 | <geekosaur> | go poke at ghci sources to see how to do it properly |
2022-01-26 20:28:44 +0100 | <EvanR> | to be clear, we're talking about not using plugins right xD |
2022-01-26 20:29:10 +0100 | <geekosaur> | yes |
2022-01-26 20:29:26 +0100 | <geekosaur> | with the price that this uses a separate runtime environment from your main program |
2022-01-26 20:29:35 +0100 | <geekosaur> | so you can't readily share data |
2022-01-26 20:30:36 +0100 | Major_Biscuit | (~MajorBisc@2a02:a461:129d:1:193d:75d8:745d:e91e) (Ping timeout: 250 seconds) |
2022-01-26 20:31:04 +0100 | tomsmeding | (~tomsmedin@tomsmeding.com) |
2022-01-26 20:31:11 +0100 | <EvanR> | I want to change the definition of a value or a function, then yield the updated value or function to the main program |
2022-01-26 20:31:17 +0100 | <EvanR> | which somehow eval is doing |
2022-01-26 20:31:28 +0100 | <EvanR> | using Typeable to check if it's remotely valid |
2022-01-26 20:31:38 +0100 | <monochrom> | I think data is sharable. |
2022-01-26 20:32:23 +0100 | <monochrom> | The real price is that the separate runtime environment comes from the very same compiler you used to compile your main program. |
2022-01-26 20:32:39 +0100 | Major_Biscuit | (~MajorBisc@2a02:a461:129d:1:193d:75d8:745d:e91e) |
2022-01-26 20:32:41 +0100 | <monochrom> | "same" is down to which directory you installed GHC in. |
2022-01-26 20:33:31 +0100 | <EvanR> | meaning don't expect to ship this exe easily? xD |
2022-01-26 20:33:36 +0100 | <monochrom> | If you ship your exe to another computer, you have to also ship your GHC installation verbatim, yes. |
2022-01-26 20:33:40 +0100 | jgeerds | (~jgeerds@55d4a547.access.ecotel.net) (Quit: Leaving) |
2022-01-26 20:33:48 +0100 | <monochrom> | Either that, or reproduce the same installation effect. |
2022-01-26 20:34:00 +0100 | <geekosaur> | yes |
2022-01-26 20:34:01 +0100 | <EvanR> | I guess that's why people write new programming languages |
2022-01-26 20:34:05 +0100 | <EvanR> | within haskell |
2022-01-26 20:34:08 +0100 | lbseale | (~ep1ctetus@user/ep1ctetus) |
2022-01-26 20:34:41 +0100 | <EvanR> | looking at this now https://github.com/ghc/ghc/tree/master/ghc/GHCi |
2022-01-26 20:34:42 +0100 | <monochrom> | This is why back in the days of whatever was before HLS, it was so fragile. |
2022-01-26 20:34:47 +0100 | <geekosaur> | in particular it needs the settings file and the package database from your ghc installation, plus anything pointed to by the settings file |
2022-01-26 20:35:10 +0100 | <monochrom> | Also it was cabal-v1, to add more hell. |
2022-01-26 20:35:25 +0100 | <EvanR> | is hugs or something like that an option? |
2022-01-26 20:35:31 +0100 | <EvanR> | as a library |
2022-01-26 20:36:43 +0100 | <polyphem> | isn't android the worlds most common operating system ? |
2022-01-26 20:37:07 +0100 | <monochrom> | Hugs is much smaller. You wouldn't feel guilty shipping it. But I don't know that Hugs has a library API. |
2022-01-26 20:37:23 +0100 | Major_Biscuit | (~MajorBisc@2a02:a461:129d:1:193d:75d8:745d:e91e) (Ping timeout: 252 seconds) |
2022-01-26 20:37:54 +0100 | <EvanR> | and hugs may not have some advance stuff |
2022-01-26 20:38:05 +0100 | <monochrom> | Linux kernel version 2.4 is the world's most common OS because home routers. :) |
2022-01-26 20:38:31 +0100 | <EvanR> | whatever OS runs on all the microcontrollers in your car |
2022-01-26 20:38:36 +0100 | <geekosaur> | EvanR, but has its own (Trex is iirc better than anything ghc has come up with in terms of a record system) |
2022-01-26 20:38:42 +0100 | <monochrom> | Hugs has TREX. More advanced than GHC. Today. |
2022-01-26 20:38:55 +0100 | <polyphem> | hmm, i guess a household has a router and maybe some cell phones ... |
2022-01-26 20:39:00 +0100 | <EvanR> | orly |
2022-01-26 20:39:02 +0100 | <monochrom> | TREX also solve all your record problems :) |
2022-01-26 20:39:26 +0100 | <monochrom> | OK I was kidding, phones are more abundant than home routers. |
2022-01-26 20:39:48 +0100 | <monochrom> | Or rather, I don't have data either way. |
2022-01-26 20:40:15 +0100 | <polyphem> | yes , but android is technically linux based |
2022-01-26 20:40:20 +0100 | <geekosaur> | I, uh, spent some time in a homeless shelter. No home routers, but *everyone* had a smartphone |
2022-01-26 20:40:44 +0100 | <geekosaur> | not to mention that it seems like every kid these days has their own smartphone |
2022-01-26 20:41:02 +0100 | <geekosaur> | I would absolutely not be surprised if phone OSes vastly outnumber desktops and laptops |
2022-01-26 20:41:39 +0100 | <monochrom> | But I already blamed everything on Windows long before I heard of Haskell. |
2022-01-26 20:41:52 +0100 | <monochrom> | As a C and C++ user I blamed Windows too. |
2022-01-26 20:42:17 +0100 | <monochrom> | And did not suddenly make C or C++ unappealing to newcomers. |
2022-01-26 20:42:23 +0100 | <EvanR> | now that I'm using Haskell i can blame C and C++ |
2022-01-26 20:42:38 +0100 | <EvanR> | one day I'll be on language blub 9000, and blame Haskell |
2022-01-26 20:43:06 +0100 | vysn | (~vysn@user/vysn) (Ping timeout: 268 seconds) |
2022-01-26 20:43:11 +0100 | <monochrom> | I bet every programming language community thinks of Windows lowly. |
2022-01-26 20:43:25 +0100 | <EvanR> | dot net? |
2022-01-26 20:43:42 +0100 | <monochrom> | If anything, it's OCaml, not Haskell, that really gives the finger to Windows. |
2022-01-26 20:44:03 +0100 | <polyphem> | when i was 14 , on win95 i heard about this strange os that had 9 virtual terminals, i went to the local bookstore and bought a book on linex, and was flashed, when i realized thet it had a cdrom with redhat linux for free ... :) |
2022-01-26 20:44:41 +0100 | <EvanR> | you saw a book on linux, and was flashed. By men in black from microsoft |
2022-01-26 20:44:45 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:7175:fef6:491:2dba) |
2022-01-26 20:45:14 +0100 | <EvanR> | open source is a cancer! |
2022-01-26 20:45:24 +0100 | <EvanR> | get the facts |
2022-01-26 20:46:00 +0100 | fendor_ | (~fendor@77.119.174.56.wireless.dyn.drei.com) (Remote host closed the connection) |
2022-01-26 20:46:00 +0100 | <monochrom> | The world is like a CDROM. It's flat. |
2022-01-26 20:46:34 +0100 | <polyphem> | ... i imideatly formated my 1024 MB drive win95 install and installed redhat |
2022-01-26 20:47:00 +0100 | <geekosaur> | oh, I also have to wonder how linux installs compare to windows installs due to WSL(2). obviously can't be greater, but approaching parity would be interesting |
2022-01-26 20:47:28 +0100 | <EvanR> | you can't have multiple linux installs? |
2022-01-26 20:47:39 +0100 | <geekosaur> | also I am a bit surprised ot hear that there is some latency in WSL2, it should be very close to bare metal because of how they designed it |
2022-01-26 20:47:58 +0100 | <geekosaur> | sure you can, and swithc between them and windows via grub |
2022-01-26 20:48:18 +0100 | <EvanR> | I mean within the WSL framework |
2022-01-26 20:48:31 +0100 | <geekosaur> | afaik no |
2022-01-26 20:48:50 +0100 | <EvanR> | so it's a linux shaped hole that is empty or filled |
2022-01-26 20:48:52 +0100 | <geekosaur> | might not take much work to enable it but it'd have to be done by Microsoft |
2022-01-26 20:48:55 +0100 | <EvanR> | MVar Linux |
2022-01-26 20:49:01 +0100 | lbseale | (~ep1ctetus@user/ep1ctetus) (Read error: Connection reset by peer) |
2022-01-26 20:49:10 +0100 | <geekosaur> | that's not exactly right either |
2022-01-26 20:49:31 +0100 | <polyphem> | windows used to overwrite your linux install if you wanted to do multiboot in those days , you had to first install windows and then linux |
2022-01-26 20:49:42 +0100 | <geekosaur> | remember windows is a microkernel architecture since winnt. WSL2 is just linux as a microkernel client |
2022-01-26 20:50:16 +0100 | <geekosaur> | wsl1 was more of an emulation, I think |
2022-01-26 20:50:18 +0100 | max22- | (~maxime@2a01cb0883359800ca42cd4ecfb21dbb.ipv6.abo.wanadoo.fr) |
2022-01-26 20:50:44 +0100 | dhouthoo | (~dhouthoo@178-117-36-167.access.telenet.be) (Quit: WeeChat 3.4) |
2022-01-26 20:50:58 +0100 | _xor | (~xor@dsl-50-5-233-169.fuse.net) (Read error: Connection reset by peer) |
2022-01-26 20:51:18 +0100 | <EvanR> | embrace extend extinguish, microsoft is at it again! |
2022-01-26 20:51:21 +0100 | _xor | (~xor@dsl-50-5-233-169.fuse.net) |
2022-01-26 20:51:45 +0100 | <geekosaur> | well, actually, no, it seems like they actually mean it |
2022-01-26 20:52:00 +0100 | gehmehgeh | (~user@user/gehmehgeh) (Remote host closed the connection) |
2022-01-26 20:52:09 +0100 | <geekosaur> | they were getting their asses eaten in the cloud because windows is such a lousy cloud OS |
2022-01-26 20:52:15 +0100 | gehmehgeh | (~user@user/gehmehgeh) |
2022-01-26 20:52:34 +0100 | <geekosaur> | it *really* wants a physical console |
2022-01-26 20:52:58 +0100 | <geekosaur> | and things like remote desktop and even powershell just weren't enough |
2022-01-26 20:53:06 +0100 | <polyphem> | ms had xenix, right |
2022-01-26 20:53:10 +0100 | <geekosaur> | yes |
2022-01-26 20:53:15 +0100 | <geekosaur> | then they sold it off to SCO |
2022-01-26 20:53:24 +0100 | lbseale | (~ep1ctetus@user/ep1ctetus) |
2022-01-26 20:53:32 +0100 | <geekosaur> | then SCO sold itself out and became a shell for lawyers |
2022-01-26 20:54:13 +0100 | <EvanR> | I worked at a place with SCO unix |
2022-01-26 20:54:18 +0100 | <geekosaur> | but it was amusing, I once had the developer manual or ms-dos 2.11 and it talked about a future migration path that had dos and xenix merging sometime around dos 6.0 |
2022-01-26 20:54:25 +0100 | <EvanR> | not as ergonomic as linux |
2022-01-26 20:54:27 +0100 | <kuribas> | My uncle was CEO of SCO benelux. |
2022-01-26 20:54:33 +0100 | <geekosaur> | *for ms-dos |
2022-01-26 20:54:34 +0100 | <maerwald> | well, windows at least has proper hardware support for laptops. Linux is a nightmare (suspend to ram, cpu throttling... all trash) |
2022-01-26 20:54:44 +0100 | <kuribas> | before they went rogue. |
2022-01-26 20:54:45 +0100 | <maerwald> | but I still can't force myself to switch |
2022-01-26 20:55:06 +0100 | <EvanR> | macbook air my dude |
2022-01-26 20:55:14 +0100 | dschrempf | (~dominik@070-207.dynamic.dsl.fonira.net) (Quit: WeeChat 3.3) |
2022-01-26 20:55:15 +0100 | <monochrom> | Oh, so that's why DOS went from the file-control-block model to the file-handle (so file descriptor) model... |
2022-01-26 20:56:26 +0100 | <geekosaur> | the file controlo block model was left over from dos 1.0 being a poor ripoff of cp/m |
2022-01-26 20:56:36 +0100 | <monochrom> | Yeah |
2022-01-26 20:56:37 +0100 | intersect | (~ivoolivei@a109-50-190-38.cpe.netcabo.pt) |
2022-01-26 20:57:26 +0100 | <polyphem> | dos 1.0 was int21h + command.com + gwbasic |
2022-01-26 20:57:35 +0100 | <polyphem> | + autoexec.bat |
2022-01-26 20:57:58 +0100 | <geekosaur> | actuslly I don't recall if dos .0 had int21h |
2022-01-26 20:58:01 +0100 | <geekosaur> | 1.0 |
2022-01-26 20:58:10 +0100 | <EvanR> | back when your computer came with nothing but a programming environment |
2022-01-26 20:58:28 +0100 | <geekosaur> | it still had jumping to address 0005 to make syscalls, which is part of the cp/m "emulation" |
2022-01-26 20:58:39 +0100 | n3rdy1 | (~n3rdy1@2600:1700:4570:3480::41) |
2022-01-26 20:59:14 +0100 | trillp | (~trillp@2600:1700:28e2:14d0::3a) |
2022-01-26 20:59:26 +0100 | <intersect> | Hello guys, how can i find how to use lambdabot? |
2022-01-26 21:00:08 +0100 | <monochrom> | I lurked here and watched other people use it. |
2022-01-26 21:00:32 +0100 | <polyphem> | wasn't the story of ms success being they tookover a deal to use cp/m as os for ibm-compatible pcs ,and instead bought the int21h handler from some students added their gwbasig and a shell command.com and made the deal with ibm |
2022-01-26 21:00:37 +0100 | <dminuoso> | Yeah, it's best to just use the channel history, and dig through 10 years of chatlogs. We dont have any other documentation for it. |
2022-01-26 21:00:41 +0100 | <monochrom> | But the most frequently used thing is this: |
2022-01-26 21:00:44 +0100 | <monochrom> | > 1+1 |
2022-01-26 21:00:46 +0100 | <lambdabot> | 2 |
2022-01-26 21:01:07 +0100 | <EvanR> | @botsnack |
2022-01-26 21:01:08 +0100 | <lambdabot> | :) |
2022-01-26 21:01:17 +0100 | <monochrom> | It has some kind of @help command, but you will find it not very helpful. |
2022-01-26 21:01:47 +0100 | <intersect> | hum, i was trying to figure out how to use it to make a pointwise function in to pointfree |
2022-01-26 21:01:48 +0100 | <dminuoso> | I personally just use yahb at the end, for it is just an IRC bot bolted onto GHCi. |
2022-01-26 21:01:59 +0100 | <dminuoso> | Which makes it simple to use |
2022-01-26 21:02:06 +0100 | <EvanR> | @pl \x -> x + 1 |
2022-01-26 21:02:06 +0100 | <lambdabot> | (1 +) |
2022-01-26 21:02:14 +0100 | <EvanR> | wait |
2022-01-26 21:02:15 +0100 | <monochrom> | Yeah yahb is a real ghci, much more complete than lambdabot's > |
2022-01-26 21:02:26 +0100 | <EvanR> | @pl \x -> x - 1 |
2022-01-26 21:02:26 +0100 | <lambdabot> | subtract 1 |
2022-01-26 21:02:27 +0100 | tomsmeding | (~tomsmedin@tomsmeding.com) (Quit: ZNC 1.8.2 - https://znc.in) |
2022-01-26 21:02:31 +0100 | <EvanR> | @pl \x -> x / 1 |
2022-01-26 21:02:31 +0100 | <lambdabot> | (/ 1) |
2022-01-26 21:02:43 +0100 | <EvanR> | /1, 1+ |
2022-01-26 21:02:52 +0100 | <monochrom> | Oh interesting. |
2022-01-26 21:02:53 +0100 | <EvanR> | it is assuming commutativitiy or |
2022-01-26 21:03:22 +0100 | <EvanR> | I guess have laws for Num now |
2022-01-26 21:03:31 +0100 | <dminuoso> | See, this is one of those things. |
2022-01-26 21:03:39 +0100 | <intersect> | f(g(h(i))(x,y) |
2022-01-26 21:03:59 +0100 | <monochrom> | Some human wrote @pl and perhaps their opinion went into it too. |
2022-01-26 21:04:09 +0100 | <monochrom> | Right? I thought it was obvious. |
2022-01-26 21:04:25 +0100 | <monochrom> | Every program exists because, only because, it's some programmer's opinion. |
2022-01-26 21:04:39 +0100 | <EvanR> | that's a very constructive take |
2022-01-26 21:04:49 +0100 | <EvanR> | brouwer would be proud |
2022-01-26 21:05:45 +0100 | <EvanR> | let's see if their opinion extended to matrix multiplication |
2022-01-26 21:05:52 +0100 | <EvanR> | @pl \x -> x * 1 |
2022-01-26 21:05:52 +0100 | <lambdabot> | id |
2022-01-26 21:05:55 +0100 | juhp | (~juhp@128.106.188.82) (Ping timeout: 268 seconds) |
2022-01-26 21:06:03 +0100 | <EvanR> | the world may never know |
2022-01-26 21:06:07 +0100 | <monochrom> | Matrix multiplication is a social construct. |
2022-01-26 21:06:22 +0100 | <monochrom> | I mean, >:) |
2022-01-26 21:07:23 +0100 | juhp | (~juhp@128.106.188.82) |
2022-01-26 21:07:39 +0100 | <EvanR> | @pl \i x y -> f (g (h i)) (x,y) |
2022-01-26 21:07:39 +0100 | <lambdabot> | (. (,)) . (.) . f . g . h |
2022-01-26 21:07:54 +0100 | <EvanR> | @pl \i x y -> f (g (h i)) x y |
2022-01-26 21:07:54 +0100 | <lambdabot> | f . g . h |
2022-01-26 21:08:14 +0100 | <monochrom> | Ho hum that turns out surprisingly neat. |
2022-01-26 21:09:24 +0100 | mtjm | (~mutantmel@2604:a880:2:d0::208b:d001) (Remote host closed the connection) |
2022-01-26 21:09:24 +0100 | ub | (~Thunderbi@141.98.252.232) |
2022-01-26 21:10:28 +0100 | mtjm | (~mutantmel@2604:a880:2:d0::208b:d001) |
2022-01-26 21:10:53 +0100 | ubert | (~Thunderbi@p548c8cd6.dip0.t-ipconnect.de) (Ping timeout: 256 seconds) |
2022-01-26 21:10:53 +0100 | ub | ubert |
2022-01-26 21:10:55 +0100 | <geekosaur> | I still need to flesh out my commands list so it's usable :( |
2022-01-26 21:11:59 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) |
2022-01-26 21:11:59 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
2022-01-26 21:11:59 +0100 | wroathe | (~wroathe@user/wroathe) |
2022-01-26 21:12:34 +0100 | cynomys | (~cynomys@user/cynomys) |
2022-01-26 21:14:01 +0100 | Pickchea | (~private@user/pickchea) |
2022-01-26 21:15:29 +0100 | kuribas | (~user@ptr-25vy0i9nxqs797laykw.18120a2.ip6.access.telenet.be) (Remote host closed the connection) |
2022-01-26 21:15:32 +0100 | jle` | (~jle`@cpe-23-240-75-236.socal.res.rr.com) (Ping timeout: 240 seconds) |
2022-01-26 21:15:41 +0100 | haskellb1 | (~nut@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) |
2022-01-26 21:17:26 +0100 | jle` | (~jle`@cpe-23-240-75-236.socal.res.rr.com) |
2022-01-26 21:18:02 +0100 | intersect | (~ivoolivei@a109-50-190-38.cpe.netcabo.pt) (Ping timeout: 240 seconds) |
2022-01-26 21:19:05 +0100 | trillp | (~trillp@2600:1700:28e2:14d0::3a) (Quit: trillp) |
2022-01-26 21:19:33 +0100 | intersect | (~ivoolivei@a109-50-190-38.cpe.netcabo.pt) |
2022-01-26 21:22:37 +0100 | ec | (~ec@gateway/tor-sasl/ec) |
2022-01-26 21:22:51 +0100 | segfaultfizzbuzz | (~rustisafu@2602:306:cd3c:9350:59e3:db49:aa0a:46e5) |
2022-01-26 21:23:55 +0100 | intersect | (~ivoolivei@a109-50-190-38.cpe.netcabo.pt) (Ping timeout: 256 seconds) |
2022-01-26 21:24:11 +0100 | Erutuon | (~Erutuon@user/erutuon) |
2022-01-26 21:25:02 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 268 seconds) |
2022-01-26 21:27:29 +0100 | ultsllt | (~ultsllt@50.231.5.242) |
2022-01-26 21:31:21 +0100 | ec | (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
2022-01-26 21:31:40 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) |
2022-01-26 21:31:40 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
2022-01-26 21:31:40 +0100 | wroathe | (~wroathe@user/wroathe) |
2022-01-26 21:31:57 +0100 | xsperry | (~xs@user/xsperry) (Ping timeout: 240 seconds) |
2022-01-26 21:33:33 +0100 | jeetelongname | (~jeet@88-111-159-26.dynamic.dsl.as9105.com) |
2022-01-26 21:37:57 +0100 | yauhsien_ | (~yauhsien@61-231-17-3.dynamic-ip.hinet.net) |
2022-01-26 21:39:52 +0100 | Feuermagier | (~Feuermagi@user/feuermagier) |
2022-01-26 21:41:15 +0100 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection) |
2022-01-26 21:42:32 +0100 | yauhsien_ | (~yauhsien@61-231-17-3.dynamic-ip.hinet.net) (Ping timeout: 240 seconds) |
2022-01-26 21:45:00 +0100 | intersect | (~ivoolivei@a109-50-190-38.cpe.netcabo.pt) |
2022-01-26 21:47:44 +0100 | zincy | (~zincy@host86-151-99-97.range86-151.btcentralplus.com) |
2022-01-26 21:51:12 +0100 | denbrahe[m] | (~denbrahem@2001:470:69fc:105::19c0) (Quit: Client limit exceeded: 20000) |
2022-01-26 21:52:09 +0100 | little_mac | (~little_ma@2601:410:4300:3ce0:4001:9094:16f1:84ab) (Remote host closed the connection) |
2022-01-26 21:52:15 +0100 | machinedgod | (~machinedg@24.105.81.50) |
2022-01-26 21:53:36 +0100 | ec | (~ec@gateway/tor-sasl/ec) |
2022-01-26 21:53:54 +0100 | <intersect> | 1+1 |
2022-01-26 21:54:06 +0100 | denbrahe[m] | (~denbrahem@2001:470:69fc:105::19c0) |
2022-01-26 21:54:12 +0100 | <intersect> | >1+1 |
2022-01-26 21:54:16 +0100 | <intersect> | > 1+1 |
2022-01-26 21:54:18 +0100 | <lambdabot> | 2 |
2022-01-26 21:54:58 +0100 | <intersect> | > f(x) = x |
2022-01-26 21:55:00 +0100 | <lambdabot> | <hint>:1:6: error: parse error on input ‘=’ |
2022-01-26 21:55:22 +0100 | <intersect> | > f(x) .=. x |
2022-01-26 21:55:24 +0100 | <lambdabot> | error: |
2022-01-26 21:55:24 +0100 | <lambdabot> | • Variable not in scope: (.=.) :: t0 -> Expr -> t |
2022-01-26 21:55:24 +0100 | <lambdabot> | • Perhaps you meant one of these: |
2022-01-26 21:56:06 +0100 | pavonia | (~user@user/siracusa) |
2022-01-26 21:56:23 +0100 | <monochrom> | No definition. But you can use "let ... in ..." |
2022-01-26 21:56:24 +0100 | <geekosaur> | no assignments at the lambdabot prompt |
2022-01-26 22:00:32 +0100 | neceve | (~quassel@2.26.93.228) (Ping timeout: 240 seconds) |
2022-01-26 22:01:28 +0100 | <monochrom> | Generally maybe you should pick up a bit of basic Haskell before using lambdabot. |
2022-01-26 22:02:57 +0100 | n3rdy1 | (~n3rdy1@2600:1700:4570:3480::41) (Ping timeout: 240 seconds) |
2022-01-26 22:03:53 +0100 | lechner | (~lechner@debian/lechner) (Ping timeout: 268 seconds) |
2022-01-26 22:04:22 +0100 | <dsal> | (at least, in a public channel) |
2022-01-26 22:05:00 +0100 | <EvanR> | 1+1 is notation from basic math, f x y z is notation from lisp... I'mean... pick a side |
2022-01-26 22:05:21 +0100 | _ht | (~quassel@2a02:a468:b619:1:8a98:8031:2935:e3fc) (Remote host closed the connection) |
2022-01-26 22:07:58 +0100 | little_mac | (~little_ma@2601:410:4300:3ce0:dc4e:59ab:7b42:4b50) |
2022-01-26 22:08:22 +0100 | <dsal> | BASIC math. |
2022-01-26 22:08:36 +0100 | briandaed | (~root@185.234.208.208.r.toneticgroup.pl) |
2022-01-26 22:10:21 +0100 | ec | (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
2022-01-26 22:10:34 +0100 | lispy | (~lispy4@84.69.59.93) (Quit: Leaving) |
2022-01-26 22:11:01 +0100 | jushur | (~human@user/jushur) (Quit: ¯\_(ツ)_/¯) |
2022-01-26 22:14:51 +0100 | jushur | (~human@user/jushur) |
2022-01-26 22:16:08 +0100 | n3rdy1 | (~n3rdy1@2600:1700:4570:3480:1b88:50f:dae0:9293) |
2022-01-26 22:19:06 +0100 | coot | (~coot@89-64-85-93.dynamic.chello.pl) |
2022-01-26 22:21:37 +0100 | <Henson> | I'm trying to interact with some C++ functions from Haskell that just do some referentially-transparent calculations and memory allocation. Is it okay to put those kinds of things into an unsafePerformIO? |
2022-01-26 22:21:44 +0100 | briandaed | (~root@185.234.208.208.r.toneticgroup.pl) (Quit: Lost terminal) |
2022-01-26 22:22:15 +0100 | <geekosaur> | memory allocation is explicitly not safe for that |
2022-01-26 22:23:22 +0100 | <EvanR> | is the memory temporary, released before the computation is done, or |
2022-01-26 22:23:41 +0100 | <EvanR> | (or released in case of error before computation is done, or) |
2022-01-26 22:25:30 +0100 | CHUD | (~CHUD@host-80-41-89-108.as13285.net) (Ping timeout: 256 seconds) |
2022-01-26 22:28:56 +0100 | <Henson> | the thing I'm trying to do is interact with some OpenCV functions in C++, which will take in a cv::Mat wrapped in a ForeignPtr, do some image processing on it, then allocate a new cv::Mat and return a pointer to that, which will then be wrapped in a ForeignPtr. Ideally I'd like to try to make these image processing operations not have to be in IO, and some of the OpenCV libraries I've seen for... |
2022-01-26 22:29:13 +0100 | <Henson> | Haskell make it so these IO operations are behind an unsafePerformIO so they can be done in pure code. |
2022-01-26 22:30:03 +0100 | <geekosaur> | I'm pretty sure if they are allocating memory under an unsafePerformIO they're playing with fire |
2022-01-26 22:30:13 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 256 seconds) |
2022-01-26 22:30:55 +0100 | <geekosaur> | the basic rule of unsafePerformIO is "if it breaks you get to keep the pieces", so if you insist on doing it it's your problem |
2022-01-26 22:31:35 +0100 | <Henson> | haha, ok |
2022-01-26 22:31:36 +0100 | <EvanR> | unsafePerformIO only makes sense when the IO action is pure, which it doesn't sound like your thing is |
2022-01-26 22:31:48 +0100 | <EvanR> | I went through this yesterday with opengl |
2022-01-26 22:32:01 +0100 | <geekosaur> | well, it could be pure right up until it allocates a new one, which isn't |
2022-01-26 22:32:27 +0100 | <geekosaur> | if the image processing is deterministic and repeatable, at least |
2022-01-26 22:33:18 +0100 | <EvanR> | allocating a new object to hold the answer rather than modifying the original is how normal haskell works though |
2022-01-26 22:33:58 +0100 | <EvanR> | the question is if anything I care about can observe that allocation in a bad way |
2022-01-26 22:34:21 +0100 | <EvanR> | or interfere with it |
2022-01-26 22:34:43 +0100 | <ephemient> | the unsafePerformIO allocation might get inlined and duplicated or cse'd and unduplicated, both of which could be problematic |
2022-01-26 22:34:43 +0100 | <Henson> | it looks like they use unsafeCoerce to convert it from an IO action to whatever they're returning |
2022-01-26 22:35:16 +0100 | <EvanR> | doubling the allocation or undoubling could lead to a change in performance but not necessarily semantics |
2022-01-26 22:36:13 +0100 | <EvanR> | of course... there's... THREAD SAFETY |
2022-01-26 22:36:38 +0100 | <EvanR> | two threads try to compute on the same thing at the same time |
2022-01-26 22:36:45 +0100 | <Henson> | EvanR: it looks like they allocate a new image to hold the answer, then get OpenCV to put the answer in the thing they've allocated. But the allocation is still being done at the C++ layer |
2022-01-26 22:37:19 +0100 | <EvanR> | yes ForeignPtr is for that, holding a ref to a foreign object, potentially calling a finalizer when haskell loses track of it |
2022-01-26 22:37:29 +0100 | <geekosaur> | EvanR, I think that can't happen. unsafePerformIO has a mutex, unsafeDupablePerformIo doens't, iirc |
2022-01-26 22:38:04 +0100 | <EvanR> | speaking of just the IO action yeah |
2022-01-26 22:38:11 +0100 | jeetelongname | (~jeet@88-111-159-26.dynamic.dsl.as9105.com) (Ping timeout: 250 seconds) |
2022-01-26 22:38:17 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) |
2022-01-26 22:38:18 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
2022-01-26 22:38:18 +0100 | wroathe | (~wroathe@user/wroathe) |
2022-01-26 22:38:20 +0100 | <davean> | I mean theres the blackhole |
2022-01-26 22:38:39 +0100 | <davean> | is it locked on compute or update? |
2022-01-26 22:38:47 +0100 | <Henson> | EvanR: but is there any difference from performing the allocation in C++ and creating a ForeignPtr from it, then calling C++ with the Ptr (getting OpenCV to put the answer in the image you've previously allocated) compared to C++ taking in your image and allocating an image for the answer, and then you creating a ForeignPtr for the answer post-facto? |
2022-01-26 22:39:01 +0100 | <EvanR> | I am reading into what Henson is doing, that they will have some foreign data that two haskel threads accesses after the fact, but maybe I'm off the deep end now |
2022-01-26 22:39:29 +0100 | <EvanR> | Henson, wait, you're now allocating space in one action, and later doing a call to fill in the answer? |
2022-01-26 22:39:38 +0100 | <EvanR> | or rewriting an already made object? or |
2022-01-26 22:39:43 +0100 | <ephemient> | if it was a single unsafePerformIO wrapping the whole "allocate and fill in" then it seems potentially okay-ish to me? but if it's a unsafePerformIO allocate, some pure Haskell code, then unsafePerformIO fill, that is questionable |
2022-01-26 22:39:57 +0100 | <EvanR> | yes that's ... not going to turn out good |
2022-01-26 22:40:29 +0100 | <EvanR> | Henson, yeah, big diff |
2022-01-26 22:40:58 +0100 | <EvanR> | esp if you're trying to do it all without admitting it's IO |
2022-01-26 22:41:08 +0100 | <Henson> | EvanR: I would never have OpenCV perform in-place operations on the image I've passed it. I would always have it put the results in a new image |
2022-01-26 22:41:25 +0100 | <EvanR> | but what's this idea of passing it a pointer to empty space |
2022-01-26 22:41:26 +0100 | <dolio> | Are you just asking if it matters who does the allocation? |
2022-01-26 22:41:51 +0100 | <Henson> | EvanR: but whether that destination image has been pre-allocated in a previous C++ function call and has already been turned into a ForeignPtr, or it's allocated within the image processing call and then gets turned into a ForeignPtr afterwards is the question. |
2022-01-26 22:42:00 +0100 | <Henson> | dolio: yes |
2022-01-26 22:42:11 +0100 | <EvanR> | it sounds like C++ does the allocation regardless |
2022-01-26 22:42:14 +0100 | <Henson> | in both bases C++ does the allocation |
2022-01-26 22:42:28 +0100 | <dolio> | I think if you have C++ do the allocation, you might have to write your own finalizer that calls back into C++. |
2022-01-26 22:42:36 +0100 | <Henson> | in the pre-allocation case there's a ForeignPtr for the answer before the image processing function is called. |
2022-01-26 22:42:36 +0100 | <dolio> | Which sounds more complicated. |
2022-01-26 22:42:41 +0100 | <EvanR> | you can make 2 calls, but you better not make two unsafePerformIOs |
2022-01-26 22:42:41 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 256 seconds) |
2022-01-26 22:42:50 +0100 | <davean> | Henson: what about the deallocate linked to the F Ptr? |
2022-01-26 22:42:53 +0100 | <Henson> | dolio: yes. It's not that complicated, it's just a simple cast and a free. I've got that written already. |
2022-01-26 22:42:55 +0100 | <davean> | Henson: you want that called, right? |
2022-01-26 22:42:56 +0100 | <EvanR> | assuming you determine unsafePerformIO is even safe |
2022-01-26 22:43:06 +0100 | <davean> | so you don't want to create 2 new images |
2022-01-26 22:43:13 +0100 | <davean> | and have one of them not exist to the GC |
2022-01-26 22:43:37 +0100 | myShoggoth | (~myShoggot@97-120-67-120.ptld.qwest.net) (Ping timeout: 240 seconds) |
2022-01-26 22:43:57 +0100 | myShoggoth | (~myShoggot@97-120-67-120.ptld.qwest.net) |
2022-01-26 22:44:23 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds) |
2022-01-26 22:44:33 +0100 | <Henson> | davean: correct, I don't want to do that. I simply want to do a referentially-transparent image operation that will not modify the things I'm sending in, but will return something that will involve memory allocation at the C++ level. I'm wondering how safe/unsafe doing that is with unsafePerformIO so I can use it in pure code instead of in IO. |
2022-01-26 22:44:49 +0100 | OscarH | (~OscarH@2a02:c7f:a0da:ae00:ba27:ebff:fe84:d2f4) (Quit: ZNC 1.7.2+deb3 - https://znc.in) |
2022-01-26 22:45:00 +0100 | <dolio> | That's basically what unsafePerformIO is for. |
2022-01-26 22:45:04 +0100 | OscarH | (~OscarH@2a02:c7f:a0da:ae00:ba27:ebff:fe84:d2f4) |
2022-01-26 22:45:10 +0100 | <ephemient> | if some things get lost and never end up finalized/freed by the GC, it can still be considered "safe" |
2022-01-26 22:45:41 +0100 | <EvanR> | do that in 1 unsafePerformIO, make sure to use a finalizer, and accept that the whole thing may happen more than once if inlining happens... |
2022-01-26 22:45:43 +0100 | <davean> | Henson: unsafePerformIO can be done correctly, but its certainly not dupable |
2022-01-26 22:45:44 +0100 | <ephemient> | but you probably do want to have a ForeignPtr+finalizer in there for practical purposes |
2022-01-26 22:46:16 +0100 | <Henson> | davean: what do you mean by "dupable"? |
2022-01-26 22:46:20 +0100 | wyrd | (~wyrd@gateway/tor-sasl/wyrd) |
2022-01-26 22:46:27 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) |
2022-01-26 22:46:31 +0100 | <EvanR> | two threads execute your computation at the same time |
2022-01-26 22:46:42 +0100 | <Henson> | ephemient: yes, anything allocated in C++ that gets returned as a Ptr will be converted to a ForeignPtr with an appropriate finalizer. |
2022-01-26 22:47:06 +0100 | werneta | (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 250 seconds) |
2022-01-26 22:47:20 +0100 | <EvanR> | which might happen with unsafeDupablePerformIO |
2022-01-26 22:47:57 +0100 | <Henson> | EvanR: can you explain a bit more about the call happening more than once with inlining? |
2022-01-26 22:48:03 +0100 | werneta | (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) |
2022-01-26 22:48:04 +0100 | <EvanR> | well you claim it's pure so |
2022-01-26 22:48:18 +0100 | <EvanR> | let x = unsafePerformIO stuff = (x, x) |
2022-01-26 22:48:26 +0100 | <EvanR> | let x = unsafePerformIO stuff in (x, x) |
2022-01-26 22:48:31 +0100 | <EvanR> | that's the same as |
2022-01-26 22:48:40 +0100 | <EvanR> | (unsafePerformIO stuff, unsafePerformIO stuff) |
2022-01-26 22:48:58 +0100 | <EvanR> | it got inlined |
2022-01-26 22:49:10 +0100 | Feuermagier | (~Feuermagi@user/feuermagier) (Remote host closed the connection) |
2022-01-26 22:49:46 +0100 | <Henson> | EvanR: in that case would Haskell not evaluate one of them because the function and arguments are the same for both of them? |
2022-01-26 22:50:03 +0100 | <EvanR> | you mean common subexpression elimination? undoing the inlinine it just did? xD |
2022-01-26 22:50:20 +0100 | <EvanR> | usually no |
2022-01-26 22:50:20 +0100 | <geekosaur> | there's more thn that. if it's pure then ghc can decide to lift the operation out of e.g. a loop |
2022-01-26 22:50:28 +0100 | travisb_ | (~travisb@172-13-49-137.lightspeed.milwwi.sbcglobal.net) |
2022-01-26 22:50:43 +0100 | Pickchea | (~private@user/pickchea) (Quit: Leaving) |
2022-01-26 22:50:46 +0100 | <EvanR> | yeah it could happen multiple times, or fewer times than you thought |
2022-01-26 22:50:48 +0100 | <geekosaur> | this caused major problems for bytestring when they thought it wss okay to cheat like that |
2022-01-26 22:50:49 +0100 | <ephemient> | pure expressions have no side effects so Haskell is free to evaluate them any number of times, including fewer or more than you wrote |
2022-01-26 22:51:35 +0100 | <davean> | EvanR: you can mark it expensive |
2022-01-26 22:51:51 +0100 | <EvanR> | mark it expensive? |
2022-01-26 22:51:52 +0100 | <Henson> | EvanR: but in let x = unsafePerformIO stuff in (x, x) Haskell will make two identical thunks in the tuple, right? Whenever either one of them gets evaluated the other will no longer need to be evaluated, right? |
2022-01-26 22:51:57 +0100 | tabemann | (~travisb@172-13-49-137.lightspeed.milwwi.sbcglobal.net) (Ping timeout: 240 seconds) |
2022-01-26 22:52:47 +0100 | lechner | (~lechner@debian/lechner) |
2022-01-26 22:52:49 +0100 | <EvanR> | in literally let x = 1000 in (x,x) there's only 1 1000 |
2022-01-26 22:52:57 +0100 | <EvanR> | in literally (1000,1000) there's 2 1000 |
2022-01-26 22:53:17 +0100 | <EvanR> | they can be transformed into each other at compile time |
2022-01-26 22:53:24 +0100 | justsomeguy | (~justsomeg@user/justsomeguy) |
2022-01-26 22:53:34 +0100 | <EvanR> | it's fine since 1000 is just a value |
2022-01-26 22:53:50 +0100 | <EvanR> | not a command to fire missiles |
2022-01-26 22:54:00 +0100 | <Henson> | if Haskell were to evaluate (x,x) twice, then the two x values wouldn't be identical anymore, as they'd be two different ForeignPtrs |
2022-01-26 22:54:13 +0100 | <EvanR> | yeah, is that ok |
2022-01-26 22:54:15 +0100 | <Henson> | where x is the result of the image processing |
2022-01-26 22:54:59 +0100 | <Henson> | EvanR: that's fine with me. It would result it unneccessary image processing work, but the final results would be the same, just essentially copies of each other in memory. |
2022-01-26 22:54:59 +0100 | <EvanR> | if not you can attempt to cheat by putting hints to stop inlining |
2022-01-26 22:55:29 +0100 | takuan | (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
2022-01-26 22:58:35 +0100 | <Henson> | now here's a question of taking the "naughtiness" to another level. Say I have a list of ForeignPtrs to images, and I want to call a C++ function that operates on a list of images and returns a list of images. I need to call withForeignPtr recursively to get at the Ptrs within each of the images in a list, then run the image processing operation, then wrap up the returned Ptrs as ForeignPtrs... |
2022-01-26 22:58:37 +0100 | jeetelongname | (~jeet@88-111-159-26.dynamic.dsl.as9105.com) |
2022-01-26 22:59:14 +0100 | <Henson> | in the documentations, it says withForeignPtr is need to prevent the ForeignPtrs from being deallocated during the call that is inside of them. If I was that all in an unsafePerformIO, do those guarantees go out of the window? |
2022-01-26 23:00:02 +0100 | <Henson> | also, is there a difference between unsafePerformIO and unsafeCoerce in terms of safety? |
2022-01-26 23:00:07 +0100 | FroskyArr | (~froskyarr@203.175.13.219) (Remote host closed the connection) |
2022-01-26 23:00:15 +0100 | <Henson> | I mean runtime safety, and not type safety |
2022-01-26 23:00:24 +0100 | <geekosaur> | unsafeCoerce is unsafe in part because you can make unsafePerformIO from it |
2022-01-26 23:00:25 +0100 | FroskyArr | (~froskyarr@203.175.13.219) |
2022-01-26 23:01:14 +0100 | haskellb1 | (~nut@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 268 seconds) |
2022-01-26 23:01:22 +0100 | <EvanR> | unsafeCoerce is very unsafe |
2022-01-26 23:01:23 +0100 | <Henson> | would it be better to do my IO a -> a with unsafePerformIO, or with unsafeCoerce to do my image processing in pure code instead of IO? |
2022-01-26 23:01:51 +0100 | <EvanR> | omg don't use unsafeCoerce to do IO xD |
2022-01-26 23:01:56 +0100 | <Henson> | haha |
2022-01-26 23:02:33 +0100 | <Henson> | ok, so just stick with unsafePerformIO and be as careful as I can |
2022-01-26 23:02:47 +0100 | mjs2600 | (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) (Quit: ZNC 1.8.2 - https://znc.in) |
2022-01-26 23:03:18 +0100 | haskellberryfinn | (~nut@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Remote host closed the connection) |
2022-01-26 23:03:29 +0100 | <Henson> | EvanR: what should I look for to prevent Haskell from inlining the function? I know there's the {-# INLINE foo #-} statement, is there a similar one to prevent inlining? |
2022-01-26 23:03:35 +0100 | <EvanR> | earlier you mentioned they use it to convert a pointer? There's a not-as-unsafe-as-unsafeCoerce other operation for that called castPtr |
2022-01-26 23:03:37 +0100 | <geekosaur> | NOINLINE |
2022-01-26 23:04:04 +0100 | cdsmith | (~cdsmithma@2001:470:69fc:105::284) (Quit: Client limit exceeded: 20000) |
2022-01-26 23:04:20 +0100 | travisb_ | (~travisb@172-13-49-137.lightspeed.milwwi.sbcglobal.net) (Remote host closed the connection) |
2022-01-26 23:04:22 +0100 | mjs2600 | (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) |
2022-01-26 23:04:34 +0100 | <EvanR> | change the type of a Ptr when "you know better than the type system" |
2022-01-26 23:04:49 +0100 | cdsmith | (~cdsmithma@2001:470:69fc:105::284) |
2022-01-26 23:05:07 +0100 | travisb_ | (~travisb@172-13-49-137.lightspeed.milwwi.sbcglobal.net) |
2022-01-26 23:05:34 +0100 | <Henson> | EvanR: here's the OpenCV source code for the library I was looking at as a comparison: https://hackage.haskell.org/package/opencv-0.0.2.1/docs/src/OpenCV-Core-ArrayOps.html#matScalarAdd this is not the OpenCV functions I'm using, but where I got the idea for unsafeCoerce |
2022-01-26 23:07:11 +0100 | <EvanR> | the function unsafeCoerceMat might be a limited version of unsafeCoerce |
2022-01-26 23:07:33 +0100 | <EvanR> | to do with the matrix dimensions or something |
2022-01-26 23:09:03 +0100 | <EvanR> | unsafeCoerceMat :: Mat shapeIn channelsIn depthIn -> Mat shapeOut channelsOut depthOut |
2022-01-26 23:09:15 +0100 | zincy | (~zincy@host86-151-99-97.range86-151.btcentralplus.com) (Remote host closed the connection) |
2022-01-26 23:09:22 +0100 | <EvanR> | a "trust me" for matrices only |
2022-01-26 23:10:02 +0100 | wombat875 | (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) (Quit: WeeChat 2.2-dev) |
2022-01-26 23:10:29 +0100 | <EvanR> | there are other safer operations to change shape, I saw at a glance in the docs elsewhere |
2022-01-26 23:10:32 +0100 | jeetelongname | (~jeet@88-111-159-26.dynamic.dsl.as9105.com) (Ping timeout: 240 seconds) |
2022-01-26 23:12:22 +0100 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) |
2022-01-26 23:12:23 +0100 | <Henson> | EvanR: https://hackage.haskell.org/package/opencv-0.0.2.1/docs/src/OpenCV-Internal-Core-Types-Mat.html#un… is just unsafeCoerce. But there are functions in that module that talk about safer versions of unsafeCoerceMat. |
2022-01-26 23:12:46 +0100 | <Henson> | EvanR: and unsafeCoerce is from the Unsafe.Coerce module. |
2022-01-26 23:12:58 +0100 | <EvanR> | unsafeCoerceMat with a type signature way more limited than unsafeCoerce simply implemented as unsafeCoerce is way better |
2022-01-26 23:14:50 +0100 | <Henson> | EvanR: but the question I have is: they use unsafeCoerceMat = unsafeCoerce to do IO operations in pure code. Should I emulate what they're doing and use unsafeCoerce (or some more type-safe variant), or should I use unsafePerformIO? |
2022-01-26 23:15:02 +0100 | <EvanR> | note they are probably only using it when the object they are coercing actually has the type they coerce to, in spirit |
2022-01-26 23:15:42 +0100 | EvanR | does a double take |
2022-01-26 23:16:16 +0100 | <monochrom> | No, unsafeCoerceMat = unsafeCoerce does not do IO operations in pure code. |
2022-01-26 23:16:19 +0100 | haskellb1 | (~nut@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) |
2022-01-26 23:16:21 +0100 | <ski> | (how're they using `unsafeCoerce' to do `unsafePerformIO' ?) |
2022-01-26 23:16:24 +0100 | michalz | (~michalz@185.246.204.37) (Remote host closed the connection) |
2022-01-26 23:16:48 +0100 | <monochrom> | There is an explicit "unsafePerformIO" somewhere else in matScalarAdd. |
2022-01-26 23:17:07 +0100 | <haskellb1> | is Comonad widely used in Haskell programming? I find it extremely abstract |
2022-01-26 23:17:18 +0100 | wombat875 | (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) |
2022-01-26 23:17:32 +0100 | <EvanR> | I used it on the sea cucumber advent of code last month |
2022-01-26 23:17:44 +0100 | <haskellb1> | spending time on defining it's class methods seems not at all related to the problem logic itself |
2022-01-26 23:18:05 +0100 | gehmehgeh | (~user@user/gehmehgeh) (Quit: Leaving) |
2022-01-26 23:18:08 +0100 | <EvanR> | that's why it's support code, just like monad >>= |
2022-01-26 23:18:36 +0100 | <EvanR> | or map, filter, fold for list, it's supporting code, not for any particular problem |
2022-01-26 23:18:37 +0100 | myShoggoth | (~myShoggot@97-120-67-120.ptld.qwest.net) (Ping timeout: 240 seconds) |
2022-01-26 23:19:35 +0100 | <Rembane> | The Comonad is an abstraction that makes some problems easy to solve. |
2022-01-26 23:20:06 +0100 | <monochrom> | I haven't used comonad, but everything you said could be said of monad too. |
2022-01-26 23:20:25 +0100 | <haskellb1> | Can commoners come up with abstractions like this? |
2022-01-26 23:20:36 +0100 | <monochrom> | I could make the case that for parsing, >>= "does not relate to the parsing logic". |
2022-01-26 23:20:38 +0100 | <geekosaur> | not even most haskellers can |
2022-01-26 23:20:54 +0100 | <haskellb1> | I guess it takes years of practice to see things like that |
2022-01-26 23:20:58 +0100 | <geekosaur> | but once it's been come up with, almost anyone can learn to use it |
2022-01-26 23:21:07 +0100 | <monochrom> | Ah but "parsing logic" itself is inexpressible until you can take >>= for granted. |
2022-01-26 23:21:22 +0100 | <EvanR> | I found monad >>= and comonad <<= to be equally hard to write |
2022-01-26 23:21:33 +0100 | <EvanR> | luckily you don't have to do it too often |
2022-01-26 23:21:53 +0100 | <Henson> | monochrom: you're right, they're using unsafePerformIO instead of unsafeCoerce |
2022-01-26 23:21:55 +0100 | <monochrom> | So, yes and no. The parser monad's >>= does not express parsing logic, but parsing logic needs >>= to be writable in the first place. |
2022-01-26 23:22:18 +0100 | <Henson> | ski: thanks for doing that out, I was wrong about how they were using unsafeCoerce |
2022-01-26 23:22:46 +0100 | <monochrom> | Well, or at least <*> |
2022-01-26 23:23:29 +0100 | <Henson> | ski: doing that out -> pointing that out |
2022-01-26 23:23:30 +0100 | <haskellb1> | Can I understand that Monad represents something that can be collapsed while comonad is the other way around? |
2022-01-26 23:23:45 +0100 | <ski> | `(>>=)' and `(<*>)' are "plumbing", yea |
2022-01-26 23:23:58 +0100 | <EvanR> | comonads can replicate (duplicate) |
2022-01-26 23:24:16 +0100 | <ski> | haskellb1 : in a vague (or perhaps abstract) sense, yea |
2022-01-26 23:24:27 +0100 | <monochrom> | Yeah, "whatever that means". |
2022-01-26 23:24:34 +0100 | <ski> | (the devil's in the details of what you mean by those words) |
2022-01-26 23:24:49 +0100 | <haskellb1> | I'm trying to figure out "when" people are going to use these concepts to model their problems |
2022-01-26 23:24:54 +0100 | <monochrom> | The beauty of those oh-so-intuitive wording is they make you comfortable without any predictive power. |
2022-01-26 23:24:56 +0100 | <EvanR> | If a monad is a burrito, then a comonad is like a night club |
2022-01-26 23:25:27 +0100 | <geekosaur> | oboy… |
2022-01-26 23:25:37 +0100 | xff0x | (~xff0x@2001:1a81:53ec:e00:6733:4fa5:6e13:2687) (Ping timeout: 240 seconds) |
2022-01-26 23:25:46 +0100 | <EvanR> | sorry |
2022-01-26 23:25:54 +0100 | <haskellb1> | Conventional data structures such as Heap and stack or trees are easier to see |
2022-01-26 23:26:00 +0100 | <monochrom> | Space Telescope (ST) that wraps and unwraps like a burrito >:) |
2022-01-26 23:26:28 +0100 | <EvanR> | I still don't really understand a Heap |
2022-01-26 23:26:31 +0100 | <ski> | stuff like monads are usually better to think of as "control structures" |
2022-01-26 23:26:35 +0100 | <geekosaur> | http://blog.sigfpe.com/2006/08/you-could-have-invented-monads-and.html |
2022-01-26 23:26:37 +0100 | <haskellb1> | of course not always obvious(such as particle collisions can be modeled by priority heaps) |
2022-01-26 23:26:43 +0100 | myShoggoth | (~myShoggot@97-120-67-120.ptld.qwest.net) |
2022-01-26 23:26:48 +0100 | xff0x | (~xff0x@2001:1a81:53ec:e00:f919:e263:9a7f:5670) |
2022-01-26 23:26:55 +0100 | <EvanR> | ah a heap is like a priority queue? |
2022-01-26 23:27:09 +0100 | <ski> | it's one implementation of PQs, yea |
2022-01-26 23:27:36 +0100 | <geekosaur> | http://blog.sigfpe.com/2006/06/monads-kleisli-arrows-comonads-and.html |
2022-01-26 23:27:40 +0100 | <haskellb1> | anyway i feel like Haskell is abstract in a different way |
2022-01-26 23:28:02 +0100 | <monochrom> | Yeah control structures. |
2022-01-26 23:28:03 +0100 | coot | (~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot) |
2022-01-26 23:28:20 +0100 | <EvanR> | stacks, trees, etc are concrete data structures |
2022-01-26 23:28:32 +0100 | <justsomeguy> | Refresh my memory: Do regular function definitions have a precedence of 7 or 9 by default? |
2022-01-26 23:28:38 +0100 | <monochrom> | Bet few programmers have thought of "a zoo of control structures" and so don't get monads just because of that. |
2022-01-26 23:28:38 +0100 | <EvanR> | where as Functors and Monads are abstract interfaces waiting to be implemented |
2022-01-26 23:28:46 +0100 | <ski> | justsomeguy : 10, if you mean function application |
2022-01-26 23:29:17 +0100 | <haskellb1> | stack and trees are still abstract because they can be applied to many different situations. But they are so common it takes less effort on the mind |
2022-01-26 23:29:20 +0100 | <monochrom> | And it doesn't help that Haskell is like even "data Foo a = ..." is often used to express control... |
2022-01-26 23:29:43 +0100 | <EvanR> | that's a different sense of abstract but ok |
2022-01-26 23:29:55 +0100 | <monochrom> | Plus, "what is control?" is equivalent to "what is effect?" :) |
2022-01-26 23:29:59 +0100 | <EvanR> | they certainly can be used for multiple things |
2022-01-26 23:30:11 +0100 | <justsomeguy> | ski: I thought that precedence only goes from 0..9? Or maybe that's only the range for fixity declarations, rather than fixity in general. |
2022-01-26 23:30:31 +0100 | craige[m] | (~craigemcw@2001:470:69fc:105::35f1) (Quit: Client limit exceeded: 20000) |
2022-01-26 23:30:34 +0100 | <geekosaur> | the default fixity of a function is infixl 9 |
2022-01-26 23:30:48 +0100 | <EvanR> | in each case we're still talking about the same concrete structure. Unlike "how to solve something with a random unknown monad", that's a whole nother story, and not even necessarily what is always done |
2022-01-26 23:30:54 +0100 | craige[m] | (~craigemcw@2001:470:69fc:105::35f1) |
2022-01-26 23:30:56 +0100 | <geekosaur> | function application behaves as if it has fixity 10, record updates behave as if they had fixity 11 |
2022-01-26 23:31:23 +0100 | ski | . o O ( "Escaping Hell with Monads" by Philip Nilsson in 2017-05-08 at <https://philipnilsson.github.io/Badness10k/escaping-hell-with-monads/> ; "Flattening Callback Chains with Monad Do-Notation" by Remko Tronçon in 2015-07-02 at <https://el-tramo.be/blog/async-monad/> ) |
2022-01-26 23:31:24 +0100 | <justsomeguy> | Thank you, that clears things up. I wish the language report made that a little more obvious. |
2022-01-26 23:32:03 +0100 | <ski> | justsomeguy : fixity of function application (juxtaposition syntactic operator) is `10' |
2022-01-26 23:32:19 +0100 | <monochrom> | Function application and record syntax cannot be formally given predence levels because there is no binary operator to attach the predence levels to. |
2022-01-26 23:32:26 +0100 | <ski> | er, s/fixity/precedence/ |
2022-01-26 23:32:35 +0100 | kjak | (~kjak@pool-108-45-56-21.washdc.fios.verizon.net) |
2022-01-26 23:32:44 +0100 | <ski> | ordinary (definable) operators have precedences from zero to nine, sure |
2022-01-26 23:32:57 +0100 | <monochrom> | And the Haskell Report is supposed to give formal definitions not intuitive conceptual moral fast-and-loose bedtime stories. |
2022-01-26 23:33:27 +0100 | <Henson> | check out https://www.haskell.org/onlinereport/decls.html section 4.4.2 for fixity declarations |
2022-01-26 23:33:28 +0100 | <monochrom> | So yeah it has to hide the intuitive interpretation in a formal grammar. |
2022-01-26 23:33:57 +0100 | <Henson> | "The integer in a fixity declaration must be in the range 0 to 9" |
2022-01-26 23:34:25 +0100 | <EvanR> | nothing wrong with turning it up to 11 every once in a while though |
2022-01-26 23:34:33 +0100 | <monochrom> | You can maybe go Dijkstra's way and demand function application to be an explicit binary operator. He uses ".", for example "sin.0" |
2022-01-26 23:34:39 +0100 | <monochrom> | haha |
2022-01-26 23:35:05 +0100 | <monochrom> | He was also happy with curry, "f.x.y". |
2022-01-26 23:35:14 +0100 | <monochrom> | err, currying! |
2022-01-26 23:35:21 +0100 | <ski> | % data Prec = P; instance Show Prec where showsPrec p P = showChar '<' . shows p . showChar '>' |
2022-01-26 23:35:22 +0100 | <yahb> | ski: |
2022-01-26 23:35:25 +0100 | <ski> | % P :+ P |
2022-01-26 23:35:26 +0100 | <yahb> | ski: <7> :+ <7> |
2022-01-26 23:35:28 +0100 | <ski> | % (P,P) |
2022-01-26 23:35:29 +0100 | <yahb> | ski: (<0>,<0>) |
2022-01-26 23:35:31 +0100 | <ski> | % Just P |
2022-01-26 23:35:32 +0100 | <yahb> | ski: Just <11> |
2022-01-26 23:35:42 +0100 | <EvanR> | what did you just do |
2022-01-26 23:36:16 +0100 | <ski> | (eleven, because function application is `infixl', so you add one to the precedence, when going to the right operand (the function argument expression)) |
2022-01-26 23:36:17 +0100 | <EvanR> | print out the number passed around with showsPrec |
2022-01-26 23:36:35 +0100 | <monochrom> | Sneaky. |
2022-01-26 23:36:49 +0100 | <Henson> | "Any operator lacking a fixity declaration is assumed to be infixl 9". This means that since function application isn't defined in the list it has the strongest fixity of 9, right? |
2022-01-26 23:37:13 +0100 | <Henson> | I mean, I guess your function name IS the operator, and it's infixl with a fixity of 9 |
2022-01-26 23:37:18 +0100 | <monochrom> | No. Function application is not an operator. |
2022-01-26 23:37:23 +0100 | <monochrom> | As said. |
2022-01-26 23:37:44 +0100 | <ski> | Henson : that only applies to ordinary operators |
2022-01-26 23:37:45 +0100 | <EvanR> | % Just P |
2022-01-26 23:37:45 +0100 | <yahb> | EvanR: Just <11> |
2022-01-26 23:37:59 +0100 | <EvanR> | oops |
2022-01-26 23:38:02 +0100 | geranim0 | (~geranim0@d-132-204-221-88.res.umontreal.ca) (Remote host closed the connection) |
2022-01-26 23:38:12 +0100 | <ski> | it does not apply to `@' in patterns, e.g. (another "syntatic operator" (my term)) |
2022-01-26 23:38:54 +0100 | <Henson> | ski: can you elaborate? |
2022-01-26 23:38:59 +0100 | <monochrom> | An "operator" is at least a lexeme as per Chapter 2. In "f e", there is no lexeme between "f" and "e". |
2022-01-26 23:39:47 +0100 | <EvanR> | until we get overloaded whitespace |
2022-01-26 23:40:22 +0100 | <ski> | (`~',`!' in patterns are examples of prefix (syntactic) operators. and then there's record construction (and update), which has higher precedence (binds tighter) than function application. `foo Node {rootLabel = r,subForest = ts}' is parsed as `foo (Node {rootLabel = r,subForest = ts})') |
2022-01-26 23:41:00 +0100 | <monochrom> | > length"xxxx" -- my favourite example |
2022-01-26 23:41:02 +0100 | <lambdabot> | 4 |
2022-01-26 23:41:17 +0100 | <monochrom> | > const"abc"123 -- have one more |
2022-01-26 23:41:19 +0100 | <lambdabot> | "abc" |
2022-01-26 23:41:32 +0100 | <monochrom> | No operator. |
2022-01-26 23:41:32 +0100 | <EvanR> | I retract my joke |
2022-01-26 23:41:51 +0100 | <EvanR> | not enough space between the lexemes for this joke |
2022-01-26 23:42:09 +0100 | <ski> | Henson : "operator" as in the report is as you say. however, i was talking about some syntactic constructions which turn up as binary nodes in the AST, and which behave as "syntactic operators". other examples are `::' and `<-' |
2022-01-26 23:42:12 +0100 | <monochrom> | "space is function application" is one of those white lies like Santa Claus we tell to kids. |
2022-01-26 23:42:30 +0100 | <ski> | yes, better to say "juxtaposition" |
2022-01-26 23:42:48 +0100 | <monochrom> | When you grow up, there is no longer any tooth fairy. |
2022-01-26 23:42:56 +0100 | <EvanR> | f x y |
2022-01-26 23:42:58 +0100 | <EvanR> | f x y |
2022-01-26 23:42:59 +0100 | <EvanR> | fxy |
2022-01-26 23:43:09 +0100 | <geekosaur> | consecutive tokens |
2022-01-26 23:43:23 +0100 | segfaultfizzbuzz | (~rustisafu@2602:306:cd3c:9350:59e3:db49:aa0a:46e5) (Remote host closed the connection) |
2022-01-26 23:43:39 +0100 | <ski> | (obviously, Santa Claus and the Tooth Fairy exists. just like cities, countries, bands, organizations exist ..) |
2022-01-26 23:43:45 +0100 | segfaultfizzbuzz | (~rustisafu@2602:306:cd3c:9350:59e3:db49:aa0a:46e5) |
2022-01-26 23:44:13 +0100 | <monochrom> | Oh haha I like that. |
2022-01-26 23:44:24 +0100 | <monochrom> | Haskell is a social construct. :) |
2022-01-26 23:44:39 +0100 | <EvanR> | "they didn't tell you? Santa clause died. 4 years ago" -- home improvement |
2022-01-26 23:45:41 +0100 | <monochrom> | Horn Claus takes polynomial time, Santa Claus is NP-hard >:) |
2022-01-26 23:45:59 +0100 | <EvanR> | minus e |
2022-01-26 23:46:22 +0100 | <monochrom> | Your typo was inspiring. Please don't fix it! :) |
2022-01-26 23:46:45 +0100 | romesrf | (~romes@44.190.189.46.rev.vodafone.pt) |
2022-01-26 23:47:51 +0100 | <dolio> | Just say it was an acknowledgement that Tim Allen was in The Santa Clause. |
2022-01-26 23:48:02 +0100 | <EvanR> | lol |
2022-01-26 23:48:13 +0100 | <monochrom> | Hee hee good catch. |
2022-01-26 23:48:28 +0100 | <EvanR> | where he actually died... that must be where that movie came from |
2022-01-26 23:48:33 +0100 | <EvanR> | unfortunately |
2022-01-26 23:49:11 +0100 | <monochrom> | > 1 |
2022-01-26 23:49:13 +0100 | <lambdabot> | 1 |
2022-01-26 23:50:24 +0100 | <EvanR> | > "monochrom" > "1" |
2022-01-26 23:50:25 +0100 | <lambdabot> | True |
2022-01-26 23:50:43 +0100 | Feuermagier | (~Feuermagi@user/feuermagier) |
2022-01-26 23:51:21 +0100 | <EvanR> | > monochrom > 1 |
2022-01-26 23:51:22 +0100 | <lambdabot> | False |
2022-01-26 23:53:35 +0100 | Feuermagier | (~Feuermagi@user/feuermagier) (Remote host closed the connection) |
2022-01-26 23:55:03 +0100 | tomsmeding | (~tomsmedin@tomsmeding.com) |
2022-01-26 23:56:06 +0100 | soxen | (~bob@pool-173-54-217-168.nwrknj.fios.verizon.net) |
2022-01-26 23:56:51 +0100 | azimut_ | (~azimut@gateway/tor-sasl/azimut) |
2022-01-26 23:57:24 +0100 | romesrf | (~romes@44.190.189.46.rev.vodafone.pt) (Quit: WeeChat 3.4) |
2022-01-26 23:57:46 +0100 | _xor | (~xor@dsl-50-5-233-169.fuse.net) (Read error: Connection reset by peer) |
2022-01-26 23:59:04 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) |
2022-01-26 23:59:04 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
2022-01-26 23:59:04 +0100 | wroathe | (~wroathe@user/wroathe) |
2022-01-26 23:59:20 +0100 | Feuermagier | (~Feuermagi@user/feuermagier) |