Home liberachat/#haskell: Logs Calendar

Logs on 2022-11-28 (liberachat/#haskell)

00:00:06 <EvanR> "no one knows security better than microsoft" -- ballmer
00:00:09 <Axman6> well, there's always a silent "... now, because we fucken didn't before today lol"
00:01:22 × P1RATEZ quits (piratez@user/p1ratez) (Remote host closed the connection)
00:03:46 <Guest60> Is it possible to express this case expression as pattern matching and/or with reduction?
00:03:47 <Guest60> case optCommand opts of
00:03:47 <Guest60>         CommandA o -> runA o
00:03:48 <Guest60>         CommandB o -> runB o
00:04:52 <Guest60> data Command
00:04:52 <Guest60>     = CommandA OptionsA
00:04:53 <Guest60>     | CommandB OptionsB
00:05:32 <geekosaur> that is pattern matching already. what do you really mean?
00:05:34 × ozkutuk5 quits (~ozkutuk@176.240.173.153) (Ping timeout: 268 seconds)
00:05:52 <Axman6> you can make a catamorphism for Command to make that simpler if it's something you do often: command :: (OptionaA -> r) -> (OptionsB -> r) -> Command -> r; command ca cb = \case CommandA o -> ca; CommandB o -> cb o
00:06:03 <jackdk> geekosaur: I think "can I define this function using multiple equations, like `map _ [] = []; map f (x:xs) = f x : map f xs"?
00:06:11 <Axman6> then you can write command runA runB
00:06:35 jmorris joins (uid537181@id-537181.uxbridge.irccloud.com)
00:06:39 <jackdk> Also, please please use a pastebin if you want to send half a dozen related lines of code to the channel. It keeps it coherently indented and add syntax highlighting.
00:06:47 × Xeroine quits (~Xeroine@user/xeroine) (Ping timeout: 264 seconds)
00:06:51 <Axman6> geekosaur: your question is fairly confusing though, can you explain what you're trying to do?
00:06:57 <Axman6> uh, Guest60
00:07:06 <Axman6> geekosaur's questions are never confusing
00:07:19 <geekosaur> if you're trying to combine the cases, ask yourself what the type of `o` would be
00:07:50 Xeroine joins (~Xeroine@user/xeroine)
00:07:56 <EvanR> you can't eta reduce that case because it's not a lambda
00:08:28 <Axman6> Guest60: As you can see from all these very different answers, we're all confused what your question is
00:09:22 × acidjnk_new quits (~acidjnk@p200300d6e7137a29d8c876154004b86e.dip0.t-ipconnect.de) (Ping timeout: 256 seconds)
00:11:45 inversed joins (~inversed@bcdcac82.skybroadband.com)
00:11:50 <EvanR> if the Options associated with each command are different types, Axman6's "deconstructor" is really the only way
00:12:05 <EvanR> other than case analysis
00:12:29 <Guest60> I'm sorry. The case expression works but I'm wondering if there's an alternative syntax to the case
00:13:19 <EvanR> you could write it in the form of a function if you want
00:13:24 × perrierjouet quits (~perrier-j@modemcable048.127-56-74.mc.videotron.ca) (Quit: WeeChat 3.7.1)
00:13:25 <EvanR> with one equation for each command
00:13:32 <Guest60> I thought perhaps pattern matching a function would be an option where I can define `Run :: Command -> IO ()`
00:14:09 <EvanR> note you can write it in function form pretty easily within another function, in a where clause
00:14:23 <EvanR> myCoolFunction x y z = f command where
00:14:31 <EvanR> f (CommandA o) = runA o
00:14:36 <EvanR> f (CommandB o) = runB o
00:14:54 <EvanR> viola, "alternative syntax"
00:15:50 <Guest60> ah I see, I need to do the brackets
00:15:58 <Guest60> thank you
00:21:37 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
00:23:51 × Tuplanolla quits (~Tuplanoll@91-159-68-152.elisa-laajakaista.fi) (Quit: Leaving.)
00:26:22 zmt00 joins (~zmt00@user/zmt00)
00:32:49 adium joins (adium@user/adium)
00:36:14 money_ joins (~money@pool-100-11-18-203.phlapa.fios.verizon.net)
00:37:35 perrierjouet joins (~perrier-j@modemcable048.127-56-74.mc.videotron.ca)
00:46:54 × pera quits (~pera@user/pera) (Quit: leaving)
00:48:11 × shailangsa quits (~shailangs@host86-186-177-178.range86-186.btcentralplus.com) (Ping timeout: 264 seconds)
00:48:56 × Topsi quits (~Topsi@dyndsl-091-096-150-101.ewe-ip-backbone.de) (Read error: Connection reset by peer)
00:56:13 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 265 seconds)
01:00:11 × perrierjouet quits (~perrier-j@modemcable048.127-56-74.mc.videotron.ca) (Killed (ozone (No Spam)))
01:02:40 nate4 joins (~nate@98.45.169.16)
01:07:59 × nate4 quits (~nate@98.45.169.16) (Ping timeout: 264 seconds)
01:15:55 × bjourne2 quits (~bjorn@94.191.152.122) (Read error: Connection reset by peer)
01:19:38 × xff0x quits (~xff0x@2405:6580:b080:900:79da:1471:7416:e736) (Ping timeout: 256 seconds)
01:20:32 Techcable joins (~Techcable@user/Techcable)
01:35:14 × Guest60 quits (~Guest60@101.98.118.246) (Quit: Client closed)
01:47:58 Feuermagier_ joins (~Feuermagi@2a02:2488:4211:3400:6419:933b:46e0:8942)
01:49:23 × chexum quits (~quassel@gateway/tor-sasl/chexum) (Ping timeout: 255 seconds)
01:50:28 tomokojun joins (~tomokojun@97-120-65-27.ptld.qwest.net)
01:50:35 × Feuermagier quits (~Feuermagi@user/feuermagier) (Ping timeout: 264 seconds)
01:50:44 chexum joins (~quassel@gateway/tor-sasl/chexum)
01:51:48 × gurkenglas quits (~gurkengla@p548ac72e.dip0.t-ipconnect.de) (Ping timeout: 265 seconds)
01:52:09 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
01:54:28 talismanick joins (~user@76.133.152.122)
02:00:13 xff0x joins (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp)
02:00:29 × notzmv quits (~zmv@user/notzmv) (Remote host closed the connection)
02:01:13 perrierjouet joins (~perrier-j@185.234.70.63)
02:04:45 × money_ quits (~money@pool-100-11-18-203.phlapa.fios.verizon.net) (Quit: My MacBook has gone to sleep. ZZZzzz…)
02:06:26 × perrierjouet quits (~perrier-j@185.234.70.63) (Quit: WeeChat 3.7.1)
02:07:27 perrierjouet joins (~perrier-j@modemcable048.127-56-74.mc.videotron.ca)
02:07:40 notzmv joins (~zmv@user/notzmv)
02:11:12 causal joins (~user@50.35.83.177)
02:19:05 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 255 seconds)
02:23:13 ChaiTRex joins (~ChaiTRex@user/chaitrex)
02:26:47 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 268 seconds)
02:28:04 × sammelweis_ quits (~quassel@c-68-48-18-140.hsd1.mi.comcast.net) (Ping timeout: 260 seconds)
02:28:07 × sammelweis quits (~quassel@c-68-48-18-140.hsd1.mi.comcast.net) (Read error: Connection reset by peer)
02:28:36 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
02:36:05 × perrierjouet quits (~perrier-j@modemcable048.127-56-74.mc.videotron.ca) (Quit: WeeChat 3.7.1)
02:38:03 finn_elija joins (~finn_elij@user/finn-elija/x-0085643)
02:38:03 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
02:38:03 finn_elija is now known as FinnElija
02:47:11 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
02:48:18 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
02:50:35 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
02:59:51 × jero98772 quits (~jero98772@2800:484:1d80:d8ce:efcc:cbb3:7f2a:6dff) (Remote host closed the connection)
03:04:13 Kaiepi joins (~Kaiepi@108.175.84.104)
03:04:16 perrierjouet joins (~perrier-j@modemcable048.127-56-74.mc.videotron.ca)
03:05:38 × bobbingbob quits (~bobbingbo@S010610561191f5d6.lb.shawcable.net) (Ping timeout: 268 seconds)
03:05:52 <Inst_> wait, why is Aeson alphabetizing the entries in my JSON objects?
03:06:19 <Axman6> the order in json objects is arbitrary and should never be relied on
03:06:43 <Axman6> (and duplicate fields are valid according to the spec, IIRC)
03:07:32 <Inst_> first, the freaking thing eats my non-nullary data constructors
03:07:34 × zmt00 quits (~zmt00@user/zmt00) (Read error: Connection reset by peer)
03:07:40 <Inst_> then it scrambles my field order
03:08:03 <Axman6> that first one sounds very unlikely
03:08:03 <EvanR> when you turn json into a Value objects become HashMaps which don't have any obvious order
03:08:22 <Axman6> is that still true for recent aeson?
03:08:24 <EvanR> so if you render a Value as json who knows what happens
03:08:40 <EvanR> no idea my knowledge of aeson is probably ancient
03:08:41 × gentauro quits (~gentauro@user/gentauro) (Read error: Connection reset by peer)
03:09:09 zmt00 joins (~zmt00@user/zmt00)
03:09:21 <Inst_> i mean i've always wanted untyped aeson
03:09:22 <Inst_> ugh
03:09:24 <Inst_> i just lost a convert
03:09:34 <Inst_> guy wants to use Python fastAPI instead of servant
03:09:46 <EvanR> by untyped do you mean like, operating on the underlying ByteString data
03:09:55 <Inst_> yeah
03:09:58 Inst_ is now known as Inst
03:10:16 <Axman6> lens-aeson does fun stuff with json encoded bytestrings
03:10:16 <Inst> without going through the class stuff, to make it more competitive with Python's JSON handlers
03:10:46 <Axman6> Something is pretty wrong if your json stuff isn't faster than python IMO
03:14:29 gentauro joins (~gentauro@user/gentauro)
03:22:51 merijn joins (~merijn@86.86.29.250)
03:22:54 × jao quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Remote host closed the connection)
03:26:08 <Inst> he's a pythonista, non-professional programmer
03:26:24 <Inst> and it'll probably end up having to be python in the end anyways, because i'm building software as a gift to him and his friends
03:26:29 <Inst> he can't maintain the haskell servant version
03:27:48 × merijn quits (~merijn@86.86.29.250) (Ping timeout: 260 seconds)
03:28:14 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
03:31:19 × lisbeths quits (uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity)
03:33:59 jao joins (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
03:34:18 <jackdk> Axman6: no, it uses Data.Map internally, there's a flag in the cabal file
03:34:49 <Axman6> thought so, which would explain the ordered object keys
03:37:20 × zant quits (~zant@62.214.20.26) (Ping timeout: 256 seconds)
03:38:21 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
03:39:59 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
03:43:11 zant joins (~zant@62.214.20.26)
03:43:58 <c_wraith> That was their solution to hash flooding against unordered-containers
03:45:25 money is now known as Guest625
03:45:25 × Guest625 quits (Guest3481@user/polo) (Killed (cadmium.libera.chat (Nickname regained by services)))
03:45:41 × shapr quits (~user@68.54.166.125) (Remote host closed the connection)
03:46:31 <c_wraith> which... to be fair, hash flooding is a tough problem to deal with in Haskell.
03:47:16 money joins (~money@user/polo)
03:47:21 <c_wraith> The natural ways to avoid it are to use mutable hash tables where you're already initializing them in IO, or just not use hashing.
03:47:35 × zant quits (~zant@62.214.20.26) (Ping timeout: 264 seconds)
03:51:40 × waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 265 seconds)
03:55:35 × td_ quits (~td@83.135.9.37) (Ping timeout: 268 seconds)
03:57:22 td_ joins (~td@83.135.9.9)
04:03:36 <Clinton[m]> if anyone has any ideas on this StackOverflow question regarding role annotations it will be much appreciated: https://stackoverflow.com/questions/74595848/how-to-restrict-roles-on-class-parameters
04:05:16 lisbeths joins (uid135845@id-135845.lymington.irccloud.com)
04:15:16 <[Leary]> Clinton[m]: This is a fundamental weakness in the design of the role system and it can't be fixed with annotations; those only allow you to further restrict coercions. You may be able to work around the issue with a quantified superclass constraint like `(forall a b. Coercible a b => Coercible (f a) (f b))`.
04:16:26 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 256 seconds)
04:18:42 × ddellacosta quits (~ddellacos@143.244.47.73) (Ping timeout: 256 seconds)
04:20:24 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
04:21:29 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
04:21:37 × phma quits (phma@2001:5b0:2143:94c8:f94a:d451:43a6:db0a) (Read error: Connection reset by peer)
04:22:42 phma joins (phma@2001:5b0:2172:df88:b30a:8f7e:93b0:e277)
04:23:29 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
04:31:05 × money quits (~money@user/polo) (Quit: My MacBook has gone to sleep. ZZZzzz…)
04:33:07 Guest625 joins (Guest625@user/polo)
04:45:22 mud joins (~mud@user/kadoban)
04:50:45 alfonsox joins (~quassel@103.87.57.102)
04:51:11 × machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 264 seconds)
04:53:19 iqubic joins (~iqubic@2601:602:9502:c70:4937:ec1d:8679:10f2)
04:55:23 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 264 seconds)
04:57:05 <iqubic> I'm having some difficulties getting jle's advent-of-code-ocr package to compile with GHC 9.0..2 Is this a known issue?
04:57:07 <iqubic> https://dpaste.com/4YYXGKYQ9
04:57:44 <iqubic> BRB one moment, changing IRC clients
04:57:50 × iqubic quits (~iqubic@2601:602:9502:c70:4937:ec1d:8679:10f2) (Client Quit)
04:57:59 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 260 seconds)
04:58:21 iqubic joins (~user@2601:602:9502:c70:4937:ec1d:8679:10f2)
05:00:07 <iqubic> Back now
05:01:31 × zebrag quits (~chris@user/zebrag) (Quit: Konversation terminated!)
05:01:36 <iqubic> Anyone know what's going on with advent-of-code-ocr there?
05:01:54 <iqubic> https://hackage.haskell.org/package/advent-of-code-ocr is the think I'm trying to build
05:04:11 nate4 joins (~nate@98.45.169.16)
05:07:40 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
05:09:00 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
05:09:11 × nate4 quits (~nate@98.45.169.16) (Ping timeout: 264 seconds)
05:09:54 Guest625 is now known as money
05:12:40 <c_wraith> iqubic: oh, that's the typed template haskell change in GHC 9
05:14:25 <iqubic> I see. Is there a way I can fix this, or do I need to file an issue on the github page?
05:15:28 <c_wraith> It's a real pain to write code that's compatible with either version.
05:16:25 <iqubic> Hmm... That's a shame. So, should I just plan on not using this package during AOC?
05:16:39 <c_wraith> or use GHC 8.10.7
05:16:50 <c_wraith> that's a perfectly fine approach
05:17:20 <iqubic> That's probably the easier thing to do. Let me just tell Nix to use GHC 8.10.7 real quick, and see if that works
05:18:00 × jargon quits (~jargon@184.101.188.35) (Remote host closed the connection)
05:18:07 <iqubic> I don't forsee Advent of Code requiring and fancy GHC 9.x.x features.
05:18:15 <iqubic> Nor do I forsee myself needing those features.
05:19:13 <iqubic> c_wraith: Thanks for the input. I didn't know that TH stuff had changed in GHC 9
05:19:21 titibandit joins (~titibandi@xdsl-78-34-153-165.nc.de)
05:19:35 <c_wraith> only typed template haskell. And yeah... the change *wasn't documented*.
05:19:41 <c_wraith> that was a huge surprise.
05:20:00 <c_wraith> I mean, I guess the new way it worked was documented. But there was nothing in the changelist.
05:22:40 <dsal> Isn't writing your own tools part of the fun?
05:22:43 <iqubic> That's such an annoying thing.
05:22:49 <c_wraith> Probably worth mentioning to jle that it's not working on GHC 9. And then let him deal with it whenever. :)
05:25:50 <iqubic> jle is not in the IRC right now.
05:26:54 <iqubic> I'll make an issue on the github
05:27:14 <iqubic> I'm not sure exactly what is breaking though.
05:28:03 <iqubic> c_wraith: Can you tell me what sort of things I should list in the github issue? Clearly I'm gonna be posting the complete GHC error message. What else?
05:28:37 <c_wraith> You can say that I thought it's the change in GHC 9. Along with the error messages, that should suffice.
05:29:13 <iqubic> Specifically the Typed Template Haskell stuff? Yeah?
05:29:35 × jinsl quits (~jinsl@2408:8207:2559:28e0:211:32ff:fec8:6ae7) (Ping timeout: 264 seconds)
05:29:56 jinsl joins (~jinsl@123.120.168.177)
05:30:28 <c_wraith> yeah
05:33:53 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
05:37:41 Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
05:38:58 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 265 seconds)
05:38:59 Lord_of_Life_ is now known as Lord_of_Life
05:39:11 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 268 seconds)
05:59:04 <iqubic> I've just created a github issue for this. If the library gets updated during Advent of Code, I'll happily switch to GHC 9.
05:59:21 <iqubic> But for now, I'm fine using 8.10.7
05:59:45 × troydm quits (~troydm@host-176-37-124-197.b025.la.net.ua) (Ping timeout: 265 seconds)
06:08:56 × jinsl quits (~jinsl@123.120.168.177) (Ping timeout: 265 seconds)
06:11:41 chomwitt joins (~chomwitt@2a02:587:7a0d:dd00:1ac0:4dff:fedb:a3f1)
06:16:21 random-jellyfish joins (~random-je@user/random-jellyfish)
06:17:12 × Xeroine quits (~Xeroine@user/xeroine) (Quit: ZNC 1.8.2+deb2+b1 - https://znc.in)
06:18:30 jinsl joins (~jinsl@123.120.168.177)
06:18:34 × hrberg quits (~quassel@171.79-160-161.customer.lyse.net) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
06:23:15 takuan joins (~takuan@178-116-218-225.access.telenet.be)
06:36:39 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
06:38:12 hrberg joins (~quassel@171.79-160-161.customer.lyse.net)
06:46:23 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 255 seconds)
06:48:24 <JensPetersen[m]> Is there better/nicer way of deconstructing a Maybe inside a list comprehension than using `Just thing <- [msomething]` ?
06:49:47 <int-e> :t catMaybes
06:49:48 <lambdabot> [Maybe a] -> [a]
06:50:00 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 256 seconds)
06:50:09 <int-e> Personally I think the Just foo <- ... thing is nice enough.
06:50:17 <int-e> Oh
06:50:36 <int-e> it's a singleton list.
06:50:54 Xeroine joins (~Xeroine@user/xeroine)
06:51:26 <int-e> There's maybeToList too
06:51:33 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
06:51:56 <int-e> > map maybeToList [Nothing, Just 42]
06:51:57 <lambdabot> [[],[42]]
06:55:14 ChaiTRex joins (~ChaiTRex@user/chaitrex)
06:57:08 <sus> hey all, could anyone point me to some good beginner resources for haskell (and possibly just fp in general)?
06:58:04 <sus> also, what does haskell really shine at? i've heard it's good for prototyping/rapid development (source has been forgotten) but not much else except for things like xmonad
06:58:55 × jinsl quits (~jinsl@123.120.168.177) (Quit: ZNC - https://znc.in)
06:59:13 jinsl joins (~jinsl@123.120.168.177)
07:07:36 <iqubic> c_wraith: I'm either using Nix wrong, or advent-of-code-ocr is still broken when using GHC 8.10.7
07:07:53 <iqubic> I suspect it's the former, but it might be the later.
07:08:01 <c_wraith> it's possible it's still broken. I didn't test it myself.
07:08:34 <iqubic> Oh, I see.
07:08:35 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 264 seconds)
07:08:50 <iqubic> I remember using this package last year.
07:10:54 <iqubic> This is annoying
07:18:32 × jao quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 265 seconds)
07:20:47 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
07:29:16 michalz joins (~michalz@185.246.204.73)
07:30:27 <mauke> sus: free book: http://book.realworldhaskell.org/read/
07:31:01 <mauke> sus: more resources: https://www.haskell.org/documentation/
07:35:08 × tomokojun quits (~tomokojun@97-120-65-27.ptld.qwest.net) (Read error: Connection reset by peer)
07:35:16 × shriekingnoise quits (~shrieking@186.137.167.202) (Quit: Quit)
07:36:06 × jmorris quits (uid537181@id-537181.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
07:37:18 <jackdk> I find it fantastic for backend web services
07:41:40 fserucas joins (~fserucas@212.157.222.2)
07:43:31 <opqdonut> sus: my course has been pretty liked: https://haskell.mooc.fi/
07:43:44 jinsl- joins (~jinsl@123.120.168.177)
07:44:37 lortabac joins (~lortabac@2a01:e0a:541:b8f0:5ce5:bc7f:bfbf:ad95)
07:45:07 × jinsl quits (~jinsl@123.120.168.177) (Ping timeout: 265 seconds)
07:45:16 × random-jellyfish quits (~random-je@user/random-jellyfish) (Quit: Client closed)
07:45:18 mmhat joins (~mmh@p200300f1c72545bdee086bfffe095315.dip0.t-ipconnect.de)
07:53:01 zeenk joins (~zeenk@2a02:2f04:a208:3600::7fe)
07:54:18 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 265 seconds)
07:55:39 acidjnk_new joins (~acidjnk@p200300d6e7137a29041d3977bca620cd.dip0.t-ipconnect.de)
07:56:47 × Me-me quits (~me-me@user/me-me) (Quit: Disconnecting on purpose.)
07:59:10 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
08:00:23 Me-me joins (~Me-me@146.102.215.218.dyn.iprimus.net.au)
08:00:24 × Me-me quits (~Me-me@146.102.215.218.dyn.iprimus.net.au) (Changing host)
08:00:24 Me-me joins (~Me-me@user/me-me)
08:00:39 <peddie> @where learn
08:00:39 <lambdabot> https://wiki.haskell.org/Learning_Haskell
08:00:46 <peddie> sus: ^
08:02:57 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
08:04:14 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
08:11:36 kenran joins (~user@user/kenran)
08:13:27 × kenran quits (~user@user/kenran) (Remote host closed the connection)
08:17:34 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
08:19:35 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 260 seconds)
08:19:45 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
08:20:03 ChaiTRex joins (~ChaiTRex@user/chaitrex)
08:20:28 akegalj joins (~akegalj@93-138-187-169.adsl.net.t-com.hr)
08:21:46 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
08:25:48 cyphase_eviltwin is now known as cyphase
08:30:32 ChaiTRex joins (~ChaiTRex@user/chaitrex)
08:37:51 razetime joins (~quassel@49.207.211.219)
08:41:43 tomokojun joins (~tomokojun@97-120-65-27.ptld.qwest.net)
08:41:50 × tomokojun quits (~tomokojun@97-120-65-27.ptld.qwest.net) (Remote host closed the connection)
08:42:46 × jinsl- quits (~jinsl@123.120.168.177) (Ping timeout: 256 seconds)
08:43:49 aliosablack joins (~chomwitt@2a02:587:7a0d:dd00:1ac0:4dff:fedb:a3f1)
08:44:08 × chomwitt quits (~chomwitt@2a02:587:7a0d:dd00:1ac0:4dff:fedb:a3f1) (Read error: Connection reset by peer)
08:44:10 tomokojun joins (~tomokojun@97-120-65-27.ptld.qwest.net)
08:45:45 <albet70> how to generate tags for vim?
08:45:57 <albet70> or emacs?
08:48:29 <maerwald[m]> albet70: hasktags and codex
08:49:38 jinsl joins (~jinsl@123.120.168.177)
08:50:50 machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net)
08:52:44 <albet70> hasktags needs to be installed with cabal?
08:53:53 <maerwald[m]> No
08:53:57 <maerwald[m]> But it can
08:54:58 <albet70> your system package source has it?
08:55:09 <albet70> I mean like apt, pacman, etc
08:55:11 MajorBiscuit joins (~MajorBisc@c-001-025-055.client.tudelft.eduvpn.nl)
08:55:32 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 255 seconds)
08:56:40 <maerwald[m]> Mine? No
08:56:46 <maerwald[m]> Don't know about yours
08:57:17 mbuf joins (~Shakthi@49.204.116.36)
08:57:51 <albet70> so how you installed it?
08:58:01 <maerwald[m]> Cabal
09:01:00 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 260 seconds)
09:01:55 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
09:03:54 × tomokojun quits (~tomokojun@97-120-65-27.ptld.qwest.net) (Ping timeout: 265 seconds)
09:04:23 × aliosablack quits (~chomwitt@2a02:587:7a0d:dd00:1ac0:4dff:fedb:a3f1) (Ping timeout: 265 seconds)
09:05:16 × titibandit quits (~titibandi@xdsl-78-34-153-165.nc.de) (Remote host closed the connection)
09:05:44 nate4 joins (~nate@98.45.169.16)
09:10:59 × nate4 quits (~nate@98.45.169.16) (Ping timeout: 264 seconds)
09:14:48 Bocaneri joins (~sauvin@user/Sauvin)
09:15:12 Bocaneri is now known as Guest9581
09:15:41 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 255 seconds)
09:16:24 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
09:17:34 × Sauvin quits (~sauvin@user/Sauvin) (Ping timeout: 260 seconds)
09:19:23 kuribas joins (~user@ptr-17d51en6r1xh6ck9pgx.18120a2.ip6.access.telenet.be)
09:19:39 chomwitt joins (~chomwitt@2a02:587:7a0d:dd00:1ac0:4dff:fedb:a3f1)
09:21:19 × lisbeths quits (uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity)
09:25:03 × rembo10 quits (~rembo10@main.remulis.com) (Quit: ZNC 1.8.2 - https://znc.in)
09:25:44 chele joins (~chele@user/chele)
09:26:57 Guest9581 is now known as Sauvin
09:27:15 rembo10 joins (~rembo10@main.remulis.com)
09:28:19 use-value joins (~Thunderbi@2a00:23c6:8a03:2f01:75c2:a71f:beaa:29bf)
09:32:50 ChaiTRex joins (~ChaiTRex@user/chaitrex)
09:33:21 × econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity)
09:33:45 × rembo10 quits (~rembo10@main.remulis.com) (Quit: ZNC 1.8.2 - https://znc.in)
09:35:26 Erutuon joins (~Erutuon@user/erutuon)
09:35:35 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 264 seconds)
09:35:55 rembo10 joins (~rembo10@main.remulis.com)
09:37:24 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
09:38:30 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
09:41:29 <dminuoso> Why cant I have a simple and yet efficient postgresql library. :(
09:42:05 × Kaiepi quits (~Kaiepi@108.175.84.104) (Ping timeout: 265 seconds)
09:43:05 <Franciman> try with sql?
09:43:09 <Franciman> sqlite3*
09:43:11 <Franciman> sorry xd
09:43:24 <Franciman> it's usually good enough, and i like the lib
09:43:32 <dminuoso> No I do want postgresql.
09:43:36 <Franciman> i see
09:44:08 <dminuoso> I think I may have to actually write this myself. Something like hasql, except without that crazy deep dependency footprint.
09:44:15 mokee joins (~mokee@37.228.215.235)
09:45:20 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 260 seconds)
09:45:28 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
09:46:28 <maerwald[m]> dminuoso: hasql
09:46:45 <dminuoso> maerwald[m]: Yes, hasql has a crazy depdendency footprint.
09:46:57 <dminuoso> You get the kmettiverse, the aesonverse and the volkoverse.
09:49:06 <dminuoso> maerwald[m]: https://i.imgur.com/WXxSFcc.png
09:49:12 <dminuoso> That's hasql just all by itself.
09:49:26 × rembo10 quits (~rembo10@main.remulis.com) (Quit: ZNC 1.8.2 - https://znc.in)
09:49:30 <dminuoso> I feel like hackage should display this at the landing page of each package.
09:50:32 ubert joins (~Thunderbi@p200300ecdf264e08a6416b558e153d18.dip0.t-ipconnect.de)
09:51:28 Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542)
09:51:40 rembo10 joins (~rembo10@main.remulis.com)
09:52:24 × lawt quits (~lawtonmat@2001:470:69fc:105::2:97b8) (Quit: issued !quit command)
09:53:43 <dminuoso> This is like what, 90 dependencies?
09:57:11 irrgit__ joins (~irrgit@86.106.90.226)
09:58:42 × irrgit_ quits (~irrgit@146.70.27.250) (Ping timeout: 256 seconds)
10:00:58 × son0p quits (~ff@2604:3d08:5b7f:5540::c531) (Ping timeout: 256 seconds)
10:01:27 × alfonsox quits (~quassel@103.87.57.102) (Read error: Connection reset by peer)
10:02:22 × MajorBiscuit quits (~MajorBisc@c-001-025-055.client.tudelft.eduvpn.nl) (Ping timeout: 252 seconds)
10:02:24 CiaoSen joins (~Jura@p200300c95716a5002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
10:03:48 <int-e> 73 on top of what ghc ships with
10:04:07 zant joins (~zant@62.96.232.178)
10:04:20 teo joins (~teo@user/teo)
10:05:23 <int-e> oh and not counting hsc2hs deps
10:11:03 gurkenglas joins (~gurkengla@p548ac72e.dip0.t-ipconnect.de)
10:13:59 × xff0x quits (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 265 seconds)
10:14:46 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
10:15:57 <kuribas> dminuoso: what do you mean by efficient?
10:16:07 <kuribas> fast generation of queries? fast serialization?
10:16:13 <kuribas> Or just good ergonomics?
10:16:23 <dminuoso> Fast serialization
10:16:32 __monty__ joins (~toonn@user/toonn)
10:16:58 <dminuoso> postgresql-simple uses the text interface of libpq, and it does some home-made query interpolation that Im not happy with.
10:18:37 <chreekat> If you're gonna write your own, maybe add postgres-native serialization to (a fork of?) postgres-simple :D
10:18:38 <chreekat> It would be welcome
10:19:05 <kuribas> or you can port my hasqlator-mysql to postgresql, but with fast serialization ;-)
10:20:55 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 260 seconds)
10:21:10 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
10:23:33 aeroplane joins (~user@user/aeroplane)
10:25:05 <kuribas> a Protocal in python is like (forall a. Intrface a), not Intrface a => a ..., right?
10:25:43 <kuribas> meaning, you cannot get the same class back?
10:26:29 <kuribas> But I suppose it's the same with java interfaces.
10:26:39 Wstfgl0 joins (~me-me@v.working.name)
10:26:47 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 255 seconds)
10:26:49 <maerwald[m]> dminuoso: if you don't like dependency footprints, haskell is the wrong language anyway
10:27:02 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 256 seconds)
10:27:05 <dminuoso> maerwald[m]: For the most part I can manage just fine, though.
10:27:19 <dminuoso> There's just a few libraries that are on the extreme side of dependencies.
10:27:36 <kuribas> dminuoso: you are likely importing the kmettiverse anyway :)
10:27:46 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
10:29:16 × Wstfgl0 quits (~me-me@v.working.name) (Client Quit)
10:29:39 <maerwald[m]> Volkov writes some pretty cool stuff though, like https://hackage.haskell.org/package/stm-containers
10:30:13 Me-m| joins (~me-me@v.working.name)
10:30:46 × Me-me quits (~Me-me@user/me-me) (Remote host closed the connection)
10:31:15 Me-m| is now known as Me-me
10:31:31 <maerwald[m]> But has never attended to any of my bug reports/PRs.
10:31:52 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
10:32:04 <maerwald[m]> That might be a factor against using hasql.
10:33:22 × Me-me quits (~me-me@v.working.name) (Changing host)
10:33:22 Me-me joins (~me-me@user/me-me)
10:34:35 accord joins (uid568320@id-568320.hampstead.irccloud.com)
10:36:28 × tzh quits (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
10:37:08 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 255 seconds)
10:37:17 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
10:39:00 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 260 seconds)
10:41:19 <aeroplane> hello everyone, I was implementing the my_filter function from the book "yet another haskell tutorial", but it gives an error - "non-exhaustive patterns". I did not know how to resolve this error, please help!
10:41:21 <aeroplane> https://paste.rs/9MK
10:41:44 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:8066:4970:bd6:2327) (Remote host closed the connection)
10:41:50 <dminuoso> aeroplane: Multi-line definitions dont work in GHCi like that.
10:42:10 <aeroplane> ok
10:42:11 <kuribas> I don't even think repeating let works in ghc
10:42:15 <dminuoso> First, you have to use the two definitions in the same let-block, and for GHCi you have to use :{ :}
10:42:23 <mauke> two 'let', two different functions
10:42:28 <kuribas> in the same function I mean
10:42:32 <aeroplane> ok i'll try
10:42:52 <mauke> > let f _ = "one" in let f [] = "two" in f [1,2,3]
10:42:53 <lambdabot> "*Exception: <interactive>:3:24-35: Non-exhaustive patterns in function f
10:42:55 <dminuoso> aeroplane: Right now, the second definition replaces the first, and as such when you apply my_filter to a list, it will not have a definition for a non-empty list, giving you the error you are seeing
10:43:18 <dminuoso> aeroplane: https://gist.github.com/dminuoso/04a8f69c6950babafa1c0ad869213e56
10:44:48 <mauke> for that kind of stuff it's easier to put the code in a file and just load it into ghci
10:45:30 Neuromancer joins (~Neuromanc@user/neuromancer)
10:46:59 Kaiepi joins (~Kaiepi@108.175.84.104)
10:52:12 <aeroplane> dminuoso: thanks, it's working.
10:56:07 troydm joins (~troydm@host-176-37-124-197.b025.la.net.ua)
11:03:09 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
11:04:17 xff0x joins (~xff0x@2405:6580:b080:900:534a:4597:1af5:4190)
11:05:24 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
11:05:29 × jinsl quits (~jinsl@123.120.168.177) (Ping timeout: 260 seconds)
11:06:51 jinsl joins (~jinsl@123.120.168.177)
11:08:19 <aeroplane> I also have one more question, Is having real world experience in an imperative language a prerequisite for learning Haskell. WOuld it be too early to start learning haskell if you don't have the same.
11:08:36 <dminuoso> Not at all.
11:08:52 <dminuoso> I might argue, imperative programming experience probably slows down your progress.
11:09:13 <dminuoso> Partly because learning Haskell requires a fair bit of unlearning habits and mind models. If you dont have imperative programming experience, that step is foregone.
11:10:07 <dminuoso> While its not common, we repeatedly heard success stories of beginners learning Haskell as their first langauge.
11:10:28 <dminuoso> Arguably, we have a lot of things that might make more sense to a beginner than someone with an imperative background.
11:12:15 <dminuoso> For instance, many programming languages have a notion of writing to a mutable reference by writing `a = 3`. So if you write something like a = 3; a = 4` that can be mindbending and strangely confusing because you might have some notion of writing equations from mathematics. In Haskell the equal signs does denote a similar kind of equality as mathematics does.
11:12:49 <dminuoso> If we want to write to a mutable reference, we would write `writeIORef mut 3` instead, which I think is much easier to explain to a beginner.
11:13:15 <mauke> even worse, x = x + 1 makes no mathematical sense, but this kind of code is super common in imperative
11:16:06 <dminuoso> aeroplane: So conversely, because = denotes a kind of substitution equality (that is if you read `x = expr`, then all occurences of `x` can be replaced with `expr` without change of meaning to the program), it gives you access to something we call equational reasoning.
11:16:20 <dminuoso> In many imperative langauges you cant even do that, which I think can complicate the learning process
11:16:45 <dminuoso> (oh and similarly, all occurences of `expr` can be replaced with `x` without changing the meaning of the program too)
11:17:05 <dminuoso> So yeah. I do think Haskell is very suitable as a first language.
11:19:57 <aeroplane> dminuoso: Thanks, I agree Haskell is true as Mathematics, there is no hidden features like closures (Javascript) and no destructive behaviour and also succint. I started liking it.
11:20:15 <mauke> heh
11:20:20 <mauke> Haskell is full of closures
11:20:28 <dminuoso> not exactly.
11:20:39 <dminuoso> a closure is an implementation detail, so its not Haskell that has closures, its GHC
11:20:54 <mauke> I disagree; I don't define "closure" like that
11:21:15 <dminuoso> You are free to make your own definition of course, but it is a widely common and accepted definition.
11:21:55 × zant quits (~zant@62.96.232.178) (Read error: Connection reset by peer)
11:21:58 <mauke> only in Haskell land
11:22:06 <dminuoso> No, not really.
11:22:10 king_gs joins (~Thunderbi@2806:103e:29:bfeb:c988:bbd5:2586:4924)
11:22:14 <mauke> the one that's more common elsewhere is "a function that uses local variables from an outer scope"
11:22:16 zant joins (~zant@62.96.232.178)
11:23:11 <dminuoso> I know a lot of self taught programmers play lose cannon with terminology. But in compsci that is not the definition of closure.
11:23:24 <mauke> comp.sci = "Haskell land"
11:23:54 <dminuoso> No, this ranges back all the way to LISP, and is used in literature everywhere.
11:23:59 × king_gs quits (~Thunderbi@2806:103e:29:bfeb:c988:bbd5:2586:4924) (Client Quit)
11:24:16 <mauke> I'm not disputing that
11:24:20 <dminuoso> Haskell is only a small subset of computational science.
11:25:01 <mauke> https://en.wikipedia.org/wiki/Synecdoche
11:25:41 <dminuoso> It is so incredibly well estasbliedh, even in modern programming languages.
11:25:46 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
11:25:49 <dminuoso> https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures
11:26:31 <mauke> yeah, that uses both definitions :-)
11:26:40 <mauke> "// displayName() is the inner function, a closure"
11:26:48 <lyxia> dminuoso: what's your definition of closure? so far you only said "it's an implementation detail"
11:26:49 ub joins (~Thunderbi@p548c9ce5.dip0.t-ipconnect.de)
11:26:59 <mauke> right after "a closure is the combination of a function with something else"
11:27:15 × ubert quits (~Thunderbi@p200300ecdf264e08a6416b558e153d18.dip0.t-ipconnect.de) (Remote host closed the connection)
11:27:15 ub is now known as ubert
11:27:24 <mauke> lyxia: a tuple of (environment, code)
11:28:18 stiell joins (~stiell@gateway/tor-sasl/stiell)
11:28:28 × gurkenglas quits (~gurkengla@p548ac72e.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
11:28:47 <mauke> personally, I don't think the name "closure" makes any sense in this context
11:30:00 <dminuoso> lyxia: It is a technique to implement first class functions that allow binding names from outside a lambda.
11:30:26 × zant quits (~zant@62.96.232.178) (Ping timeout: 246 seconds)
11:30:39 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
11:31:17 <mauke> what's a lambda? :-)
11:32:49 <aeroplane> With closure(javascript), I meant that we need not to be aware of how Haskell works inside while writing code, I think.
11:32:57 <aeroplane> like Event loops in JS
11:33:21 <dminuoso> Or more compactly, a way to implement first class functions with free variables, by closing it.
11:33:42 <dminuoso> The thing is, the fact that your runtime *can* do this, does not mean `\x -> x + y` is a closed expression.
11:33:51 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Read error: Connection reset by peer)
11:33:59 <dminuoso> On a language semantics point of view, its an open expression.
11:34:25 <dminuoso> Closures really are something that happens on the implementation side of things.
11:34:35 <mauke> non sequitur
11:34:57 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
11:35:35 merijn joins (~merijn@86.86.29.250)
11:35:36 <mauke> (that, is it does not follow as a conclusion from the preceding statements, but I may have missed your point)
11:35:52 <dminuoso> Let me take another stab
11:35:54 <dminuoso> 12:27:24 mauke | lyxia: a tuple of (environment, code)
11:35:58 <dminuoso> This right there. That's implementation.
11:36:03 <mauke> yes
11:36:29 <dminuoso> Closures do not exist on a language level, they are an implementation artifact. I think you can implement name binding and first class functions with different techniques too.
11:36:42 <mauke> true, under your definition
11:36:53 <dminuoso> Well, it is the definition shared in virtually all of literature.
11:37:01 <mauke> all of comp.sci literature
11:37:27 <mauke> i.e. academics, i.e. Haskell land
11:38:02 <dminuoso> Since closure is a comp sci term, I think comp sci literature is most applicable.
11:38:20 <dminuoso> But like I said, I dont mind if others make up their own arbitrary definitions.
11:38:29 <lyxia> lol I'm lost about what mauke is disagreeing with
11:38:32 <mauke> https://en.wiktionary.org/wiki/closure
11:38:42 <mauke> it's far older than computing :-)
11:39:13 <mauke> lyxia: my point is that there is another definition of "closure", which is not an implementation detail
11:39:25 <mauke> and I like it better because it makes more sense to me
11:39:56 <mauke> that is, it seems more useful in practice
11:40:22 <dminuoso> Im a bit lost now. You started this discussion with `Haskell is full of closures`, but your recent wiktionary reference makes it clear you do not mean `closure` in the comp sci sense, but one of the etymologically older definitions.
11:40:30 <mauke> no
11:40:43 × merijn quits (~merijn@86.86.29.250) (Ping timeout: 260 seconds)
11:40:52 <mauke> my definition: <mauke> the one that's more common elsewhere is "a function that uses local variables from an outer scope"
11:41:25 <dminuoso> Where is "elsewhere"?
11:41:49 <mauke> that's a good question
11:41:58 <lyxia> I think both definitions have their uses
11:42:09 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:8066:4970:bd6:2327)
11:42:36 <mauke> I've encountered it in various online communities, like programming forums, usenet, etc
11:43:01 <dminuoso> mauke: the comp sci expression for that is "lambda/function expression with free variables".
11:43:17 <dminuoso> (or open lambda/function expression)
11:43:23 ChaiTRex joins (~ChaiTRex@user/chaitrex)
11:44:00 <mauke> that's too limiting, though
11:44:08 <mauke> it doesn't have to be called "lambda" or be an expression
11:44:52 <mauke> heh, I just noticed that this wiktionary definition, "An abstraction that represents a function within an environment, a context consisting of the variables that are both bound at a particular time during the execution of the program and that are within the function's scope." ... kind of straddles the two meanings
11:45:42 <dminuoso> I tend to not like wiktionary/wikipedia as basis for definitions, because its incredibly biased by the authors who can be anyone.
11:45:56 <dminuoso> They are good vehicles for finding primary or secondary literature, though.
11:46:18 <mauke> yes
11:46:23 × jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 264 seconds)
11:46:31 <dminuoso> That being said, using different, less principled definitions for words is very common in programming, especially amongst those without a formal education or interest thereof. It is a bit problematic because it leads to misconceptions and confusion.
11:46:40 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:8066:4970:bd6:2327) (Ping timeout: 260 seconds)
11:46:46 <mauke> inb4 functor
11:46:49 <dminuoso> Making up your own definition is valid, but it does beg the question why one would not stick to well established standardized terminology
11:46:54 <dminuoso> Or function.
11:46:56 <dminuoso> :)
11:47:18 <mauke> "well established" is relative, and all definitions are made up
11:47:26 <lyxia> I mean you are both claiming that your definition is well established
11:47:47 <lyxia> good luck figuring out who's right
11:47:58 <mauke> ... both?
11:48:31 <lyxia> aren't you?
11:48:35 <dminuoso> I think principle mauke and I do understand each other. Perhaps we should discuss the real crux.
11:48:42 <kuribas> closure is a fairly common term
11:48:47 <dminuoso> And that's: whose definition is better to use
11:49:20 <kuribas> saying haskell doesn't have closures is fairly deceptive
11:49:23 <mauke> obviously, mine :-)
11:49:26 <dminuoso> Especially in the Haskell community there tends to be a preference in using terminology that aligns with what you find publications of.
11:49:54 <dminuoso> kuribas: Haskell has as much closures as it has stack pushing.
11:49:57 <dminuoso> Its just not part of the langauge.
11:50:00 <dminuoso> Its part of the implementation
11:50:32 zant joins (~zant@62.96.232.178)
11:50:36 <mauke> Haskell doesn't have a profiler
11:50:37 <kuribas> I disagree, closure is about semantics, not implementation
11:51:05 <mauke> technically correct, but deceptive
11:51:26 <dminuoso> kuribas: its an implementation technique to provide semantics.
11:51:37 <dminuoso> its not the only one either
11:51:49 <kuribas> "A closure is the combination of a function bundled together (enclosed) with references to its surrounding state (the lexical environment)."
11:51:55 <aeroplane> A function after execution is deleted from the entirety of existence.
11:51:55 <aeroplane> Closure: Hold my beer 🍺!!
11:52:04 <kuribas> that doesn't say how the surrounding state is implemented.
11:52:13 <dminuoso> kuribas: its that bundling itself, that is the implementation technique.
11:52:20 <dminuoso> in simple terms in GHC you might have:
11:52:38 <dminuoso> `data Closure = Closure FuncRef Env` with `data Env = Env (Map Id Value)` as a gross oversimplification
11:53:08 <dminuoso> That isnt saying how that is exactly done, but the idea of having a function reference along with an environment defining what names bind to what values - thats what a closure is.
11:53:14 <kuribas> closure means you can use a variable even when it went out of scope.
11:53:32 <mauke> kuribas: no, that's my definition, not the dminuoso uses :-)
11:53:36 <mauke> er, the one*
11:53:55 <kuribas> I believe it's the commonly used one, prove me wrong :)
11:53:59 <mauke> hahaha
11:54:27 <mauke> dminuoso: /* C */ int n = 42; void foo(void) { return n; } -- is foo a "lambda/function expression with free variables"?
11:54:50 × zant quits (~zant@62.96.232.178) (Ping timeout: 260 seconds)
11:55:44 <lyxia> Aren't you mauke and dminuoso both agreeing with the definition kuribas gave? So you agree on the words but not on the interpretation?
11:55:53 × acidjnk_new quits (~acidjnk@p200300d6e7137a29041d3977bca620cd.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
11:56:07 <dminuoso> lyxia: So essentially this is another version of `what is a function`
11:56:14 <lyxia> yes
11:56:16 <mauke> ... kind of?
11:56:29 <mauke> I don't particularly like those words, though
11:57:18 <dminuoso> The more interesting question is: do we care about the definition that is a) historically correct and b) used in pubications, or c) by the broad masses of users without formal education in that respect.
11:57:25 Lycurgus joins (~juan@user/Lycurgus)
11:57:33 <dminuoso> I do not have a good answer.
11:57:36 <mauke> (and note that the MDN article immediately contradicts its own definition when it talks about closures)
11:58:02 <dminuoso> Just to provide a starting point: https://dspace.mit.edu/handle/1721.1/5854
11:58:23 <dminuoso> This is the point where closures originated from.
11:58:23 × CiaoSen quits (~Jura@p200300c95716a5002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 264 seconds)
11:58:27 <dminuoso> The term, that is.
11:58:44 <dminuoso> Not citing this as basis for authority on what to call a closure, but I do want to at least provide that for context.
11:59:25 <mauke> I'm going to read that paper, but up front I'd just like to say that Lispers are terrible at naming things :-)
11:59:38 <dminuoso> Having browsed google scholar a bit now, its hard to find publications using closure in mauke's sense.
11:59:49 <dminuoso> mauke: actually closure is named quite appropriately.
11:59:56 <dminuoso> it closes what is otherwise an open expression.
12:00:16 <dminuoso> and that uses `open` and `close` in the lambda calculus sense.
12:00:29 <mauke> "expressions" are part of the surface language, not the implementation
12:00:41 <mauke> there are no expressions in asm
12:02:16 <mauke> that's why I think it makes sense to define "closure" in terms of language features/syntax
12:02:30 <dminuoso> Implementations implement the language. As such they can easily think about open and close of the language they implement just fine.
12:02:53 <dminuoso> So for instance, in GHC you have functions that will tell you whether a given expression is open or free.
12:02:59 <dminuoso> *open or closed.
12:03:13 × akegalj quits (~akegalj@93-138-187-169.adsl.net.t-com.hr) (Ping timeout: 265 seconds)
12:03:17 <mauke> (with variables that are bound or free. right.)
12:03:40 rendar joins (~Paxman@user/rendar)
12:03:44 <dminuoso> the implementation is not the generated asssembly
12:03:53 <rendar> can i insert multiple key/values into a map, in oneliner?
12:03:53 <dminuoso> the implementation is the machinery that does, potentially, generate assembly
12:04:04 <mauke> I still feel it's a bit of a misnomer because you're essentially naming a fairly generic technique after one particular application
12:04:11 <dminuoso> rendar: Use `union`
12:04:21 <dminuoso> Or a fold
12:04:33 × FragByte quits (~christian@user/fragbyte) (Quit: Quit)
12:04:49 <mauke> like, say, you come up with a generic lookup data structure (a finite map), but you call it a "symbol table" because your compiler uses it to implement symbol tables
12:05:04 <dminuoso> mauke: well the idea is, is you conceptually turn `\x -> x + y` into `\let y = 1 in \x -> x + 1`, you *close* the expression.
12:05:11 <dminuoso> Uh small typo there.
12:05:19 <dminuoso> `\x -> x + y` into `let y = 1 in \x -> x + y`
12:05:36 <dminuoso> From an analysis point of view, this seems appropriately named
12:06:22 <mauke> OK, you're making some good points. I'll have to think about this
12:06:58 <mauke> dminuoso: but about my C example; would you call foo a lambda/function expression with free variables?
12:07:02 <dminuoso> Of course implementations tend to blur the lines a bit, since it tends to be less efficient to explicitly define such constructs. So you will rather just carry an environment alongside, under the assumption there is going to be some highly efficient implementation, while it to be equivalent to `let y = 1 = \x -> x + y`
12:07:56 FragByte joins (~christian@user/fragbyte)
12:09:14 jonathanx joins (~jonathan@h-178-174-176-109.a357.priv.bahnhof.se)
12:09:58 <mauke> (my intuition says that it's not an expression, but 'n' is free in 'foo')
12:10:28 × jonathanx_ quits (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Ping timeout: 260 seconds)
12:11:08 <dminuoso> mauke: sure, I mean different languages have different semantics, and they tend to burrow terminology on the basis of being similar or a resemblance.
12:11:42 son0p joins (~ff@2604:3d08:5b7f:5540::ebf0)
12:12:05 <lyxia> rendar: can you give an example of what you are trying to do?
12:12:33 <mauke> dminuoso: my point is, 'foo' is not a closure in my sense, so "a lambda/function expression with free variables" is not a suitable replacement
12:12:39 <dminuoso> mauke: and to be fair, expression tends to be something grammatical.
12:12:54 <dminuoso> which differs between languages
12:12:57 <rendar> lyxia, let's say i have a map, i want to insert multiple keys into one line, e.g. in python: map = {}; map["a"]=12; map["b"]=55;
12:12:59 <mauke> also wow, this algol(ish?) code is giving me perl4 flashbacks
12:13:11 <mauke> dynamically scoped everything, a 'local' keyword that is not local
12:13:22 <dminuoso> mauke: I would say `foo` gets implicitly compiled as a closure. The environment is implicitly available because its global.
12:13:30 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 260 seconds)
12:13:45 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
12:13:57 <dminuoso> But this is a matter of what one is trying to say
12:14:02 <mauke> dminuoso: right. I would say 'foo' is not a closure because it doesn't use local variables from a surrounding scope (n is global, not local)
12:14:17 <dminuoso> there's no requirement about "local" or "global" in the original sense
12:14:25 <dminuoso> its merely about free and non-free variables
12:14:37 <dminuoso> and `n` is definitely not free under foo.
12:14:43 <dminuoso> *definitely free!
12:15:09 <dminuoso> mauke: but yeah the lines are getting blurry
12:15:28 <dminuoso> I dont think there's necessarily a right perspective here
12:15:43 <dminuoso> pick one that is suitable for whatever point it is you are trying to make
12:16:01 <dminuoso> if we're talking about how closrues are implemented from a compiler, this would not something you would pick as an example
12:16:28 <dminuoso> if we took closure by a very literal interpretation of the original sense, there would be a kind (implicit) closure here
12:17:13 <mauke> I'm only on page 4 of this paper, but so far Haskell doesn't qualify because it doesn't allow modification of variables
12:17:37 <mauke> and they explicitly rule out substitution as inefficient and semantically wrong, I think
12:18:03 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 260 seconds)
12:18:04 <dminuoso> Im not citing this as the authoritative definition on what a closure is.
12:18:30 <dminuoso> IT's merely where the term `closure` was originally invented.
12:18:34 <dminuoso> The principle idea is a bit older
12:19:34 <dminuoso> The idea derives directly from lambda calculus: https://www.cs.kent.ac.uk/people/staff/dat/tfp12/tfp12.pdf - but the term `closure` was, at least as far as I can find in literature, defined by the paper you are reading.
12:19:41 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
12:21:18 <mauke> rendar: let map = Map.fromList [("a", 12), ("b", 55)]
12:21:31 <dminuoso> mauke: mmm, strike what I said last here. I need to revisit it later
12:21:34 <dminuoso> Gotta do some more work
12:21:38 <mauke> rendar: let map = Map.insert "b" 55 (Map.insert "a" 12 Map.empty)
12:22:03 <rendar> mauke, here we go, i see
12:22:16 <dminuoso> rendar: map `union` Map.fromList [("a", 12), ("b", 13), ("c", 14)]
12:22:25 × Lycurgus quits (~juan@user/Lycurgus) (Quit: Exeunt https://tinyurl.com/4m8d4kd5)
12:22:29 <dminuoso> Gives you a way to insert a bunch of keys in one go.
12:22:31 <mauke> rendar: let map1 = Map.empty; map2 = Map.insert "a" 12 map1; map3 = Map.insert "b" 55 map2
12:22:44 <dminuoso> Or you can do:
12:25:21 <dminuoso> % let m = M.fromList [("x", 20), ("y", 21)] in foldr (uncurry M.insert) m [("a", 12), ("b", 13), ("c", 14) -- rendar
12:25:21 <yahb2> <interactive>:32:116: error: ; parse error (possibly incorrect indentation or mismatched brackets)
12:25:26 <dminuoso> % let m = M.fromList [("x", 20), ("y", 21)] in foldr (uncurry M.insert) m [("a", 12), ("b", 13), ("c", 14)] -- rendar
12:25:26 <yahb2> fromList [("a",12),("b",13),("c",14),("x",20),("y",21)]
12:25:57 zant joins (~zant@62.96.232.178)
12:25:58 <rendar> i see
12:26:05 azimut joins (~azimut@gateway/tor-sasl/azimut)
12:26:44 <dminuoso> So feel free to define `insertMany ls m = foldr (uncurry M.insert) m ls` yourself perhaps
12:27:21 <rendar> yes, interesting, thanks
12:28:16 <mauke> :mind_blown: I just understood where Common Lisp's FUNCTION comes from, I think
12:28:34 <mauke> that's bizarre
12:30:44 <dminuoso> mauke: what part are you referring to?
12:34:03 <mauke> the stuff about binding environments vs. activation environments and the difference between passing (QUOTE f) and (FUNCTION f) to another function
12:34:45 <mauke> FUNCTION explicitly captures the current environment
12:35:01 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
12:35:32 <mauke> it's funny to me that they keep talking about FUNARGs and function scopes, seemingly without consideration of ordinary (non-function) scopes
12:35:58 <dminuoso> I think much of the background is really lost in time.
12:36:11 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
12:36:35 <dminuoso> What we perceive as `scope` is something that has arisen from decades of research and implementation.
12:36:51 <mauke> but you'd have the same problems with block scopes, so "the binding environment is where the function is passed as an argument" is not universally useful
12:37:58 <mauke> in their syntax: define f(x) = begin; return x + a; end; begin local a; a = 1; begin local a; a = 2; z = f(3); end; end;
12:39:03 <mauke> or maybe the definition of f should be moved into the first "local a" block
12:39:47 <mauke> anyway, the point is that there's possible confusion about which environment to use for 'a' (which is free in f), regardless of whether we're passing f around as an argument or not
12:41:25 <mauke> also, it's nice to be vindicated in claiming that C does not have a stack :-)
12:41:39 <mauke> (which is like saying that Haskell does not have closures)
12:42:48 <mauke> the language spec doesn't require a stack, and my suggested alternative implementation technique was a garbage-collected chain of call frames
12:43:14 <mauke> which is pretty much what they're describing in fig. 4
12:43:46 <dminuoso> I mean in todays context, evaluating a function in the activation environment is for most languages a really strange thing.
12:44:03 <dminuoso> It's something that only surfaces in the context of meta programming.
12:45:07 <dminuoso> Say in LISP, but also in languages like Ruby.
12:46:17 <mauke> perl4 essentially uses the "shallow" technique described in the paper
12:46:35 <mauke> which is dynamic scope
12:50:25 <mauke> !
12:50:33 <mauke> "A useful metaphor for the difference between FUNCTION and QUOTE in LISP is to think of QUOTE as a porous or an open covering of the function since free variables escape to the current environment. FUNCTION acts as a closed or nonporous covering (hence the term "closure" used by Landin)."
12:50:34 acidjnk_new joins (~acidjnk@p200300d6e7137a02d08b41b0bf630fa5.dip0.t-ipconnect.de)
12:51:25 × razetime quits (~quassel@49.207.211.219) (Ping timeout: 260 seconds)
12:51:29 <mauke> I hereby claim that comp.sci has been misusing the term "closure" because ^that reads exactly like my version
12:51:43 opticblast joins (~Thunderbi@172.58.84.42)
12:51:50 × machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Quit: Lost terminal)
12:52:01 <mauke> (also, it's a description of semantics, not an implementation technique)
12:52:20 machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net)
12:53:27 nattiestnate joins (~nate@114.122.106.30)
12:54:47 akegalj joins (~akegalj@180-237.dsl.iskon.hr)
12:55:26 × Feuermagier_ quits (~Feuermagi@2a02:2488:4211:3400:6419:933b:46e0:8942) (Quit: Leaving)
12:55:38 Feuermagier joins (~Feuermagi@user/feuermagier)
12:56:23 × opticblast quits (~Thunderbi@172.58.84.42) (Ping timeout: 265 seconds)
12:59:25 × machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Remote host closed the connection)
13:05:33 × nattiestnate quits (~nate@114.122.106.30) (Read error: Connection reset by peer)
13:05:48 machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net)
13:07:13 nate4 joins (~nate@98.45.169.16)
13:09:00 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
13:09:00 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
13:09:19 × dsrt^ quits (~dsrt@76.145.185.103) (Remote host closed the connection)
13:10:26 ChaiTRex joins (~ChaiTRex@user/chaitrex)
13:10:35 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 255 seconds)
13:10:39 thyriaen joins (~thyriaen@2a01:aea0:dd4:470d:6245:cbff:fe9f:48b1)
13:12:18 × nate4 quits (~nate@98.45.169.16) (Ping timeout: 260 seconds)
13:12:39 tabaqui joins (~root@88.231.62.215)
13:13:23 azimut joins (~azimut@gateway/tor-sasl/azimut)
13:14:08 o joins (niko@libera/staff/niko)
13:14:08 o is now known as niko
13:14:57 <mauke> dangit, why does it cost 53€ just to read a single chapter ("A λ-Calculus Approach") of a book from 1966?
13:16:01 <thyriaen> mauke, supply and demand set the price
13:16:05 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 255 seconds)
13:19:51 ChaiTRex joins (~ChaiTRex@user/chaitrex)
13:21:26 <Hecate> mauke: because it's a damn oligopoly and we ought to break it
13:22:10 <Hecate> this why Aaron Swartz died
13:22:48 × troydm quits (~troydm@host-176-37-124-197.b025.la.net.ua) (Ping timeout: 260 seconds)
13:26:04 <mauke> supply is effectively infinite; it's small digital file
13:27:47 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 255 seconds)
13:30:20 ChaiTRex joins (~ChaiTRex@user/chaitrex)
13:30:20 {-d0t-} joins (~q_q@user/-d0t-/x-7915216)
13:31:02 <{-d0t-}> ohai! What's the best way to check for a cabal flag value in code? Are there any autogenerated CPP macros?
13:34:44 <dminuoso> Yes.
13:36:31 <dminuoso> Or well, no. But you can just declare them yourself,.
13:36:48 <dminuoso> if flag(Debug) cpp-options: -DDEBUG
13:36:58 <{-d0t-}> Huh.. i thought there was something ready to use.
13:37:00 <{-d0t-}> :(
13:37:07 <dminuoso> I think this is better since its less magical
13:37:20 merijn joins (~merijn@86.86.29.250)
13:37:43 nschoe joins (~q@141.101.51.197)
13:37:47 <dminuoso> {-d0t-}: Do take note, that cabal flags dont transend to dependencies.
13:37:56 × Xeroine quits (~Xeroine@user/xeroine) (Quit: ZNC 1.8.2+deb2+b1 - https://znc.in)
13:38:00 <{-d0t-}> Yeah, I know.
13:38:13 <{-d0t-}> In my case, I'm making some dependencies (and associated modules) conditional.
13:38:36 <dminuoso> It is a bit sad we have to resort to CPP to make this happen. :(
13:38:44 Xeroine joins (~Xeroine@user/xeroine)
13:38:49 <{-d0t-}> Yup.
13:38:56 <{-d0t-}> Someone ought to fix this
13:39:06 <dminuoso> But if you have some interface module in the middle, you can nicely decouple it and keep CPP in just that interface module.
13:39:11 <dminuoso> So there is at least a workable approach
13:39:21 <{-d0t-}> That's exactly what I'm doing.
13:39:38 <{-d0t-}> I just thought Cabal defined some macros for me so that I wouldn't have to.
13:39:56 <dminuoso> https://gitlab.haskell.org/haskell/filepath/-/blob/master/System/FilePath.hs
13:40:03 <dminuoso> This is how filepath does it.
13:40:09 <dminuoso> (Which I think is the only sane approach)
13:40:15 <dminuoso> {-d0t-}: It does some, but not that.
13:41:02 <dminuoso> https://cabal.readthedocs.io/en/stable/cabal-package.html?highlight=CURRENT_COMPONENT_ID#conditional-compilation
13:43:42 <{-d0t-}> Oh boy..
13:43:59 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 255 seconds)
13:44:41 ChaiTRex joins (~ChaiTRex@user/chaitrex)
13:45:02 <dminuoso> __HADDOCK_VERSION__ this looks useful for imposing terror on my unsuspecting users.
13:45:47 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 264 seconds)
13:46:43 × merijn quits (~merijn@86.86.29.250) (Ping timeout: 260 seconds)
13:48:07 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
13:50:17 <mauke> having stared at https://en.wikipedia.org/wiki/Man_or_boy_test for a while, I now think I understand ALGOL
13:51:20 <mauke> I wrote a Perl translation: https://paste.tomsmeding.com/kXUEBIrQ
13:51:34 <mauke> it produces the expected results, so that is nice
13:55:23 razetime joins (~quassel@49.207.211.219)
13:59:07 shapr joins (~user@68.54.166.125)
13:59:47 Sgeo joins (~Sgeo@user/sgeo)
14:01:38 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
14:03:05 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 265 seconds)
14:03:51 <pavonia> There's even an OEIS entry for the expected values :D
14:04:22 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
14:05:29 shriekingnoise joins (~shrieking@186.137.167.202)
14:12:17 × zant quits (~zant@62.96.232.178) (Read error: Connection reset by peer)
14:12:29 <mauke> I have now translated the Perl code to Haskell: https://paste.tomsmeding.com/p73ggnJX
14:12:39 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
14:13:13 zant joins (~zant@62.96.232.178)
14:13:46 Guest70 joins (~Guest70@217.64.164.1)
14:13:49 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Read error: Connection reset by peer)
14:14:06 AlexNoo_ joins (~AlexNoo@178.34.163.118)
14:14:25 CiaoSen joins (~Jura@p200300c95716a5002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
14:14:35 <mauke> actually, this is stupid. I should've just moved the runST into man_or_boy and have it return Int
14:16:26 sammelweis joins (~quassel@c-68-48-18-140.hsd1.mi.comcast.net)
14:16:37 × AlexZenon quits (~alzenon@94.233.240.159) (Ping timeout: 265 seconds)
14:17:35 × Alex_test quits (~al_test@94.233.240.159) (Ping timeout: 264 seconds)
14:17:38 × AlexNoo quits (~AlexNoo@94.233.240.159) (Ping timeout: 260 seconds)
14:22:06 AlexZenon joins (~alzenon@178.34.163.118)
14:22:21 AlexNoo_ is now known as AlexNoo
14:22:38 Alex_test joins (~al_test@178.34.163.118)
14:26:17 <mauke> dminuoso: https://www.cs.cmu.edu/~crary/819-f09/Landin64.pdf is the paper you want, I think. it introduces closure exactly as you described
14:32:52 elevenkb joins (~elevenkb@105.184.125.168)
14:33:57 × accord quits (uid568320@id-568320.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
14:39:05 kenran joins (~user@user/kenran)
14:41:16 × elevenkb quits (~elevenkb@105.184.125.168) (Quit: Client closed)
14:41:58 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
14:42:14 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 265 seconds)
14:45:21 elevenkb joins (~elevenkb@105.184.125.168)
14:49:23 × zeenk quits (~zeenk@2a02:2f04:a208:3600::7fe) (Ping timeout: 264 seconds)
14:49:57 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
14:50:41 cfricke joins (~cfricke@user/cfricke)
14:50:43 × kenran quits (~user@user/kenran) (Remote host closed the connection)
15:02:12 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 268 seconds)
15:12:38 Tuplanolla joins (~Tuplanoll@91-159-68-152.elisa-laajakaista.fi)
15:20:44 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 255 seconds)
15:22:12 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
15:23:52 beteigeuze joins (~Thunderbi@bl14-81-220.dsl.telepac.pt)
15:25:23 <JensPetersen[m]> int-e: sorry missed your response - ya would like something simpler like pseudocode: `["--some-opt=dir" </> subdir | subdir <- maybeSubdir]` - but ya I could get most of that with a list instead it is true
15:27:11 × td_ quits (~td@83.135.9.9) (Ping timeout: 264 seconds)
15:27:25 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
15:28:41 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
15:34:35 × cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.7.1)
15:36:59 bobbingbob joins (~bobbingbo@s010610561191f5d6.lb.shawcable.net)
15:39:10 × acidjnk_new quits (~acidjnk@p200300d6e7137a02d08b41b0bf630fa5.dip0.t-ipconnect.de) (Remote host closed the connection)
15:39:32 acidjnk_new joins (~acidjnk@p200300d6e7137a02d08b41b0bf630fa5.dip0.t-ipconnect.de)
15:42:15 jao joins (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
15:44:40 bgs joins (~bgs@212-85-160-171.dynamic.telemach.net)
15:45:39 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:8066:4970:bd6:2327)
15:50:30 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:8066:4970:bd6:2327) (Ping timeout: 260 seconds)
15:51:50 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
15:53:14 td_ joins (~td@83.135.9.9)
15:54:22 <JensPetersen[m]> s/dir/defaultdir/
15:54:40 <JensPetersen[m]> s/opt/dir/, s/dir/defaultdir/
15:54:47 × akegalj quits (~akegalj@180-237.dsl.iskon.hr) (Quit: leaving)
16:01:30 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 265 seconds)
16:08:31 cfricke joins (~cfricke@user/cfricke)
16:08:58 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
16:11:07 pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
16:14:39 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
16:14:44 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 248 seconds)
16:19:54 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 260 seconds)
16:20:44 Guest|28 joins (~Guest|28@static.142.45.203.116.clients.your-server.de)
16:26:09 × CiaoSen quits (~Jura@p200300c95716a5002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 265 seconds)
16:29:20 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:8066:4970:bd6:2327)
16:29:22 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
16:29:46 jakalx joins (~jakalx@base.jakalx.net)
16:30:26 nate4 joins (~nate@98.45.169.16)
16:31:36 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
16:32:51 × superbil quits (~superbil@1-34-176-171.hinet-ip.hinet.net) (Read error: Connection reset by peer)
16:34:50 × Guest70 quits (~Guest70@217.64.164.1) (Quit: Client closed)
16:36:11 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 264 seconds)
16:37:03 × Kaiepi quits (~Kaiepi@108.175.84.104) (Ping timeout: 260 seconds)
16:37:25 × cafkafk quits (~cafkafk@fsf/member/cafkafk) (Remote host closed the connection)
16:38:13 cafkafk joins (~cafkafk@fsf/member/cafkafk)
16:39:20 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
16:40:01 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:8066:4970:bd6:2327) (Remote host closed the connection)
16:41:35 × teo quits (~teo@user/teo) (Ping timeout: 264 seconds)
16:43:43 teo joins (~teo@user/teo)
16:43:57 × mbuf quits (~Shakthi@49.204.116.36) (Ping timeout: 268 seconds)
16:44:27 mbuf joins (~Shakthi@49.204.114.228)
16:45:18 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
16:45:59 × cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.7.1)
16:46:08 azimut joins (~azimut@gateway/tor-sasl/azimut)
16:46:58 kadobanana joins (~mud@user/kadoban)
16:47:18 × mbuf quits (~Shakthi@49.204.114.228) (Client Quit)
16:47:35 × mud quits (~mud@user/kadoban) (Ping timeout: 264 seconds)
16:48:07 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
16:48:22 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
16:49:53 azimut joins (~azimut@gateway/tor-sasl/azimut)
16:52:44 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 265 seconds)
16:55:20 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
16:56:04 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
16:56:23 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:5ce5:bc7f:bfbf:ad95) (Quit: WeeChat 2.8)
16:58:28 × fserucas quits (~fserucas@212.157.222.2) (Ping timeout: 248 seconds)
17:13:48 × acidjnk_new quits (~acidjnk@p200300d6e7137a02d08b41b0bf630fa5.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
17:14:28 merijn joins (~merijn@86.86.29.250)
17:17:17 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 255 seconds)
17:19:03 × merijn quits (~merijn@86.86.29.250) (Ping timeout: 260 seconds)
17:19:47 acidjnk_new joins (~acidjnk@p200300d6e7137a0209d789e407054230.dip0.t-ipconnect.de)
17:23:42 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
17:24:38 bjourne2 joins (~bjorn@94.191.152.191)
17:28:44 × Player205[m] quits (~rootsandw@2001:470:69fc:105::2:ca2e) (Quit: Reconnecting)
17:28:47 × razetime quits (~quassel@49.207.211.219) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
17:28:58 Player205[m] joins (~rootsandw@2001:470:69fc:105::2:ca2e)
17:29:56 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:8066:4970:bd6:2327)
17:33:50 euandreh joins (~Thunderbi@179.214.113.107)
17:33:54 × nate4 quits (~nate@98.45.169.16) (Ping timeout: 268 seconds)
17:36:41 × ubert quits (~Thunderbi@p548c9ce5.dip0.t-ipconnect.de) (Quit: ubert)
17:38:10 × zant quits (~zant@62.96.232.178) (Ping timeout: 265 seconds)
17:39:07 × chele quits (~chele@user/chele) (Remote host closed the connection)
17:39:45 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
17:43:28 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:8066:4970:bd6:2327) (Remote host closed the connection)
17:44:20 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 248 seconds)
17:44:36 Kaiepi joins (~Kaiepi@108.175.84.104)
17:46:37 zant joins (~zant@62.96.232.178)
17:48:51 × causal quits (~user@50.35.83.177) (Quit: WeeChat 3.7.1)
17:50:47 × elevenkb quits (~elevenkb@105.184.125.168) (Quit: Client closed)
17:55:37 <shapr> howdy JensPetersen[m] , how's code?
17:56:44 × zant quits (~zant@62.96.232.178) (Ping timeout: 260 seconds)
17:56:52 <JensPetersen[m]> shapr: hey shapr - mostly good - some up and downs haha - how are you?
17:57:33 × nschoe quits (~q@141.101.51.197) (Ping timeout: 260 seconds)
18:00:24 × teo quits (~teo@user/teo) (Ping timeout: 265 seconds)
18:02:26 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
18:03:11 × gff_ quits (~gff@user/gff) (Ping timeout: 264 seconds)
18:10:19 × kuribas quits (~user@ptr-17d51en6r1xh6ck9pgx.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 27.1))
18:11:45 tzh joins (~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
18:12:06 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:8066:4970:bd6:2327)
18:16:27 × aeroplane quits (~user@user/aeroplane) (Ping timeout: 268 seconds)
18:17:39 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
18:18:12 econo joins (uid147250@user/econo)
18:21:12 tomokojun joins (~tomokojun@97-120-65-27.ptld.qwest.net)
18:23:12 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:8066:4970:bd6:2327) (Remote host closed the connection)
18:25:49 elevenkb joins (~elevenkb@105.184.125.168)
18:32:06 × elevenkb quits (~elevenkb@105.184.125.168) (Quit: Client closed)
18:32:57 elevenkb joins (~elevenkb@105.184.125.168)
18:33:13 zant joins (~zant@62.214.20.26)
18:33:42 × elevenkb quits (~elevenkb@105.184.125.168) (Client Quit)
18:33:59 elevenkb joins (~elevenkb@105.184.125.168)
18:35:33 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:8066:4970:bd6:2327)
18:37:34 × beteigeuze quits (~Thunderbi@bl14-81-220.dsl.telepac.pt) (Ping timeout: 260 seconds)
18:38:02 × zant quits (~zant@62.214.20.26) (Ping timeout: 268 seconds)
18:38:16 × mmhat quits (~mmh@p200300f1c72545bdee086bfffe095315.dip0.t-ipconnect.de) (Quit: WeeChat 3.7.1)
18:38:22 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
18:39:26 stiell joins (~stiell@gateway/tor-sasl/stiell)
18:40:03 × elevenkb quits (~elevenkb@105.184.125.168) (Quit: Client closed)
18:42:46 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
18:42:52 mmhat joins (~mmh@p200300f1c72545bdee086bfffe095315.dip0.t-ipconnect.de)
18:44:24 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
18:47:39 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:8066:4970:bd6:2327) (Remote host closed the connection)
18:49:06 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 256 seconds)
18:49:21 mestre joins (~mestre@191.177.185.178)
18:49:58 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
18:54:46 zant joins (~zant@62.214.20.26)
18:55:39 × {-d0t-} quits (~q_q@user/-d0t-/x-7915216) (Ping timeout: 260 seconds)
18:56:51 elevenkb joins (~elevenkb@105.184.125.168)
19:01:07 <shapr> JensPetersen[m]: I'm learning nix, it's slow but useful
19:01:36 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
19:04:48 Topsi joins (~Topsi@dyndsl-095-033-226-009.ewe-ip-backbone.de)
19:06:08 troydm joins (~troydm@host-176-37-124-197.b025.la.net.ua)
19:25:03 × cafkafk quits (~cafkafk@fsf/member/cafkafk) (Remote host closed the connection)
19:26:56 cafkafk joins (~cafkafk@fsf/member/cafkafk)
19:30:44 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
19:34:21 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
19:34:40 gmg joins (~user@user/gehmehgeh)
19:36:43 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
19:39:05 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 268 seconds)
19:39:33 stiell joins (~stiell@gateway/tor-sasl/stiell)
19:41:44 × elevenkb quits (~elevenkb@105.184.125.168) (Quit: Client closed)
19:42:02 titibandit joins (~titibandi@xdsl-78-34-153-165.nc.de)
19:42:29 waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
19:43:56 elevenkb joins (~elevenkb@105.184.125.168)
19:44:58 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
19:45:34 <lagash> shapr: have you looked into Guix too?
19:45:37 gurkenglas joins (~gurkengla@p548ac72e.dip0.t-ipconnect.de)
19:46:06 × elevenkb quits (~elevenkb@105.184.125.168) (Client Quit)
19:46:31 <shapr> lagash: I have, but I also want to play steam games
19:46:39 <shapr> I much prefer using guile instead of nix the language
19:46:46 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
19:46:53 <shapr> lagash: what do you think about those two?
19:47:56 elevenkb joins (~elevenkb@105.184.125.168)
19:48:08 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:8066:4970:bd6:2327)
19:49:28 × elevenkb quits (~elevenkb@105.184.125.168) (Client Quit)
19:50:38 elevenkb joins (~elevenkb@105.184.125.168)
19:51:36 beteigeuze joins (~Thunderbi@a79-169-109-107.cpe.netcabo.pt)
19:51:47 tomokojun parts (~tomokojun@97-120-65-27.ptld.qwest.net) (Leaving)
19:52:23 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 264 seconds)
19:52:32 <davean> he nix language frankly sucks. The nix community seems to suffer less GNU disease though :/ I'd like the best of both frankly.
19:53:03 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:8066:4970:bd6:2327) (Ping timeout: 260 seconds)
19:53:45 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
19:57:42 Guest75 joins (~Guest75@178.141.153.191)
19:58:18 × beteigeuze quits (~Thunderbi@a79-169-109-107.cpe.netcabo.pt) (Ping timeout: 260 seconds)
19:58:35 <monochrom> What is GNU disease?
19:59:29 <monochrom> (being obsessed with GPL-like and LGPL-like licenses?)
20:00:45 <Guest75> Hello. If I have a recursive function (parser), is there an easy way to track all the calls (call tree) to better track it's behaviour? I'm now thinking to be passing the function f as an argument and return not <result> but (tracked, <result>) from a function itself. Return value is already a monad. Should I (learn about and) use Writer monad
20:00:45 <Guest75> instead?
20:02:03 <monochrom> Yes Writer helps.
20:02:27 <monochrom> Or your own monad that contains the equiv of Writer features (and other features you need).
20:02:40 <Guest75> aha
20:03:12 <EvanR> something like strict State monad is probably better for logging
20:03:51 <Guest75> Will Writer (or State) also help to go back and forth... to on/off the logging (i.e. after debugged — no logging = more performance)?
20:04:44 <EvanR> for that, disabling whole features at compile time, maybe use a preprocessor macro to change the entire type definition
20:04:56 <EvanR> same API, different implementation (one where logging does nothing)
20:05:00 <Guest75> aha! that's what language CPP is for
20:05:17 <Guest75> cool thanks!
20:06:43 pavonia joins (~user@user/siracusa)
20:11:51 <sclv> tonight or wed are good -- poss thurs, but i might need to juggle stuff if so
20:12:03 <sclv> whoops, wrong channel lmao
20:15:55 <EvanR> #juggling
20:17:57 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
20:19:21 <davean> monochrom: being obsessed with system design, policy, licensing, etc over actually ever delivering something that works.
20:20:58 <davean> monochrom: don't worry though, GUIX is infact working on HURD support
20:21:21 <EvanR> 90% of my OS thanks gnu for that
20:21:51 <davean> Yah its not all bad, but they seriously need a project manager over there.
20:22:14 beteigeuze joins (~Thunderbi@a79-169-109-107.cpe.netcabo.pt)
20:22:20 <davean> EvanR: actually, does it? I'm not sure what GNU stuff is actually on my system these days
20:22:30 <davean> ... gnu tar might be the only thing really.
20:24:27 <EvanR> well coreutils certainly
20:24:36 <lagash> shapr: I think Nix is better integrated / more popular with the Haskell ecosystem, but I much prefer Guix
20:24:51 <monochrom> I like system design, but yeah, not obseesed, planning should be proportionate to intended scale.
20:24:59 <davean> EvanR: I don't have coreutils, do you actually?
20:25:21 <davean> I haven't used coreutils in YEARS
20:25:29 <EvanR> I dunno just reading man pages
20:26:04 <jean-paul[m]> davean: `ls`?
20:26:10 <monochrom> Um do you mean you're on some BSD altogether? :)
20:26:10 <davean> jean-paul[m]: not coreutils for me
20:27:03 <davean> monochrom: I have FreeBSD boxes, but actually all my linux boxes ended up with a busybox and similar base util set ages ago by default.
20:27:15 <monochrom> Ah busybox
20:27:29 <mauke> glibc?
20:28:20 <davean> Oh I probably have glibc on a number of systems
20:28:36 <davean> I certainly have ones without it, but yah, I bet all my standard client systems have that kicking around.
20:31:06 × dibblego quits (~dibblego@haskell/developer/dibblego) (Ping timeout: 256 seconds)
20:31:20 × elevenkb quits (~elevenkb@105.184.125.168) (Quit: Client closed)
20:31:45 fpnoob joins (~nick@c-73-253-54-136.hsd1.ma.comcast.net)
20:33:54 dibblego joins (~dibblego@122-199-1-30.ip4.superloop.com)
20:33:54 × dibblego quits (~dibblego@122-199-1-30.ip4.superloop.com) (Changing host)
20:33:54 dibblego joins (~dibblego@haskell/developer/dibblego)
20:35:33 × zant quits (~zant@62.214.20.26) (Ping timeout: 265 seconds)
20:36:12 × fpnoob quits (~nick@c-73-253-54-136.hsd1.ma.comcast.net) (Ping timeout: 256 seconds)
20:38:21 zant joins (~zant@62.214.20.26)
20:38:59 × mokee quits (~mokee@37.228.215.235) (Quit: off)
20:41:20 sagax joins (~sagax_nb@user/sagax)
20:44:44 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 255 seconds)
20:49:34 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 265 seconds)
20:51:01 stiell joins (~stiell@gateway/tor-sasl/stiell)
20:56:33 Guest4247 joins (~Guest42@ip1f13ab93.dynamic.kabel-deutschland.de)
20:56:53 <Guest4247> @pl  (#)s=(maximum$s)-(minimum$s)
20:56:54 <lambdabot> (line 1, column 6):
20:56:54 <lambdabot> unexpected "("
20:56:54 <lambdabot> expecting operator
20:57:01 <Guest4247> @pl  f s=(maximum$s)-(minimum$s)
20:57:01 <lambdabot> f = liftM2 (-) maximum minimum
20:58:03 <Guest4247> @pl $
20:58:04 <lambdabot> (line 1, column 1):
20:58:04 <lambdabot> unexpected "$"
20:58:04 <lambdabot> expecting white space, "()", natural, identifier, lambda abstraction or expression
20:58:24 <Guest4247> @pl f = &&&
20:58:24 <lambdabot> (line 1, column 4):
20:58:24 <lambdabot> unexpected " "
20:58:24 <lambdabot> expecting operator
20:58:52 <mauke> f = (&&&) is already pointless
21:00:14 Sauvin is now known as s
21:00:30 s is now known as Sauvin
21:02:08 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
21:05:29 mc47 joins (~mc47@xmonad/TheMC47)
21:05:37 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
21:05:59 × titibandit quits (~titibandi@xdsl-78-34-153-165.nc.de) (Remote host closed the connection)
21:06:44 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
21:08:11 opticblast joins (~Thunderbi@2607:fb90:2821:dea0:64bc:f886:4fdb:368e)
21:10:55 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Read error: Connection reset by peer)
21:11:23 × mmhat quits (~mmh@p200300f1c72545bdee086bfffe095315.dip0.t-ipconnect.de) (Quit: WeeChat 3.7.1)
21:15:16 k` joins (~user@152.7.255.204)
21:18:29 <k`> Is it possible to re-export another package's module at the same location? (e.g. Package foo exports modules Foo and Foo.Core, then I split move Foo.Core into a new package foo-core -- I want to make this a nonbreaking change by re-exporting Foo.Core from foo. Or am I stuck putting the module at Foo.Core.Core in foo-core and then re-exporting it in foo at the old location?)
21:19:51 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
21:20:07 jakalx joins (~jakalx@base.jakalx.net)
21:20:37 <k`> Is that clear?
21:21:24 <Rembane> k`: Just out of curiosity, have you tried it?
21:22:41 <jackdk> should be doable with package-qualified imports i reckon
21:23:03 <k`> I'm not sure how I would go about doing it. Putting a dependency's exposed module under exposed-modules results in compilation failure.
21:24:50 <k`> Package qualified imports makes sense. Do you know whether it would "just work" like importing the same definition from multiple modules, or would it mess up a third package that depends on both?
21:25:31 <c_wraith> k`: look at the mixins field in cabal
21:27:01 <c_wraith> https://cabal.readthedocs.io/en/stable/cabal-package.html#pkg-field-mixins
21:28:09 <k`> Thanks, will do!
21:28:23 × Guest|28 quits (~Guest|28@static.142.45.203.116.clients.your-server.de) (Ping timeout: 264 seconds)
21:29:13 <c_wraith> it's technically part of backpack, but I've only ever used it for module renaming
21:31:40 <jackdk> package foo would declare module Foo.Core, and re-export everything from package foo-core's Foo.Core. I forget the syntax; check the GHC user's guidee
21:35:20 <k`> Looks like there's a 'reexported-modules' field in Cabal. Think that's exactly what I want.
21:41:58 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
21:47:09 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 260 seconds)
21:50:19 × Guest4247 quits (~Guest42@ip1f13ab93.dynamic.kabel-deutschland.de) (Quit: Client closed)
21:55:53 Pickchea joins (~private@user/pickchea)
21:59:30 × k` quits (~user@152.7.255.204) (Ping timeout: 256 seconds)
22:05:38 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
22:06:52 × opticblast quits (~Thunderbi@2607:fb90:2821:dea0:64bc:f886:4fdb:368e) (Ping timeout: 256 seconds)
22:15:00 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
22:19:57 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 265 seconds)
22:21:52 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
22:32:58 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
22:37:50 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 265 seconds)
22:43:13 × michalz quits (~michalz@185.246.204.73) (Remote host closed the connection)
22:45:46 <Inst> btw, does anyone use Servant.JS here?
22:46:01 <Inst> I need to ask about whether Servant,JS can generate code without the ugly little vars floating around
22:50:33 elevenkb joins (~elevenkb@105.184.125.168)
22:52:05 × elevenkb quits (~elevenkb@105.184.125.168) (Client Quit)
22:54:53 × gmg quits (~user@user/gehmehgeh) (Quit: Leaving)
22:55:17 Erutuon joins (~Erutuon@user/erutuon)
22:57:05 <EvanR> like, pointless JS?
22:58:32 k` joins (~user@2605:a601:a60d:5400:15e4:d05d:ca31:2ab6)
22:59:09 × tomboy64 quits (~tomboy64@user/tomboy64) (Remote host closed the connection)
23:00:37 tomboy64 joins (~tomboy64@user/tomboy64)
23:02:36 × mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection)
23:06:08 × Guest30 quits (~Guest30@59-102-33-166.tpgi.com.au) (Ping timeout: 260 seconds)
23:07:04 × Pickchea quits (~private@user/pickchea) (Quit: Leaving)
23:09:49 × Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection)
23:10:01 sayola joins (~sayola@dslb-088-064-186-217.088.064.pools.vodafone-ip.de)
23:10:08 Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542)
23:11:04 × euandreh quits (~Thunderbi@179.214.113.107) (Quit: euandreh)
23:12:12 × bobbingbob quits (~bobbingbo@s010610561191f5d6.lb.shawcable.net) (Remote host closed the connection)
23:13:26 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
23:15:54 wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com)
23:15:54 × wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
23:15:54 wroathe joins (~wroathe@user/wroathe)
23:16:01 × mestre quits (~mestre@191.177.185.178) (Quit: Lost terminal)
23:16:23 × zant quits (~zant@62.214.20.26) (Ping timeout: 264 seconds)
23:18:55 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 265 seconds)
23:23:45 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 265 seconds)
23:32:15 <Axman6> @pl (\c -> maybe (c:) (++) (Map.lookup c encodeTable))
23:32:15 <lambdabot> ap (flip maybe (++) . (:)) (flip Map.lookup encodeTable)
23:32:26 <Axman6> no thank you
23:35:03 × Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Quit: Leaving)
23:35:37 k8yun joins (~k8yun@user/k8yun)
23:40:33 × acidjnk_new quits (~acidjnk@p200300d6e7137a0209d789e407054230.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
23:40:58 × bjourne2 quits (~bjorn@94.191.152.191) (Quit: Konversation terminated!)
23:48:35 × Xeroine quits (~Xeroine@user/xeroine) (Excess Flood)
23:50:24 Xeroine joins (~Xeroine@user/xeroine)
23:51:41 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:8066:4970:bd6:2327)
23:54:37 × pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.5)
23:56:04 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
23:56:18 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:8066:4970:bd6:2327) (Ping timeout: 260 seconds)
23:57:46 ChaiTRex joins (~ChaiTRex@user/chaitrex)
23:58:14 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)

All times are in UTC on 2022-11-28.