Home liberachat/#haskell: Logs Calendar

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

00:00:07 <orzo> i trie dto build that recently with a ghc 7.10.3 binary i downloaded
00:00:14 <orzo> it fails with a lot of link issues
00:01:13 <orzo> one thing i really like about ghc is that you don't even need cabal if you are compiling a single file haskell program
00:01:23 <orzo> you just pass it to the compiler and it makes a binary
00:01:24 <orzo> very simple
00:01:32 <orzo> i want that for android
00:01:44 <orzo> hello world android shouldn't even need a build system
00:01:48 <oak-> I've been looking forward to try to use Reflex to build native Android apps, that should use regular GHC to build native code
00:02:01 <orzo> i'm not familiar with Reflex
00:02:03 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
00:02:35 <oak-> That is a set of libraries for Haskell to implement the functional reactive programming paradigm
00:02:39 <orzo> even deb files can be packed manulally from components
00:03:04 <orzo> is that how you pack your debs on your haskell-mac-to-ubuntu system?
00:03:31 <oak-> I think it needs to be packaged because of the Java's class system
00:04:30 <oak-> I'm just building the binary with stack, and then generating the .deb package with fpm
00:05:20 <orzo> i wonder if fpm can be made to support android
00:05:43 <oak-> fpm makes it much easier to generate simple .deb packages (and also simple .rpm packages)
00:05:44 × DNH quits (~DNH@2a02:8108:1100:16d8:99cf:ff96:88:4a77) (Ping timeout: 255 seconds)
00:06:00 <orzo> i'm pretty familiar with dpkg-deb and what not
00:06:12 <orzo> i make a lot of casual deb packaging for my own purposes
00:06:36 <oak-> Yeah it's just more complicated, you need to write like 5 files to control what kind of .deb package is created :D
00:06:37 <orzo> i use debian
00:06:49 <orzo> hm
00:06:49 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 246 seconds)
00:06:59 × Deide quits (~Deide@user/deide) (Quit: Seeee yaaaa)
00:07:35 <orzo> fpm doesn't seem to be in th edebian archives
00:08:22 <orzo> if it was, i'd install it and maybe try it out
00:08:32 <orzo> but i cant be bothered to clone it and install from source
00:08:59 <oak-> It can be installed from rubygems
00:11:02 × acidjnk_new3 quits (~acidjnk@p200300d0c72b9563e5efeb4dbf0edadc.dip0.t-ipconnect.de) (Read error: Connection reset by peer)
00:11:27 <orzo> i have an old android app that i screwed up the gradle files for
00:11:33 <orzo> i don't know how to get it to build
00:11:49 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
00:12:00 <orzo> i recently got a fresh wizard-created app to build and run from the studio
00:12:20 <orzo> but my old eclipse/ant app is borked
00:15:59 <orzo> every binary in the sdk seems to consist of a bash script with over 80 lines of code to set up the enviro
00:16:01 chris-the-slurpa joins (~chris@81.96.113.213)
00:16:46 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Read error: Connection reset by peer)
00:16:48 <oak-> It shouldn't be that hard but you probably need to match the SDK version you initially used to build the app
00:19:08 <oak-> Also It starts to be a bit offtopic if we start to debug your Android app building in the #haskell channel :P
00:20:04 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
00:21:18 <orzo> yeah sorry
00:30:21 P1RATEZ joins (piratez@user/p1ratez)
00:33:25 dajoer joins (~david@user/gvx)
00:36:29 × Atum_ quits (~IRC@user/atum/x-2392232) (Quit: Atum_)
00:36:38 <ephemient> Bazel and Buck both seem to have teams maintaining their android app building capabilities
00:37:19 <ephemient> probably not gonna be any lighter on orzo's computer than Gradle, though
00:40:55 hmmmas joins (~fidnc@183.217.200.144)
00:43:17 <orzo> everyone makes huge hungry build enviros these days
00:44:29 <orzo> there should be an effort to make building accessible to cheap low power devices
00:44:51 <orzo> i'm on an i5 anyway with 8gig ram, it should be sufficient
00:45:18 × Vajb quits (~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi) (Read error: Connection reset by peer)
00:45:51 <orzo> one might suspect they don't want people to build their own binaries
00:46:03 Vajb joins (~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi)
00:53:40 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
00:53:51 × cjb quits (~cjb@user/cjb) (Ping timeout: 246 seconds)
00:57:39 × epolanski quits (uid312403@id-312403.brockwell.irccloud.com) (Quit: Connection closed for inactivity)
00:58:14 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Remote host closed the connection)
00:59:51 × Feuermagier quits (~Feuermagi@user/feuermagier) (Remote host closed the connection)
01:04:51 <exarkun> what force is there exerting pressure on the software development process not increase its resource usage, apart from the absolute limit on what resources are actually available?
01:05:18 <exarkun> and lacking such a force, why would resource usage not continuously expand to that limit?
01:08:28 <davean> exarkun: I find making it complex harder, and I don't need to show I'm making a tangled mess to keep my job, so I can do it simply?
01:09:09 <orzo> the force is randos like me longing for simpler tools
01:10:56 × sheepduck quits (~sheepduck@user/sheepduck) (Remote host closed the connection)
01:12:05 <exarkun> davean: Is _making_ it complex harder? Or is it harder to deal with once it's been made complex?
01:12:23 <exarkun> And then once it's hard to deal with, what's the easiest thing to do? Well, add some more complexity of course...
01:13:39 <exarkun> Just pull in another library, adopt a fancier build system, set up CI, set up CD, use tools to automate the development workflow, pull in linters, and formatters, and ...
01:14:22 <dsal> Extra points if the additional layer has "simple" in the name.
01:14:25 <exarkun> orzo: Yea, not enough of a force I guess. 1000x people who can't even recognize simple for every one of you randos.
01:15:32 <DigitalKiwi> orzo++
01:15:36 <exarkun> Even if you _want_ things to be simpler, you also want to get things done sometimes
01:16:05 <exarkun> How often do you fully anticipate _all_ of the consequences of introducing a new piece of software into your system?
01:16:45 <DigitalKiwi> https://source.android.com/setup/build/requirements#hardware-requirements
01:16:47 <exarkun> There's extreme bias in the direction of more complexity, not less
01:16:52 × hegstal quits (~hegstal@2a02:c7f:7604:8a00:5056:66c0:d6e:186f) (Remote host closed the connection)
01:17:34 <DigitalKiwi> my computer only has 16GB of ram ;_;
01:17:45 <exarkun> I sure don't like stripe-core's 20 minute build time, but what am I gonna do, write my own stripe client library?
01:18:04 <DigitalKiwi> and it only had 500GB ssd
01:18:44 × norias quits (~jaredm@c-98-219-195-163.hsd1.pa.comcast.net) (Remote host closed the connection)
01:19:46 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 240 seconds)
01:19:59 <DigitalKiwi> which i finally upgraded but due to the infinite wisdom of apple this $3,500+ macbook pro has the ram soldered on so that one's out...
01:20:13 <DigitalKiwi> 3
01:20:50 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
01:20:57 <dsal> You don't have a heat gun?
01:21:57 wei2912 joins (~wei2912@112.199.250.21)
01:22:02 <dsal> All of my computers have 4GB of RAM or less. cachix+github actions makes things actually work at least for me.
01:22:12 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 252 seconds)
01:22:31 maf654321 joins (~maf654321@user/maf654321)
01:23:43 <DigitalKiwi> i have several heat guns but i don't think it would help ;p
01:23:55 gehmehgeh joins (~user@user/gehmehgeh)
01:24:07 <monochrom> "developers" are spoiled.
01:24:31 falafel joins (~falafel@pool-96-255-70-50.washdc.fios.verizon.net)
01:24:46 <monochrom> But what do you use a heat gun for? To fry the over-speced computers of the spoiled developers? >:)
01:24:53 <exarkun> monochrom: "users" are undiscerning?
01:25:15 <monochrom> Well, I'll complain about users some other day.
01:25:40 <DigitalKiwi> when your users are developers what now
01:25:49 <exarkun> or maybe both are true and irrelevant and fitness is maximized by the easy production and use of bloated software
01:26:22 <exarkun> The heat gun is for desoldering the tiny DIMMs before replacing them
01:26:39 <monochrom> cool
01:26:52 <DigitalKiwi> should i just ignore exarkun before i go off at them
01:27:51 <exarkun> DigitalKiwi: let me save you the trouble, I'm going to bed now
01:27:55 <DigitalKiwi> g'night
01:28:07 <DigitalKiwi> As of June 2021, Google is using 72-core machines with 64 GB of RAM internally, which take about 40 minutes for a full build (and just a few minutes for incremental builds, depending on exactly which files were modified). By contrast, a 6-core machine with a similar amount of RAM takes 3 hours.
01:28:07 <DigitalKiwi> lolol
01:28:55 monochrom intentional misreads that as "takes such and such time to build the machine"
01:29:26 <monochrom> "I would think that fewer cores takes less time to build" :)
01:30:24 <DigitalKiwi> well you see the 6-core machines have bigger cores so it takes longer to move them
01:31:40 <monochrom> I wonder if https://xkcd.com/303/ is the true incentive for longer build times.
01:32:53 <oak-> On one of my past workplaces they actually had the boffer swords in the office
01:33:17 <monochrom> nice
01:34:10 warnz joins (~warnz@2600:1700:77c0:5610:edd9:472d:4b89:9ab8)
01:34:18 × xff0x quits (~xff0x@2001:1a81:53dc:b800:d9eb:91ca:317b:6253) (Ping timeout: 252 seconds)
01:36:05 xff0x joins (~xff0x@2001:1a81:521d:ec00:3970:2542:2f1d:feb7)
01:38:26 × warnz quits (~warnz@2600:1700:77c0:5610:edd9:472d:4b89:9ab8) (Ping timeout: 255 seconds)
01:42:57 neurocyte404 joins (~neurocyte@46.243.81.30)
01:42:57 × neurocyte404 quits (~neurocyte@46.243.81.30) (Changing host)
01:42:57 neurocyte404 joins (~neurocyte@user/neurocyte)
01:46:34 × neurocyte40 quits (~neurocyte@user/neurocyte) (Ping timeout: 240 seconds)
01:46:34 neurocyte404 is now known as neurocyte40
01:47:00 × shredder quits (~user@user/shredder) (Quit: quitting)
01:48:20 × MQ-17J quits (~MQ-17J@8.21.10.15) (Ping timeout: 255 seconds)
01:49:20 shredder joins (~user@user/shredder)
01:51:24 × Reyu[M] quits (~reyureyuz@matrix.reyuzenfold.com) (Remote host closed the connection)
01:51:56 Reyu[M] joins (~reyureyuz@matrix.reyuzenfold.com)
01:55:05 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 255 seconds)
01:56:55 × falafel quits (~falafel@pool-96-255-70-50.washdc.fios.verizon.net) (Read error: Connection reset by peer)
02:00:17 <davean> exarkun: making it complex takes more work
02:00:24 <davean> exarkun: its easier to make it simple
02:00:35 × jao quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Remote host closed the connection)
02:01:57 <davean> exarkun: pretty sure a lot of complexity comes from people trying to look busy, important, and valuable.
02:02:55 norias joins (~jaredm@c-98-219-195-163.hsd1.pa.comcast.net)
02:08:16 × maf654321 quits (~maf654321@user/maf654321) (Quit: Textual IRC Client: www.textualapp.com)
02:08:23 jao joins (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
02:09:48 mafdz joins (~maf654321@user/maf654321)
02:11:04 mafdz is now known as maf654321
02:17:46 × shapr quits (~user@pool-100-36-247-68.washdc.fios.verizon.net) (Ping timeout: 240 seconds)
02:18:57 × maf654321 quits (~maf654321@user/maf654321) (Quit: ZNC 1.7.4 - https://znc.in)
02:20:32 × gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving)
02:21:07 × Reyu[M] quits (~reyureyuz@matrix.reyuzenfold.com) (Remote host closed the connection)
02:23:19 finn_elija joins (~finn_elij@user/finn-elija/x-0085643)
02:23:19 FinnElija is now known as Guest181
02:23:19 × Guest181 quits (~finn_elij@user/finn-elija/x-0085643) (Killed (mercury.libera.chat (Nickname regained by services)))
02:23:19 finn_elija is now known as FinnElija
02:23:27 × td_ quits (~td@94.134.91.165) (Ping timeout: 258 seconds)
02:24:01 × machinedgod quits (~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 246 seconds)
02:24:30 × aerona quits (~aerona@2600:6c54:4600:f300:c99c:8727:19f:ba14) (Quit: Leaving)
02:25:08 td_ joins (~td@muedsl-82-207-238-014.citykom.de)
02:25:40 polykernel[m] joins (~polykerne@2001:470:69fc:105::ba04)
02:27:52 hexreel joins (~hr@69.233.98.238)
02:33:37 Reyu[M] joins (~reyureyuz@matrix.reyuzenfold.com)
02:34:36 safinaskar joins (~user@109-252-90-89.nat.spd-mgts.ru)
02:34:39 <safinaskar> hi
02:34:50 <safinaskar> i just published my second hackage package!
02:35:18 <safinaskar> see ann: https://mail.haskell.org/pipermail/haskell-cafe/2021-July/134205.html
02:35:24 <safinaskar> it is parsing lib
02:35:27 <safinaskar> arrow parsing
02:37:16 × Reyu[M] quits (~reyureyuz@matrix.reyuzenfold.com) (Remote host closed the connection)
02:37:52 <Axman6> That's the longest email subject I've seen in my life, haha
02:38:03 <Axman6> and longest package name too
02:39:06 <safinaskar> :)
02:39:13 <safinaskar> and longest package description?
02:39:25 hmmmas1 joins (~fidnc@183.217.200.144)
02:40:20 <pavonia> "the best parsing library" The code harder to read than e.g. MegaParsec code
02:41:16 × hmmmas1 quits (~fidnc@183.217.200.144) (Client Quit)
02:41:38 Reyu[M] joins (~reyureyuz@matrix.reyuzenfold.com)
02:41:50 × hmmmas quits (~fidnc@183.217.200.144) (Ping timeout: 252 seconds)
02:42:31 hmmmas joins (~fidnc@183.217.200.144)
02:42:48 <safinaskar> pavonia: yes. but megaparsec doesn't support unbiased choice
02:43:30 <glguy> safinaskar: happy has no trouble being used with tokens that have line and also column information
02:44:35 × dragestil quits (~quassel@user/dragestil) (Ping timeout: 252 seconds)
02:45:28 <glguy> There's an example here where *parsing* fails because a name wasn't declared, but it think it's a lot nicer for the user if things like that don't break parsing. Once you've parsed the syntax you can then find all the problems at once and things like scope and typing, etc, don't have to be passing to know that the syntax is OK
02:46:04 dragestil joins (~quassel@user/dragestil)
02:46:24 <pavonia> safinaskar: Why is unbiased choice better than biased choice?
02:46:45 <Axman6> yeah I would have thought that often you know which bias you want
02:47:12 <c_wraith> Nah, biased choice without backtracking is terrible. You constantly have to refactor your grammar around the parser limitations
02:47:42 <glguy> I generally find it's a liability when you start computing inside your parser, which is a problem with most examples of parser-combinators uses
02:47:58 <glguy> the grammar gets lost in the midst of the computation
02:48:04 <Axman6> safinaskar: Good news, the haddocks have appeared on hackage :)
02:49:13 <glguy> Unbiased choice parsing was handy on this year's Advent of Code; it saved me from having to think too hard when going for quick completion
02:54:14 <qrpnxz> > • Could not deduce: ((n1 + m) + 1) ~ (n + m)
02:54:14 <qrpnxz> > from the context: n ~ (n1 + 1)
02:54:15 <qrpnxz> rip
02:54:15 <lambdabot> <hint>:1:1: error: parse error on input ‘•’
02:54:15 <lambdabot> error:
02:54:15 <lambdabot> Pattern syntax in expression context: ~(n1 + 1)
02:55:11 bitmapper joins (uid464869@id-464869.tooting.irccloud.com)
02:55:40 <Axman6> yeah you need to be quite careful about how you structure types with nats, sometimes just changing the order of the arguments can help. I think there are also GHC plugins which can resolve things which are obviously true
02:56:07 cmburnett joins (~cmburnett@c-73-37-184-238.hsd1.mn.comcast.net)
02:56:49 cmburnett parts (~cmburnett@c-73-37-184-238.hsd1.mn.comcast.net) ()
02:57:20 <safinaskar> glguy: "happy has no trouble being used with tokens that have line and also column information" - yes, but then you have to manually combine this location information. For example, using (<-->) from srcloc. And you should do this in every happy production. My library does this automatically
02:58:47 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
03:00:03 <safinaskar> glguy: "but it think it's a lot nicer for the user if things like that don't break parsing" - fully agree. My library (thanks to power of arrows) allow you to check you for parsing errors and then (if there is no parsing errors) check semantic errors. In other words parsing code is mixed/
03:00:54 <safinaskar> glguy: in other words, parsing code is mixed/interleaved, but thanks to arrow power, when you actually run parser (in "main") you check for parsing errors and then other errors!!!
03:01:58 <Axman6> trifecta adds location information by default right?
03:03:29 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 255 seconds)
03:05:25 andreabedini joins (~andreabed@8s8kj6nl13s474s8p7bh.ip6.superloop.com)
03:06:11 <glguy> putting code into the parser isn't great, but that's nice that it helps with locations
03:08:15 <safinaskar> pavonia: "Why is unbiased choice better than biased choice?" - because unbiased choice captures my parsing intuition. And I think it captures parsing intuition of everybody else. I once had one tragedy: I created grammar for my language. In my head this grammar used unbiased choice, i. e. in my mental map the choice was unbiased. Then I converted this my mental map to code. To parsec code. Which uses
03:08:21 <safinaskar> biased choice. The code worked. I wrote lot of code in this my new language. But then I discovered that original grammar (with unbiased choice) was ambiguous! But when I converted it to parsec code, the ambiguity vanished! So, the actual parser simply stick to particular choices, and I don't know to which! So all code in this my new language was possibly ambiguous!
03:08:21 × mei quits (~mei@user/mei) (Ping timeout: 252 seconds)
03:09:51 <safinaskar> pavonia: well, again: i think biased is counter-intuitive. Also, definitions of many languages use unbiased choice
03:10:09 × dragestil quits (~quassel@user/dragestil) (Read error: Connection reset by peer)
03:11:09 mei joins (~mei@user/mei)
03:15:09 × P1RATEZ quits (piratez@user/p1ratez) (Remote host closed the connection)
03:18:23 yauhsien joins (~yauhsien@61-231-39-135.dynamic-ip.hinet.net)
03:32:53 <qrpnxz> i found out how to do existential with data by the way :)
03:34:33 warnz joins (~warnz@2600:1700:77c0:5610:edd9:472d:4b89:9ab8)
03:34:51 <qrpnxz> this is epic
03:35:40 <lechner> Hi, are emails for hackage account registration sent with a delay?
03:36:02 <Axman6> I believe they have to be actioned by a human
03:36:05 <safinaskar> qrpnxz: how?
03:36:22 <lechner> Axman6: ah, no rush. thanks!
03:36:33 luna_ joins (~luna@124.205.197.98)
03:37:43 <qrpnxz> you can make something like `data SomeFoldable = forall a. Foldable f => SomeFoldable (f a)`, then you can do `deriving instance Foldable SomeFoldable`, and whatever you wrap will act like a dynamic interface type
03:37:45 <qrpnxz> it's pretty nice
03:39:02 × warnz quits (~warnz@2600:1700:77c0:5610:edd9:472d:4b89:9ab8) (Ping timeout: 252 seconds)
03:39:12 <glguy> Do you mean: data SomeFoldable a = ... ?
03:39:19 <qrpnxz> yeah oops
03:41:08 × norias quits (~jaredm@c-98-219-195-163.hsd1.pa.comcast.net) (Ping timeout: 272 seconds)
03:41:37 <qrpnxz> for that you need DeriveFoldable, StandaloneDeriving, and ExistentialQuantification by the way
03:43:49 <qrpnxz> i wish it would just do all that for you, but oh well
03:44:57 <glguy> What're you doing that you needed that?
03:46:07 <qrpnxz> you can use this to return an interface on a function
03:48:07 <monochrom> I'm pretty sure even "data SomeFoldable a = forall a. Foldable f => SomeFoldable (f a)" is not the real code.
03:48:19 <qrpnxz> it is, it compiles
03:48:19 <monochrom> For starters, free variable f.
03:48:27 <qrpnxz> oh, i meant forall f
03:48:28 <qrpnxz> ofc
03:50:54 <c_wraith> I thought you were concerned with preventing fusion
03:51:31 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
03:52:27 bontaq joins (~user@ool-18e47f8d.dyn.optonline.net)
03:52:30 <qrpnxz> I'm just saying I found how to do it
03:53:20 <qrpnxz> thx for bringing that up though, would be good to bench it
03:58:00 <safinaskar> qrpnxz: please write correct code. "f" is free
03:58:13 oxide joins (~lambda@user/oxide)
03:58:34 <qrpnxz> already brought up, here is the corrected version `data SomeFoldable a = forall f. Foldable f => SomeFoldable (f a)`
04:00:01 <safinaskar> qrpnxz: thanks
04:01:00 <safinaskar> qrpnxz: so, SomeFoldable itself can be passed as "f", right? is this intentional?
04:01:18 <qrpnxz> idk what you mean by passed as f
04:02:42 <qrpnxz> c_wraith, seems to fuse fine. I think where you get in trouble is if you accept SomeFoldable for your function, but if you just return, the real type should always be known, and ghc can optimize for that. (And accepting SomeFoldable should never happen; should be using constraint there).
04:05:52 <safinaskar> qrpnxz: i mean that SomeFoldable can be f. i. e. you can substitute SomeFoldable as f
04:06:33 <qrpnxz> Eh, yes.
04:06:57 × slowButPresent quits (~slowButPr@user/slowbutpresent) (Quit: leaving)
04:07:16 <safinaskar> qrpnxz: is this intentional? i. e. i need this fact to understand this code?
04:07:25 <Axman6> feels related to Yoneda
04:08:52 <qrpnxz> safinaskar: It is intentional that SomeFoldable is a foldable if that's what you're asking.
04:09:27 <c_wraith> Axman6: it's just the existential typeclass antipattern
04:10:16 <Axman6> @hoogle Yoneda
04:10:16 <lambdabot> module Data.Profunctor.Yoneda
04:10:16 <lambdabot> Data.Profunctor.Yoneda newtype Yoneda p a b
04:10:16 <lambdabot> Data.Profunctor.Yoneda Yoneda :: (forall x y . (x -> a) -> (b -> y) -> p x y) -> Yoneda p a b
04:11:41 <Axman6> that was not useful
04:12:51 × Megant quits (megant@user/megant) (Read error: Connection reset by peer)
04:13:32 <c_wraith> Yoneda does something different - it captures the functionality of a class, but it doesn't wrap an unknown instance
04:13:45 <c_wraith> wait, no, I'm thinking Coyoneda
04:14:39 Axman6 muses that we need a Yoyoneda, which caputres the idea of traversing down into a structure and back up, and down again...
04:16:43 × luna_ quits (~luna@124.205.197.98) (Remote host closed the connection)
04:18:27 <qrpnxz> c_wraith, Why do you say it is an antipattern
04:18:49 × yauhsien quits (~yauhsien@61-231-39-135.dynamic-ip.hinet.net) (Ping timeout: 246 seconds)
04:19:47 <c_wraith> because hiding types like that basically always gets in the way of good code in Haskell
04:20:34 <qrpnxz> ok how
04:21:47 hexfive joins (~eric@50.35.83.177)
04:25:00 safinaskar parts (~user@109-252-90-89.nat.spd-mgts.ru) ()
04:25:31 <qrpnxz> i could instead return like `(a -> b -> b) -> b -> b` which would be a completely explicit type, yet reveal no new information. Because functions are abstractions, and this is also an abstraction, except it's much nicer to use imo
04:25:50 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 255 seconds)
04:29:28 × hexfive quits (~eric@50.35.83.177) (Quit: WeeChat 3.0)
04:32:19 luna_ joins (~luna2021@124.205.197.98)
04:32:42 norias joins (~jaredm@c-98-219-195-163.hsd1.pa.comcast.net)
04:35:46 × derelict quits (~derelict@user/derelict) (Ping timeout: 240 seconds)
04:38:25 <nshepperd> you could also just return whatever the underlying foldable is, instead of being paternalistic toward your user
04:38:49 <c_wraith> basically, users always want to do things you haven't imagined
04:38:58 <qrpnxz> but then changing it is a breaking change, it has nothing to do with paternalism
04:39:09 <c_wraith> breaking changes are fine, as long as they break compilation
04:41:14 <qrpnxz> well not really, because that change might've "taken away" features, features that i never intended to guarantee. It would not be an easy fix for you if my overkill type that i used is suddenly a very dumb type
04:42:08 <c_wraith> you keep imagining that you know every valid use case
04:42:24 <c_wraith> I assure you, users have weird ideas. :)
04:42:32 × luna_ quits (~luna2021@124.205.197.98) (Remote host closed the connection)
04:42:38 <nshepperd> if you never intended to guarantee it but it's useful then that's good, value was created
04:43:00 dragestil joins (~quassel@user/dragestil)
04:43:19 × dragestil quits (~quassel@user/dragestil) (Client Quit)
04:43:54 dragestil joins (~quassel@user/dragestil)
04:44:34 × norias quits (~jaredm@c-98-219-195-163.hsd1.pa.comcast.net) (Ping timeout: 240 seconds)
04:49:32 luna_ joins (~luna2021@124.205.197.98)
04:50:45 <nshepperd> you can just document what you guarantee in your haddock comments. this makes any usage outside that guarantee the user's responsibility, and freedom
04:51:01 <qrpnxz> More is not always good. Encapsulation is good. It would also allow one to return a different foldable based on the inputs.
04:51:38 <c_wraith> That sounds like a terrible thing to do
04:52:01 Megant joins (~kaitsu@user/megant)
04:53:00 <nshepperd> The paternalism is that you are trying to protect the user from this responsibility
04:53:30 <sm> sounds like php/perl/lisp-type coding. I will admit, those rich do-everything functions can seem handy at times.
04:53:41 <sm> in those languages
04:54:16 <sm> nothing illegal about it in haskell either, if it's documented with types..
04:54:23 × luna_ quits (~luna2021@124.205.197.98) (Ping timeout: 252 seconds)
04:54:26 <qrpnxz> like in some function I could do if you gave me a set maybe i use that directly and then return a set too, otherwise i do an ordered list.
04:55:24 hexreel parts (~hr@69.233.98.238) (WeeChat 3.2)
05:01:58 × ukari quits (~ukari@user/ukari) (Remote host closed the connection)
05:03:03 ukari joins (~ukari@user/ukari)
05:03:14 <qrpnxz> i agree with my arguments, and yet i would like to return a concrete type too. At least for this function I'm currently writing, but I still think this is a legitimate feature.
05:04:39 yauhsien joins (~yauhsien@61-231-39-135.dynamic-ip.hinet.net)
05:09:09 anandprabhu joins (~anandprab@94.202.243.198)
05:09:26 × edwtjo quits (~edwtjo@user/edwtjo) (Ping timeout: 258 seconds)
05:17:33 <sm> are we talking about a Monoid a => m a -> m a function ?
05:18:37 <qrpnxz> eh, no. idk where you got that
05:19:03 <sm> "some function I could do if you gave me a set maybe i use that directly and then return a set too, otherwise i do an ordered list"
05:19:29 <sm> I may not have understood you, no worries
05:20:05 <qrpnxz> well we were using foldable as an example, idk if set has monoid ig it does.
05:20:23 <qrpnxz> but sure you could say something similar but with monoid instead
05:20:41 <sm> I was just trying to think what's the haskell way of saying "some collection of things"
05:21:10 <sm> it sounded like you wanted to make a function polymorphic in the collection type. But I've just jumped in at the end of your discussion.
05:22:30 <sm> (afk)
05:22:45 <qrpnxz> ah well we are talking about function that returns an interface rather than a concrete type. For accepting any foldable, you use forall, but to return any generic (specific) foldable, you use existential.
05:23:54 edwtjo joins (~edwtjo@h-109-228-137-133.A213.priv.bahnhof.se)
05:23:54 × edwtjo quits (~edwtjo@h-109-228-137-133.A213.priv.bahnhof.se) (Changing host)
05:23:54 edwtjo joins (~edwtjo@user/edwtjo)
05:24:00 <qrpnxz> ok i have to go to bed now gn
05:24:20 mikoto-chan joins (~mikoto-ch@ip-213-49-189-31.dsl.scarlet.be)
05:29:21 luna_ joins (~luna2021@124.205.197.98)
05:29:21 × anandprabhu quits (~anandprab@94.202.243.198) (Quit: Leaving)
05:29:21 × oxide quits (~lambda@user/oxide) (Ping timeout: 272 seconds)
05:29:22 tabemann_ joins (~tabemann@172-13-49-137.lightspeed.milwwi.sbcglobal.net)
05:30:41 oxide joins (~lambda@user/oxide)
05:31:01 × scrazen quits (~scrazen@user/scrazen) (Remote host closed the connection)
05:31:20 × tabemann quits (~tabemann@172-13-49-137.lightspeed.milwwi.sbcglobal.net) (Ping timeout: 256 seconds)
05:31:20 × motherfsck quits (~motherfsc@user/motherfsck) (Ping timeout: 272 seconds)
05:31:29 scrazen joins (~scrazen@user/scrazen)
05:31:57 motherfsck joins (~motherfsc@user/motherfsck)
05:41:30 × ptr_frac7al quits (~longlong@user/ptr-frac7al/x-0038398) (Quit: ptr_frac7al)
05:44:59 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
05:49:56 × Megant quits (~kaitsu@user/megant) (Ping timeout: 252 seconds)
05:50:44 × gioyik quits (~gioyik@gateway/tor-sasl/gioyik) (Quit: WeeChat 3.1)
05:51:21 ishutin joins (~ishutin@79.120.162.129)
06:05:46 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds)
06:11:23 × tabemann_ quits (~tabemann@172-13-49-137.lightspeed.milwwi.sbcglobal.net) (Remote host closed the connection)
06:11:29 tabemann_ joins (~tabemann@172-13-49-137.lightspeed.milwwi.sbcglobal.net)
06:12:14 artagnon joins (sid7560@id-7560.tooting.irccloud.com)
06:12:34 × jao quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 246 seconds)
06:14:13 × Cale quits (~cale@cpef48e38ee8583-cm0c473de9d680.cpe.net.cable.rogers.com) (Ping timeout: 258 seconds)
06:14:48 Cale joins (~cale@cpef48e38ee8583-cm0c473de9d680.cpe.net.cable.rogers.com)
06:15:49 chele joins (~chele@user/chele)
06:18:51 jneira joins (~jneira@212.8.115.226)
06:18:53 Gurkenglas joins (~Gurkengla@dslb-002-203-144-156.002.203.pools.vodafone-ip.de)
06:20:09 turlando joins (~turlando@user/turlando)
06:22:00 × jespada quits (~jespada@90.254.247.46) (Ping timeout: 268 seconds)
06:22:03 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
06:22:33 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
06:25:04 xerxes joins (~xerxes@117.222.64.149)
06:25:07 jespada joins (~jespada@90.254.247.46)
06:27:47 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 255 seconds)
06:28:31 Megant joins (megant@user/megant)
06:28:34 kenran joins (~kenran@b2b-37-24-119-190.unitymedia.biz)
06:29:05 acidjnk joins (~acidjnk@p200300d0c72b9563509afe7c5cdd8ef5.dip0.t-ipconnect.de)
06:29:15 × awth13 quits (~user@user/awth13) (Remote host closed the connection)
06:29:36 awth13 joins (~user@user/awth13)
06:34:51 × neurocyte40 quits (~neurocyte@user/neurocyte) (Quit: The Lounge - https://thelounge.chat)
06:39:38 neurocyte404 joins (~neurocyte@46.243.81.30)
06:39:38 × neurocyte404 quits (~neurocyte@46.243.81.30) (Changing host)
06:39:38 neurocyte404 joins (~neurocyte@user/neurocyte)
06:44:30 wallymathieu joins (~wallymath@81-234-151-21-no94.tbcn.telia.com)
06:45:40 bOy_isOg joins (~bOy_isOg@119.93.22.3)
06:46:30 bOy_isOg parts (~bOy_isOg@119.93.22.3) ()
06:49:34 Lycurgus joins (~juan@cpe-45-46-140-49.buffalo.res.rr.com)
06:51:06 × polux quits (~polux@51.15.169.172) (Quit: The Lounge - https://thelounge.github.io)
06:51:23 polux joins (~polux@51.15.169.172)
06:52:44 fendor joins (~fendor@77.119.197.100.wireless.dyn.drei.com)
06:52:51 anandprabhu joins (~anandprab@94.202.243.198)
06:54:20 × chris-the-slurpa quits (~chris@81.96.113.213) (Remote host closed the connection)
06:55:01 chris-the-slurpa joins (~chris@81.96.113.213)
06:55:58 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 246 seconds)
06:56:55 takuan joins (~takuan@178-116-218-225.access.telenet.be)
06:58:58 × chris-the-slurpa quits (~chris@81.96.113.213) (Ping timeout: 240 seconds)
07:00:11 × flipchan quits (~yumman@user/flipchan) (Ping timeout: 255 seconds)
07:00:33 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
07:05:08 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 255 seconds)
07:10:23 chomwitt joins (~Pitsikoko@ppp-94-67-202-202.home.otenet.gr)
07:18:56 Obo joins (~roberto@70.pool90-171-81.dynamic.orange.es)
07:22:55 × tzh quits (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
07:23:29 × nerdypepper quits (~nerdypepp@user/nerdypepper) (Remote host closed the connection)
07:24:00 _ht joins (~quassel@82-169-194-8.biz.kpn.net)
07:24:58 thiross joins (~thiross@39.170.37.82)
07:25:51 × thiross quits (~thiross@39.170.37.82) (Remote host closed the connection)
07:26:42 nschoe joins (~quassel@2a01:e0a:8e:a190:156a:d066:25bb:13b1)
07:27:38 rhett joins (Username@174-126-122-77.cpe.sparklight.net)
07:27:53 × rhett quits (Username@174-126-122-77.cpe.sparklight.net) (Excess Flood)
07:28:10 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
07:31:05 × zaquest quits (~notzaques@5.128.210.178) (Remote host closed the connection)
07:32:15 zaquest joins (~notzaques@5.128.210.178)
07:33:38 × Lycurgus quits (~juan@cpe-45-46-140-49.buffalo.res.rr.com) (Quit: Exeunt)
07:34:20 gehmehgeh joins (~user@user/gehmehgeh)
07:35:49 nerdypepper joins (~nerdypepp@user/nerdypepper)
07:36:09 warnz joins (~warnz@2600:1700:77c0:5610:edd9:472d:4b89:9ab8)
07:39:43 × azeem quits (~azeem@dynamic-adsl-84-220-226-129.clienti.tiscali.it) (Ping timeout: 246 seconds)
07:40:41 × warnz quits (~warnz@2600:1700:77c0:5610:edd9:472d:4b89:9ab8) (Ping timeout: 255 seconds)
07:41:20 azeem joins (~azeem@176.201.41.131)
07:43:50 Pickchea joins (~private@user/pickchea)
07:45:59 × azeem quits (~azeem@176.201.41.131) (Ping timeout: 252 seconds)
07:46:54 azeem joins (~azeem@176.201.41.131)
07:49:41 cfricke joins (~cfricke@user/cfricke)
07:51:08 kuribas joins (~user@ptr-25vy0i8xkirhfn6k3n1.18120a2.ip6.access.telenet.be)
07:51:50 × opqdonut_ quits (opqdonut@pseudo.fixme.fi) (Ping timeout: 265 seconds)
07:52:14 opqdonut joins (opqdonut@pseudo.fixme.fi)
07:54:10 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
07:58:56 × wallymathieu quits (~wallymath@81-234-151-21-no94.tbcn.telia.com) (Quit: My MacBook has gone to sleep. ZZZzzz…)
08:00:47 thiross joins (~thiross@39.170.37.82)
08:01:03 × ubert quits (~Thunderbi@p2e5a50e5.dip0.t-ipconnect.de) (Remote host closed the connection)
08:02:02 × thiross quits (~thiross@39.170.37.82) (Client Quit)
08:06:33 hendursa1 joins (~weechat@user/hendursaga)
08:07:00 × aplainzetakind quits (~johndoe@captainludd.powered.by.lunarbnc.net) (Ping timeout: 252 seconds)
08:09:38 × hendursaga quits (~weechat@user/hendursaga) (Ping timeout: 244 seconds)
08:12:08 zeenk joins (~zeenk@2a02:2f04:a106:9600:82fb:aed9:ca9:38d3)
08:17:22 × azeem quits (~azeem@176.201.41.131) (Ping timeout: 240 seconds)
08:17:55 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
08:17:57 allbery_b joins (~geekosaur@xmonad/geekosaur)
08:18:10 × econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity)
08:18:13 azeem joins (~azeem@176.201.41.131)
08:19:22 × ray quits (~ray@user/re) (Ping timeout: 240 seconds)
08:19:33 aplainzetakind joins (~johndoe@captainludd.powered.by.lunarbnc.net)
08:22:04 Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
08:22:58 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 240 seconds)
08:23:17 Lord_of_Life_ is now known as Lord_of_Life
08:23:45 × xerxes quits (~xerxes@117.222.64.149) (Quit: leaving)
08:29:10 lavaman joins (~lavaman@98.38.249.169)
08:33:06 × turlando quits (~turlando@user/turlando) (Ping timeout: 272 seconds)
08:33:22 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 240 seconds)
08:38:07 × jay-invariant quits (~jay@c-24-4-6-169.hsd1.ca.comcast.net) (Remote host closed the connection)
08:38:07 Gurkenglas_ joins (~Gurkengla@dslb-002-203-144-156.002.203.pools.vodafone-ip.de)
08:38:07 ubert joins (~Thunderbi@2a02:8109:9880:303c:ca5b:76ff:fe29:f233)
08:38:07 jay-invariant joins (~jay@c-24-4-6-169.hsd1.ca.comcast.net)
08:39:57 gehmehgeh_ joins (~user@user/gehmehgeh)
08:40:04 × Gurkenglas quits (~Gurkengla@dslb-002-203-144-156.002.203.pools.vodafone-ip.de) (Ping timeout: 272 seconds)
08:41:09 × gehmehgeh quits (~user@user/gehmehgeh) (Ping timeout: 244 seconds)
08:43:41 drd joins (~drd@2001:b07:a70:9f1f:1562:34de:f50f:77d4)
08:48:28 × azeem quits (~azeem@176.201.41.131) (Read error: Connection reset by peer)
08:50:03 azeem joins (~azeem@dynamic-adsl-84-220-226-129.clienti.tiscali.it)
08:51:24 michalz joins (~michalz@185.246.204.61)
08:55:42 viluon joins (uid453725@id-453725.brockwell.irccloud.com)
08:56:16 nsilv joins (~nsilv@212.103.198.210)
08:59:51 Teacup_ joins (~teacup@user/teacup)
09:00:29 × Teacup quits (~teacup@user/teacup) (Ping timeout: 268 seconds)
09:02:35 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 255 seconds)
09:03:46 × pjb quits (~pjb@user/pjb) (Read error: Connection reset by peer)
09:08:15 <tomsmeding> Does anyone happen to know a class of numerical two-argument functions that 1. are associative, and 2. can be randomly generated?
09:09:06 trattue joins (~trattue@152.70.182.158)
09:09:08 <tomsmeding> I want to quickcheck a thing that requires a (numerically) differentiable function (a -> a -> a) that is also associative (f(f(x,y),z) == f(x,f(y,z)))
09:09:27 ray joins (~ray@user/re)
09:09:53 <tomsmeding> '\x y -> b*x*y + u*x + v*y' is associative for all b and with u in {0,1}, but is there perhaps a larger set?
09:10:06 <tomsmeding> (correction, u and v in {0,1})
09:12:45 <tomsmeding> (correction, u=v=0 or u=v=1 :p)
09:13:11 × haykam2 quits (~haykam@static.100.2.21.65.clients.your-server.de) (Remote host closed the connection)
09:13:24 haykam3 joins (~haykam@static.100.2.21.65.clients.your-server.de)
09:14:54 × acid quits (~acid@user/acid) (Ping timeout: 272 seconds)
09:16:56 × hnOsmium0001 quits (uid453710@id-453710.stonehaven.irccloud.com) (Quit: Connection closed for inactivity)
09:17:00 acid joins (~acid@user/acid)
09:17:30 MoC joins (~moc@user/moc)
09:19:56 <viluon> surely `\x y -> 3` is also associative?
09:21:13 <tomsmeding> ah, true!
09:21:48 <tomsmeding> maybe this class of things, together with matrix multiplication, is already diverse enough to get some confidence that my function is correct :p
09:21:56 <viluon> could you perhaps arrive at the entire set compositionally?
09:22:14 <tomsmeding> that's what I would be interested in
09:23:38 <viluon> all constant functions are differentiable & associative (so they're in let's say S), multiplications of an f ∈ S by a scalar (αf) are also in S, their additions are also in S, as are their multiplications, where you define + and * on these functions as f + g = \x y -> f x y + g x y (analogically for *)
09:23:57 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:44e3:e9f0:ea4d:f039) (Remote host closed the connection)
09:24:30 <viluon> I mean, hopefully right? make sure such + and * makes sense esp. w.r.t. differentiation
09:24:49 <tomsmeding> yeah don't worry about the differentiation :p
09:25:31 <viluon> but that's still all just constant functions if you look closely
09:25:46 <tomsmeding> yeah
09:25:47 <viluon> there's no use of the arguments in the leaves of functions defined as such
09:26:03 <tomsmeding> \x y -> x + y ought to be in S, but \x y -> (x + y) * (x + y) is definitely not in S
09:26:18 <viluon> it'd be great if there were an identity function, but I'm not sure how to do that with two arguments
09:26:34 <tomsmeding> well \x _ -> x and \_ y -> y are also in S
09:27:10 <viluon> yeah true that, you have the projections
09:28:01 <viluon> it's really the set of ℝ × ℝ → ℝ, for some definition of ℝ, I don't think you get much from partial application here
09:28:19 <viluon> (the subset of*)
09:28:27 <viluon> (a subset of*)
09:28:38 <tomsmeding> problem is that S is not at all closed under + or *
09:29:01 <viluon> hmm
09:30:43 × kenran quits (~kenran@b2b-37-24-119-190.unitymedia.biz) (Quit: WeeChat info:version)
09:42:10 neceve joins (~quassel@2a02:c7f:607e:d600:f762:20dd:304e:4b1f)
09:44:07 jippiedoe joins (~david@2a02-a44c-e14e-1-99a5-f36d-ee14-d92.fixed6.kpn.net)
09:44:36 Tuplanolla joins (~Tuplanoll@91-159-68-239.elisa-laajakaista.fi)
09:48:29 × chomwitt quits (~Pitsikoko@ppp-94-67-202-202.home.otenet.gr) (Ping timeout: 255 seconds)
09:49:42 × trattue quits (~trattue@152.70.182.158) (Remote host closed the connection)
09:51:18 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
09:51:30 Trattue joins (~Trattue@152.70.182.158)
09:59:07 jakalx parts (~jakalx@base.jakalx.net) ()
09:59:37 <viluon> what are the desired properties for + and * on functions?
10:00:13 <tomsmeding> I'm not even sure I need the set to be closed under particular operations specifically
10:00:35 <tomsmeding> I just want a large set of functions, parametrised in some way that I can randomly generate them, that are all associative
10:01:21 <viluon> btw here's a notion of function composition that works, but isn't very revealing `f . g = \ x y -> let z = g x y in f z z`
10:01:23 <tomsmeding> but (\x y -> f x y) + (\a b -> g a b) can only really mean \x y -> f x y + g x y
10:01:46 <viluon> I'm struggling to find the "point" at which the associativity is lost
10:01:54 <tomsmeding> :D
10:02:18 <tomsmeding> that function composition also doesn't preserve associativity I believe
10:02:19 fef joins (~thedawn@user/thedawn)
10:05:15 × Trattue quits (~Trattue@152.70.182.158) (Quit: bye)
10:05:30 Trattue joins (~Trattue@152.70.182.158)
10:08:07 <viluon> ah, you may be right!
10:08:21 <viluon> it's associative if `g (let q = g x y in f q q) z ≟ g x (let q = g y z in f q q)`
10:10:30 <tomsmeding> not associative for f = g = (+) :p
10:10:40 <tomsmeding> because \x y -> 2 * x * y is not associative
10:10:54 <tomsmeding> uh correction, \x y -> 2 * (x + y)
10:11:13 wqsz7xn joins (~wqsz7xn@202.36.244.28)
10:11:42 <tomsmeding> I feel like the only things that really compose here are \x _ -> x and \_ y -> y
10:13:24 <viluon> associativity is way more elusive than I thought
10:14:18 jakalx joins (~jakalx@base.jakalx.net)
10:14:29 <viluon> hmm, *just* multiplication or *just* addition would work though, wouldn't it?
10:14:36 <viluon> that'd give you a group, right?
10:14:38 <tomsmeding> yes, also c*x*y
10:14:47 <tomsmeding> would it?
10:14:59 <viluon> oh, group has inverses
10:15:09 <tomsmeding> monoid rather
10:15:20 <viluon> semigroup?
10:15:28 <viluon> associative binary operation
10:15:53 <viluon> oh monoid is a semigroup plus identity, fair enough
10:17:12 × fluffyballoon quits (~fluffybal@199.204.58.62) (Quit: Client closed)
10:17:29 fluffyballoon joins (~fluffybal@199.204.58.62)
10:18:32 <viluon> so it's the interactions between + and * that screw it up
10:18:46 <tomsmeding> yeah
10:24:26 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:44e3:e9f0:ea4d:f039)
10:26:28 <viluon> tomsmeding: I think you can get quite far with just the two separate monoids, plus multiplication by a scalar on each (although that has to be on the "top-level" I believe, without further composition via + or *). There may be functions that mix + and * in other ways that this doesn't cover, but I don't know how to find them :/
10:28:54 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:44e3:e9f0:ea4d:f039) (Ping timeout: 252 seconds)
10:29:22 × nsilv quits (~nsilv@212.103.198.210) (Quit: WeeChat 3.0.1)
10:34:56 × luna_ quits (~luna2021@124.205.197.98) (Remote host closed the connection)
10:39:08 × Tuplanolla quits (~Tuplanoll@91-159-68-239.elisa-laajakaista.fi) (Quit: Leaving.)
10:39:47 × aplainzetakind quits (~johndoe@captainludd.powered.by.lunarbnc.net) (Ping timeout: 252 seconds)
10:45:02 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
10:54:23 luna_ joins (~luna2021@124.205.197.98)
10:54:50 zcombinator joins (~zcombinat@host-87-7-58-35.retail.telecomitalia.it)
10:56:21 chris-the-slurpa joins (~chris@81.96.113.213)
10:56:53 × andreabedini quits (~andreabed@8s8kj6nl13s474s8p7bh.ip6.superloop.com) (Ping timeout: 255 seconds)
10:57:11 × ray quits (~ray@user/re) (Quit: WeeChat 3.2)
10:58:02 s__ joins (~s@50.34.81.185)
10:58:16 × azeem quits (~azeem@dynamic-adsl-84-220-226-129.clienti.tiscali.it) (Ping timeout: 258 seconds)
10:59:03 × fluffyballoon quits (~fluffybal@199.204.58.62) (Quit: Client closed)
10:59:14 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
10:59:15 × s_ quits (~s@50.34.81.185) (Read error: Connection reset by peer)
10:59:21 fluffyballoon joins (~fluffybal@199.204.58.62)
11:00:34 × Pickchea quits (~private@user/pickchea) (Ping timeout: 240 seconds)
11:02:19 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
11:03:00 vpan joins (~vilius@212.117.1.172)
11:03:34 luna__ joins (~luna2021@124.205.197.98)
11:06:18 × luna_ quits (~luna2021@124.205.197.98) (Ping timeout: 252 seconds)
11:06:44 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 252 seconds)
11:08:41 × Vajb quits (~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi) (Read error: Connection reset by peer)
11:08:53 aplainzetakind joins (~johndoe@captainludd.powered.by.lunarbnc.net)
11:11:34 × luna__ quits (~luna2021@124.205.197.98) ()
11:12:46 × jippiedoe quits (~david@2a02-a44c-e14e-1-99a5-f36d-ee14-d92.fixed6.kpn.net) (Remote host closed the connection)
11:13:02 jippiedoe joins (~david@2a02-a44c-e14e-1-e2b1-5b1f-ad9a-57c9.fixed6.kpn.net)
11:16:27 Vajb joins (~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi)
11:18:14 azeem joins (~azeem@dynamic-adsl-84-220-226-129.clienti.tiscali.it)
11:22:09 andreabedini joins (~andreabed@8s8kj6n9tyzc511tnjb7.ip6.superloop.com)
11:22:10 <dminuoso> 11:08:15 tomsmeding | Does anyone happen to know a class of numerical two-argument functions that 1. are associative, and 2. can be randomly generated?
11:23:11 <dminuoso> Elliptic curves come to mind
11:23:43 <dminuoso> (e.g. elliptic curves over Galois fields)
11:23:58 <dminuoso> Or.. is that even associative I wonder?
11:25:38 <tomsmeding> "An elliptic curve is an abelian variety – that is, it has a group law defined algebraically, with respect to which it is an abelian group – and O99,99 serves as the identity element."
11:25:52 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:44e3:e9f0:ea4d:f039)
11:26:04 <tomsmeding> dminuoso: sounds like it should be associative; but it's also commutative, right?
11:26:18 <tomsmeding> Suboptimal but quite interesting example
11:26:47 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Quit: FinnElija)
11:28:16 × favonia quits (~favonia@user/favonia) (Ping timeout: 246 seconds)
11:28:30 <tomsmeding> Looks like you really need more than one-dimensional arguments to get interesting behaviour
11:28:51 ishutin_ joins (~ishutin@87-97-88-250.pool.digikabel.hu)
11:30:28 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
11:30:30 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:44e3:e9f0:ea4d:f039) (Ping timeout: 252 seconds)
11:32:20 × ishutin quits (~ishutin@79.120.162.129) (Ping timeout: 272 seconds)
11:33:08 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
11:34:52 × yauhsien quits (~yauhsien@61-231-39-135.dynamic-ip.hinet.net) (Read error: Connection reset by peer)
11:35:08 × cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.2)
11:35:19 machinedgod joins (~machinedg@135-23-192-217.cpe.pppoe.ca)
11:37:34 warnz joins (~warnz@2600:1700:77c0:5610:edd9:472d:4b89:9ab8)
11:40:03 favonia joins (~favonia@user/favonia)
11:42:03 × warnz quits (~warnz@2600:1700:77c0:5610:edd9:472d:4b89:9ab8) (Ping timeout: 252 seconds)
11:45:38 × azeem quits (~azeem@dynamic-adsl-84-220-226-129.clienti.tiscali.it) (Read error: Connection reset by peer)
11:46:35 epolanski joins (uid312403@id-312403.brockwell.irccloud.com)
11:58:05 × jippiedoe quits (~david@2a02-a44c-e14e-1-e2b1-5b1f-ad9a-57c9.fixed6.kpn.net) (Ping timeout: 255 seconds)
11:59:04 dunj3 joins (~dunj3@2001:16b8:30aa:f100:5749:57d0:4660:97ec)
11:59:57 acidjnk_new joins (~acidjnk@p200300d0c72b9550509afe7c5cdd8ef5.dip0.t-ipconnect.de)
12:00:23 <AWizzArd> dminuoso: have you implemented Single Sign-On?
12:01:30 <dminuoso> No.
12:03:02 × acidjnk quits (~acidjnk@p200300d0c72b9563509afe7c5cdd8ef5.dip0.t-ipconnect.de) (Ping timeout: 255 seconds)
12:03:23 coeus joins (~coeus@b2b-92-50-96-34.unitymedia.biz)
12:05:42 × favonia quits (~favonia@user/favonia) (Ping timeout: 252 seconds)
12:06:50 favonia joins (~favonia@user/favonia)
12:07:33 <viluon> hello, I have a question about generics-sop again. In pretty-sop's function `prettyValFor`, in the second equation, there's an auxiliary map for infix constructors (https://github.com/well-typed/pretty-sop/blob/master/src/Generics/SOP/PrettyVal.hs#L42-L45). It has the type `forall x y. NP (K Value) '[x, y] -> Value`, but is seemingly applied in a context where it is not known that `xs ~ '[x, y]`. How come this typechecks?
12:08:05 × phma quits (phma@2001:5b0:211c:858:db7c:9aeb:2bd8:1b08) (Read error: Connection reset by peer)
12:08:25 <viluon> I thought the `xs ~ '[x, y]` equivalence came as a consequence of pattern-matching on the `Infix` constructor of `ConstructorInfo`, but `ConstructorInfo` is not a GADT
12:11:55 × fluffyballoon quits (~fluffybal@199.204.58.62) (Ping timeout: 246 seconds)
12:12:51 Pickchea joins (~private@user/pickchea)
12:15:00 jao joins (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
12:15:21 × anandprabhu quits (~anandprab@94.202.243.198) (Quit: Leaving)
12:17:59 azeem joins (~azeem@dynamic-adsl-84-220-226-129.clienti.tiscali.it)
12:23:11 lortabac joins (~lortabac@95.138.56.124)
12:24:45 phma joins (phma@2001:5b0:212a:c338:e904:270b:aa2b:a4ce)
12:31:03 <kosmikus> viluon: `ConstructorInfo` *is* a GADT.
12:31:18 <kosmikus> viluon: what makes you think otherwise?
12:31:40 <viluon> oh, am I confused? I'm probably confused https://hackage.haskell.org/package/generics-sop-0.5.1.1/docs/src/Generics.SOP.Type.Metadata.html#ConstructorInfo
12:31:55 <kosmikus> ah
12:32:17 <kosmikus> that explains your confusion indeed
12:32:23 <kosmikus> the right definition is here: https://hackage.haskell.org/package/generics-sop-0.5.1.1/docs/src/Generics.SOP.Metadata.html#ConstructorInfo
12:32:44 <kosmikus> generics-sop has two methods of providing metadata
12:32:53 <kosmikus> one is that metadata is a term-level structure
12:33:07 <kosmikus> the datatypes for this are defined in `Generics.SOP.Metadata`
12:33:15 <kosmikus> (and have the GADT)
12:33:24 <viluon> haha, that's mightily confusing. Thanks for clearing it up!
12:33:25 <kosmikus> this is what's being used by `pretty-sop`.
12:33:38 <kosmikus> the other is that the entire metadata can be lifted to the type-level.
12:33:48 <kosmikus> and that uses "simple" datatypes.
12:33:59 <kosmikus> primarily because there was a time when GADTs could not be promoted.
12:34:20 <kosmikus> this is no longer the case. it might be worth exploring whether the two could be unified better.
12:35:15 <kosmikus> but then again, even though GADTs can be lifted now, the type-level programming world is still different from the term-level programming world, so promoted GADTs don't quite behave as one might expect of GADTs.
12:35:35 <Gurkenglas_> Is there a language that compiles to python, has IDE support, and is more like Haskell?
12:35:39 Gurkenglas_ is now known as Gurkenglas
12:36:18 <viluon> Gurkenglas haven't tried, but I heard of https://github.com/evhub/coconut
12:36:30 × favonia quits (~favonia@user/favonia) (Ping timeout: 252 seconds)
12:36:36 <darklambda> how's coconut these days?
12:36:38 <kosmikus> Idris typically has backends for everything, but not necessarily backends of a very robust quality.
12:37:14 favonia joins (~favonia@user/favonia)
12:38:10 <viluon> if I had a nickel every time I'm confused about something that would be cleared up by jump-to-definition, I would have at least one nickel today
12:38:33 <viluon> HLS is wonderful but I wish it could jump to hackage sources as well
12:39:07 <kosmikus> perhaps that will be possible some day.
12:39:26 <kosmikus> HLS is evolving so quickly, it's amazing.
12:39:50 <Gurkenglas> could you download acme-everything and just goto definition?
12:40:13 × ukari quits (~ukari@user/ukari) (Remote host closed the connection)
12:40:14 <dminuoso> acme-everything sadly doesn't build, and quchen is too lazy to fix it.
12:40:27 <dminuoso> We ought to start a petition.
12:40:48 ukari joins (~ukari@user/ukari)
12:41:20 pbrisbin joins (~patrick@pool-173-49-147-28.phlapa.fios.verizon.net)
12:42:10 <Gurkenglas> the problem is that when you import lens and build your package goto definition doesnt work on lens, right? shouldnt it be possible to tell cabal/stack to put all the source in the local folder before building it?
12:42:13 × pbrisbin quits (~patrick@pool-173-49-147-28.phlapa.fios.verizon.net) (Client Quit)
12:44:45 pbrisbin joins (~patrick@pool-173-49-147-28.phlapa.fios.verizon.net)
12:47:27 lavaman joins (~lavaman@98.38.249.169)
12:48:26 <fendor> iirc, with a bit of hacking, you can goto hackage libs with hls
12:48:33 rostero joins (uid236576@id-236576.tooting.irccloud.com)
12:48:51 <fendor> it's not stable yet, though
12:49:43 × jneira quits (~jneira@212.8.115.226) (Quit: Client closed)
12:51:20 <Gurkenglas> you mean, the required hacking is likely to change in the future so it's not worth adding it as a command to stack and hls?
12:51:54 × favonia quits (~favonia@user/favonia) (Ping timeout: 252 seconds)
12:52:12 favonia joins (~favonia@user/favonia)
12:53:34 <fendor> yep
12:53:40 <fendor> based on hie files, iirc
12:54:08 × fef quits (~thedawn@user/thedawn) (Remote host closed the connection)
13:01:03 fluffyballoon joins (~fluffybal@pat-verona-i.epic.com)
13:01:15 alx741 joins (~alx741@186.178.108.75)
13:03:48 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
13:06:17 zebrag joins (~chris@user/zebrag)
13:15:46 × hendursa1 quits (~weechat@user/hendursaga) (Quit: hendursa1)
13:16:47 hendursaga joins (~weechat@user/hendursaga)
13:19:35 shapr joins (~user@pool-100-36-247-68.washdc.fios.verizon.net)
13:21:52 × biberu quits (~biberu@user/biberu) (Read error: Connection reset by peer)
13:22:11 biberu joins (~biberu@user/biberu)
13:22:14 × statusbot quits (~statusbot@ec2-34-198-122-184.compute-1.amazonaws.com) (Remote host closed the connection)
13:22:29 statusbot joins (~statusbot@ec2-34-198-122-184.compute-1.amazonaws.com)
13:24:25 × pieguy128 quits (~pieguy128@bras-base-mtrlpq5031w-grc-57-65-92-163-194.dsl.bell.ca) (Quit: ZNC 1.8.2 - https://znc.in)
13:24:43 pieguy128 joins (~pieguy128@bras-base-mtrlpq5031w-grc-57-65-92-163-194.dsl.bell.ca)
13:24:54 × viluon quits (uid453725@id-453725.brockwell.irccloud.com) (Ping timeout: 252 seconds)
13:25:27 × machinedgod quits (~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 252 seconds)
13:25:32 viluon joins (uid453725@id-453725.brockwell.irccloud.com)
13:26:00 × ishutin_ quits (~ishutin@87-97-88-250.pool.digikabel.hu) (Ping timeout: 252 seconds)
13:26:24 machinedgod joins (~machinedg@135-23-192-217.cpe.pppoe.ca)
13:26:45 ishutin joins (~ishutin@87-97-88-250.pool.digikabel.hu)
13:27:18 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:44e3:e9f0:ea4d:f039)
13:28:00 × Katarushisu quits (~Katarushi@cpc152083-finc20-2-0-cust170.4-2.cable.virginm.net) (Quit: Ping timeout (120 seconds))
13:28:18 Katarushisu joins (~Katarushi@cpc152083-finc20-2-0-cust170.4-2.cable.virginm.net)
13:29:36 × kuribas quits (~user@ptr-25vy0i8xkirhfn6k3n1.18120a2.ip6.access.telenet.be) (Remote host closed the connection)
13:30:02 kuribas joins (~user@ptr-25vy0i8xkirhfn6k3n1.18120a2.ip6.access.telenet.be)
13:30:24 × typedfern_ quits (~Typedfern@185.red-83-57-142.dynamicip.rima-tde.net) (Ping timeout: 252 seconds)
13:31:38 warnz joins (~warnz@2600:1700:77c0:5610:edd9:472d:4b89:9ab8)
13:31:41 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:44e3:e9f0:ea4d:f039) (Ping timeout: 255 seconds)
13:32:26 turlando joins (~turlando@user/turlando)
13:34:48 × funsafe quits (~funsafe@2601:1c1:4200:938f:32aa:eb39:2110:e2ea) (Ping timeout: 252 seconds)
13:35:36 funsafe joins (~funsafe@2601:1c1:4200:938f:32aa:eb39:2110:e2ea)
13:36:37 Martinsos joins (~Martinsos@cpe-188-129-56-84.dynamic.amis.hr)
13:37:43 × vpan quits (~vilius@212.117.1.172) (Quit: Leaving.)
13:38:02 egoist joins (~egoist@186.235.80.249)
13:38:07 <Martinsos> Hi! I am trying to decide between tml and transformers package, is there a general consensus one which one is better? It is a pretty common use case, writing a Parser monad that needs to combine state and exceptions, will probably be writing some Reader Env transformers in the future and similar.
13:38:17 <Martinsos> mtl, not tml
13:39:02 <nshepperd2> they work together
13:39:13 <nshepperd2> mtl has the typeclasses, transformer has the types
13:39:33 × kuribas quits (~user@ptr-25vy0i8xkirhfn6k3n1.18120a2.ip6.access.telenet.be) (Remote host closed the connection)
13:39:49 <nshepperd2> it's not a thing where you need to only use one
13:39:52 kuribas joins (~user@ptr-25vy0i8xkirhfn6k3n1.18120a2.ip6.access.telenet.be)
13:39:55 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
13:41:22 <Hecate> Martinsos: they work hand in hand
13:43:01 typedfern_ joins (~Typedfern@185.red-83-57-142.dynamicip.rima-tde.net)
13:43:07 <Hecate> hey typedfern_ :)
13:44:55 Morrow joins (~MorrowM_@bzq-110-168-31-106.red.bezeqint.net)
13:45:22 × kuribas quits (~user@ptr-25vy0i8xkirhfn6k3n1.18120a2.ip6.access.telenet.be) (Remote host closed the connection)
13:45:34 kuribas joins (~user@ptr-25vy0i8xkirhfn6k3n1.18120a2.ip6.access.telenet.be)
13:45:38 chomwitt joins (~Pitsikoko@2a02:587:dc04:e00:d8f7:cdfe:4658:bec4)
13:48:15 MorrowM joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
13:48:51 × warnz quits (~warnz@2600:1700:77c0:5610:edd9:472d:4b89:9ab8) (Remote host closed the connection)
13:48:58 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 246 seconds)
13:49:04 warnz joins (~warnz@2600:1700:77c0:5610:edd9:472d:4b89:9ab8)
13:49:51 norias joins (~jaredm@c-98-219-195-163.hsd1.pa.comcast.net)
13:51:21 derelict joins (~derelict@user/derelict)
13:51:56 × favonia quits (~favonia@user/favonia) (Ping timeout: 255 seconds)
13:53:05 × Morrow quits (~MorrowM_@bzq-110-168-31-106.red.bezeqint.net) (Read error: Connection reset by peer)
13:53:29 Morrow joins (~MorrowM_@bzq-110-168-31-106.red.bezeqint.net)
13:53:45 favonia joins (~favonia@user/favonia)
13:55:07 comerijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
13:55:07 × azeem quits (~azeem@dynamic-adsl-84-220-226-129.clienti.tiscali.it) (Read error: Connection reset by peer)
13:55:37 mastarija joins (~mastarija@31.217.22.8)
13:55:54 × mastarija quits (~mastarija@31.217.22.8) (Client Quit)
13:57:21 × finsternis quits (~X@23.226.237.192) (Remote host closed the connection)
13:57:40 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 258 seconds)
14:02:37 × Martinsos quits (~Martinsos@cpe-188-129-56-84.dynamic.amis.hr) (Remote host closed the connection)
14:02:55 Martinsos joins (~Martinsos@cpe-188-129-56-84.dynamic.amis.hr)
14:03:46 azeem joins (~azeem@dynamic-adsl-84-220-226-129.clienti.tiscali.it)
14:03:57 × comerijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
14:06:31 tzh joins (~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
14:06:50 nick8325 joins (~nick@2001:9b1:26f9:3e00:b7ea:ac95:e18:4c1d)
14:07:41 × dunj3 quits (~dunj3@2001:16b8:30aa:f100:5749:57d0:4660:97ec) (Remote host closed the connection)
14:07:43 allbery_b is now known as geekosaur
14:09:34 <qrpnxz> I'm kind of surprised that associativity et al. or not yet things you can declare now that i think about it.
14:10:33 <qrpnxz> *are
14:12:48 <Martinsos> Thanks pplz! Ok, so I should use mtl and transformers with it. I shouldn't use just transfomers, although I could, because I am loosing on goodies that mtl brings, right?
14:16:41 × nick8325 quits (~nick@2001:9b1:26f9:3e00:b7ea:ac95:e18:4c1d) (Quit: Leaving.)
14:17:32 nick8325 joins (~nick8325@2001:9b1:26f9:3e00:b7ea:ac95:e18:4c1d)
14:17:40 safinaskar joins (~user@109.252.90.89)
14:18:11 × nick8325 quits (~nick8325@2001:9b1:26f9:3e00:b7ea:ac95:e18:4c1d) (Client Quit)
14:18:36 <safinaskar> i just published my second hackage package! read ann: https://mail.haskell.org/pipermail/haskell-cafe/2021-July/134205.html
14:18:47 <safinaskar> parsing lib, arrow parsing
14:20:21 sergal joins (~ezra@user/ezra)
14:22:12 nick8325 joins (~nick8325@2001:9b1:26f9:3e00:b7ea:ac95:e18:4c1d)
14:22:39 Sgeo joins (~Sgeo@user/sgeo)
14:24:38 <yushyin> what is this way to long subject, /me closes tab
14:27:17 × Martinsos quits (~Martinsos@cpe-188-129-56-84.dynamic.amis.hr) (Remote host closed the connection)
14:27:34 Martinsos joins (~Martinsos@cpe-188-129-56-84.dynamic.amis.hr)
14:28:11 slowButPresent joins (~slowButPr@user/slowbutpresent)
14:29:08 amahl joins (~amahl@dsl-jklbng12-54fbca-64.dhcp.inet.fi)
14:31:10 yauhsien joins (~yauhsien@61-231-39-135.dynamic-ip.hinet.net)
14:33:35 × Martinsos quits (~Martinsos@cpe-188-129-56-84.dynamic.amis.hr) (Remote host closed the connection)
14:33:52 Martinsos joins (~Martinsos@cpe-188-129-56-84.dynamic.amis.hr)
14:33:55 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
14:36:38 × Vajb quits (~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi) (Read error: Connection reset by peer)
14:37:25 Vajb joins (~Vajb@n2hz3gq4auh6ltn9l-2.v6.elisa-mobile.fi)
14:37:50 × waleee quits (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 255 seconds)
14:39:53 × Martinsos quits (~Martinsos@cpe-188-129-56-84.dynamic.amis.hr) (Remote host closed the connection)
14:40:10 Martinsos joins (~Martinsos@cpe-188-129-56-84.dynamic.amis.hr)
14:40:58 × favonia quits (~favonia@user/favonia) (Ping timeout: 240 seconds)
14:41:21 × MorrowM quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 252 seconds)
14:41:54 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:44e3:e9f0:ea4d:f039)
14:42:07 favonia joins (~favonia@user/favonia)
14:48:36 × Obo quits (~roberto@70.pool90-171-81.dynamic.orange.es) (Quit: WeeChat 2.8)
14:48:43 sedeki joins (~textual@user/sedeki)
14:50:16 × zcombinator quits (~zcombinat@host-87-7-58-35.retail.telecomitalia.it) (Quit: WeeChat 3.2)
14:50:26 × cheater quits (~Username@user/cheater) (Ping timeout: 255 seconds)
14:50:54 cheater joins (~Username@user/cheater)
14:51:08 × tomku quits (~tomku@user/tomku) (Ping timeout: 252 seconds)
14:51:17 tomku joins (~tomku@user/tomku)
14:54:27 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:44e3:e9f0:ea4d:f039) (Remote host closed the connection)
14:56:09 × son0p quits (~ff@181.136.122.143) (Remote host closed the connection)
14:56:44 × favonia quits (~favonia@user/favonia) (Ping timeout: 255 seconds)
14:56:55 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
14:58:01 Lycurgus joins (~juan@cpe-45-46-140-49.buffalo.res.rr.com)
14:58:37 son0p joins (~ff@181.136.122.143)
14:59:02 favonia joins (~favonia@user/favonia)
14:59:53 × Vajb quits (~Vajb@n2hz3gq4auh6ltn9l-2.v6.elisa-mobile.fi) (Ping timeout: 255 seconds)
15:00:06 × son0p quits (~ff@181.136.122.143) (Remote host closed the connection)
15:02:59 × Martinsos quits (~Martinsos@cpe-188-129-56-84.dynamic.amis.hr) (Remote host closed the connection)
15:03:18 Martinsos joins (~Martinsos@cpe-188-129-56-84.dynamic.amis.hr)
15:03:28 MorrowM joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
15:05:08 × Martinsos quits (~Martinsos@cpe-188-129-56-84.dynamic.amis.hr) (Remote host closed the connection)
15:05:22 × chomwitt quits (~Pitsikoko@2a02:587:dc04:e00:d8f7:cdfe:4658:bec4) (Ping timeout: 240 seconds)
15:05:25 Martinsos joins (~Martinsos@cpe-188-129-56-84.dynamic.amis.hr)
15:06:13 × sedeki quits (~textual@user/sedeki) (Quit: Textual IRC Client: www.textualapp.com)
15:06:22 × hmmmas quits (~fidnc@183.217.200.144) (Quit: Leaving.)
15:07:17 × wei2912 quits (~wei2912@112.199.250.21) (Quit: Lost terminal)
15:09:06 × chris-the-slurpa quits (~chris@81.96.113.213) (Remote host closed the connection)
15:09:47 chris-the-slurpa joins (~chris@81.96.113.213)
15:11:39 chris-th_ joins (~chris@81.96.113.213)
15:11:39 × chris-the-slurpa quits (~chris@81.96.113.213) (Read error: Connection reset by peer)
15:13:15 <qrpnxz> interesting, i will check it out today
15:13:15 lbseale joins (~lbseale@user/ep1ctetus)
15:14:54 × tomku quits (~tomku@user/tomku) (Ping timeout: 252 seconds)
15:15:01 tomku joins (~tomku@user/tomku)
15:17:20 <safinaskar> thanks! :)
15:19:15 leeb joins (~leeb@KD111239157039.au-net.ne.jp)
15:20:48 <azeem> tomsmeding: You can get a lot of examples by consider matrices with coefficients in some ring and I think even a semiring. You can consider the ring of Integers modulo n and even of polynomials in some number of variables.
15:21:20 <azeem> They will be non-commutative but associative.
15:26:05 × Martinsos quits (~Martinsos@cpe-188-129-56-84.dynamic.amis.hr) (Remote host closed the connection)
15:26:22 Martinsos joins (~Martinsos@cpe-188-129-56-84.dynamic.amis.hr)
15:28:32 × Martinsos quits (~Martinsos@cpe-188-129-56-84.dynamic.amis.hr) (Remote host closed the connection)
15:28:49 Martinsos joins (~Martinsos@cpe-188-129-56-84.dynamic.amis.hr)
15:30:13 × Morrow quits (~MorrowM_@bzq-110-168-31-106.red.bezeqint.net) (Quit: Leaving)
15:31:31 × MorrowM quits (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Quit: ZNC 1.8.2 - https://znc.in)
15:31:54 Morrow joins (~Morrow@bzq-110-168-31-106.red.bezeqint.net)
15:35:10 × lbseale quits (~lbseale@user/ep1ctetus) (Read error: Connection reset by peer)
15:37:00 wallymathieu joins (~wallymath@81-234-151-21-no94.tbcn.telia.com)
15:38:04 × yauhsien quits (~yauhsien@61-231-39-135.dynamic-ip.hinet.net) (Remote host closed the connection)
15:38:54 × Lycurgus quits (~juan@cpe-45-46-140-49.buffalo.res.rr.com) (Quit: Exeunt)
15:42:38 × ubert quits (~Thunderbi@2a02:8109:9880:303c:ca5b:76ff:fe29:f233) (Ping timeout: 255 seconds)
15:43:46 × cheater quits (~Username@user/cheater) (Ping timeout: 246 seconds)
15:44:27 cheater joins (~Username@user/cheater)
15:46:36 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:44e3:e9f0:ea4d:f039)
15:47:21 × favonia quits (~favonia@user/favonia) (Ping timeout: 252 seconds)
15:48:23 × sqrt2 quits (~ben@80-108-18-7.cable.dynamic.surfer.at) (Quit: ZNC - http://znc.in)
15:48:42 favonia joins (~favonia@user/favonia)
15:50:30 MQ-17J joins (~MQ-17J@8.21.10.15)
15:51:32 <Martinsos> I published my very first package on Hackage -> strongly typed paths, similar like 'path' which was big inspiration but I try to take it one level further: https://hackage.haskell.org/package/strong-path . Any comments on code / API are very welcome, as I still consider myself to be intermediate in Haskell!
15:51:41 sqrt2 joins (~ben@tunnel330957-pt.tunnel.tserv6.fra1.ipv6.he.net)
15:52:14 <maerwald> Martinsos: I posted my comment on reddig already :p
15:52:17 <maerwald> *reddit
15:52:50 <Martinsos> maerwald ah that is you thanks for that :D! I thought it might be worth putting it here also, I don't know how much people from IRC are also on reddit
15:53:10 <maerwald> Also, if you're using FilePath under the hood, then that would be my other critique
15:53:17 <jle`> nice Martinsos !
15:53:26 × lortabac quits (~lortabac@95.138.56.124) (Quit: WeeChat 2.8)
15:54:06 × egoist quits (~egoist@186.235.80.249) (Quit: WeeChat 3.2)
15:54:31 Kofid joins (~Kofid@2601:404:d300:5a0:fcbf:c290:5998:a5c6)
15:55:43 <Martinsos> I am using Path under the hood actually, which uses FilePath :). Makes sense, but we can change that implementation in the future with no / little effect on the API I believe.
15:55:57 <maerwald> if I ever get AFPP done, yeah
15:56:22 <maerwald> Martinsos: https://github.com/hasufell/abstract-filepath
15:56:27 <Martinsos> Just read about AFPP, that would be cool!
15:57:11 <maerwald> I have green light from the CLC to attempt a user space implementation and start writing patches for e.g. filpath/unix/Win32, but it's gonna be a lot of wor
15:57:26 × favonia quits (~favonia@user/favonia) (Ping timeout: 246 seconds)
15:58:19 neurocyte4048 joins (~neurocyte@46.243.81.30)
15:58:19 × neurocyte4048 quits (~neurocyte@46.243.81.30) (Changing host)
15:58:19 neurocyte4048 joins (~neurocyte@user/neurocyte)
15:58:30 × neurocyte404 quits (~neurocyte@user/neurocyte) (Read error: Connection reset by peer)
15:58:30 neurocyte4048 is now known as neurocyte404
15:58:51 favonia joins (~favonia@user/favonia)
15:59:47 <Martinsos> It does look like a lot of work. I never got much into the lower-level details regarding the representation of path, normalization and similar, I leveraged Path for that, but I do hope to get some more time in the future to investigate that and to follow projects like AFPP
16:00:30 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
16:02:01 <Martinsos> Maybe stupid question but I see that you have AbstractFilePath and WindowsFilePath exported from the top module, however there is no PosixFilePath -> how is that? You do have PosixString though hm
16:03:24 lbseale joins (~lbseale@user/ep1ctetus)
16:05:13 <maerwald> those are the same
16:05:18 <maerwald> https://github.com/hasufell/abstract-filepath/blob/master/lib/AbstractFilePath/Internal/Types.hs#L37
16:05:37 <maerwald> the String vs FilePath was a major question that made me stop working
16:05:56 <maerwald> rust also makes that distinction
16:06:05 <maerwald> although those are the same representation afair
16:07:42 rednaZ[m] joins (~r3dnazmat@2001:470:69fc:105::ba70)
16:08:53 <maerwald> Martinsos: https://paste.tomsmeding.com/1nCW1bVt
16:09:00 yauhsien joins (~yauhsien@61-231-39-135.dynamic-ip.hinet.net)
16:09:29 <albet70> does typeclass could be a type of another typeclass?
16:09:38 <albet70> I don't know how to describe
16:10:02 <albet70> typeclass has types, could typeclass has typeclass?
16:10:59 × acidjnk_new quits (~acidjnk@p200300d0c72b9550509afe7c5cdd8ef5.dip0.t-ipconnect.de) (Ping timeout: 255 seconds)
16:10:59 × nschoe quits (~quassel@2a01:e0a:8e:a190:156a:d066:25bb:13b1) (Ping timeout: 255 seconds)
16:11:03 <albet70> in Java, abstract class could extend interface, could typeclass extend typeclass?
16:14:07 <boxscape> albet70: we do have a thing called "super class", you can put constraints in the definition of a type class, e.g. `class Eq a => Ord a where ...`
16:14:10 × yauhsien quits (~yauhsien@61-231-39-135.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
16:14:44 <boxscape> not sure how close that comes to what you're thinking of
16:14:58 <Martinsos> maerwald: ahh that is tricky, haven't considered that. Somehow thought that filepath functions should work only with filepaths :D! The problem is that for this proposal to make sense you need to support everything that was supported so far? I don't have complete understanding of the problem, but the approach where there is a more general concept then, OSString (or maybe it is just Path? Is that also too specific?), and then there is
16:15:10 <Martinsos> Upff just lost second part of the message
16:16:07 <Martinsos> Anyway FilePath being newtype for OsString, like Rust does, makes some sense. Although I don't at first undresatnd fromt he name what OSString stands for. I would that this more general than FilePath is just Path. OSString is even more general? What could that be?
16:16:25 safinaskar parts (~user@109.252.90.89) ()
16:16:49 <maerwald> Martinsos: it's very simple... it's the encoding that the syscalls expect
16:16:53 <maerwald> in a way
16:17:09 <maerwald> so on windows it's UTF-16 (at least for Win32) and on unix it's just char[]
16:17:17 <Martinsos> aha, so this is all about the encoding.
16:17:21 <maerwald> yes
16:17:29 <maerwald> rust uses WTF-8 though on windows, a custom encoding
16:17:36 econo joins (uid147250@user/econo)
16:17:48 <maerwald> internally
16:17:55 <maerwald> but once passed to syscalls it's UTF-16
16:18:24 <albet70> boxscape how you describe the relation between typeclass and type
16:18:50 <Martinsos> Got it. Wish I could comment something more useful right now, but from my limited knowledge of the domain: sounds tricky all together :D / I am always in for keeping the types true to their name / approach 2 sounds reasonable
16:18:55 <maerwald> but it's not only filepaths that are UTF-16
16:19:15 <boxscape> albet70: which typeclass and which type?
16:19:35 Obo joins (~roberto@70.pool90-171-81.dynamic.orange.es)
16:20:10 <Martinsos> approach #3 surely not
16:20:15 <albet70> Semigroup and Monad
16:20:50 <albet70> Maybe and Monad
16:20:50 <boxscape> albet70: if you mean Semigroup and Monoid, Semigroup is a superclass of Monoid
16:21:00 <boxscape> Maybe is an instance of Monad
16:21:07 <albet70> yes
16:21:17 <boxscape> (Semigroup and Monad (as opposed to Monoid) are unrelated)
16:21:27 × Pickchea quits (~private@user/pickchea) (Ping timeout: 252 seconds)
16:22:14 <albet70> if a type would be an instance of Monad, it could not be an instance of Semigroup?
16:22:48 <davean> No, it could be
16:22:56 <davean> well, sorta
16:23:21 <davean> Depends on what you mean by "it"
16:23:25 × kuribas quits (~user@ptr-25vy0i8xkirhfn6k3n1.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 26.3))
16:23:41 <davean> albet70: https://hackage.haskell.org/package/base-4.15.0.0/docs/Data-List-NonEmpty.html#t:NonEmpty
16:24:04 <davean> Note Monad NonEmpty and Semigroup (NonEmpty a)
16:24:08 <drdo> How would I enable optimization for all packages (including external deps) in cabal.project?
16:24:24 <davean> SLIGHTLY different membership, but probably what you mean by being both
16:24:28 <boxscape> % :k Monad
16:24:29 <yahb> boxscape: (* -> *) -> Constraint
16:24:44 × Martinsos quits (~Martinsos@cpe-188-129-56-84.dynamic.amis.hr) (Remote host closed the connection)
16:24:48 <boxscape> % :k Semigroup
16:24:48 <yahb> boxscape: * -> Constraint
16:25:04 × sergal quits (~ezra@user/ezra) (Changing host)
16:25:04 sergal joins (~ezra@fsf/member/ezra)
16:30:02 × warnz quits (~warnz@2600:1700:77c0:5610:edd9:472d:4b89:9ab8) (Remote host closed the connection)
16:31:14 <albet70> Functor, Applicative, Monad
16:31:30 × troydm quits (~troydm@host-176-37-124-197.b025.la.net.ua) (Ping timeout: 256 seconds)
16:31:58 <albet70> an instance of Monad, so it must be an instance of Functor and Applicative, right?
16:32:19 <[exa]> true
16:34:06 × norias quits (~jaredm@c-98-219-195-163.hsd1.pa.comcast.net) (Ping timeout: 252 seconds)
16:34:25 norias joins (~jaredm@c-98-219-195-163.hsd1.pa.comcast.net)
16:34:31 darklambda is now known as cs
16:34:39 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
16:34:42 cs is now known as cpp
16:35:46 cpp is now known as darklambda
16:37:16 hnOsmium0001 joins (uid453710@id-453710.stonehaven.irccloud.com)
16:41:00 ubert joins (~Thunderbi@p2e5a50e5.dip0.t-ipconnect.de)
16:41:15 × MQ-17J quits (~MQ-17J@8.21.10.15) (Ping timeout: 252 seconds)
16:44:26 × shutdown_-h_now quits (~arjan@82-75-187-100.cable.dynamic.v4.ziggo.nl) (Ping timeout: 252 seconds)
16:45:50 × ubert quits (~Thunderbi@p2e5a50e5.dip0.t-ipconnect.de) (Ping timeout: 272 seconds)
16:46:08 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
16:48:38 <zzz> if we have ´T a = T Wtv a` and i want to have `tmap :: (a -> b) -> T a -> Tb ; tmap f (T wtv a) = T wtv (f a)` how d we avoid the infinite type error?
16:50:01 <dminuoso> zzz: Can you present your real code?
16:50:25 shutdown_-h_now joins (~arjan@82-75-187-100.cable.dynamic.v4.ziggo.nl)
16:50:25 <dminuoso> It should exactly like that
16:50:46 × kaizen quits (sid501599@id-501599.brockwell.irccloud.com) (Ping timeout: 246 seconds)
16:51:02 chomwitt joins (~Pitsikoko@ppp-94-67-202-202.home.otenet.gr)
16:51:07 × hendi quits (sid489601@id-489601.tooting.irccloud.com) (Ping timeout: 246 seconds)
16:51:32 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds)
16:51:42 hendi joins (sid489601@id-489601.tooting.irccloud.com)
16:51:44 kaizen joins (sid501599@id-501599.brockwell.irccloud.com)
16:52:59 <zzz> oops, my bad
16:53:31 hegstal joins (~hegstal@2a02:c7f:7604:8a00:7018:37c7:e025:203e)
16:54:03 <zzz> i had `T = T Wtv (U a)`
16:54:14 <zzz> i mean `T a = T Wtv (U a)`
16:54:21 <zzz> time for a break
16:59:02 <dminuoso> What do you expect this to do, with that type signature?
16:59:48 × dajoer quits (~david@user/gvx) (Quit: leaving)
17:02:54 × Obo quits (~roberto@70.pool90-171-81.dynamic.orange.es) (Quit: WeeChat 2.8)
17:04:11 × phma quits (phma@2001:5b0:212a:c338:e904:270b:aa2b:a4ce) (Read error: Connection reset by peer)
17:07:34 × michalz quits (~michalz@185.246.204.61) (Remote host closed the connection)
17:10:16 <yin[m]> hi. I'm trying to make a short-circuiting fold, something like a foldl (||) False $ cycle [False, True] that doesn't hang. what's an idiomatic way of achieving this?
17:10:46 <yin[m]> i want it to work on maps, not just lists
17:11:10 <monochrom> foldr, despite wrong intuition
17:11:22 <yin[m]> can you explain?
17:11:24 <monochrom> > foldr (||) undefined (cycle [False, True])
17:11:26 <lambdabot> True
17:11:56 <yin[m]> let me think about that
17:12:03 <monochrom> Perform lazy evaluation steps by hand to see why.
17:12:27 <monochrom> The popular science story of "foldr starts from the right" is wrong. Has always been wrong.
17:13:23 <yin[m]> of course. why did my intuition mislead me?
17:14:16 roconnor_ joins (~roconnor@host-104-157-226-103.dyn.295.ca)
17:15:14 × roconnor quits (~roconnor@host-45-78-208-216.dyn.295.ca) (Ping timeout: 252 seconds)
17:15:30 <maerwald> compare foldl and foldr when using (-)
17:15:45 yauhsien joins (~yauhsien@61-231-39-135.dynamic-ip.hinet.net)
17:15:46 <maerwald> then check how laziness works for ||
17:16:18 <yin[m]> foldl actually starts _evaluating_ from the right
17:16:34 <yin[m]> right?
17:16:44 <monochrom> No.
17:16:57 <monochrom> err, yes.
17:17:07 <maerwald> you build all the thunks through the list before you apply the first function
17:17:38 Atum_ joins (~IRC@user/atum/x-2392232)
17:18:09 roconnor joins (~roconnor@host-45-58-230-126.dyn.295.ca)
17:19:06 <maerwald> and at that time your `cycle` has already killed the cat
17:19:31 <monochrom> cycle killed the cat. foldr brought it back!
17:19:32 × roconnor_ quits (~roconnor@host-104-157-226-103.dyn.295.ca) (Ping timeout: 252 seconds)
17:19:38 <maerwald> :>
17:20:50 phma joins (phma@2001:0:c38c:c38c:207c:8189:bcd3:2f32)
17:23:23 × MoC quits (~moc@user/moc) (Quit: Konversation terminated!)
17:24:52 × viluon quits (uid453725@id-453725.brockwell.irccloud.com) (Quit: Connection closed for inactivity)
17:25:13 phma_ joins (phma@2001:5b0:211b:d008:d38:3ff9:8a1d:e053)
17:25:14 × phma quits (phma@2001:0:c38c:c38c:207c:8189:bcd3:2f32) (Ping timeout: 255 seconds)
17:28:34 <zzz> :)
17:31:50 × chomwitt quits (~Pitsikoko@ppp-94-67-202-202.home.otenet.gr) (Ping timeout: 265 seconds)
17:34:34 × chris-th_ quits (~chris@81.96.113.213) (Remote host closed the connection)
17:37:14 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:44e3:e9f0:ea4d:f039) (Remote host closed the connection)
17:37:19 chris-the-slurpa joins (~chris@81.96.113.213)
17:37:20 × chris-the-slurpa quits (~chris@81.96.113.213) (Read error: Connection reset by peer)
17:37:32 chris-the-slurpa joins (~chris@81.96.113.213)
17:37:58 × chris-the-slurpa quits (~chris@81.96.113.213) (Remote host closed the connection)
17:42:38 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:39f3:da:7ab8:bc1e)
17:43:07 chris-the-slurpa joins (~chris@81.96.113.213)
17:44:47 × chris-the-slurpa quits (~chris@81.96.113.213) (Remote host closed the connection)
17:45:15 lavaman joins (~lavaman@98.38.249.169)
17:45:19 chris-the-slurpa joins (~chris@81.96.113.213)
17:45:55 × Reyu[M] quits (~reyureyuz@matrix.reyuzenfold.com) (Remote host closed the connection)
17:47:05 × ukari quits (~ukari@user/ukari) (Remote host closed the connection)
17:47:31 mikail joins (~mikail@2a02:c7f:bd83:fd00:55cf:122f:957a:f66f)
17:47:44 ukari joins (~ukari@user/ukari)
17:49:25 × favonia quits (~favonia@user/favonia) (Ping timeout: 246 seconds)
17:49:59 × chris-the-slurpa quits (~chris@81.96.113.213) (Ping timeout: 255 seconds)
17:50:04 Reyu[M] joins (~reyureyuz@matrix.reyuzenfold.com)
17:50:54 favonia joins (~favonia@user/favonia)
17:52:10 × yauhsien quits (~yauhsien@61-231-39-135.dynamic-ip.hinet.net) (Remote host closed the connection)
17:52:45 × derelict quits (~derelict@user/derelict) (Ping timeout: 252 seconds)
17:52:57 × HotblackDesiato quits (~HotblackD@gateway/tor-sasl/hotblackdesiato) (Ping timeout: 244 seconds)
17:53:45 ubert joins (~Thunderbi@p2e5a50e5.dip0.t-ipconnect.de)
17:59:25 warnz joins (~warnz@2600:1700:77c0:5610:edd9:472d:4b89:9ab8)
17:59:34 × favonia quits (~favonia@user/favonia) (Ping timeout: 246 seconds)
18:00:16 HotblackDesiato joins (~HotblackD@gateway/tor-sasl/hotblackdesiato)
18:00:54 favonia joins (~favonia@user/favonia)
18:04:38 × ubert quits (~Thunderbi@p2e5a50e5.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
18:05:34 chris-the-slurpa joins (~chris@81.96.113.213)
18:06:46 roconnor_ joins (~roconnor@host-104-157-231-207.dyn.295.ca)
18:06:49 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:39f3:da:7ab8:bc1e) (Remote host closed the connection)
18:07:24 × roconnor_ quits (~roconnor@host-104-157-231-207.dyn.295.ca) (Client Quit)
18:08:35 × roconnor quits (~roconnor@host-45-58-230-126.dyn.295.ca) (Ping timeout: 252 seconds)
18:10:22 chisui joins (~chisui@200116b866eaab00b869ec172918c6ce.dip.versatel-1u1.de)
18:10:51 Vajb joins (~Vajb@2001:999:62:1d53:26b1:6c9b:c1ed:9c01)
18:10:58 <chisui> Hey, is there a way to resolve this issue without the need of an additional type variable? `Could not deduce: n1 ~ (n - 1) from the context: n ~ (n1 + 1)`
18:11:30 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
18:11:43 lavaman joins (~lavaman@98.38.249.169)
18:14:45 × favonia quits (~favonia@user/favonia) (Ping timeout: 252 seconds)
18:15:53 favonia joins (~favonia@user/favonia)
18:19:34 pavonia joins (~user@user/siracusa)
18:19:50 pgib joins (~textual@173.38.117.69)
18:20:14 × ukari quits (~ukari@user/ukari) (Remote host closed the connection)
18:21:01 ukari joins (~ukari@user/ukari)
18:22:42 × ukari quits (~ukari@user/ukari) (Remote host closed the connection)
18:23:09 yauhsien joins (~yauhsien@61-231-39-135.dynamic-ip.hinet.net)
18:23:46 ukari joins (~ukari@user/ukari)
18:30:02 × favonia quits (~favonia@user/favonia) (Ping timeout: 255 seconds)
18:31:45 <Hecate> would I sound absolutely demented if I suggested to examine which GHC language extensions can be moved to a compiler plugin?
18:32:06 <Hecate> or have they all encroached in its architecture now?
18:32:33 favonia joins (~favonia@user/favonia)
18:33:27 <Hecate> or maybe we have some work to make compiler plugins' ergonomics better so that it doesn't slow adoption?
18:33:30 <peutri> bonus points for extracting ApplicativeDo
18:33:33 <Hecate> bgamari: what do you think?
18:34:03 <Hecate> peutri: yeah I was thinking of this, because people are talking about SelectiveDo on the subreddit and it might start as a compiler plugin
18:34:36 <davean> Hecate: what would be the proposed benefit?
18:35:01 <bgamari> yeah, I'll admit that I'm not entirely clear on what we would gain by doing so
18:35:23 <bgamari> all I see are costs
18:35:40 <Hecate> davean: the things that don't have to live in-tree can be put elsewhere, we can reduce the size of the GHC codebase…
18:35:45 <Hecate> bgamari: I'm interested to know why!
18:35:49 <Hecate> we're not modular enough?
18:36:11 <davean> Hecate: So, more cost of maintainership for ... a larger overall code base? I'm confused, I see no benefits here
18:36:43 <monochrom> I think the hope is that when a thing is called a "plugin", you can enable 3 plugins and expect no surprising interference, just because they are called "plugin"s. The word suggests so much modularity, no?
18:36:58 <Hecate> davean: why more cost of maintenership?
18:37:07 <bgamari> Hecate, well, many, if not most, extensions do require some extra syntax
18:37:13 <peutri> wouldn't the point be to have a smaller, lighter ghc?
18:37:14 <davean> Hecate: because you have to deal with GHC version still
18:37:19 <monochrom> And I think the reality is that they will still have the same ugly surprising interference as when we did things the old "monolithic" way.
18:37:22 <bgamari> and we currently have no means for plugins to extend the grammar
18:37:29 <davean> monochrom: but thats clearly silly
18:37:32 <Hecate> bgamari: ok, I wasn't quite aware of that. :)
18:37:40 <bgamari> even for those cases that don't require new syntax
18:37:43 <davean> but even if there was, theres only cost here
18:38:09 <bgamari> you still have the usual composability problems that plugins introduce
18:38:13 <bgamari> as monochrom suggested
18:38:17 <Hecate> I see the errors of my ways. Let's first create a beautiful monolith before thinking about splitting and modularity
18:38:34 <bgamari> then there are also the purely practical considerations
18:38:47 <bgamari> e.g. presumably we would want to continue to evolve the plugin alongside GHC
18:38:58 <Hecate> which is certainly reasonable :P
18:39:03 <davean> Hecate: no, I don't think you EVER split this
18:39:08 <bgamari> which means we would have to advance multiple projects in lockstep
18:39:09 <davean> Hecate: because they're inhernetly tied
18:39:18 <Hecate> bgamari: ok, got it!
18:39:21 <Hecate> davean: 👍
18:39:23 <bgamari> potentially introducing another haddock scenario
18:39:35 <bgamari> it's an interesting idea though
18:39:40 motherfs1 joins (~motherfsc@user/motherfsck)
18:40:40 <davean> The only "benefit" to plugins I see here is supporting new things on older GHCs, but thats combinatorically more work, and its a bad idea - upgrade GHC, you need to anyway
18:41:10 <monochrom> The monad transformer saga was a wake-up call.
18:41:20 <Hecate> monochrom: tell me more :)
18:41:34 <davean> monochrom: ?
18:42:15 <monochrom> Early adoptors used to think that the monad transformer way was "modular", "plugin", "component", "mix and match", all those nice utopian->dystopian wordings.
18:42:41 <monochrom> Just because each monad transformer has standalone definition, "no dependency".
18:43:00 × motherfsck quits (~motherfsc@user/motherfsck) (Ping timeout: 272 seconds)
18:43:04 <monochrom> We now understand that you combine your monad transformers to build a monolith.
18:43:05 × mikail quits (~mikail@2a02:c7f:bd83:fd00:55cf:122f:957a:f66f) (Ping timeout: 255 seconds)
18:43:45 <sclv> i think plugins for things like selective-do (or preprocessors) are good as proofs of concept
18:43:54 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 252 seconds)
18:44:14 <sclv> you can develop them independently, let a few brave people try them out and get a feel for it
18:44:26 <sclv> but long term you have to fold it in to the main codebase or it usually dies
18:45:12 <sclv> in the case of selective-do its the preprocessor approach rather than plugin imho, since its a syntactic transform
18:45:13 <bgamari> right
18:45:16 <bgamari> I agree with that
18:45:23 <sclv> recall that's how arrows were first done too -- a long tradition!
18:45:26 × favonia quits (~favonia@user/favonia) (Ping timeout: 252 seconds)
18:45:30 <bgamari> plugins are really best used for a prototyping
18:45:35 <Hecate> oki doki
18:45:58 <bgamari> IIRC scala used to make quite a bit of use of compiler plugins
18:46:14 <bgamari> and the effect was that projects became very tied to particular compiler versions
18:46:53 favonia joins (~favonia@user/favonia)
18:47:40 × warnz quits (~warnz@2600:1700:77c0:5610:edd9:472d:4b89:9ab8) (Remote host closed the connection)
18:48:18 × motherfs1 quits (~motherfsc@user/motherfsck) (Ping timeout: 252 seconds)
18:49:43 <lechner> Hi, what are the "row types" mentioned here, and why are they scary, please? Thanks! https://chrisdone.com/posts/clientside-programming-haskell/
18:49:46 <sclv> also these days for syntactic prototyping one can do it directly with quasiquotes, which is pretty nice and stable
18:49:53 <davean> I've seen plugins used for library support too
18:49:55 <sclv> but again unpleasant compared to doing it directly
18:50:06 <davean> where its not a language thing, but a specific library needs a macro-ish transform to work
18:50:13 <davean> like for tracing
18:50:23 <davean> Thats where a plugin always fits I think
18:51:30 × amahl quits (~amahl@dsl-jklbng12-54fbca-64.dhcp.inet.fi) (Remote host closed the connection)
18:52:14 <Hecate> davean: Polysemy needs a plugin to avoid terrible performance
18:52:20 <sclv> lechner: they're just anonymous records, also known as heterogenous lists, hlists, or "extensible tuples" among other things
18:52:25 <Hecate> (but delcont primop should fix this)
18:52:36 <sclv> there's plenty of packages for doing them in haskell -- hlist, row-types, etc...
18:52:53 <sclv> they were scary in the context of ur because it was written by a type theorist so they looked scary
18:52:59 <sclv> in the docs :-)
18:53:03 <Hecate> lechner: https://hgiasac.github.io/posts/2018-11-18-Record-Row-Type-and-Row-Polymorphism.html
18:53:39 <sclv> ml also had them for years, where they were considered Not Scary
18:54:12 <davean> sclv: I don't know, I thought they were scary because they type system implimentations tend to work poorly and have bad comprimises :)
18:54:20 justsomeguy joins (~justsomeg@user/justsomeguy)
18:54:31 × yauhsien quits (~yauhsien@61-231-39-135.dynamic-ip.hinet.net) (Ping timeout: 246 seconds)
18:54:35 <sclv> there's a lot of systems that do them pretty well in the literature, not least ml
18:54:36 <Hecate> I know error reporting in PureScript is at times painful
18:54:45 <monochrom> "The row types documentation frankly scares me away." is very different from "the row types scares me away".
18:55:21 <sclv> having them in the presence of a ton of other things including type classes and higher order polymorphism etc can be a bit much
18:55:22 × Vajb quits (~Vajb@2001:999:62:1d53:26b1:6c9b:c1ed:9c01) (Read error: Connection reset by peer)
18:55:30 <monochrom> As usual, Chris Done doesn't write ridiculous things.
18:55:38 <sclv> well...
18:55:41 <Hecate> monochrom: since the documentation is the gateway to the concept, they mean the same thing
18:55:55 <davean> Hecate: absolutely not!
18:56:05 <monochrom> No. I know how to write scary documentation for Int.
18:56:14 Vajb joins (~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi)
18:56:18 <lechner> Is this still true? (from Hecate) "you can't define Person { name :: String } and Cat { name :: String } in same module. Function name will be duplicated"
18:56:32 <monochrom> For Bool. For ().
18:56:42 <davean> lechner: somewhat
18:56:52 <davean> lechner: Thats never a problem though
18:57:03 <davean> (Its a problem if you can!)
18:57:07 <Hecate> monochrom: I swear to god I've had terrifying introductions in maths class for concepts that scared me years after until someone introduced me to them again
18:57:21 <sclv> we have an extension that removes that limitation iirc -- a whole universe of extensions for working with that sort of stuff now in fact (and i'm not up to speed because i haven't bothered to use em in practice yet)
18:57:24 <davean> Hecate: right, so don't do the documentation, just do the concepts
18:57:38 <davean> sclv: well thats not Haskell persay
18:57:38 <Hecate> davean: the concepts don't appear from nowhere in your head :)
18:58:00 <davean> Hecate: No, they appear from the direct specification
18:58:01 <monochrom> I know how to write scary documentation for javascript. Hell, I learned from Guy Steele, he did that.
18:58:09 <davean> Usually the construction
18:58:18 <Hecate> davean: specification isn't documentation?
18:58:33 <davean> Hecate: absolutely not, it exactly the thing
18:58:42 <davean> Its definitional
18:58:44 <lechner> I plan to use Generic instances for FromJSON for parsing, but the files are complicated and may share field names across levels. Will that be a problem?
18:59:03 <Hecate> davean: is a reference documentation for you?
18:59:11 <davean> Hecate: Yes
18:59:13 <sclv> lechner: that shouldn't be a problem, no. just make sure that the datatypes with overlapping field names are each defined in different modules.
18:59:29 <davean> Hecate: I do not mean "specification" like "someone describing it" I mean specification as in "this specifies it"
18:59:34 <lechner> ok, thanks!
18:59:44 × xff0x quits (~xff0x@2001:1a81:521d:ec00:3970:2542:2f1d:feb7) (Ping timeout: 255 seconds)
18:59:46 <Hecate> davean: then you're the first person I've met who doesn't believe that specification is documentation
18:59:56 <Hecate> Personally I follow this quadrant: https://documentation.divio.com/_images/overview.png
19:00:02 <sclv> also cf https://downloads.haskell.org/ghc/latest/docs/html/users_guide/exts/duplicate_record_fields.html
19:00:17 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
19:00:19 <davean> Hecate: I think this is an issue with there being multiple meanings of the word specification, which I tried to clarify
19:00:22 <dsal> ghc: panic! (the 'impossible' happened) -- well, I guess it's lunch time.
19:00:29 <Hecate> dsal: happy meal
19:00:36 motherfs1 joins (~motherfsc@user/motherfsck)
19:01:03 <Hecate> davean: I don't understand the difference between "something describing it" and "something specifying it"?
19:01:05 <monochrom> No one is interested in my scary take on Bool and ()? >:)
19:01:20 <davean> Hecate: the later is the actual thing, the former is a description of a thing
19:01:21 <Hecate> monochrom: I implemented 'Num ()', nothing scares me :P
19:01:28 xff0x joins (~xff0x@185.65.135.235)
19:01:32 <Hecate> davean: but the actual thing… isn't it the implementation?
19:01:38 <davean> Hecate: yes, exactly
19:01:39 <Hecate> does it exist on paper?
19:01:43 <sclv> we need an RFC on the meaning of specification and reference. a specification MAY be documentation. a reference MUST be documentation.
19:01:50 <davean> Hecate: Maybe?
19:01:53 <monochrom> That doesn't mean I can't tell a scary story logically equivalent to a normal explanation of ().
19:01:55 <sclv> everything can exist on paper, if you have enough pages
19:01:59 <davean> sclv: yes
19:02:04 <Hecate> davean: don't you need then to reverse-engineer the implementation to extract a set of observable behaviours?
19:02:25 <sclv> the implementation contains the observable behaviors within it directly
19:02:38 <davean> Hecate: no, thats rediculous, it does the tihng it does
19:02:41 <Hecate> so you presume an implementation that follows the spec?
19:02:47 <davean> Hecate: no!
19:02:49 <davean> never!
19:02:51 <davean> Thats horrid
19:02:52 <sclv> a "reference implementation" MAY be a specification
19:03:02 <davean> sclv: yes
19:03:14 <Hecate> ok for context I have very, very little experience in program or static analysis
19:03:46 <sclv> i don't think this is directly related to that. basically a specification is a socially agreed on thing that can take any number of forms but which has some method of validating conformance
19:03:50 <davean> Hecate: data Z = S Z | N
19:03:51 <monochrom> I even know many long and contrived ways to say "true".
19:03:53 <davean> thats a specification
19:04:14 <davean> I can start adding other facts
19:04:21 <Hecate> monochrom: ok spill the beans already :P
19:04:28 <Hecate> davean: oh, okay
19:04:38 <davean> You start talking about it, and you're not longer a specification
19:04:40 <sclv> > fix ("true && " ++)
19:04:41 <monochrom> "The books I read are the books read by all those who read all books I read" is a long way to say "true", since it is a tautology.
19:04:42 <lambdabot> "true && true && true && true && true && true && true && true && true && tru...
19:05:21 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 252 seconds)
19:05:43 <monochrom> "the stone topology of two points" is a trolling way to say "Bool", since every stone topology is a boolean algebra.
19:05:55 × favonia quits (~favonia@user/favonia) (Ping timeout: 252 seconds)
19:06:11 <Hecate> damn I forgot what were talking about in the beginning
19:06:38 <Hecate> ah yes, terrifying introductions that can bar access to simple concepts
19:06:50 <monochrom> There are multiple ways to document/specify/define/characterize/whateveryoucallit a thing in a scary or trolling or highbrow way. All it takes is creativity and knowledge. Doesn't mean the thing itself is not simple.
19:06:52 <davean> Hecate: the very nature of debuging is understanding something via specification instead of documentation!
19:07:18 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:39f3:da:7ab8:bc1e)
19:07:22 <davean> Thats a reasonable working definition of debugging in many ways
19:07:25 favonia joins (~favonia@user/favonia)
19:07:30 <Hecate> hm okay
19:07:50 <sclv> well i mean specification, implementation and documentation all may vary
19:08:10 <davean> sclv: depending on which definition of specification you're using
19:08:25 <Hecate> a function specification document I guess?
19:08:36 <sclv> specification is a socially agreed on thing that can be validated against
19:08:43 <davean> well I'd say implimentation is how you write down the specification, the specification is the actual behaviors
19:08:58 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 272 seconds)
19:09:07 <sclv> implementation is a thing you validate against the specification, unless its a reference implementation taken to be the specification
19:09:44 <davean> Hecate: do you get what I'm saying about about debugging though?
19:09:52 <Hecate> that's the moment where I realise I missed a bunch of things by not studying onthology of programs lol
19:10:01 Deide joins (~Deide@217.155.19.23)
19:10:02 × Deide quits (~Deide@217.155.19.23) (Changing host)
19:10:02 Deide joins (~Deide@user/deide)
19:10:08 <sclv> specifications MAY have undefined behaviors. implementations definitionally CANNOT
19:10:11 <Hecate> davean: yes, debugging is acting against the observable behaviour
19:10:21 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
19:10:27 <davean> or derivable, sorta the same thing?
19:10:31 <davean> but yah
19:11:08 <davean> The main documentation I want is an ordering of how I should read an implimentation
19:11:25 <Hecate> like Jonesforth?
19:11:39 <monochrom> oh, internal vs external documentation...
19:11:55 __monty__ joins (~toonn@user/toonn)
19:11:57 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:39f3:da:7ab8:bc1e) (Ping timeout: 252 seconds)
19:12:29 × chele quits (~chele@user/chele) (Remote host closed the connection)
19:13:27 × xff0x quits (~xff0x@185.65.135.235) (Ping timeout: 268 seconds)
19:14:17 <davean> Hecate: I'm not sure what that is, but a search seems to show a fuckton of problematic words instead of an actual order I should read an implimentation in
19:14:39 xff0x joins (~xff0x@2001:1a81:521d:ec00:3970:2542:2f1d:feb7)
19:15:08 <Hecate> https://github.com/nornagon/jonesforth/blob/master/jonesforth.S
19:15:13 <Hecate> It's literate programming
19:15:21 <Hecate> you read it from top to bottom
19:15:33 <davean> Great, see all thsoe words? Remove them
19:15:38 <davean> DO NOT WANT
19:16:07 <Hecate> not gonna lie when you don't know shit to Forth or Asm, it's darn useful :P
19:16:21 <Hecate> but I acknowledge that we have different needs
19:16:31 <davean> This is someone's attempt to explain sometihng with code
19:16:35 <davean> it is NOT specificaiton
19:16:51 <davean> I do not get truth from this
19:17:01 <Hecate> (technically yes, because each Forth is different)
19:17:11 <Hecate> you get the truth about this program's behaviour
19:17:12 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 272 seconds)
19:17:20 <davean> Not from the words
19:17:31 <Hecate> you mean the prose?
19:17:34 <davean> yes
19:17:41 <Hecate> what is truth for you?
19:17:55 <davean> Now, take time to write the implimentation carefully so its assembled in a convinient form to think about
19:17:57 <davean> THATS helpful
19:18:28 <davean> Pick useful base pieces, build your implimentation from those
19:18:47 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:39f3:da:7ab8:bc1e)
19:19:10 <davean> Good factoring is sorta like documentation
19:19:15 <Hecate> it only works when you use an implementation mechanism that can be perfectly understood, where you presume your reader to be ridden of all biases or unable to mis-understand your code
19:19:35 <davean> No, it doesn't have to be perfectly understood - it can't be
19:19:38 <monochrom> This being asm, I do expect a mess, code that misses the forest for the trees, and clever tricks that need back-stories.
19:19:41 <davean> but you can reach truths from it
19:20:11 <davean> Hecate: and no, theres no room for biases when you actually face truth
19:20:18 <davean> prose is what allows biases, etc
19:20:22 <davean> because theres room for interpritation
19:20:34 <Hecate> davean: what do you call "truth"? For me it's the relationship between your perception of fact, and facts
19:20:57 <Hecate> when they become aligned in their complexity, then you reach truth
19:20:59 <davean> Truth is exactly what is
19:21:18 <davean> Your understanding is beside the point
19:21:52 <Hecate> your understanding is what allows you to act on truth, that's why many people with diverging conclusions are convinced to posess truth
19:21:57 <Hecate> despite facing the same facts
19:22:37 <davean> act sure - perhaps. Though I'd say one can act correctly without understanding. I've verified many things and used them without gaining understanding.
19:28:35 MQ-17J joins (~MQ-17J@8.21.10.15)
19:29:30 × haykam3 quits (~haykam@static.100.2.21.65.clients.your-server.de) (Remote host closed the connection)
19:29:42 haykam1 joins (~haykam@static.100.2.21.65.clients.your-server.de)
19:30:01 Ariakenom joins (~Ariakenom@c83-255-154-140.bredband.tele2.se)
19:30:35 × wallymathieu quits (~wallymath@81-234-151-21-no94.tbcn.telia.com) (Quit: My MacBook has gone to sleep. ZZZzzz…)
19:34:03 cuz joins (~user@38.140.58.234)
19:34:51 × cheater quits (~Username@user/cheater) (Ping timeout: 255 seconds)
19:35:11 cheater joins (~Username@user/cheater)
19:36:48 Guest62 joins (~Guest62@187.83.249.216.dyn.smithville.net)
19:37:35 × drd quits (~drd@2001:b07:a70:9f1f:1562:34de:f50f:77d4) (Ping timeout: 246 seconds)
19:39:32 <Guest62> so i'm suddenly having issues installing a package with stack on arch. used to work fine, but now when i do `stack install vulkan` in a directory without a project, it takes a few minutes, seems to work and exits gracefully after "Registering library for vulkan-3.6.2..". But import Vulkan.Core10 is always "could not find module" and stack exec
19:39:32 <Guest62> ghc-pkg -- list doesn't have vulkan anywhere
19:39:38 <Guest62> any ideas for what i might be doing wrong?
19:40:59 × isekaijin quits (~pyon@user/pyon) (Ping timeout: 252 seconds)
19:41:42 isekaijin joins (~pyon@user/pyon)
19:43:55 <boxscape> Why do I get this error when trying to derive Generic? I feel like I may be missing something obvious... https://paste.tomsmeding.com/6EopZUJE
19:44:17 <boxscape> hm am I importing the wrong module
19:44:36 <boxscape> yes
19:44:38 <boxscape> it's GHC.Generics
19:44:39 <boxscape> thanks
19:44:44 × favonia quits (~favonia@user/favonia) (Ping timeout: 255 seconds)
19:44:55 <lechner> yeah, that's what i use
19:46:16 × coeus quits (~coeus@b2b-92-50-96-34.unitymedia.biz) (Killed (NickServ (GHOST command used by _coeus!~coeus@250.sub-174-205-176.myvzw.com)))
19:46:39 coeus joins (~coeus@b2b-92-50-96-34.unitymedia.biz)
19:47:08 favonia joins (~favonia@user/favonia)
19:47:38 <sm> Guest62 are you sure you're not in a project ? Eg a parent directory ? Try to reproduce in $HOME
19:48:06 × coeus quits (~coeus@b2b-92-50-96-34.unitymedia.biz) (Killed (NickServ (GHOST command used by _coeus!~coeus@250.sub-174-205-176.myvzw.com)))
19:48:29 coeus_ joins (~coeus@b2b-92-50-96-34.unitymedia.biz)
19:49:21 <Guest62> yeah, same thing. `stack exec ghc` returns 'could not find module', and `stack exec ghc-pkg -- list` still doesn't list vulkan even in ~
19:49:37 × epolanski quits (uid312403@id-312403.brockwell.irccloud.com) (Quit: Connection closed for inactivity)
19:50:17 drd joins (~drd@2001:b07:a70:9f1f:1562:34de:f50f:77d4)
19:50:23 <sm> Odd, any funny haskell related env vars ?
19:51:03 <sm> Try the install again with increased --verbosity ?
19:58:46 × wqsz7xn quits (~wqsz7xn@202.36.244.28) (Quit: Leaving)
19:59:02 <Guest62> tried reinstalling but it looks like it's just finding the package that was installed and just linking that
19:59:06 <Boarders> this is really an algorithms question but someone here might know. If I have a set of integers and I want to choose a subset that is closest to summing to a target value, is there a nice algorithm to do that?
19:59:13 nschoe joins (~quassel@2a01:e0a:8e:a190:af88:6c9:cc87:d82a)
19:59:21 <Guest62> i wonder if i might've set some default options somewhere for stack
19:59:48 × favonia quits (~favonia@user/favonia) (Ping timeout: 252 seconds)
20:00:22 × chisui quits (~chisui@200116b866eaab00b869ec172918c6ce.dip.versatel-1u1.de) (Quit: Client closed)
20:00:31 <Guest62> ls
20:01:07 favonia joins (~favonia@user/favonia)
20:01:43 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
20:01:56 <sm> Guest62: that would be in ~/.stack/global-project
20:02:12 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
20:02:29 <sm> reinstalling with --verbosity=debug should show some kind of path info, if not then probably --force-reinstall or something will help
20:02:33 × MQ-17J quits (~MQ-17J@8.21.10.15) (Ping timeout: 252 seconds)
20:03:05 smtnet3 joins (~asdfasdfa@202.36.244.28)
20:04:59 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:39f3:da:7ab8:bc1e) (Remote host closed the connection)
20:05:15 × juhp quits (~juhp@128.106.188.66) (Ping timeout: 268 seconds)
20:07:31 juhp joins (~juhp@128.106.188.66)
20:08:11 × _ht quits (~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection)
20:08:55 ghais joins (~ghais@c-76-97-106-226.hsd1.ga.comcast.net)
20:09:36 yauhsien joins (~yauhsien@61-231-39-135.dynamic-ip.hinet.net)
20:12:11 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 255 seconds)
20:12:21 phma_ is now known as phma
20:12:25 Lycurgus joins (~juan@cpe-45-46-140-49.buffalo.res.rr.com)
20:13:59 × yauhsien quits (~yauhsien@61-231-39-135.dynamic-ip.hinet.net) (Ping timeout: 255 seconds)
20:16:11 <ghais> Hi all. I have a package https://github.com/ghais/HQu which depends on hmatrix-gsl which in turn depends on gsl (Gnu Scientific Library). I cannot seem to get hackage servers to build this library correctly. However other libraries that depend on gsl seem to build fine on hackage build servers. Does anyone know if i have an issue in my cabal file
20:16:12 <ghais> (https://github.com/ghais/HQu/blob/main/HQu.cabal)?
20:16:23 <ghais> I would appreciate any help, i tried everything i can think about
20:16:59 <ghais> Sorry second link is messed up: https://github.com/ghais/HQu/blob/main/HQu.cabal
20:18:11 <ghais> alternatively are there any documentations about the hackage build servers where i can define my system dependencies?
20:18:16 <ghais> pkgconfig-depends: gsl
20:18:39 <ghais> doesn't seem to do the trick on the server, since i get a message saying it cannot be satisfied
20:20:07 waleee joins (~waleee@h-98-128-228-119.NA.cust.bahnhof.se)
20:20:34 <ghais> hackage build report is here: https://hackage.haskell.org/package/HQu-0.0.0.4/reports/2
20:20:44 × favonia quits (~favonia@user/favonia) (Ping timeout: 255 seconds)
20:21:48 chomwitt joins (~Pitsikoko@ppp-94-67-202-202.home.otenet.gr)
20:22:19 zes joins (~zes@p2003000631de7b35c9a03d4c214f06a5.dip0.t-ipconnect.de)
20:23:04 favonia joins (~favonia@user/favonia)
20:23:09 × Vajb quits (~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi) (Remote host closed the connection)
20:24:32 × bontaq quits (~user@ool-18e47f8d.dyn.optonline.net) (Remote host closed the connection)
20:26:32 × machinedgod quits (~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 252 seconds)
20:27:12 troydm joins (~troydm@host-176-37-124-197.b025.la.net.ua)
20:28:01 Vajb joins (~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi)
20:28:04 ubert joins (~Thunderbi@p2e5a50e5.dip0.t-ipconnect.de)
20:30:03 Hanicef joins (~gustaf@81-229-9-108-no92.tbcn.telia.com)
20:30:31 <sclv> ghais: please stop uploading to hackage to make your package build!
20:30:40 <sclv> it has been abusive to the servers
20:30:49 <ghais> sclv: My bad
20:30:53 <ghais> I will stop
20:30:55 × ubert quits (~Thunderbi@p2e5a50e5.dip0.t-ipconnect.de) (Remote host closed the connection)
20:31:09 <sclv> the buildbox lacks many libs, its fine if it doesn’t build
20:31:28 <sclv> uploading the docs manually as you have done is fine
20:31:53 <ghais> I understand that, however if i want to add it to stackage, it seems that there is a requirement that it builds on hackage first
20:31:54 <sclv> the backstory is we moved servers at some point and the old one had more libs
20:32:08 <sclv> that shouldn’t be a stackage requirement?
20:32:33 <ghais> https://github.com/commercialhaskell/stackage/blob/master/MAINTAINERS.md#adding-a-package
20:32:38 <sclv> i did notice you repeatedly attempting to upload and installed the libgsl stuff on the buildbox
20:32:38 × turlando quits (~turlando@user/turlando) (Read error: Connection reset by peer)
20:33:27 <ghais> again, i apologize. Maybe i misread the requirements from stackage
20:33:39 <sclv> if you want libs installed there’s a hackage ticket you can comment on in the future as well, and also you can edit metadata and force rebuilds from the maintainer corner without a new upload
20:33:54 <sclv> no big deal, just glad i could communicate to you about this! :-)
20:34:16 turlando joins (~turlando@93-42-250-112.ip89.fastwebnet.it)
20:34:17 × turlando quits (~turlando@93-42-250-112.ip89.fastwebnet.it) (Changing host)
20:34:17 turlando joins (~turlando@user/turlando)
20:34:25 <sclv> If it does turn out its a stackage req, do let me know. Id be surprised
20:34:56 <sclv> I suspect they mean it needs to be on hackage and needs to be buildable, not that hackage itself needs to be able to build it :-)
20:35:00 <ghais> I might be misunderstanding this statement from their documentation: The package is buildable and testable from Hackage
20:35:12 <ghais> I understood this to mean that it must build successfully on hackage
20:35:22 <ghais> Yeah, good point
20:35:42 <sclv> the “from” means just that its on there i think..
20:36:27 <ghais> thanks. I will just upload the documentation manually then
20:38:31 jumper149 joins (~jumper149@80.240.31.34)
20:38:59 × oxide quits (~lambda@user/oxide) (Quit: oxide)
20:39:02 <sclv> releases are permanent so ideally should not be too frequent
20:42:51 × TheRAt quits (~TheRAt@user/therat) (Ping timeout: 258 seconds)
20:44:32 × justsomeguy quits (~justsomeg@user/justsomeguy) (Quit: WeeChat 3.0.1)
20:45:08 TheRAt joins (~TheRAt@user/therat)
20:45:30 <ghais> That part i understood, but i couldn't connect the dots to why other libraries with similar dependency successfully, and i assumed it was my issue. As a new comer to Haskell some of this knowledge is not easy to glue together, and documentation around the interaction between stack/cabal/build servers/hackage/stackage has been particular difficult
20:45:30 <ghais> to glue together
20:46:00 × favonia quits (~favonia@user/favonia) (Ping timeout: 252 seconds)
20:46:10 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:39f3:da:7ab8:bc1e)
20:47:53 favonia joins (~favonia@user/favonia)
20:48:06 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
20:49:10 <sclv> sure, understood. any specific suggestions of how to improve docs welcome!
20:50:32 warnz joins (~warnz@2600:1700:77c0:5610:edd9:472d:4b89:9ab8)
20:50:51 <ghais> one none obvious thing i noticed is that to upload the documentation manually you have to have a specific directory name, and you need to tar but not gzip, and the tar needs to be done with a --format=ustar instead of the default format. I think adding this to the manual documentation upload page would have saved me a lot of time
20:52:03 <sm> good info
20:52:04 <ghais> another item that would be very useful is to understand the build process on hackage. It was only through my abusive trial and error that i leared that the build plan is dependent on the base library i specify in my cabal file
20:52:32 <ghais> It seems that the base library constraints selects which versions of GHC will be used
20:53:06 <sm> correct, GHC and base are locked together
20:53:16 <davean> but it deosn't select which ghc is used
20:53:34 × Lycurgus quits (~juan@cpe-45-46-140-49.buffalo.res.rr.com) (Quit: Exeunt)
20:53:38 <davean> the direction is the other, you just can't find a build plan if you aren't compatible with that GHC's base
20:53:53 <sm> s/locked/semi-locked/
20:54:37 <ghais> I understand this distinction, but look at it from the prespective of someone who started with "stack new projectX"
20:55:12 <sm> ghais: you're not wrong.. we know.. :/
20:55:16 <davean> Yah, you'd have to talk to stack folk for their documentation, not sure any of them are around here?
20:55:23 <ghais> a base constraint is specified in the cabal file. A specific version of GHC is selected through which resolver you use, and then i start using some features
20:55:25 <davean> ghc documents this for sure
20:55:50 <ghais> No sorry, i was writing a multi line statement. I was trying to say that there is a disconnect between the tools
20:56:26 <davean> ghais: hum, can you explain? different tools do different things, so I might be confused here
20:56:59 <davean> (base being tied to GHC is a GHC-ism specificly)
20:57:08 <ghais> davean, i was trying to relay my experience as a new comer, and why it is not trivial to connect all the pieces together without a little bit of abuse
20:57:40 acidjnk_new joins (~acidjnk@p200300d0c72b9550509afe7c5cdd8ef5.dip0.t-ipconnect.de)
20:57:45 <davean> ghais: right, and I'm trying to figure out what you're saying specificly
20:58:00 <ghais> davean, yeah this is clear to me and makes sense. What i didnt realize is that stack on the other hand created a config for me that had more base versions than the one the resolver supported.
20:58:06 <davean> I think part of the confusion is "the way things are" vs "the way things can be"
20:58:12 <sm> I think the general point is obviously correct
20:58:15 <sm> ghais it's a well known problem. It's hard to change, and hard (costly) even to document
20:58:16 <davean> Ah, yes, I see
20:58:36 <sclv> so the command here for doc creation/upload is incorrect? https://hackage.haskell.org/upload
20:58:41 <davean> ghais: I didn't realize it would create an open base bound - do you happen to have which bound it used?
20:59:03 <ghais> sclv, gzip didn't work for me
20:59:23 <sclv> or ah we don’t show the command on the doc upload pge?
20:59:26 <sclv> hrm
20:59:44 <ghais> on the doc upload page there are no instructions
21:00:00 <sclv> right so we should put those there, assuming they work!
21:00:10 <ghais> stack sdist, produces a package that can be immediately uploaded (it is a tar.gz)
21:00:19 <ghais> however the documentation upload cannot be gzipped it seems
21:01:14 <ghais> also since i use stack, the command example at the end of the page doesn't work, because my locally installed GHC version is different than the one i needed to build
21:01:24 × favonia quits (~favonia@user/favonia) (Ping timeout: 252 seconds)
21:01:57 × jumper149 quits (~jumper149@80.240.31.34) (Quit: WeeChat 3.2)
21:02:12 <davean> Use stack's ghc then with cabal
21:02:28 favonia joins (~favonia@user/favonia)
21:03:13 <ghais> right, so stack haddock produced a folder. That i had to tar --format=ustar
21:03:21 <ghais> otherwise i cannot upload the documentation
21:04:29 <ghais> Sorry if it comes like i am complaining, truth is I am not
21:04:41 <ghais> just relaying my experience and I am happy to help improve things in any way i can
21:04:47 <davean> ghais: you can use "-w" to specify which ghc to use with cabal
21:04:52 <davean> BTW
21:05:02 <ghais> davean, i didn't know that. I appreciate that
21:05:38 <davean> I'd still be curious what base bound you ended up with
21:06:06 <ghais> base >= 4.11.0 && < 5
21:06:17 <davean> wow, really?
21:06:35 <davean> I have no idea the logic behind that
21:06:54 <davean> I see people do the < 5 thing occasionally, I guess now I know where it comes from!
21:07:17 <monochrom> dons used "< 10". :)
21:07:37 <davean> (base often changes with breaking changes in the second digit, as would align with the PVP)
21:07:48 <davean> (so < 5 is clearly an insane choice)
21:07:56 <ghais> this comes from stack
21:08:06 <davean> ghais: sure
21:08:11 <ghais> if you do a "stack new X" you get:
21:08:12 <ghais> build-depends:
21:08:12 <ghais> base >=4.7 && <5
21:08:17 <davean> I think I directly ackowleged it came from stack?
21:08:26 <davean> "21:06:53 davean I see people do the < 5 thing occasionally, I guess now I know where it comes from!"
21:08:55 <ghais> davean, i am not very good with implicit hints
21:08:58 <ghais> :D
21:09:11 <monochrom> "< 5" is or is not insane depending on how much of base you actually use.
21:09:20 <sm> it predates stack for sure
21:09:25 <davean> monochrom: I mean, prelude has broken that a lot
21:09:38 <davean> monochrom: You'd have to use almost no part of base for that to not have broken you in the last few years
21:09:53 <sm> it's an idiom that looks familiar and is simple, so it has stuck
21:10:15 yauhsien joins (~yauhsien@61-231-39-135.dynamic-ip.hinet.net)
21:10:35 <davean> sm: Hum, wouldn't it be more sensible to but no upper bound?
21:10:37 <monochrom> base is so large that you can use only 0.1% of it, and if you do, the probability that a difference between 4.11 and 4.12 actually affects you is 0.1%. At this rate one wouldn't care.
21:10:57 <sm> perhaps back then base made larger version number jumps
21:11:08 <davean> monochrom: I mean the core type classes change - what you say is correct, but people reliably use the same 0.1% and thats where changes happen
21:11:43 <davean> (Probably because people use them?)
21:12:02 <davean> sm: hum, it predates stack? Interesting
21:12:17 <sclv> hackage requires a base upper bound to upload
21:12:34 × nschoe quits (~quassel@2a01:e0a:8e:a190:af88:6c9:cc87:d82a) (Ping timeout: 240 seconds)
21:12:57 <sclv> stack devs don’t like bounds, so they put in a useless bound to check the box, sigh
21:13:09 <davean> It seems better to have no bound than a clearly wrong bound
21:13:16 <sm> I'm sure you are being uncharitable there
21:13:18 <davean> Is there a hacakge ticket about this?
21:13:29 <davean> sm: which part?
21:13:35 <sm> (sclv)
21:13:57 <monochrom> A natural tug war may actually cancel out "it gets used more therefore it gets improved more" with "it gets used more therefore it dares not break backward compatibility".
21:14:16 <davean> monochrom: I mean look at the change log
21:15:08 × yauhsien quits (~yauhsien@61-231-39-135.dynamic-ip.hinet.net) (Ping timeout: 265 seconds)
21:15:57 <davean> monochrom: "Ix" stands out as being a bit unusual. I've wanted to use it but its got problems. So I'm unsure about its use rate
21:16:58 × norias quits (~jaredm@c-98-219-195-163.hsd1.pa.comcast.net) (Quit: Leaving)
21:17:08 <davean> sm: I know there were first step bumps for some historic major rearrangements
21:17:40 <monochrom> Right, 3.x existed.
21:18:38 <monochrom> But 3.x may be before PVP, I forgot.
21:19:08 <davean> 4.0 was Nov 2008
21:20:38 <davean> So well after PVP
21:22:23 × cuz quits (~user@38.140.58.234) (Ping timeout: 255 seconds)
21:24:18 yauhsien joins (~yauhsien@118-167-64-241.dynamic-ip.hinet.net)
21:25:47 × Kaiepi quits (~Kaiepi@nwcsnbsc03w-47-54-173-93.dhcp-dynamic.fibreop.nb.bellaliant.net) (Remote host closed the connection)
21:26:02 Kaiepi joins (~Kaiepi@nwcsnbsc03w-47-54-173-93.dhcp-dynamic.fibreop.nb.bellaliant.net)
21:26:35 <davean> sclv: why does hackage have that base requirement?
21:27:06 <davean> Its unique vs. other packages
21:27:14 MQ-17J joins (~MQ-17J@8.21.10.15)
21:27:29 <sclv> because base induced breakages were the most frequent iirc
21:27:59 <monochrom> Yikes, that contradicts my theory, heh.
21:28:18 <davean> It matches my experience updating packages I depend on
21:28:33 <davean> but, it doesn't make sense to make a more complicated, asymetric system because of that!
21:28:54 × yauhsien quits (~yauhsien@118-167-64-241.dynamic-ip.hinet.net) (Ping timeout: 252 seconds)
21:29:09 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Remote host closed the connection)
21:29:12 <maerwald> it violates PVP
21:29:25 <monochrom> But I have now taken a look at the 4.15.0.0 changelog and the 4.14.0.0 changelog. For me, they don't break my code. Perhaps they are even strictly improvements to my code too, without needing me to change my code.
21:29:26 <davean> maerwald: base does?
21:29:26 <maerwald> PVP doesn't demand an upper bound
21:29:39 <davean> maerwald: yes
21:29:46 <maerwald> from a spec perspective, it's arbitrary
21:29:56 <ghais> what is PVP?
21:29:58 <davean> So who made the decision to enforce it on hackage and why?
21:30:10 <davean> ghais: Package Version Policy - its what definates the meaning of the parts of the version field
21:30:17 <davean> https://pvp.haskell.org/
21:30:19 <ghais> thank you!
21:30:20 <monochrom> I acknowledge YMMV very much in this case. But I would be making a safe bet if I used "< 5" or "< 4.20" or something.
21:30:39 <Clint> i always do "< 5"
21:31:01 × fluffyballoon quits (~fluffybal@pat-verona-i.epic.com) (Quit: Client closed)
21:31:37 fluffyballoon joins (~fluffybal@pat-verona-i.epic.com)
21:32:28 <monochrom> I do acknowledge that once in a while I would be burned. For example at the transition point of the functor-applicative-monad proposal. But this would be a once-in-a-decade event for my kind of code.
21:33:33 <monochrom> And in 5-10 years the monad-of-no-return proposal.
21:33:57 × Vajb quits (~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi) (Remote host closed the connection)
21:34:02 <monochrom> (Even that one doesn't have a 100% chance of breaking everyone's code.)
21:34:42 Vajb joins (~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi)
21:34:54 <monochrom> On the other side, I'm also too lazy to relax a tight bound when cabal init auto-defaults to a tight bound, so there!
21:35:08 <davean> monochrom: thats very lazy :-p
21:36:03 × MQ-17J quits (~MQ-17J@8.21.10.15) (Ping timeout: 252 seconds)
21:36:18 MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com)
21:37:58 <sm> tightness of upper bounds has always been a situation-dependent trade-off between annoying users and maintainers with unnecessary bound failures and annoying them with build errors
21:38:07 beka joins (~beka@104.193.170-244.PUBLIC.monkeybrains.net)
21:39:26 × zes quits (~zes@p2003000631de7b35c9a03d4c214f06a5.dip0.t-ipconnect.de) (Quit: zes)
21:40:46 <hpc> maybe being able to promise something's compatibility ahead of time would help?
21:40:48 <davean> sm: you left correctness out entirely there
21:41:15 <hpc> if i am writing a package, being able to say "this definition will behave the same way you expect for the next few major versions" could help consumers of that package
21:42:10 <hpc> and breaking that promise would be a first-digit change, or something like that
21:42:43 <davean> hpc: thats ... not an insane thing to do for some packages, put the high level semantic API on the first digit?
21:42:58 <davean> Detail oriented functions on the second
21:43:17 <hpc> it gives that digit a reason to be there, being just to be longer than semver
21:43:21 <hpc> *besides
21:43:43 <davean> hpc: haha, I mean semver wasn't a thing when it came into existance :)
21:43:55 <hpc> yeah, just being cheeky
21:44:04 <hpc> afaik there's no documented difference between the first two digits
21:44:10 × mikoto-chan quits (~mikoto-ch@ip-213-49-189-31.dsl.scarlet.be) (Ping timeout: 240 seconds)
21:44:33 jneira_ joins (~jneira_@28.red-80-28-169.staticip.rima-tde.net)
21:44:50 viluon joins (uid453725@id-453725.brockwell.irccloud.com)
21:44:51 × MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 252 seconds)
21:45:18 <davean> Correct
21:45:28 <dsal> I like the freedom of the first digit.
21:45:28 <davean> they're up to the library, other than that they are a major change
21:46:29 MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com)
21:46:52 × fendor quits (~fendor@77.119.197.100.wireless.dyn.drei.com) (Remote host closed the connection)
21:47:53 slice joins (~slice@user/slice)
21:51:49 Kaipi joins (~Kaiepi@nwcsnbsc03w-47-54-173-93.dhcp-dynamic.fibreop.nb.bellaliant.net)
21:52:14 × Kaiepi quits (~Kaiepi@nwcsnbsc03w-47-54-173-93.dhcp-dynamic.fibreop.nb.bellaliant.net) (Remote host closed the connection)
21:54:19 × fluffyballoon quits (~fluffybal@pat-verona-i.epic.com) (Ping timeout: 246 seconds)
21:54:36 × Atum_ quits (~IRC@user/atum/x-2392232) (Read error: Connection reset by peer)
21:56:35 × slice quits (~slice@user/slice) (Quit: zzz)
21:57:14 slice joins (~slice@user/slice)
21:57:25 × slice quits (~slice@user/slice) (Client Quit)
22:02:04 Atum_ joins (~IRC@user/atum/x-2392232)
22:02:07 × Guest62 quits (~Guest62@187.83.249.216.dyn.smithville.net) (Quit: Client closed)
22:02:28 Guest12 joins (~Guest12@187.83.249.216.dyn.smithville.net)
22:03:00 × Ariakenom quits (~Ariakenom@c83-255-154-140.bredband.tele2.se) (Quit: Leaving)
22:03:35 × warnz quits (~warnz@2600:1700:77c0:5610:edd9:472d:4b89:9ab8) (Remote host closed the connection)
22:05:40 × Hanicef quits (~gustaf@81-229-9-108-no92.tbcn.telia.com) (Quit: leaving)
22:05:47 × Guest12 quits (~Guest12@187.83.249.216.dyn.smithville.net) (Client Quit)
22:10:05 × MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 255 seconds)
22:10:31 yauhsien joins (~yauhsien@118-167-64-241.dynamic-ip.hinet.net)
22:12:57 MQ-17J joins (~MQ-17J@8.21.10.15)
22:13:25 HarveyPwca joins (~HarveyPwc@2601:246:c180:a570:29df:3b00:ad0e:3a06)
22:15:48 × yauhsien quits (~yauhsien@118-167-64-241.dynamic-ip.hinet.net) (Ping timeout: 272 seconds)
22:23:15 × gehmehgeh_ quits (~user@user/gehmehgeh) (Quit: Leaving)
22:23:52 son0p joins (~ff@181.136.122.143)
22:24:35 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
22:26:47 geekosaur joins (~geekosaur@xmonad/geekosaur)
22:28:43 jmorris joins (uid433911@id-433911.stonehaven.irccloud.com)
22:31:46 <Digit> :)
22:32:42 × hpc quits (~juzz@ip98-169-35-13.dc.dc.cox.net) (Ping timeout: 240 seconds)
22:37:32 × Gurkenglas quits (~Gurkengla@dslb-002-203-144-156.002.203.pools.vodafone-ip.de) (Ping timeout: 255 seconds)
22:41:30 × MQ-17J quits (~MQ-17J@8.21.10.15) (Ping timeout: 252 seconds)
22:41:44 machinedgod joins (~machinedg@24.105.81.50)
22:41:52 <zzz> weird question. does anyone know which is more performant, map or Data.IntMap.Strict.map ?
22:43:03 <geekosaur> depends on what you're doing with it, last I checked
22:43:18 <geekosaur> your best bet is to try them both
22:43:51 <monochrom> https://www.google.com/search?q=it+depends+meme&oq=it+depends&aqs=chrome.1.69i57j69i59.2958j0j7&sourceid=chrome&ie=UTF-8
22:45:02 MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com)
22:45:26 <zzz> figured
22:47:12 <monochrom> The trilemma (right, worse than dilemma) of asking for performance advice on a free-of-charge discussion platform.
22:47:30 <monochrom> If you give no context and use case, the only correct answer is "it depends".
22:48:10 <monochrom> If you give partial context and use case, you risk getting wrong answers --- they would be right for the spoken partial context, but wrong for the unspoken complete context.
22:48:27 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
22:48:29 <monochrom> If you give complete context, people start quoting consultant fees.
22:49:10 <zzz> :)
22:50:09 <zzz> i got exactly the answer i was looking for, although i was tempted to ask "depending on what?"
22:50:36 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:39f3:da:7ab8:bc1e) (Remote host closed the connection)
22:51:03 <zzz> but that's just unleashed curiosity, not necessity
22:52:10 × favonia quits (~favonia@user/favonia) (Ping timeout: 240 seconds)
22:53:33 favonia joins (~favonia@user/favonia)
22:56:43 <smtnet3> can't you just critereon it?
22:57:25 <smtnet3> zzz, ^
22:57:35 <monochrom> Perhaps it was just a curiosity question, there was no code.
22:57:48 <smtnet3> i see
22:58:03 <monochrom> Curiosity killed the cat. Wave collapse brought it back!
23:01:06 <monochrom> In this case it is really apple vs orange. If you use [], it's because you're solving a problem unsuitable for IntMap. If you use IntMap, it's because you'ree solving a problem unsuitable for [].
23:01:27 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
23:01:58 <monochrom> If performance is more important than relevance, the () type is the most performant.
23:02:02 lavaman joins (~lavaman@98.38.249.169)
23:03:19 <boxscape> I'd argue (# #) is better
23:03:29 <monochrom> heh
23:04:32 Lycurgus joins (~juan@cpe-45-46-140-49.buffalo.res.rr.com)
23:05:41 <smtnet3> New to haskell so I don't get that one haha
23:05:53 × drd quits (~drd@2001:b07:a70:9f1f:1562:34de:f50f:77d4) (Ping timeout: 255 seconds)
23:05:55 <smtnet3> hopefully i stick around
23:06:10 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 246 seconds)
23:06:30 <monochrom> (# #) is something low level that's even cheaper than ().
23:06:41 <smtnet3> Ah right
23:07:12 <smtnet3> Oh right unboxed unit
23:07:23 <smtnet3> obviously more performant than boxed unit
23:07:29 <smtnet3> Interesting
23:08:01 slice joins (~slice@user/slice)
23:11:20 yauhsien joins (~yauhsien@118-167-64-241.dynamic-ip.hinet.net)
23:13:59 × acidjnk_new quits (~acidjnk@p200300d0c72b9550509afe7c5cdd8ef5.dip0.t-ipconnect.de) (Ping timeout: 255 seconds)
23:16:09 × yauhsien quits (~yauhsien@118-167-64-241.dynamic-ip.hinet.net) (Ping timeout: 252 seconds)
23:21:49 × Vajb quits (~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi) (Read error: Connection reset by peer)
23:22:36 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:39f3:da:7ab8:bc1e)
23:23:56 × wolfshappen quits (~waff@irc.furworks.de) (Quit: later)
23:24:13 lavaman joins (~lavaman@98.38.249.169)
23:24:38 <catern> uggghhhh typesystem haters can be so frustrating sometimes
23:24:38 Vajb joins (~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi)
23:25:09 wolfshappen joins (~waff@irc.furworks.de)
23:25:46 × Lycurgus quits (~juan@cpe-45-46-140-49.buffalo.res.rr.com) (Quit: Exeunt)
23:26:13 × slice quits (~slice@user/slice) (Quit: zzz)
23:26:33 <catern> I hate when I read people confidently state that types aren't useful for distributed systems because they aren't as extensible as dynamic types (I lately send them https://lexi-lambda.github.io/blog/2020/01/19/no-dynamic-type-systems-are-not-inherently-more-open/ an extremely useful post...)
23:27:13 × Vajb quits (~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi) (Read error: Connection reset by peer)
23:27:43 Vajb joins (~Vajb@2001:999:62:1d53:26b1:6c9b:c1ed:9c01)
23:34:14 × machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 255 seconds)
23:34:19 × Vajb quits (~Vajb@2001:999:62:1d53:26b1:6c9b:c1ed:9c01) (Remote host closed the connection)
23:35:28 × ghais quits (~ghais@c-76-97-106-226.hsd1.ga.comcast.net) (Ping timeout: 246 seconds)
23:35:46 <boxscape> hm, speaking of that blog post, I think -XOverloadedRecordDot will get us a bit closer in the direction of structural typing? As in, you can write `\p -> print p.name`, and it will work for any record that has a Showable name field
23:35:53 <boxscape> \a -> print a.test :: (Show a, HasField "test" r a) => r -> IO ()
23:36:50 <boxscape> ("closer" in the sense of ergonomics, not necessarily type theory)
23:38:49 <monochrom> I respect that both distributed systems and serialization systems face the challenge of staying compatible with old versions of data formats. The answer is still not chanting "dynamic typing" as though it were a magic spell that simply casted away the problem.
23:39:13 <monochrom> Dynamic or static, you still need to write the same consciously handwritten code.
23:39:38 <monochrom> painstakenly earned code
23:40:33 Vajb joins (~Vajb@2001:999:62:1d53:26b1:6c9b:c1ed:9c01)
23:43:37 Feuermagier joins (~Feuermagi@user/feuermagier)
23:44:45 neurocyte4047 joins (~neurocyte@46.243.81.30)
23:44:45 hpc joins (~juzz@ip98-169-35-13.dc.dc.cox.net)
23:44:45 × neurocyte4047 quits (~neurocyte@46.243.81.30) (Changing host)
23:44:45 neurocyte4047 joins (~neurocyte@user/neurocyte)
23:45:18 × neurocyte404 quits (~neurocyte@user/neurocyte) (Ping timeout: 252 seconds)
23:45:18 neurocyte4047 is now known as neurocyte404
23:48:11 × favonia quits (~favonia@user/favonia) (Ping timeout: 255 seconds)
23:49:55 slice joins (~slice@user/slice)
23:50:30 favonia joins (~favonia@user/favonia)
23:54:28 × viluon quits (uid453725@id-453725.brockwell.irccloud.com) (Quit: Connection closed for inactivity)
23:54:48 jmorris parts (uid433911@id-433911.stonehaven.irccloud.com) ()

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