2022/11/28

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