2022/09/27

2022-09-27 00:03:50 +0200seydar(~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 265 seconds)
2022-09-27 00:06:11 +0200Guest73(~Guest73@p200300ef9718354c66b84bdd01ed06f1.dip0.t-ipconnect.de)
2022-09-27 00:07:39 +0200Tuplanolla(~Tuplanoll@91-159-69-34.elisa-laajakaista.fi) (Quit: Leaving.)
2022-09-27 00:07:53 +0200rockymarine(~rocky@user/rockymarine) (Ping timeout: 268 seconds)
2022-09-27 00:13:05 +0200matthewm_(~matthewmo@173.170.253.91) (Remote host closed the connection)
2022-09-27 00:15:08 +0200seydar(~seydar@154-27-113-252.starry-inc.net)
2022-09-27 00:16:20 +0200zeenk(~zeenk@2a02:2f04:a311:2d00:6865:d863:4c93:799f) (Quit: Konversation terminated!)
2022-09-27 00:19:41 +0200seydar(~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 244 seconds)
2022-09-27 00:22:29 +0200rockymarine(~rocky@user/rockymarine)
2022-09-27 00:24:03 +0200moonsheep(~user@user/moonsheep) (ERC 5.4 (IRC client for GNU Emacs 28.2))
2022-09-27 00:25:40 +0200 <DigitalKiwi> https://www.stephendiehl.com/llvm/#chapter-2-parser-and-ast
2022-09-27 00:25:43 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-09-27 00:26:24 +0200 <DigitalKiwi> david: ^
2022-09-27 00:29:09 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-09-27 00:30:17 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 250 seconds)
2022-09-27 00:31:04 +0200seydar(~seydar@154-27-113-252.starry-inc.net)
2022-09-27 00:32:29 +0200ec_(~ec@gateway/tor-sasl/ec)
2022-09-27 00:32:37 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 258 seconds)
2022-09-27 00:32:52 +0200acidjnk(~acidjnk@p200300d6e7137a2928215a7bf170f917.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
2022-09-27 00:33:48 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 265 seconds)
2022-09-27 00:36:14 +0200waleee(~waleee@h-176-10-137-138.NA.cust.bahnhof.se)
2022-09-27 00:36:38 +0200matijja(~matijja@193.77.181.201) (Quit: ZNC 1.8.2 - https://znc.in)
2022-09-27 00:37:23 +0200matijja(~matijja@193.77.181.201)
2022-09-27 00:45:57 +0200 <EvanR> that particular form is also pretty easy to parse without anything particularly haskell
2022-09-27 00:46:19 +0200 <EvanR> so might not be the best haskellbrag
2022-09-27 00:52:44 +0200 <EvanR> david, https://paste.tomsmeding.com/QrOFVuj3
2022-09-27 00:54:08 +0200eL_Bart0-(eL_Bart0@dietunichtguten.org) (Ping timeout: 268 seconds)
2022-09-27 00:54:15 +0200dr_merijn(~merijn@86-86-29-250.fixed.kpn.net)
2022-09-27 00:55:02 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
2022-09-27 00:55:39 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643)
2022-09-27 00:57:48 +0200 <DigitalKiwi> 16 lines nice
2022-09-27 00:58:09 +0200 <DigitalKiwi> now make that comment a docstring so it's testable lol
2022-09-27 01:00:49 +0200 <DigitalKiwi> https://mostlyabsurd.com/files/2022-09-26-180012_1062x622_scrot.png why're there spaces EvanR :(
2022-09-27 01:01:47 +0200justsomeguy(~justsomeg@user/justsomeguy) (Quit: WeeChat 3.5)
2022-09-27 01:02:40 +0200 <DigitalKiwi> " remove white space
2022-09-27 01:02:40 +0200 <DigitalKiwi> :nnoremap <silent> <F5> :let _s=@/ <Bar> :%s/\s\+$//e <Bar> :let @/=_s <Bar> :nohl <Bar> :unlet _s <CR>
2022-09-27 01:02:53 +0200eL_Bart0(eL_Bart0@dietunichtguten.org)
2022-09-27 01:02:55 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-09-27 01:04:18 +0200 <DigitalKiwi> boo
2022-09-27 01:04:20 +0200 <DigitalKiwi> bin/david.hs:8:27: error: Illegal lambda-case (use LambdaCase)
2022-09-27 01:07:24 +0200 <EvanR> you didn't think it would actually run did you!
2022-09-27 01:07:51 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 260 seconds)
2022-09-27 01:07:53 +0200 <EvanR> (LambdaCase isn't a default extension yet?)
2022-09-27 01:08:00 +0200 <DigitalKiwi> i had faith in you
2022-09-27 01:08:20 +0200 <geekosaur> probably in ghc2021
2022-09-27 01:09:43 +0200 <DigitalKiwi> i will make it run https://markkarpov.com/tutorial/megaparsec.html
2022-09-27 01:10:56 +0200Guest73(~Guest73@p200300ef9718354c66b84bdd01ed06f1.dip0.t-ipconnect.de) (Quit: Client closed)
2022-09-27 01:10:57 +0200chexum(~quassel@gateway/tor-sasl/chexum) (Ping timeout: 258 seconds)
2022-09-27 01:11:48 +0200chexum(~quassel@gateway/tor-sasl/chexum)
2022-09-27 01:16:21 +0200 <EvanR> oh uh, use the parser by uttering > parseTest david "f(a, g(c, d), e)" at ghci
2022-09-27 01:17:39 +0200__monty__(~toonn@user/toonn) (Quit: leaving)
2022-09-27 01:17:39 +0200 <EvanR> oh
2022-09-27 01:17:49 +0200 <EvanR> Parser isn't even defined in megaparsec...
2022-09-27 01:17:52 +0200 <EvanR> nevermind
2022-09-27 01:17:57 +0200 <EvanR> YMMV
2022-09-27 01:19:59 +0200turlando(~turlando@user/turlando) (Read error: Connection reset by peer)
2022-09-27 01:20:29 +0200 <geekosaur> I think it's ParsecM and a bunch of extra stuff so it can handle various kinds of streams
2022-09-27 01:21:02 +0200 <EvanR> I have this to make it run: type Parser = Parsec Void String
2022-09-27 01:22:18 +0200perrierjouet(~perrier-j@modemcable048.127-56-74.mc.videotron.ca) (Quit: WeeChat 3.6)
2022-09-27 01:24:46 +0200turlando(~turlando@user/turlando)
2022-09-27 01:24:51 +0200rockymarine(~rocky@user/rockymarine) (Ping timeout: 248 seconds)
2022-09-27 01:24:59 +0200emmanuelux(~emmanuelu@2a01cb0000f393002cc82f80b6cb62ad.ipv6.abo.wanadoo.fr)
2022-09-27 01:25:29 +0200perrierjouet(~perrier-j@modemcable048.127-56-74.mc.videotron.ca)
2022-09-27 01:28:23 +0200dr_merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 252 seconds)
2022-09-27 01:32:22 +0200 <ski> > "\^@\^[\^\\^]\^^\^_"
2022-09-27 01:32:24 +0200 <lambdabot> "\NUL\ESC\FS\GS\RS\US"
2022-09-27 01:32:25 +0200 <ski> > '\^?'
2022-09-27 01:32:27 +0200 <lambdabot> <hint>:1:4: error:
2022-09-27 01:32:27 +0200 <lambdabot> lexical error in string/character literal at character '?'
2022-09-27 01:33:10 +0200 <monochrom> ^_^
2022-09-27 01:33:20 +0200 <monochrom> \^_^/
2022-09-27 01:34:42 +0200seydar(~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 265 seconds)
2022-09-27 01:36:27 +0200srk(~sorki@user/srk) (Ping timeout: 252 seconds)
2022-09-27 01:37:51 +0200srk(~sorki@user/srk)
2022-09-27 01:39:08 +0200jmorris(uid537181@id-537181.uxbridge.irccloud.com)
2022-09-27 01:40:28 +0200emmanuelux(~emmanuelu@2a01cb0000f393002cc82f80b6cb62ad.ipv6.abo.wanadoo.fr) (Quit: au revoir)
2022-09-27 01:40:53 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-09-27 01:42:01 +0200 <DigitalKiwi> https://mostlyabsurd.com/files/david.hs
2022-09-27 01:43:47 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 252 seconds)
2022-09-27 01:44:10 +0200rockymarine(~rocky@user/rockymarine)
2022-09-27 01:45:20 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 265 seconds)
2022-09-27 01:46:32 +0200seydar(~seydar@154-27-113-252.starry-inc.net)
2022-09-27 01:48:08 +0200 <DigitalKiwi> curl -sO https://mostlyabsurd.com/files/david.hs && nix-shell david.hs
2022-09-27 01:48:08 +0200 <DigitalKiwi> MkTree 'f' [MkTree 'a' [],MkTree 'g' [MkTree 'c' [],MkTree 'd' []],MkTree 'e' []]
2022-09-27 01:49:12 +0200rockymarine(~rocky@user/rockymarine) (Ping timeout: 265 seconds)
2022-09-27 01:49:38 +0200ellensol(~ellen@178-78-210-152.customers.ownit.se) (Ping timeout: 268 seconds)
2022-09-27 01:49:48 +0200rockymarine(~rocky@user/rockymarine)
2022-09-27 01:50:59 +0200seydar(~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 248 seconds)
2022-09-27 01:52:03 +0200 <EvanR> DigitalKiwi, well that was simple
2022-09-27 01:53:10 +0200burnsidesLlama(~burnsides@119247164140.ctinets.com)
2022-09-27 02:03:08 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-09-27 02:03:10 +0200seydar(~seydar@154-27-113-252.starry-inc.net)
2022-09-27 02:04:59 +0200mmhat(~mmh@p200300f1c710d3a5ee086bfffe095315.dip0.t-ipconnect.de) (Quit: WeeChat 3.6)
2022-09-27 02:05:31 +0200ubert1(~Thunderbi@178.165.197.10.wireless.dyn.drei.com)
2022-09-27 02:06:46 +0200ubert(~Thunderbi@178.115.76.1.wireless.dyn.drei.com) (Ping timeout: 260 seconds)
2022-09-27 02:06:46 +0200ubert1ubert
2022-09-27 02:07:40 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
2022-09-27 02:07:48 +0200burnsidesLlama(~burnsides@119247164140.ctinets.com) (Remote host closed the connection)
2022-09-27 02:08:33 +0200waleee(~waleee@h-176-10-137-138.NA.cust.bahnhof.se) (Ping timeout: 265 seconds)
2022-09-27 02:08:36 +0200nate3(~nate@98.45.169.16)
2022-09-27 02:08:43 +0200Midjak(~Midjak@82.66.147.146) (Quit: This computer has gone to sleep)
2022-09-27 02:09:11 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-09-27 02:09:15 +0200ellensol(~ellen@178-78-210-152.customers.ownit.se)
2022-09-27 02:09:45 +0200waleee(~waleee@h-176-10-137-138.NA.cust.bahnhof.se)
2022-09-27 02:10:30 +0200haxcpuay
2022-09-27 02:13:32 +0200 <DigitalKiwi> boo doctest doesn't find megaparsec
2022-09-27 02:13:46 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 260 seconds)
2022-09-27 02:13:46 +0200ellensol(~ellen@178-78-210-152.customers.ownit.se) (Ping timeout: 260 seconds)
2022-09-27 02:16:06 +0200nate3(~nate@98.45.169.16) (Ping timeout: 260 seconds)
2022-09-27 02:17:34 +0200 <DigitalKiwi> https://github.com/haskellari/cabal-doctest/blob/master/README.md#copyright
2022-09-27 02:17:44 +0200 <DigitalKiwi> (really the last #note)
2022-09-27 02:18:00 +0200 <EvanR> now set up continuous integration
2022-09-27 02:19:29 +0200 <DigitalKiwi> i haven't figured out the nix shell bit yet lol
2022-09-27 02:19:37 +0200wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-09-27 02:19:37 +0200wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-09-27 02:19:37 +0200wroathe(~wroathe@user/wroathe)
2022-09-27 02:21:04 +0200zebrag(~chris@user/zebrag) (Quit: Konversation terminated!)
2022-09-27 02:21:13 +0200euandreh(~euandreh@179.214.113.107) (Ping timeout: 250 seconds)
2022-09-27 02:21:39 +0200euandreh(~euandreh@179.214.113.107)
2022-09-27 02:22:04 +0200rockymarine(~rocky@user/rockymarine) (Ping timeout: 265 seconds)
2022-09-27 02:24:02 +0200rockymarine(~rocky@user/rockymarine)
2022-09-27 02:28:50 +0200rockymarine(~rocky@user/rockymarine) (Ping timeout: 265 seconds)
2022-09-27 02:29:34 +0200dcoutts_(~duncan@host86-151-44-255.range86-151.btcentralplus.com)
2022-09-27 02:29:55 +0200beteigeuze(~Thunderbi@a79-169-109-107.cpe.netcabo.pt)
2022-09-27 02:31:03 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-09-27 02:31:57 +0200dcoutts(~duncan@host86-151-44-255.range86-151.btcentralplus.com) (Ping timeout: 244 seconds)
2022-09-27 02:34:32 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-09-27 02:38:25 +0200beteigeuze(~Thunderbi@a79-169-109-107.cpe.netcabo.pt) (Ping timeout: 252 seconds)
2022-09-27 02:41:11 +0200burnsidesLlama(~burnsides@119247164140.ctinets.com)
2022-09-27 02:42:15 +0200rockymarine(~rocky@user/rockymarine)
2022-09-27 02:44:20 +0200Guest5033(~Guest50@192.182.150.125)
2022-09-27 02:46:47 +0200burnsidesLlama(~burnsides@119247164140.ctinets.com) (Ping timeout: 250 seconds)
2022-09-27 02:47:33 +0200 <Guest5033> What's the best way to use the actor model in Haskell? Should I use a package (e.g. simple-actors) that offers built-in actor functionality, or should I just use concurrency primitives (e.g. MVars) to implement actors myself?
2022-09-27 02:47:41 +0200rockymarine(~rocky@user/rockymarine) (Ping timeout: 265 seconds)
2022-09-27 02:50:37 +0200rockymarine(~rocky@user/rockymarine)
2022-09-27 02:50:46 +0200DigitalKiwiwould think the best way to use the actor model in haskell is to not
2022-09-27 02:51:14 +0200 <DigitalKiwi> more cheekily: use scalaz with akka? lol
2022-09-27 02:52:00 +0200 <DigitalKiwi> oof https://hackage.haskell.org/package/hakka
2022-09-27 02:52:15 +0200Guest73(~Guest73@p200300ef9718354c66b84bdd01ed06f1.dip0.t-ipconnect.de)
2022-09-27 02:52:40 +0200Guest73(~Guest73@p200300ef9718354c66b84bdd01ed06f1.dip0.t-ipconnect.de) (Client Quit)
2022-09-27 02:52:43 +0200 <DigitalKiwi> https://hackage.haskell.org/package/stm-actor
2022-09-27 02:57:25 +0200machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 246 seconds)
2022-09-27 03:00:08 +0200 <Guest5033> What's the case against the actor model? Is it that STM makes it safe to share data between threads?
2022-09-27 03:02:12 +0200 <geekosaur> mostly that it's OOish and Haskell doesn't really do OO
2022-09-27 03:04:16 +0200 <DigitalKiwi> do you need actors or do you want actors because that's what you're used to
2022-09-27 03:04:53 +0200 <Guest5033> My use case is this:
2022-09-27 03:05:46 +0200 <EvanR> the async library is pretty cool
2022-09-27 03:05:49 +0200 <EvanR> if you wanna be practical
2022-09-27 03:05:58 +0200 <EvanR> but just threads and mvars can do a lot too
2022-09-27 03:06:33 +0200 <Guest5033> 1. fetch website data from several URLs at once using several threads
2022-09-27 03:06:34 +0200 <Guest5033> 2. store an index of data from already-visited URLs
2022-09-27 03:06:43 +0200 <EvanR> if you can find a precise definition of actor model that would also be cool
2022-09-27 03:06:48 +0200mvk(~mvk@2607:fea8:5ce3:8500::778c)
2022-09-27 03:07:50 +0200 <DigitalKiwi> https://ghcmutterings.wordpress.com/2010/08/20/parallel-programming-in-haskell-with-explicit-futur…
2022-09-27 03:08:07 +0200gurkenglas(~gurkengla@p548ac72e.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2022-09-27 03:08:45 +0200 <DigitalKiwi> brb coding a futures trading bot with futures
2022-09-27 03:10:28 +0200 <DigitalKiwi> https://www.cs.tufts.edu/~nr/cs257/archive/simon-peyton-jones/contracts.pdf
2022-09-27 03:10:38 +0200albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
2022-09-27 03:10:57 +0200jero98772(~jero98772@2800:484:1d80:d8ce:3490:26c5:1782:da8c)
2022-09-27 03:10:58 +0200 <EvanR> Guest5033, that's pretty easy to do with just threads, the async library, or whatever
2022-09-27 03:11:09 +0200 <EvanR> note, haskell threads, not pthreads
2022-09-27 03:11:13 +0200 <DigitalKiwi> https://web.archive.org/web/20130814194431/http://contracts.scheming.org/
2022-09-27 03:11:34 +0200Guest5033(~Guest50@192.182.150.125) (Quit: Client closed)
2022-09-27 03:12:21 +0200xff0x(~xff0x@2405:6580:b080:900:5a06:dee8:84af:56be) (Ping timeout: 250 seconds)
2022-09-27 03:15:17 +0200dsrt^(~dsrt@173-160-76-137-atlanta.hfc.comcastbusiness.net) (Remote host closed the connection)
2022-09-27 03:16:45 +0200albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8)
2022-09-27 03:17:49 +0200caryhartline(~caryhartl@2600:1700:2d0:8d30:1160:bb30:e810:5f52)
2022-09-27 03:17:53 +0200burnsidesLlama(~burnsides@119247164140.ctinets.com)
2022-09-27 03:22:25 +0200burnsidesLlama(~burnsides@119247164140.ctinets.com) (Ping timeout: 252 seconds)
2022-09-27 03:25:07 +0200kimjetwav(~user@2607:fea8:235e:b600:14cc:4122:217e:1d45)
2022-09-27 03:25:15 +0200dr_merijn(~merijn@86.86.29.250)
2022-09-27 03:30:01 +0200off^(~off@173-160-76-137-atlanta.hfc.comcastbusiness.net)
2022-09-27 03:31:12 +0200ddellacosta(~ddellacos@143.244.47.90)
2022-09-27 03:38:50 +0200jinsun__(~jinsun@user/jinsun)
2022-09-27 03:38:50 +0200jinsun(~jinsun@user/jinsun) (Killed (zirconium.libera.chat (Nickname regained by services)))
2022-09-27 03:38:50 +0200jinsun__jinsun
2022-09-27 03:39:05 +0200nahcetan(~nate@98.45.169.16) (Read error: Connection reset by peer)
2022-09-27 03:39:42 +0200natechan(~nate@98.45.169.16)
2022-09-27 03:40:59 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 265 seconds)
2022-09-27 03:40:59 +0200natechan(~nate@98.45.169.16) (Read error: Connection reset by peer)
2022-09-27 03:41:36 +0200natechan(~nate@98.45.169.16)
2022-09-27 03:42:52 +0200Me-me(~me-me@user/me-me) (Quit: Disconnecting on purpose.)
2022-09-27 03:43:19 +0200natechan(~nate@98.45.169.16) (Read error: Connection reset by peer)
2022-09-27 03:43:23 +0200Me-me(~me-me@tunnel690570-pt.tunnel.tserv12.mia1.ipv6.he.net)
2022-09-27 03:43:28 +0200neightchan(~nate@98.45.169.16)
2022-09-27 03:44:52 +0200Me-me(~me-me@tunnel690570-pt.tunnel.tserv12.mia1.ipv6.he.net) (Changing host)
2022-09-27 03:44:52 +0200Me-me(~me-me@user/me-me)
2022-09-27 03:49:02 +0200burnsidesLlama(~burnsides@119247164140.ctinets.com)
2022-09-27 03:49:56 +0200caryhartline(~caryhartl@2600:1700:2d0:8d30:1160:bb30:e810:5f52) (Quit: caryhartline)
2022-09-27 03:50:02 +0200xstill_(xstill@fimu/xstill) (Ping timeout: 265 seconds)
2022-09-27 03:51:20 +0200xff0x(~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp)
2022-09-27 03:53:35 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 252 seconds)
2022-09-27 03:54:08 +0200burnsidesLlama(~burnsides@119247164140.ctinets.com) (Ping timeout: 268 seconds)
2022-09-27 03:54:59 +0200TonyStone(~TonyStone@2603-7080-8607-c36a-cc48-2eb7-9785-f03a.res6.spectrum.com) (Quit: Leaving)
2022-09-27 03:57:32 +0200xstill_(xstill@fimu/xstill)
2022-09-27 03:57:53 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2022-09-27 03:59:01 +0200dr_merijn(~merijn@86.86.29.250) (Ping timeout: 246 seconds)
2022-09-27 04:01:09 +0200rockymarine(~rocky@user/rockymarine) (Ping timeout: 265 seconds)
2022-09-27 04:04:00 +0200cyphase(~cyphase@user/cyphase) (Ping timeout: 264 seconds)
2022-09-27 04:06:12 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-09-27 04:09:07 +0200cyphase(~cyphase@user/cyphase)
2022-09-27 04:09:11 +0200frost(~frost@user/frost)
2022-09-27 04:09:33 +0200zmt00(~zmt00@user/zmt00) (Read error: Connection reset by peer)
2022-09-27 04:10:44 +0200zmt00(~zmt00@user/zmt00)
2022-09-27 04:15:42 +0200TonyStone(~TonyStone@2603-7080-8607-c36a-cc48-2eb7-9785-f03a.res6.spectrum.com)
2022-09-27 04:15:43 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 258 seconds)
2022-09-27 04:17:03 +0200td_(~td@muedsl-82-207-238-079.citykom.de) (Ping timeout: 268 seconds)
2022-09-27 04:18:35 +0200srk-(~sorki@user/srk)
2022-09-27 04:18:50 +0200td_(~td@muedsl-82-207-238-071.citykom.de)
2022-09-27 04:20:23 +0200off^(~off@173-160-76-137-atlanta.hfc.comcastbusiness.net) (Ping timeout: 250 seconds)
2022-09-27 04:20:43 +0200srk(~sorki@user/srk) (Ping timeout: 252 seconds)
2022-09-27 04:21:06 +0200srk-srk
2022-09-27 04:21:44 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
2022-09-27 04:21:44 +0200finn_elija(~finn_elij@user/finn-elija/x-0085643)
2022-09-27 04:21:44 +0200finn_elijaFinnElija
2022-09-27 04:22:16 +0200off^(~off@173-160-76-137-atlanta.hfc.comcastbusiness.net)
2022-09-27 04:24:40 +0200Ristovski(~Ristovski@hellomouse/perf/ristovski) (Remote host closed the connection)
2022-09-27 04:25:37 +0200Ristovski(~Ristovski@hellomouse/perf/ristovski)
2022-09-27 04:26:37 +0200luffy(~chenqisu1@183.217.203.170)
2022-09-27 04:26:46 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-09-27 04:27:59 +0200nate3(~nate@98.45.169.16)
2022-09-27 04:34:30 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
2022-09-27 04:36:19 +0200jero98772(~jero98772@2800:484:1d80:d8ce:3490:26c5:1782:da8c) (Ping timeout: 248 seconds)
2022-09-27 04:39:49 +0200jero98772(~jero98772@2800:484:1d80:d8ce:dac1:63d7:4353:6597)
2022-09-27 04:46:11 +0200king_gs(~Thunderbi@187.201.192.184)
2022-09-27 04:47:55 +0200chexum(~quassel@gateway/tor-sasl/chexum) (Ping timeout: 258 seconds)
2022-09-27 04:48:14 +0200chexum(~quassel@gateway/tor-sasl/chexum)
2022-09-27 04:50:06 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 260 seconds)
2022-09-27 05:00:01 +0200TonyStone(~TonyStone@2603-7080-8607-c36a-cc48-2eb7-9785-f03a.res6.spectrum.com) (Ping timeout: 260 seconds)
2022-09-27 05:02:18 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-09-27 05:03:25 +0200ddellacosta(~ddellacos@143.244.47.90) (Ping timeout: 246 seconds)
2022-09-27 05:05:27 +0200king_gs(~Thunderbi@187.201.192.184) (Read error: Connection reset by peer)
2022-09-27 05:05:44 +0200king_gs(~Thunderbi@2806:103e:29:ac5e:a16e:4ac9:a89b:4d)
2022-09-27 05:05:50 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-09-27 05:06:53 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 265 seconds)
2022-09-27 05:07:01 +0200waleee(~waleee@h-176-10-137-138.NA.cust.bahnhof.se) (Ping timeout: 260 seconds)
2022-09-27 05:07:57 +0200jero98772(~jero98772@2800:484:1d80:d8ce:dac1:63d7:4353:6597) (Remote host closed the connection)
2022-09-27 05:10:04 +0200king_gs(~Thunderbi@2806:103e:29:ac5e:a16e:4ac9:a89b:4d) (Ping timeout: 246 seconds)
2022-09-27 05:10:40 +0200TonyStone(~TonyStone@2603-7080-8607-c36a-cc48-2eb7-9785-f03a.res6.spectrum.com)
2022-09-27 05:14:51 +0200rockymarine(~rocky@user/rockymarine)
2022-09-27 05:16:43 +0200seydar(~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 250 seconds)
2022-09-27 05:18:01 +0200Guest3352(~Guest33@pool-108-50-195-90.nwrknj.fios.verizon.net)
2022-09-27 05:19:26 +0200Guest3352(~Guest33@pool-108-50-195-90.nwrknj.fios.verizon.net) (Client Quit)
2022-09-27 05:21:26 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-09-27 05:25:30 +0200crns(~netcrns@user/crns) (Quit: brb)
2022-09-27 05:25:48 +0200crns(~netcrns@p4ff5e2e3.dip0.t-ipconnect.de)
2022-09-27 05:25:48 +0200crns(~netcrns@p4ff5e2e3.dip0.t-ipconnect.de) (Changing host)
2022-09-27 05:25:48 +0200crns(~netcrns@user/crns)
2022-09-27 05:39:45 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 265 seconds)
2022-09-27 05:41:09 +0200king_gs(~Thunderbi@187.201.192.184)
2022-09-27 05:42:04 +0200luffy(~chenqisu1@183.217.203.170) (Remote host closed the connection)
2022-09-27 05:42:45 +0200luffy(~chenqisu1@183.217.203.170)
2022-09-27 05:43:00 +0200nate3(~nate@98.45.169.16) (Ping timeout: 264 seconds)
2022-09-27 05:44:23 +0200Vajb(~Vajb@2001:999:504:1841:9e47:1ec7:a52e:1d57) (Read error: Connection reset by peer)
2022-09-27 05:44:40 +0200Vajb(~Vajb@hag-jnsbng11-58c3a5-27.dhcp.inet.fi)
2022-09-27 05:46:47 +0200seydar(~seydar@154-27-113-252.starry-inc.net)
2022-09-27 05:53:49 +0200 <Clinton[m]> What is `f` called below:... (full message at <https://libera.ems.host/_matrix/media/r0/download/libera.chat/ac6545487e2b0848620e62e9f87aa0c9fe37…>)
2022-09-27 05:55:44 +0200dr_merijn(~merijn@86-86-29-250.fixed.kpn.net)
2022-09-27 05:55:57 +0200 <Clinton[m]> Looks like https://hackage.haskell.org/package/rank2classes-1.4.4/docs/Rank2.html actually. Anything more standard than this?
2022-09-27 05:56:49 +0200 <pavonia> That's a strange type. What would a concrete instance of that look like?
2022-09-27 05:58:26 +0200 <[Leary]> Clinton[m]: Do you mean (forall a. f a -> g a)? It's a flavour of higher order functor that's used here and there, but I'm not sure about what packages provide it. Hoogle's giving me hmap from HFunctor in functor-combinators.
2022-09-27 05:58:42 +0200silph(~silph@67-208-31-162.ip.tor.radiant.net)
2022-09-27 05:59:35 +0200 <silph> hi. i'd like to ask a subjective question, not a technical question, that asks about people's personal experiences when learning their first functional language. am i allowed to ask such subjective questions here?
2022-09-27 06:01:11 +0200 <jackdk> Clinton[m]: I've seen it in rank2classes, conkin, hkd, barbies, maybe others. Not sure if there's a canonical version.
2022-09-27 06:01:42 +0200 <Clinton[m]> s/b/a/
2022-09-27 06:01:57 +0200 <Clinton[m]> [Leary]: Whoops I do mean `f a -> g a`
2022-09-27 06:02:27 +0200 <johnw> silph: we do prefer Haskell-related questions
2022-09-27 06:02:28 +0200 <Clinton[m]> jackdk: is there anywhere that allows me to derive it via generic? Or is that impossible in general?
2022-09-27 06:03:20 +0200 <silph> johnw do you have a suggestion of a place more appropriate to ask about learning FP languages in general?
2022-09-27 06:03:35 +0200 <silph> (i tried the Functional Programming discord, but that wasn't an appropriate place)
2022-09-27 06:03:44 +0200 <Clinton[m]> silph: johnw definition of "we" is an unusual one as it doesn't include myself
2022-09-27 06:03:57 +0200 <johnw> Clinton[m]: channel ops
2022-09-27 06:04:09 +0200 <johnw> silph: I might recommend https://www.reddit.com/r/functionalprogramming/
2022-09-27 06:04:24 +0200luffy(~chenqisu1@183.217.203.170) (Ping timeout: 265 seconds)
2022-09-27 06:04:35 +0200 <jackdk> Clinton[m]: rank2classes has TH for them, hkd has a `gftraverse` which can get you `FTraversable` which can then get you `FFunctor` and `FFoldable` via `ffmapDefault` and `ffoldMapDefault`
2022-09-27 06:05:19 +0200 <Clinton[m]> jackdk: I'll try `hkd`. Template Haskell scares me. I prefer Generic. Thanks!
2022-09-27 06:05:28 +0200 <pavonia> silph: There's also ##programming for general programming related questons
2022-09-27 06:05:31 +0200 <silph> johnw i worry that reddit would be even more hostile to "chit chat" anecdote / personal-experience / subjective questions! i get the feeling that reddit really only wants technical questions. what do you think?
2022-09-27 06:06:28 +0200 <silph> i think what i'm hoping for is a place where i can talk about the human / emotional side of learning programming. that is, there are a lot of places to get technical discussion, but i'm having toruble finding places to talk about personal / emotional discussion related to learning programming (and FP in general)
2022-09-27 06:06:40 +0200 <johnw> silph: sadly, there is that risk
2022-09-27 06:07:00 +0200 <Clinton[m]> silph: I didn't realise this channel wasn't a fan of general functional programming language questions (as Haskell is the most used functional programming language) but Reddit is usually good for such chit chat questions anyway. You could try the /haskell reddit also.
2022-09-27 06:08:13 +0200 <silph> Clinton[m] i might risk trying to ask on /haskell . i'm worried about getting aggressive responses from people who only expect technical discussion and hate any vulnerability in talks. but on the other hand, i've read Haskell blogs that /do/ talk openly about their frustrations / surprise / failures in their own explorations -- which i enjoy!
2022-09-27 06:08:36 +0200 <johnw> well, I will answer your question if you post it there, silph, maybe that will help set the tone
2022-09-27 06:08:53 +0200 <silph> okay. i'll ask, and if it's inappropriate for this channel, you can let me know.
2022-09-27 06:10:11 +0200 <sm> silph: you could try the haskell matrix room, it's quieter than here.
2022-09-27 06:11:07 +0200 <silph> my question is basically: "tell me about how difficult it was for you to learn your first FP language. how much did you have to struggle?". my background is that i'm feeling extremely humbled when tryign to learn Haskell. part of it is that early resources were written in a way too advanced (or too unclear) for me to easily understand. now that
2022-09-27 06:11:07 +0200 <silph> i've found better resources, i'm realizing that i'm far from being a mathematically clever person. i'm /struggling/. it takes me 10 minutes to decipher many paragraphs that authors seem to think are trivial to understand -- i have to make diagrams on paper, etc.
2022-09-27 06:11:14 +0200burnsidesLlama(~burnsides@119247164140.ctinets.com)
2022-09-27 06:11:35 +0200 <sm> we get this kind of question on the haskell reddit all the time, no big deal
2022-09-27 06:11:38 +0200 <jackdk> On /r/haskell, I'd much prefer to read an interesting discussion about learning than yet another *ill-posed* question from someone trying to finish an assignment at the last minute. (I have no problem with beginner or even homework questions, provided there's real effort spent and not "please do my work for me")
2022-09-27 06:11:50 +0200 <johnw> Haskell does require a bit of a mental shift; it was very hard for me, when I came from C
2022-09-27 06:11:52 +0200 <silph> so, my question is quite broad, but it has to do with feeling struggle when learning FP languages. what encourages you to keep up the struggle?
2022-09-27 06:12:13 +0200 <johnw> Not all of us did keep up with the struggle. I quit on Haskell twice before trying the third time.
2022-09-27 06:12:18 +0200 <silph> @sm (also, what is a "haskell matrix room"? i'm new to IRC, so maybe that's why i don't know)
2022-09-27 06:12:18 +0200lambdabotactivates her slap-o-matic...
2022-09-27 06:12:39 +0200 <silph> @johnw : do you remember what made it so hard for you, and then what helped you push the third time?
2022-09-27 06:12:39 +0200 <lambdabot> Not enough privileges
2022-09-27 06:12:44 +0200 <sm> same here, I bounced off haskell multiple times (getting a bit further each time)
2022-09-27 06:13:04 +0200 <johnw> silph: everything "math" was completely foreign to me; I pushed the third time just because of how much fun my friend kept saying they were having
2022-09-27 06:13:08 +0200 <monochrom> My first FP language was Lisp and it was easy for me, "finally something that makes sense".
2022-09-27 06:13:35 +0200 <johnw> thinking "without iteration" is also hard at first
2022-09-27 06:13:42 +0200 <sm> silph: matrix is a newer chat system, it'll be linked on haskell.org
2022-09-27 06:13:47 +0200 <johnw> I didn't know what to do without a for loop, and I'd never relied on recursion before
2022-09-27 06:13:54 +0200 <silph> @johnw it seems that h aving friends (or patient and welcoming people) might help. i've found that the haskell community tends to be more patient than other communities, when answering my tehcnical questions.
2022-09-27 06:13:54 +0200 <lambdabot> Not enough privileges
2022-09-27 06:13:56 +0200 <johnw> plus, variables
2022-09-27 06:14:20 +0200 <jackdk> I blew through the initial stuff my university showed me (after a previous course had already taught recursion etc), and then stalled *hard* on "ok but how do I write a complete program?" I have definitely spent a lot of time working through evaluations on paper, drawing diagrams, etc. That's just what I have to do in order to shift my brain into the correct gear
2022-09-27 06:14:22 +0200 <johnw> btw, we use "johnw: " on IRC, not @johnw. You're making me think that I have my op hat on :)
2022-09-27 06:14:47 +0200 <monochrom> More specifically I was happy that it has recursion and it frees me from the chore of malloc and free.
2022-09-27 06:14:54 +0200 <silph> (oh, what is the connotation when i use the at sign?)
2022-09-27 06:15:08 +0200ChanServ+o johnw
2022-09-27 06:15:12 +0200 <johnw> this is my with an @ sign
2022-09-27 06:15:15 +0200 <johnw> me*
2022-09-27 06:15:18 +0200 <sm> silph: having mentors on chat really helps, in person mentors / user group helps even more
2022-09-27 06:15:24 +0200johnw-o johnw
2022-09-27 06:16:01 +0200 <jackdk> Why did I stick with Haskell? I wanted types and purity, because it makes thinking about larger problems so much easier, and that was worth the effort.
2022-09-27 06:16:19 +0200 <silph> i tried learnign from teh wikibook, and stopped about 80 pages in. i tried Learn You a Haskell for Great Good, and also stopped with that. i'm having more success with two certain textbooks, though, as of a week ago.
2022-09-27 06:16:27 +0200 <johnw> in short, silph, I would say that it shouldn't discourage you at all to be having great difficulties. You are in good in that regard. Rather, it means that the surmounting of those difficulties will be especially sweet, if you keep at it.
2022-09-27 06:16:34 +0200burnsidesLlama(~burnsides@119247164140.ctinets.com) (Ping timeout: 246 seconds)
2022-09-27 06:16:42 +0200 <johnw> in good company*
2022-09-27 06:16:43 +0200 <silph> sm: can you tell me what a "user group" is?
2022-09-27 06:17:36 +0200 <sm> I meant an in person gathering , also called meetup. Might be less common now, unless you start one
2022-09-27 06:17:37 +0200 <silph> johnw: i am enjoying when i feel like i'm learning a new concept. in my studying today, i feel like i actually understood Partial Application and Currying more than before; my understanding felt vague and fragile before.
2022-09-27 06:18:07 +0200 <silph> sm: i didn't think that it might be possible for peopel to want to meet in person to talk about Haskell programming, outside of a big conference!
2022-09-27 06:18:11 +0200 <johnw> My understanding of Monads and Applicatives was vague and fragile for maybe a year
2022-09-27 06:18:43 +0200 <silph> jackdk: you mentioned that your Uni information on FProgramming was easy, but when you tried to make a "real program", you stalled.
2022-09-27 06:18:48 +0200 <silph> i wonder if this is quite common when learning Haskell.
2022-09-27 06:19:04 +0200 <sm> silph: try searching meetup.com for something in your area (or online, even; but these chat rooms are like a 24/7 meetup anyway)
2022-09-27 06:19:33 +0200 <silph> i would like to ask a related question for those who program for a living: how do you find time to learn new programming frameworks or programming langauges?
2022-09-27 06:19:44 +0200 <silph> i imagine having a family (for example) would take up a lot of your mental energy.
2022-09-27 06:20:39 +0200 <sm> you learn a bit at a time, usually while doing something for work or fun. You (try to) balance it with other demands...
2022-09-27 06:20:59 +0200 <silph> when i tried reading a book on Java Concurrency, i was able to do it, but i literally had to spend about 15 minutes /per page/. (aside: i can't tell if writing multithreaded java programs actually is as much of a nightmare as it seems to me -- the book didn't admit that it was difficult! -- or if i'm just not smart enough to do so!). i can't
2022-09-27 06:21:00 +0200 <silph> imagine what a Full Time worker would do , trying to learn Java Concurrency /on top/ of their other duties..
2022-09-27 06:21:08 +0200 <sm> there's other ways too. Your job might provide training or fund a course.
2022-09-27 06:21:15 +0200 <silph> sm: ah, that would make it easier!
2022-09-27 06:21:38 +0200 <jackdk> silph: I suspect that it is. I also stalled when trying to write large nontrivial OO programs, because scaling up from `main()` or whatever is not always obvious. For a Haskell example, I was fine with the `IO` type and its associated instances, but it took a while to hit the problems that various libraries solved, and then learn/use them properly.
2022-09-27 06:21:46 +0200 <silph> the career world of programming seems to require so, so much constant learning.
2022-09-27 06:21:54 +0200 <sm> a common mistake is to rush or try to learn too much before practice. It takes time.
2022-09-27 06:22:03 +0200 <sm> and being selective
2022-09-27 06:22:12 +0200 <silph> jackdk: it reassures me to hear you say that, in your experience, it really does take persistent effort; that these things aren't obvious to most people.
2022-09-27 06:22:33 +0200 <johnw> yes, that describes it
2022-09-27 06:22:38 +0200 <jackdk> Also, it is faster when you're learning the thing to wrangle the problem in front of you because you can "test fit" the things you are learning against a concrete problem.
2022-09-27 06:22:51 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 260 seconds)
2022-09-27 06:22:59 +0200 <silph> (i took a look at at the official Enterprise Java textbook, and literally laughed out loud to see that itw as 908 pages long, with small text size, haha. and then i'm told on the Java discord that Enterprise Java is now not in favour, and that Spring has replaced it!)
2022-09-27 06:23:21 +0200 <silph> jackdk: yeah, i can see how having a concrete problem you need to work on, will help you feel motivated.
2022-09-27 06:23:45 +0200 <jackdk> It also means the learning feels justifiable on work time.
2022-09-27 06:24:01 +0200 <silph> thanks for your perspectives. it does help encourage me to hear that mentors help, and taht it's quite normal to feel stalled or stuck at times. and that sometimes continuing to struggle and understand does pay off.
2022-09-27 06:24:36 +0200 <jackdk> I should also point out that for the gnarly parts of books, many minutes/page is quite reasonable. I am working through a maths book with a mentor and some sections were very slow going and needed a lot of pen and paper to make them sink in.
2022-09-27 06:24:38 +0200talismanick(~talismani@2601:200:c100:c9e0::24ac)
2022-09-27 06:25:00 +0200 <silph> i think my own learning of Haskell is more of a curiousity. i am looking forward to when i learn how you can write state in a langauge where pure functions are emphasised; i 'll have to wait until i get to the Monads chapter :)
2022-09-27 06:25:12 +0200 <silph> jackdk: that's also reassuring for me to hear.
2022-09-27 06:25:38 +0200 <silph> i know that i'm somewhat below average mathematical intelligence compared to the typical programmer (and especially the typical board-games-meetup attendee).
2022-09-27 06:26:00 +0200 <silph> one thing i have appreciated about the Haskell community is that (in most cases), Haskell people seem to be more patient with "stupid" questions.
2022-09-27 06:26:19 +0200 <silph> so i am reassured that even though i require extra time / effort to understand new mathematical concepts, that it's valid for me to try anyways.
2022-09-27 06:26:31 +0200 <silph> an d the successes that i've learned (as small as they are) about Haskell, have been fun.
2022-09-27 06:26:32 +0200 <johnw> I wouldn't even say it's extra
2022-09-27 06:26:47 +0200 <silph> johnw: can you elaborate?
2022-09-27 06:26:53 +0200 <johnw> I'd suggest you're overestimating others' learning pace
2022-09-27 06:27:13 +0200 <silph> you really do think a /lot/ of peopel struggle?
2022-09-27 06:27:20 +0200 <silph> (esp with their first FP language)?
2022-09-27 06:27:21 +0200 <johnw> I do
2022-09-27 06:27:52 +0200 <silph> one thing i am learning is that writing good textbooks for beginners isn't easy. it seems to tak ea lot of editting.
2022-09-27 06:28:02 +0200 <silph> i know when i was a Java tutor, i forgot what it was like to learn Java for the first time.
2022-09-27 06:28:13 +0200 <silph> very "simple" things, i didn't realize could be a problem, becuase i'm so used to it.
2022-09-27 06:28:24 +0200 <silph> (some students didn't see the difference between round and square brackets, for example)
2022-09-27 06:28:34 +0200libertyprime(~libertypr@139.80.172.131)
2022-09-27 06:29:05 +0200 <silph> i'm very grateful that between two textbooks, and IRC, i might be able to move forward at my own pace with learning Haskell.
2022-09-27 06:29:13 +0200 <monochrom> My first non-homework, unsupervised, actually-useful programs each took multiple weekends. They were in BASIC, Pascal, and C. And they were when I was at age 16 or 20 so faster than adults.
2022-09-27 06:29:33 +0200 <talismanick> Jumping straight into monads (specifically IO, which is weird in its own right) to "write programs that do things" means tackling the hard parts head-on and discarding the benefits of Haskell
2022-09-27 06:29:49 +0200 <talismanick> If anything, you'd probably get there faster and get more out of it by studying the "easy because pure" parts first and working your way up to higher abstractions
2022-09-27 06:30:02 +0200dr_merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 265 seconds)
2022-09-27 06:30:03 +0200 <silph> monochrom: so it took a lot of effort! maybe learning even an imperative programming langauge is hard at first. i had my big brother, and colourful and fun 80s books with easy examples, to help me...
2022-09-27 06:30:20 +0200 <talismanick> Combinators are pretty cool: https://www.youtube.com/watch?v=seVSlKazsNk
2022-09-27 06:30:47 +0200 <monochrom> I do not think that "I finished a Haskell textbook but I struggle with creating something useful" is any different if you s/Haskell/any language/
2022-09-27 06:31:35 +0200 <silph> monochrom: maybe i do underestimate how difficult it is to learn these skills.
2022-09-27 06:31:39 +0200 <silph> and how much persistence it takes.
2022-09-27 06:31:57 +0200 <silph> i guess it's different in school, becuase you can /see/ how difficult it is for /everyone/ (except the top 5% of students, who are geniuses...)
2022-09-27 06:32:13 +0200Vajb(~Vajb@hag-jnsbng11-58c3a5-27.dhcp.inet.fi) (Read error: Connection reset by peer)
2022-09-27 06:32:14 +0200 <talismanick> monochrom: Depends on your definition of "useful" - what would you even bikeshed over in Python or Go the way you can with higher-kinded types, GADTs, effects, etc?
2022-09-27 06:32:16 +0200 <silph> but on the internet, it's harder to guage what is "normal" about how difficult it is to learn these skills.
2022-09-27 06:32:22 +0200 <johnw> silph: very true
2022-09-27 06:32:26 +0200 <talismanick> Or Scheme
2022-09-27 06:32:48 +0200Vajb(~Vajb@2001:999:504:1841:9e47:1ec7:a52e:1d57)
2022-09-27 06:33:14 +0200 <monochrom> OK, one of the useful programs I wrote took a command line argument for a directory name, and recursed through the subdirectories to sum up file sizes.
2022-09-27 06:33:23 +0200 <silph> i'd like to ask a final question (that is more objective), with the understnading that i'm going to be MUCH more patient with myself for my struggles!
2022-09-27 06:33:34 +0200 <monochrom> Yes that "simple task" in Pascal or C took multiple weekends.
2022-09-27 06:33:41 +0200 <silph> do you find patterns of what concepts beginners find most difficult to learn in their first (say) 6 months?
2022-09-27 06:33:44 +0200 <silph> or is it quite varied?
2022-09-27 06:33:58 +0200 <silph> that is: what should i be /extra/ patient when learning, and not be surprised that it'll take me extra time to learn?
2022-09-27 06:33:59 +0200 <johnw> depends on their background
2022-09-27 06:34:18 +0200 <silph> (i have mostly a Java background, with a little bit of C and SQL -- ie , beginner stuff i learned from community college)
2022-09-27 06:34:34 +0200 <talismanick> monochrom: Well, C is a whole different matter... never used Pascal, but depending on the dialect, the ones most people think of are similarly low-level
2022-09-27 06:34:46 +0200 <monochrom> I do not expect it to be any faster in Haskell for a Haskell student "I recently finished a Haskell textbook", as much as how Haskell is simpler than Pascal and C for that task.
2022-09-27 06:36:13 +0200 <talismanick> But vs Python, Ruby, etc? By the time a book explains enough Haskell to write useful programs, books for those languages would have already delved well into examples for lack of language complexity
2022-09-27 06:36:15 +0200 <silph> monochrom: i remember some Java students' brains melting, in  my tutoring, when i showed how a for loop could access every element in an array. the idea that "myArray[i]" could do different things with each iteration was brain-melting for them.
2022-09-27 06:36:33 +0200 <silph> it took a lot of examples and letting them talk through their confusion, for some of them to eventually understand it.
2022-09-27 06:36:37 +0200 <jackdk> Recursion is often a big one I saw students struggle with. The self-reference looks like nonsense at first (like how `x = x + 1` looks like nonsense in many imperative languages, until you unlearn what the equal sign means). Whether or not people struggle with induction _while learning FP_ depends on whether they've seen it in other contexts (self-referential jokes, proof-by-induction, recursion in other langauges)
2022-09-27 06:36:48 +0200 <silph> so if something that simple takes effort, writing a full program in Pascal would take much more effort!
2022-09-27 06:37:09 +0200lisbeths(uid135845@id-135845.lymington.irccloud.com)
2022-09-27 06:37:28 +0200 <monochrom> talismanick: Then you need to see this:
2022-09-27 06:37:33 +0200 <monochrom> @quote monochrom FP.book
2022-09-27 06:37:34 +0200 <lambdabot> monochrom says: If you read a haskell book or an FP book, by chapter 5 it's already doing data structures. It's chapter 10 in imperative books.
2022-09-27 06:38:01 +0200 <silph> jackdk: i remember thinking i understood Recurision b/c of undrestanding how to do recurision-related problems in Java courses. but in the Haskell wikibook, i saw a recursion pattern that i never saw before, where an argument "accumulates" an answer. this blew my mind after i finally understood it!
2022-09-27 06:39:17 +0200 <silph> jackdk: i also needed to adjust with how important the "empty" case is for a base case. in Java, for "int factorial(int n)", i was happy to let the base case be "if (n==1)" and another base case for "(if n == 0)", becusae that made more sense to me than making my base case only for (if n ==0)".
2022-09-27 06:39:21 +0200 <talismanick> monochrom: I imagine that depends on the language used...
2022-09-27 06:39:41 +0200 <silph> jackdk: so yes, the recursion and map/foldl etc chapters in the wikibook jtook a good 5 hours for me to understand!
2022-09-27 06:40:46 +0200 <silph> thank you everyone for sharing your own perspectives and experiences. it helped put my own expectations into perspective, and encouraged me a lot!
2022-09-27 06:40:50 +0200 <johnw> silph: one thing I'd like to suggest is to avoid reaching too quickly for IO, although it will seem a natural thing coming from Java or C
2022-09-27 06:41:31 +0200 <jackdk> I wasted a lot of time trying to do things like set up top-level IORefs because I was trying to solve problems like an imperative programmer.
2022-09-27 06:42:30 +0200 <silph> johnw: i'm reading from both Hutton's book ("Programming in Haskell") and Thompson's book ("Haskell: The Craft of Functional Programmoing"). they seem to delay IO until 1/3 of the way. (i find that when one book is confusing, the other book explains the concept more clearly)
2022-09-27 06:43:06 +0200 <silph> jackdk: was it just continuing to solve problems with Haskell, that eventually taught you to think more like a functional programmer? or were there actual resources that modeled this for you?
2022-09-27 06:43:20 +0200 <talismanick> silph: Is there anything you'd like to make with Haskell? For command line programs, Turtle's a good library
2022-09-27 06:43:29 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-09-27 06:43:53 +0200 <silph> on thing i'm curious about (but won't try to learn righ tnow) is how to program in a dynamically typed language. DTLanguages scare me a LOT. but Clojure people say its joyful, and that you use the REPL a lot, and it's kind of the opposite of "write out my types and then hook them together". so i wonder how people learn these different "ways" of
2022-09-27 06:43:53 +0200 <silph> thinking, when programming?
2022-09-27 06:43:56 +0200 <talismanick> Haven't had a chance to use it yet, but gi-gtk-declarative is clean-looking
2022-09-27 06:44:20 +0200 <silph> talismanick: actually, i'm not too motivated to build things. right now, my motivation is learning that programming really can be different than C/C++/C#/Java/Python
2022-09-27 06:44:40 +0200 <talismanick> https://hackage.haskell.org/package/turtle-1.6.1/docs/Turtle-Tutorial.html
2022-09-27 06:44:53 +0200 <jackdk> I was lucky enough to get a job working in an established Haskell codebase, and that meant I could see what patterns looked like "in the large". I think that hacking on an established program is extremely useful.
2022-09-27 06:44:58 +0200 <silph> talismanick: but i do understand, from people here, that building something can be very motivating.
2022-09-27 06:45:10 +0200 <talismanick> silph: Oh, then definitely watch the talk on combinators I sent
2022-09-27 06:45:23 +0200 <silph> jackdk: lol, was that scary, jumping into a Haskell workplace without being super confident in your own abilitiy to think functionally?
2022-09-27 06:45:35 +0200 <silph> talismanick: i got it open on another Chrome tab :) i'll bookmark it.
2022-09-27 06:45:49 +0200 <silph> thought i'm not sure if i know enough Haskell to underatnd it, but i'll try watching it anyways.
2022-09-27 06:45:57 +0200 <jackdk> If you don't have an established program to hack on, I generally suggest a hack-and-slash text adventure because it usually causes a fun "build/play/extend" loop, and can scale all the way down to basic string I/O using only `base`.
2022-09-27 06:46:36 +0200 <silph> jackdk: it's funny how "build a game" can be motivating.
2022-09-27 06:46:52 +0200 <silph> in my fifth-semester class, i had to write Qbert in C++ (using very basic C++ features).
2022-09-27 06:46:53 +0200 <jackdk> When I joined that job, I'd finished Haskell Programming from First Principles and was quite comfortable thinking functionally in the small. What I didn't have was experience thinking functionally at larger scales, application design, etc. So I think I felt OK.
2022-09-27 06:46:59 +0200titibandit(~titibandi@137.226.196.215)
2022-09-27 06:47:18 +0200 <jackdk> HPFFP is a large book, and it took me many months to get through it all and do all the exercises.
2022-09-27 06:47:25 +0200 <silph> jackdk: this makes sense to me, that you had enough of the foundations ("thinking in the small") to know that you could tackle the job.
2022-09-27 06:47:28 +0200mbuf(~Shakthi@49.205.84.15)
2022-09-27 06:49:06 +0200 <silph> i'm starting to realize that actually learning how to program (even in QBASIC) is not necessasrily an easy skill, and the pathways for doing so aren't linear. it's a lot of experimentation, stop-and-start, stalling. and different resources work for different people.
2022-09-27 06:49:29 +0200 <silph> maybe my brain will slowly learn to adjust.
2022-09-27 06:50:09 +0200 <silph> (one of the things that still confuses me abotu Haskell, is when functions aren't givene type definitions. this happened sometimes in the wikibook. it was so hard for me to guess the type definition from context).
2022-09-27 06:50:20 +0200 <silph> (but maybe my  brain will get better at this after a lot of exposure)
2022-09-27 06:50:52 +0200 <jackdk> It will, but also if you don't know what type something has, you can often annotate it and see if GHC agrees with you.
2022-09-27 06:51:03 +0200seydar(~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 252 seconds)
2022-09-27 06:51:12 +0200 <silph> jackdk: thanks for the hint :)
2022-09-27 06:51:21 +0200 <monochrom> The old generation had a saying that's very damaging today. "After you've learned the first language, picking up another language is easy." NO.
2022-09-27 06:52:03 +0200 <monochrom> It was true in the 1960s when all languages you met were mimicking Algol 60. Then sure.
2022-09-27 06:52:17 +0200 <[Leary]> silph: Going back to the original question, my background is purely mathematical (without an imperative mindset to unlearn) and I still struggled learning Haskell. But it was easy to keep motivated because the mind-twisting was a joy---everything difficult was equally fun. I almost wish I could learn it all over again.
2022-09-27 06:52:18 +0200 <silph> monochrom: if imperative languages use largely-overlapping thinking, and Haskell uses quite a different field of thinking .. is ther a third category of programming languages that you've epxerienced?
2022-09-27 06:52:44 +0200 <johnw> silph: there are logic languages, that's another type of brain trip
2022-09-27 06:52:46 +0200 <silph> [Leary]: oh, i would have expected Haskell to be "so easy" for mathematicians! i guess that assumption is incorrect!
2022-09-27 06:52:49 +0200 <monochrom> It's already false even back then if you jumped from Algol to Lisp or Prolog. So nevermind today where even Java is so different from C.
2022-09-27 06:53:23 +0200 <monochrom> But here is what can work: After you've aced computer science, picking up another language is easy.
2022-09-27 06:53:31 +0200 <silph> johnw: i don't hear much hype about Prolog or other logic languages at all..!
2022-09-27 06:55:19 +0200 <talismanick> silph: They've had a quiet resurgence, between Kanren dialects and Datalog, with the rise of graph databases
2022-09-27 06:55:27 +0200 <silph> (i have to admit, part of my curiousity of learning new programming langauges is hype. LISPers say that "source code is data is source code! it'll change your world!" and i get slightly curious. Rust'ers saying "once you become friends with the borrow checker, you'll get marvellous new insights!" and i get curious. Erlang-ists say "the Actor model
2022-09-27 06:55:28 +0200 <silph> makes super-reliable systems!" and i get curious. Smalltalkers say "Alan Kay loves us" and i get curious, haha)
2022-09-27 06:56:01 +0200 <silph> but for now, i'm focussing on Haskellers. it was the hype that drew me in.
2022-09-27 06:56:15 +0200 <talismanick> Erlang is an echo of the concurrent logic programming languages of yore
2022-09-27 06:56:22 +0200 <silph> and lucky for me, probably enough support (eg IRC) and beginner textbooks etc exist, to make it possible for even me to learn it.
2022-09-27 06:56:30 +0200 <talismanick> hence why it's a bit of an ugly duckling among the functional languages
2022-09-27 06:56:42 +0200 <silph> talismanick: this is something i never heard before, ie that Erlang has a connection with logic programming.
2022-09-27 06:57:15 +0200 <talismanick> You look at the syntax of Erlang and Prolog, and they are suspiciously similar
2022-09-27 06:57:35 +0200 <talismanick> https://vanemden.wordpress.com/2010/08/21/who-killed-prolog/
2022-09-27 06:57:48 +0200 <talismanick> Van Emden was one of the pioneers of logic programming
2022-09-27 06:58:03 +0200 <monochrom> Hrm, no wonder, now that I think about it. If you take logic programming and restrict unification to pattern matching, you get functional programming.
2022-09-27 06:58:05 +0200 <silph> talismanick: also, i didn't even know that a database other than relational databases are being used. i vaguely know that there's a thing called "Not only SQL" databases , but i don't know anything about it. is that a "graph database"?
2022-09-27 06:58:46 +0200 <talismanick> silph: NoSQL is anything that isn't SQL :)
2022-09-27 06:59:08 +0200 <talismanick> Graph databases are one among several kinds, including document and columnar stores
2022-09-27 06:59:19 +0200 <talismanick> I take it you know what a graph is?
2022-09-27 06:59:23 +0200 <talismanick> In the context of CS
2022-09-27 06:59:27 +0200 <silph> are graph, document, and columnar databases still used today?
2022-09-27 06:59:36 +0200 <talismanick> Very much so!
2022-09-27 06:59:45 +0200 <silph> i think so? i understand that a "graph" is a bunch of Nodes, and edges connecting those nodes. and sometimes these edges have direction and weight.
2022-09-27 06:59:58 +0200 <silph> and a tree is an example of a graph, for example.
2022-09-27 07:00:19 +0200king_gs(~Thunderbi@187.201.192.184) (Ping timeout: 248 seconds)
2022-09-27 07:00:34 +0200 <talismanick> So, a graph representation is convenient for representing a collection of data which is interconnected in some ways but not so much so that it can be neatly partitioned into rows of a table
2022-09-27 07:01:41 +0200 <silph> huh. could it be used for purposes that relational databases are usually used for? i wonder if querying such a database is very difficult, if the relationships between the data elements isn't as regular?
2022-09-27 07:01:41 +0200 <talismanick> Like, if you took all of Facebook, "who's friends with who?"
2022-09-27 07:02:12 +0200 <silph> talismanick: haha, my first mental model is just to think okf relational tables. but i can see it as a graph, too!
2022-09-27 07:02:39 +0200 <silph> what are some advnatages of a graph model of databse, vs a relational model [in the cases when it makes more sense for the data to use a graph databse, of course]?
2022-09-27 07:02:57 +0200 <talismanick> silph: In general, it's a tradeoff: easier storage, insertion, and representation, but more difficult queries
2022-09-27 07:03:16 +0200 <talismanick> silph: lots of heterogeneous data
2022-09-27 07:03:19 +0200 <silph> interesting! i really never heard fo a graph databse before!
2022-09-27 07:03:30 +0200 <silph> do you remember how you first learned about it, or do you remember palces where it's commonly talked about?
2022-09-27 07:03:31 +0200seydar(~seydar@154-27-113-252.starry-inc.net)
2022-09-27 07:03:39 +0200 <talismanick> uhhh... Hacker News?
2022-09-27 07:03:45 +0200 <davean> silph: consider how you'd write a "is there a connection between A and B" in SQL
2022-09-27 07:03:46 +0200takuan(~takuan@178-116-218-225.access.telenet.be)
2022-09-27 07:03:48 +0200 <davean> consider in a graph database
2022-09-27 07:04:01 +0200 <silph> talismanick: ah, ok :) that makes sense that HN exposed you to do the idea!
2022-09-27 07:04:17 +0200 <talismanick> I actually studied logic programming on my own out of sheer curiousity and later saw Datalog begin its steady ascent in popularity from the sidelines :)
2022-09-27 07:05:31 +0200 <silph> davean: you're saying that it might be easier to see "is ther ea connection between A and B" in a graph database?
2022-09-27 07:05:59 +0200 <davean> silph: I'm saying you need extensions to SQL to even try :-p
2022-09-27 07:06:14 +0200 <silph> talismanick: haha, that must have been fun for you to see. it makes me think about how some technoclogies get popular from the margins, and how most stay in the margins.
2022-09-27 07:06:37 +0200 <talismanick> let's say "X is an apple if X is round and X is red and X fell from a tree"
2022-09-27 07:06:43 +0200 <silph> davean: fair enough. my SQL brain is very rusty, so i didn't see this when yo asked!
2022-09-27 07:07:17 +0200 <silph> talismanick: ok, go on. (though, do pomegranites grow on trees, i wonder..?)
2022-09-27 07:07:17 +0200 <talismanick> i.e. apple(X) <= round(X) & red(X) & fell_from(X,tree).
2022-09-27 07:07:34 +0200 <talismanick> Are you familiar with propositional logic?
2022-09-27 07:08:03 +0200 <silph> i did a TINY amount of Prolog in school, but not enough to see why it was useful :). but i'm told that pre-Neural Netwokr days, it was used a lot in Aritificual Intelligence.
2022-09-27 07:08:40 +0200 <talismanick> let's say we're given a fact: "it" hit Newton on the head, bonked(newton, it)
2022-09-27 07:08:41 +0200titibandit(~titibandi@137.226.196.215) (Read error: Connection reset by peer)
2022-09-27 07:08:45 +0200 <silph> i'm not very famliar with propositional logic. only slightly, from one course. i learned about one way implies, two way implies ("iff"), contrapositive, and just a little bit about "for all" and "there exists"
2022-09-27 07:08:50 +0200 <talismanick> we ask: apple(it)?
2022-09-27 07:09:34 +0200 <talismanick> at this point, we're stuck with a possible value for X: apple(it) <= round(it) & red(it) & fell(it,tree)
2022-09-27 07:09:42 +0200 <talismanick> this whole statement is true or false
2022-09-27 07:09:50 +0200 <silph> so "bonked" is a proptery[? bad terminology i migh tbe using] that can be True or False.
2022-09-27 07:10:23 +0200 <talismanick> the given fact is that "it" hit Newton on the head, which I wrote bonked(newton, it)
2022-09-27 07:10:29 +0200chomwitt(~chomwitt@2a02:587:dc14:f500:e9fb:e2de:445:6771)
2022-09-27 07:10:38 +0200 <talismanick> or you could write hit(newton,it), whatever
2022-09-27 07:10:39 +0200 <silph> you're saying that "bonked(newton, it)" is given as a true statement?
2022-09-27 07:10:43 +0200 <talismanick> yeah
2022-09-27 07:10:54 +0200nate3(~nate@98.45.169.16)
2022-09-27 07:11:02 +0200 <silph> and the question is "is apple(it) True?"?
2022-09-27 07:11:07 +0200 <talismanick> and we want to know if "it" is an apple, to determine if "it" is a valid way of filling out X
2022-09-27 07:11:38 +0200 <Clinton[m]> Does anyone know about the `barbies` library here?... (full message at <https://libera.ems.host/_matrix/media/r0/download/libera.chat/5fd1c88fea664c910ccaf85a115c8edd835e…>)
2022-09-27 07:11:41 +0200 <silph> i was taught (when learning Prolog) that the program, when executed, will go through all of the statements that are given as True, to answer the query.
2022-09-27 07:11:51 +0200 <talismanick> with a truth table, you can show that "a implies b" is the same as "not a or b"
2022-09-27 07:12:12 +0200 <talismanick> so, consider filling out our definition for "apple(it)":
2022-09-27 07:12:20 +0200 <silph> talismanick: but i never learned how Prolog is actually used in the real world! but from what i hear you say, programming langauges like Datalog /are/ in fact being used by real people.
2022-09-27 07:12:52 +0200 <talismanick> apple(it) || not round(it) || not red(it) || not fell(it,tree)
2022-09-27 07:13:16 +0200 <silph> your definition you gave me for "apple(it)" is "apple(it) is true if "it is round" AND "it is red" and "it fell from a tree" "
2022-09-27 07:13:39 +0200 <talismanick> so, now we can assert that "it" is an apple if we fail to find evidence in the database that it is not round or red or didn't fall from a tree
2022-09-27 07:14:22 +0200 <talismanick> so, if you ask the program "apple(it)?", it will return true
2022-09-27 07:14:34 +0200 <talismanick> but, and this is the important part,
2022-09-27 07:14:54 +0200 <talismanick> you can ask it "apple(X)" and let it try to fill out values for X for you, using the same process!
2022-09-27 07:15:28 +0200 <silph> in what fields does logic programming answer useful question? i'm thinking -- someone [a programmer? another program?] would have to popluate the program with a lot of true statements! i wonder what non-trivial questions you can ask a logic program that are amazing to get answers for.
2022-09-27 07:15:52 +0200 <talismanick> it tries any value for X it can, hopping from one possible clause for it to the next, as if walking a graph, until it gives up and tells you that value for X!
2022-09-27 07:15:54 +0200 <silph> "what possible objects in existance might be apples, given these true statements i told you about earlier"
2022-09-27 07:15:59 +0200nate3(~nate@98.45.169.16) (Ping timeout: 252 seconds)
2022-09-27 07:16:35 +0200 <talismanick> Souffle Datalog is used for program synthesis
2022-09-27 07:16:37 +0200 <silph> Clinton[m]: sorry to flood out your question... i hope i'm not flooding it out, anyways!
2022-09-27 07:16:56 +0200 <silph> "program synthesis" is another term i never heard of before :)
2022-09-27 07:17:17 +0200 <talismanick> generate a program that does what you want given some set of constraints
2022-09-27 07:17:59 +0200 <silph> maybe a term for me to google!
2022-09-27 07:18:07 +0200 <silph> thanks for the youtube link, talismanick. i'll watch it later this week.
2022-09-27 07:18:13 +0200 <talismanick> np
2022-09-27 07:18:20 +0200 <silph> and thank you everyone for sharing yoru expeirences about the learning process. it really encouraged me!
2022-09-27 07:18:40 +0200 <silph> i'm going to part from this IRC channel right now, but i really do appreciate people's welcoming support and sharing of personal anecdotes.
2022-09-27 07:18:42 +0200 <silph> bye!
2022-09-27 07:19:14 +0200tomku(~tomku@user/tomku) (Ping timeout: 255 seconds)
2022-09-27 07:19:21 +0200king_gs(~Thunderbi@187.201.192.184)
2022-09-27 07:20:19 +0200silph(~silph@67-208-31-162.ip.tor.radiant.net) (Quit: Client closed)
2022-09-27 07:22:03 +0200 <[Leary]> Clinton[m]: Since it's complaining about the `Rec` constructor not being in scope, try importing it?
2022-09-27 07:22:27 +0200coot(~coot@213.134.165.79)
2022-09-27 07:22:53 +0200 <[Leary]> I don't actually know the package, I'm just guessing.
2022-09-27 07:28:10 +0200titibandit(~titibandi@xdsl-212-8-150-57.nc.de)
2022-09-27 07:31:32 +0200 <Clinton[m]> <[Leary]> "Clinton: Since it's complaining..." <- it's in a hidden module in the package. I guess it's bug report time
2022-09-27 07:34:09 +0200`2jt(~jtomas@105.red-88-17-232.dynamicip.rima-tde.net)
2022-09-27 07:35:08 +0200 <[Leary]> Clinton[m]: It's re-exported by Data.Functor.Barbie.
2022-09-27 07:35:37 +0200chomwitt(~chomwitt@2a02:587:dc14:f500:e9fb:e2de:445:6771) (Ping timeout: 268 seconds)
2022-09-27 07:36:10 +0200Goodbye_Vincent(cyvahl@freakshells.net)
2022-09-27 07:38:51 +0200king_gs(~Thunderbi@187.201.192.184) (Read error: Connection reset by peer)
2022-09-27 07:39:01 +0200king_gs1(~Thunderbi@2806:103e:29:ac5e:a16e:4ac9:a89b:4d)
2022-09-27 07:41:20 +0200king_gs1king_gs
2022-09-27 07:42:31 +0200libertyprime(~libertypr@139.80.172.131) (Ping timeout: 265 seconds)
2022-09-27 07:47:21 +0200razetime(~quassel@117.193.7.114)
2022-09-27 07:50:01 +0200Ram-Z(~Ram-Z@li1814-254.members.linode.com) (Ping timeout: 246 seconds)
2022-09-27 07:50:57 +0200trillp(~trillp@2001:19f0:6401:b10:e09a:50b0:71c8:3a8e)
2022-09-27 08:00:54 +0200jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 268 seconds)
2022-09-27 08:02:12 +0200raym(~raym@user/raym) (Ping timeout: 264 seconds)
2022-09-27 08:03:18 +0200matthewmosior(~matthewmo@173.170.253.91) (Remote host closed the connection)
2022-09-27 08:04:08 +0200raym(~raym@user/raym)
2022-09-27 08:04:43 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-09-27 08:13:41 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 260 seconds)
2022-09-27 08:14:15 +0200 <ski> logic programming is quite cool. in some ways, it is similar to functional programming; in others, not so much. Prolog might be the best way to get into it, due to the amount of learning material for it, compared to other systems. but there are other routes, too. (Kanren,Mercury,Datalog (or deductive databases in general),Oz,Twelf (and lambdaProlog,Lolli),rule-based systems (e.g. using RETE, cf. business
2022-09-27 08:14:21 +0200 <ski> rule engine/system,production rule system),answer-set programming,..)
2022-09-27 08:19:54 +0200zeenk(~zeenk@2a02:2f04:a311:2d00:6865:d863:4c93:799f)
2022-09-27 08:26:31 +0200dr_merijn(~merijn@86-86-29-250.fixed.kpn.net)
2022-09-27 08:26:59 +0200jonathanx_(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Ping timeout: 265 seconds)
2022-09-27 08:29:22 +0200thyriaen(~thyriaen@2a02:8109:8340:686c:7383:e0e2:ad95:9fce)
2022-09-27 08:29:30 +0200king_gs(~Thunderbi@2806:103e:29:ac5e:a16e:4ac9:a89b:4d) (Remote host closed the connection)
2022-09-27 08:29:47 +0200king_gs(~Thunderbi@2806:103e:29:ac5e:a16e:4ac9:a89b:4d)
2022-09-27 08:30:16 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-09-27 08:31:17 +0200mc47(~mc47@xmonad/TheMC47)
2022-09-27 08:35:16 +0200rockymarine(~rocky@user/rockymarine) (Ping timeout: 260 seconds)
2022-09-27 08:36:41 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-09-27 08:37:09 +0200rockymarine(~rocky@user/rockymarine)
2022-09-27 08:40:36 +0200trillp(~trillp@2001:19f0:6401:b10:e09a:50b0:71c8:3a8e) (Quit: zzz)
2022-09-27 08:40:49 +0200m5zs7k(aquares@web10.mydevil.net) (Ping timeout: 250 seconds)
2022-09-27 08:42:58 +0200jonathanx(~jonathan@h-98-128-168-222.NA.cust.bahnhof.se)
2022-09-27 08:43:29 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-09-27 08:44:37 +0200m5zs7k(aquares@web10.mydevil.net)
2022-09-27 08:47:19 +0200acidjnk(~acidjnk@p200300d6e7137a8728215a7bf170f917.dip0.t-ipconnect.de)
2022-09-27 08:48:31 +0200libertyprime(~libertypr@118-92-64-32.dsl.dyn.ihug.co.nz)
2022-09-27 08:50:04 +0200Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2022-09-27 08:51:29 +0200Lycurgus(~juan@user/Lycurgus)
2022-09-27 08:58:15 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-09-27 08:59:00 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Client Quit)
2022-09-27 09:00:19 +0200dr_merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 248 seconds)
2022-09-27 09:00:57 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-09-27 09:01:18 +0200rockymarine(~rocky@user/rockymarine) (Ping timeout: 268 seconds)
2022-09-27 09:03:03 +0200kenran(~user@p200300df77304e009722e54b6bbb7be2.dip0.t-ipconnect.de)
2022-09-27 09:05:28 +0200 <dminuoso> In a tree, are there commonly used names for branches that specifically start a) from the root, or b) at a leaf?
2022-09-27 09:06:00 +0200trillp(~trillp@2001:19f0:6401:b10:e09a:50b0:71c8:3a8e)
2022-09-27 09:06:16 +0200 <dminuoso> Note, by branch I mean a sequence of connected nodes (unless there's also a more commonly used name here)
2022-09-27 09:06:19 +0200jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2022-09-27 09:06:42 +0200poscat(~poscat@2408:8206:4823:6cd3:718a:f4cb:b156:91dd) (Ping timeout: 264 seconds)
2022-09-27 09:07:28 +0200poscat(~poscat@114.245.105.176)
2022-09-27 09:09:40 +0200trillp(~trillp@2001:19f0:6401:b10:e09a:50b0:71c8:3a8e) (Client Quit)
2022-09-27 09:09:58 +0200michalz(~michalz@185.246.207.200)
2022-09-27 09:11:08 +0200 <opqdonut> dminuoso: that's usually called a "path"
2022-09-27 09:11:20 +0200 <opqdonut> (though technically a path is a sequence of edges, not vertices...)
2022-09-27 09:12:05 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:54a2:286d:4b33:4572)
2022-09-27 09:12:09 +0200 <dminuoso> Mmm right. "root path" and "leaf path" do not sound terribly
2022-09-27 09:12:11 +0200Ram-Z(~Ram-Z@li1814-254.members.linode.com)
2022-09-27 09:16:47 +0200rockymarine(~rocky@user/rockymarine)
2022-09-27 09:16:51 +0200 <[_________]> "branches that start from the root" - isn't that a tree ? "branches that start at a leaf" - isn't that an empty set ?
2022-09-27 09:18:46 +0200 <dminuoso> [_________]: Just ignore directionality. But if you want all paths to just point towards leafs, then consider a) a path that starts in the middle of the tree but stops *before* a leaf, b) a path that starts in the middle of the tree but extends towards a leaf, and b) a path that starts at the root node.
2022-09-27 09:19:23 +0200phma_(~phma@host-67-44-208-193.hnremote.net)
2022-09-27 09:20:47 +0200xstill_(xstill@fimu/xstill) (Quit: Ping timeout (120 seconds))
2022-09-27 09:21:03 +0200xstill_(xstill@fimu/xstill)
2022-09-27 09:21:21 +0200lagash(lagash@lagash.shelltalk.net) (Ping timeout: 260 seconds)
2022-09-27 09:21:47 +0200shriekingnoise(~shrieking@186.137.167.202) (Quit: Quit)
2022-09-27 09:22:05 +0200lagash(lagash@lagash.shelltalk.net)
2022-09-27 09:22:06 +0200shriekingnoise(~shrieking@186.137.167.202)
2022-09-27 09:22:37 +0200 <[_________]> if you want all paths, that's a) tree b) tree c) tree; it doesn't matter which node you choose as a root
2022-09-27 09:23:05 +0200 <dminuoso> That is not helpful.
2022-09-27 09:23:06 +0200phma(phma@2001:5b0:210b:aca8:56:2d35:7769:5de3) (Ping timeout: 260 seconds)
2022-09-27 09:23:34 +0200 <dminuoso> That's like suggesting the phrase "substring" is silly because its also just a "string"
2022-09-27 09:23:51 +0200 <[_________]> subtree ? :)
2022-09-27 09:24:07 +0200 <dminuoso> b) and c) have particular relationships to the original tree, and I would like a terminology that emphasises on that relationshipo
2022-09-27 09:28:56 +0200jmorris(uid537181@id-537181.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
2022-09-27 09:28:58 +0200 <opqdonut> mathematically speaking a computer science tree is a "directed tree" or a "rooted tree"
2022-09-27 09:29:03 +0200libertyprime(~libertypr@118-92-64-32.dsl.dyn.ihug.co.nz) (Quit: leaving)
2022-09-27 09:29:11 +0200nate3(~nate@98.45.169.16)
2022-09-27 09:29:18 +0200 <opqdonut> it has a designated root
2022-09-27 09:29:29 +0200 <opqdonut> (which induces directions on all edges)
2022-09-27 09:29:51 +0200 <opqdonut> dminuoso: one more thing to consider is are these paths directed, i.e. can you have a leaf-to-leaf path that goes "up", then "down"?
2022-09-27 09:31:04 +0200dr_merijn(~merijn@86-86-29-250.fixed.kpn.net)
2022-09-27 09:31:15 +0200 <dminuoso> Nope, all paths follow the ordering of the
2022-09-27 09:32:44 +0200 <dminuoso> But I think I will just adopt "root path", "leaf path" and "complete path" (where the last one refers to a path that extends from a root all the way to a leaf, and as such is also both a root and leaf path)
2022-09-27 09:32:48 +0200 <opqdonut> ok so then, in standard jargon, you're working with directed paths in a directed/rooted tree
2022-09-27 09:32:57 +0200 <opqdonut> yeah root/leaf/complete paths sounds nice
2022-09-27 09:34:18 +0200 <darkling> If we're inventing terms, then I'd also suggest "non-terminal path", for one that neither starts at the root nor ends at a leaf, and "partial path" for one that doesn't go all the way from the root to a leaf.
2022-09-27 09:34:36 +0200nate3(~nate@98.45.169.16) (Ping timeout: 268 seconds)
2022-09-27 09:35:31 +0200 <darkling> So a partial path is anything not complete, and complete and non-terminal are disjoint.
2022-09-27 09:35:37 +0200dr_merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 244 seconds)
2022-09-27 09:35:47 +0200Lycurgus(~juan@user/Lycurgus) (Quit: Exeunt juan@acm.org)
2022-09-27 09:36:02 +0200 <darkling> Oh, and a complete path is both a root and a leaf path.
2022-09-27 09:40:14 +0200 <dminuoso> Can you elaborate on partial path further? I do not understand what you mean by it.
2022-09-27 09:40:27 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 265 seconds)
2022-09-27 09:40:35 +0200cfricke(~cfricke@user/cfricke)
2022-09-27 09:41:12 +0200 <[Leary]> 'Root path' and 'leaf path' don't sound right to my ear. I'd make that 'root-initial path' and 'leaf-terminal path'.
2022-09-27 09:42:02 +0200gmg(~user@user/gehmehgeh)
2022-09-27 09:42:51 +0200`2jt(~jtomas@105.red-88-17-232.dynamicip.rima-tde.net) (Ping timeout: 244 seconds)
2022-09-27 09:43:52 +0200poscat0x04(~poscat@2408:8206:4823:2a7:d78b:34b7:cd4f:29cd)
2022-09-27 09:44:51 +0200poscat(~poscat@114.245.105.176) (Ping timeout: 252 seconds)
2022-09-27 09:44:57 +0200dr_merijn(~merijn@86-86-29-250.fixed.kpn.net)
2022-09-27 09:48:08 +0200 <Axman6> surely branch(es) that start at the root(s) are trunk(s)?
2022-09-27 09:48:12 +0200razetime(~quassel@117.193.7.114) (Ping timeout: 265 seconds)
2022-09-27 09:48:17 +0200DavidBinder(~DavidBind@event202.raeume.uni-konstanz.de)
2022-09-27 09:49:09 +0200 <dminuoso> Axman6: Oh I like that!
2022-09-27 09:51:06 +0200machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net)
2022-09-27 09:51:16 +0200 <Axman6> Speaking arboristically, of course
2022-09-27 09:52:04 +0200 <Axman6> Or arboreally I guess, though I am trained in how to fell trees with a chainsaw, so I guess I could also be an arborist
2022-09-27 09:53:21 +0200 <dminuoso> How do you get from being an arborist to writing Haskell?
2022-09-27 09:54:11 +0200 <DavidBinder> Googling for deforestation, probably.
2022-09-27 09:54:31 +0200 <dminuoso> Haha. Priceless.
2022-09-27 09:54:34 +0200`2jt(~jtomas@105.red-88-17-232.dynamicip.rima-tde.net)
2022-09-27 09:54:49 +0200 <Axman6> damn, just walk in and drop a chracker like that? well done
2022-09-27 09:54:54 +0200 <Axman6> cracker*
2022-09-27 09:56:11 +0200 <Axman6> @remember DavidBinder dminuoso: How do you get from being an arborist to writing Haskell? DavidBinder: Googling for deforestation, probably.
2022-09-27 09:56:11 +0200 <lambdabot> Done.
2022-09-27 09:56:28 +0200 <DavidBinder> :)
2022-09-27 09:57:22 +0200lisbeths(uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity)
2022-09-27 09:57:22 +0200machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 265 seconds)
2022-09-27 09:57:39 +0200 <Axman6> To answer the question, I'm a volunteer in the State Emergency Service, and we do a fair amount of chopping up trees that've fallen on people's houses
2022-09-27 09:58:20 +0200 <dminuoso> But then you are not trained in how to fell trees, but in how to unfell them right?
2022-09-27 09:59:07 +0200 <Axman6> a semi-fallen tree may still need felling - and it's much harder to do so usually because the tree has already decided where it wants to go
2022-09-27 09:59:12 +0200machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net)
2022-09-27 09:59:21 +0200 <Axman6> an upright tree can usually be made to go where you want it to
2022-09-27 09:59:37 +0200 <dminuoso> I guess its also somewhat more dangerous, because a lot of wood might be under intense pressure right?
2022-09-27 10:00:05 +0200 <dminuoso> (or its tension rather)
2022-09-27 10:01:11 +0200 <Axman6> chainsawing is all about tension and compression, and understanding what parts of the tree are in which state
2022-09-27 10:01:47 +0200lottaquestions_(~nick@104.221.24.83)
2022-09-27 10:02:23 +0200yobson_(~yobson@mail.jotron.com)
2022-09-27 10:02:39 +0200 <Axman6> When I was first learning, I was working on a tree that I ended getting two saws stuck in - felt pretty shitty until the guy teahing us, who has a massive amount of experience, almost got his saw stuck too. turns out the whole tree was in compression so wanted to close up oin the saw, because it was laying down in an arch. We should've paid more attention to the Romans I guess
2022-09-27 10:03:31 +0200 <darkling> Yeah, but then, what have they ever done for us, eh?
2022-09-27 10:03:31 +0200lottaquestions(~nick@2607:fa49:503e:7100:ede3:2530:9317:b779) (Ping timeout: 244 seconds)
2022-09-27 10:03:52 +0200 <Axman6> Not much recently, that's for sure
2022-09-27 10:04:31 +0200 <dminuoso> They have contributed to this story https://twitter.com/foone/status/1572260363764400129
2022-09-27 10:05:02 +0200razetime(~quassel@117.193.7.114)
2022-09-27 10:06:19 +0200shriekingnoise(~shrieking@186.137.167.202) (Quit: Quit)
2022-09-27 10:06:42 +0200lottaquestions_(~nick@104.221.24.83) (Quit: Konversation terminated!)
2022-09-27 10:07:06 +0200lottaquestions_(~nick@2607:fa49:503e:7100:7430:a788:fee1:3622)
2022-09-27 10:08:30 +0200jonathanx(~jonathan@h-98-128-168-222.NA.cust.bahnhof.se) (Ping timeout: 265 seconds)
2022-09-27 10:09:19 +0200 <dminuoso> [Leary]: Thanks by the way, given how my code is turning out, that differentiation becomes very useful.
2022-09-27 10:09:25 +0200 <dminuoso> I now have root-terminal and root-initial paths.
2022-09-27 10:10:12 +0200DavidBinder(~DavidBind@event202.raeume.uni-konstanz.de) (Ping timeout: 252 seconds)
2022-09-27 10:10:14 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-09-27 10:11:36 +0200DavidBinder(~DavidBind@event202.raeume.uni-konstanz.de)
2022-09-27 10:13:20 +0200mvk(~mvk@2607:fea8:5ce3:8500::778c) (Ping timeout: 244 seconds)
2022-09-27 10:13:54 +0200DavidBinder9(~DavidBind@event202.raeume.uni-konstanz.de)
2022-09-27 10:14:18 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2022-09-27 10:14:35 +0200jakalx(~jakalx@base.jakalx.net)
2022-09-27 10:15:01 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 260 seconds)
2022-09-27 10:15:16 +0200rockymarine(~rocky@user/rockymarine) (Ping timeout: 265 seconds)
2022-09-27 10:16:48 +0200DavidBinder(~DavidBind@event202.raeume.uni-konstanz.de) (Ping timeout: 252 seconds)
2022-09-27 10:17:25 +0200rockymarine(~rocky@user/rockymarine)
2022-09-27 10:25:50 +0200ft(~ft@p3e9bc57b.dip0.t-ipconnect.de) (Quit: Lost terminal)
2022-09-27 10:26:29 +0200titibandit(~titibandi@xdsl-212-8-150-57.nc.de) (Quit: Leaving.)
2022-09-27 10:27:13 +0200phma_phma
2022-09-27 10:28:46 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-09-27 10:32:56 +0200DavidBinder9(~DavidBind@event202.raeume.uni-konstanz.de) (Ping timeout: 252 seconds)
2022-09-27 10:35:51 +0200waldo(~waldo@user/waldo)
2022-09-27 10:40:06 +0200fjMSX(~hypni2p@2.92.213.55)
2022-09-27 10:41:08 +0200DavidBinder(~DavidBind@event202.raeume.uni-konstanz.de)
2022-09-27 10:41:14 +0200MajorBiscuit(~MajorBisc@145.94.161.115)
2022-09-27 10:43:12 +0200yobson___(~yobson@mail.jotron.com)
2022-09-27 10:43:13 +0200yobson_(~yobson@mail.jotron.com) (Read error: Connection reset by peer)
2022-09-27 10:43:46 +0200rockymarine(~rocky@user/rockymarine) (Ping timeout: 265 seconds)
2022-09-27 10:46:08 +0200jonathanx(~jonathan@h-98-128-168-222.NA.cust.bahnhof.se)
2022-09-27 10:46:57 +0200ellensol(~ellen@ua-84-216-129-63.bbcust.telenor.se)
2022-09-27 10:50:48 +0200kuribas(~user@ptr-17d51en07nrswztiuk4.18120a2.ip6.access.telenet.be)
2022-09-27 10:50:51 +0200__monty__(~toonn@user/toonn)
2022-09-27 10:51:31 +0200 <kuribas> Free Monad effect systems are just dependency injection, and using them only for testing is just Mocking. Change my mind.
2022-09-27 10:51:58 +0200 <kuribas> (and mocking should be avoided at all costs).
2022-09-27 10:53:07 +0200 <tdammers> mocking is really just taking code out of its natural habitat and running it in a lab environment
2022-09-27 10:54:21 +0200 <tdammers> the difference between "mocking" and "running a unit test against a function" is one of perspective - "mocking" typically implies that there are side-channel dependencies, i.e., we're testing something impure, which means that instead of just providing all inputs as arguments, we must provide some inputs as "environment"
2022-09-27 10:54:49 +0200rockymarine(~rocky@user/rockymarine)
2022-09-27 10:55:54 +0200 <kuribas> mocking means replacing existing code with other code (usually to eliminate side effects).
2022-09-27 10:56:35 +0200 <kuribas> You could call it a "lab environment".
2022-09-27 10:56:52 +0200 <kuribas> However it is a fake lab, using cardboard, ducktape, etc...
2022-09-27 10:57:23 +0200 <kuribas> It's a bit better with static types and dependency injection, since at least you can garantee that the interface is correct.
2022-09-27 10:58:15 +0200 <ski> "Potemkin testing" ?
2022-09-27 10:59:38 +0200rockymarine(~rocky@user/rockymarine) (Ping timeout: 268 seconds)
2022-09-27 10:59:42 +0200olsner(~salparot@c83-252-230-207.bredband.tele2.se) (Ping timeout: 268 seconds)
2022-09-27 11:00:56 +0200 <ski> i guess a deep embedding with a non- standard/intended interpretation is somewhat related
2022-09-27 11:01:06 +0200jonathanx(~jonathan@h-98-128-168-222.NA.cust.bahnhof.se) (Remote host closed the connection)
2022-09-27 11:01:16 +0200zxx7529(~Thunderbi@user/zxx7529)
2022-09-27 11:01:23 +0200jonathanx(~jonathan@h-98-128-168-222.NA.cust.bahnhof.se)
2022-09-27 11:02:31 +0200 <kuribas> but it feels to me that you havent factored out business logic from side effects.
2022-09-27 11:02:50 +0200 <__monty__> Do you suggest testing on production servers instead?
2022-09-27 11:02:51 +0200 <kuribas> And if all you code does is call side-effects, then it's just better to run an integration test.
2022-09-27 11:03:21 +0200 <kuribas> __monty__: an integration environment mimicking production is always a good idea.
2022-09-27 11:03:32 +0200 <kuribas> as in, taking real data and configuration.
2022-09-27 11:03:41 +0200 <ski> (e.g. instead of calling `IO' stuff directly, in the primitives of your EDSL monad (and your run mostly runs the `IO' layer, after handing some initialization and finalization), you instead produce a data structure (and then your run interprets this into `IO') .. that way, you could provide an alternate interpretation, which might be used for mocking)
2022-09-27 11:03:42 +0200 <dminuoso> mimicking production != mocking.
2022-09-27 11:03:51 +0200 <kuribas> __monty__: of course not sending stuff to customers!
2022-09-27 11:03:52 +0200olsner(~salparot@c83-252-230-207.bredband.tele2.se)
2022-09-27 11:04:04 +0200 <dminuoso> The relevant difference is that `mocking` is simulating things that are naturally out of your control.
2022-09-27 11:04:19 +0200 <dminuoso> Its for external dependencies.
2022-09-27 11:05:14 +0200 <kuribas> that's what integration is for
2022-09-27 11:05:33 +0200 <kuribas> any external dependencies can also be used for testing as well.
2022-09-27 11:05:39 +0200 <tdammers> no, integration testing is for verifying the interactions of multiple components.
2022-09-27 11:05:56 +0200 <tdammers> and no, external dependencies can *not* always be used for testing
2022-09-27 11:06:33 +0200 <dminuoso> Example: Lauch controls of nuclear missiles are not a good idea for testing nuclear missile guidance computer code.
2022-09-27 11:06:34 +0200 <tdammers> if you're writing a missile control system, testing it against real missiles would be extremely expensive, and it would also introduce a lot of factors out of your control, such as for instance weather
2022-09-27 11:06:43 +0200dminuosohigh fives tdammers
2022-09-27 11:06:46 +0200 <tdammers> woo hoo
2022-09-27 11:07:23 +0200 <tdammers> Even if you use dummy warheads - say you want to test how your control system fares in a 100-knot crosswind. What are you going to do, wait for a hurricane?
2022-09-27 11:07:26 +0200titibandit(~titibandi@xdsl-212-8-150-57.nc.de)
2022-09-27 11:07:53 +0200 <dminuoso> In that analogy a wind tunnel would be a kind of weather mock.
2022-09-27 11:08:10 +0200 <Clinton[m]> Given... (full message at <https://libera.ems.host/_matrix/media/r0/download/libera.chat/7fad18514757db4d84e7edce2db747709a56…>)
2022-09-27 11:09:53 +0200frost(~frost@user/frost) (Quit: Ping timeout (120 seconds))
2022-09-27 11:10:14 +0200 <dminuoso> Clinton[m]: No.
2022-09-27 11:11:04 +0200 <dminuoso> Clinton[m]: `instance C ... => T (H...)` gives you an instance T (H ...) irrespective of whether `C ...` is met or not.
2022-09-27 11:11:13 +0200 <MangoIV[m]> To come back to my problem from yesterday; someone here answered, that cabal doesn't consider pkg-config, however, I just read that the first thing that cabal does when trying to build its plan is to run `ghc-pkg --list-all` to list all available packages; if a package is already hidden there, I would assume cabal would not be able to find it when building its plan, is that correct?
2022-09-27 11:11:46 +0200 <dminuoso> For example, `instance Ord x => Show a` is a Show instance matching literally *all* types, whether they have Ord or not.
2022-09-27 11:11:58 +0200 <dminuoso> *instance Ord a => Show a` pardon me
2022-09-27 11:12:43 +0200 <dminuoso> (In other word, instance context is not considered for instance resolution)
2022-09-27 11:13:14 +0200 <int-e> MangoIV[m]: Cabal will consider all registered packages. The hidden/exposed distinction is for ghci.
2022-09-27 11:13:38 +0200 <ski> Clinton[m] : when considering `C (Exists f)', it has no way of knowing which `a' was used inside a particular value of type `Exists f'. note that different values of that type can contain values of type `f a' for *different* types `a'
2022-09-27 11:13:39 +0200 <MangoIV[m]> * To come back to my problem from yesterday; someone here answered, that cabal doesn't consider pkg-config, however, I just read that the first thing that cabal does when trying to build its plan is to run `pkg-config --list-all` to list all available packages; if a package is already hidden there, I would assume cabal would not be able to find it when building its plan, is that correct?
2022-09-27 11:13:39 +0200 <MangoIV[m]> Sorry, I think I'm getting more and more confused, I think I confused pkg-config and ghc-pkg ugh
2022-09-27 11:13:51 +0200 <MangoIV[m]> int-e: ok, thanks.
2022-09-27 11:13:52 +0200 <dcoutts_> MangoIV[m]: and I'm not sure what you mean about pkg-config. Cabal does have some support for pkg-config packages.
2022-09-27 11:14:30 +0200 <ski> Clinton[m] : so, e.g. to get `Show (Exists f)' you *need* to embed a `Show a' constraint (or something equivalent), *inside* the `Exists f' data type
2022-09-27 11:14:49 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-09-27 11:14:53 +0200 <MangoIV[m]> dcoutts_: I think I confused pkg-config and ghc-pkg here.
2022-09-27 11:15:07 +0200 <dcoutts_> ok :-) np
2022-09-27 11:15:33 +0200waldo_(~waldo@user/waldo)
2022-09-27 11:16:30 +0200 <[Leary]> Clinton[m]: I'm not sure, but it sounds like you might want `instance (forall a. C (f a)) => C (Exists f)`.
2022-09-27 11:17:19 +0200 <ski> Clinton[m] : also, it still won't work for type classes with binary methods (classes `C t' with methods taking more than one `t' as an input) (except perhaps if you have enough constraints (`Typable' say), enabling you to compare the `a's). and classes with methods taking no `t' as input, but producing some, are also problematic (which `a' to pick ?) .. in some cases, it might work (`Read')
2022-09-27 11:17:28 +0200nschoe(~quassel@178.251.84.79)
2022-09-27 11:17:34 +0200sagax(~sagax_nb@user/sagax) (Ping timeout: 246 seconds)
2022-09-27 11:18:01 +0200ellensol(~ellen@ua-84-216-129-63.bbcust.telenor.se) (Quit: leaving)
2022-09-27 11:18:02 +0200DavidBinder(~DavidBind@event202.raeume.uni-konstanz.de) (Ping timeout: 252 seconds)
2022-09-27 11:18:14 +0200waldo(~waldo@user/waldo) (Ping timeout: 268 seconds)
2022-09-27 11:18:24 +0200 <ski> Clinton[m] : btw, did you see i suggested the `some' package, the other day, as a response to your query about a version that didn't include a constraint ?
2022-09-27 11:18:30 +0200 <ski> @hackage some
2022-09-27 11:18:31 +0200 <lambdabot> https://hackage.haskell.org/package/some
2022-09-27 11:18:48 +0200 <jackdk> Clinton[m]: the other option is to use the tools in https://hackage.haskell.org/package/constraints-extras-0.3.2.1/docs/Data-Constraint-Extras.html and write `instance Has c f => c (Exists f)`. It uses an auxiliary typeclass to enumerate the specific `c (f a)`s you need for that particular f.
2022-09-27 11:19:17 +0200thyriaen(~thyriaen@2a02:8109:8340:686c:7383:e0e2:ad95:9fce) (Remote host closed the connection)
2022-09-27 11:19:25 +0200 <jackdk> This is useful when the `f` is a tag GADT like you see in `dependent-sum` and `dependent-map`
2022-09-27 11:19:32 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 265 seconds)
2022-09-27 11:20:09 +0200thyriaen(~thyriaen@2a02:8109:8340:686c:7383:e0e2:ad95:9fce)
2022-09-27 11:20:10 +0200 <ski> Clinton[m] : anyway, that issue with existentials (later deciding one would like to bundle some more constraints for the hidden type), is one reason why one might want to prefer a version which has a parameter for the constraints (so one could write generic code, not always fixed to a particular set of constraints)
2022-09-27 11:20:34 +0200thyriaen(~thyriaen@2a02:8109:8340:686c:7383:e0e2:ad95:9fce) (Client Quit)
2022-09-27 11:23:21 +0200 <ski> [Leary] : hm, that might work too, in case there actually is an instance `forall a. C (f a)', for the `C' and `f' in question
2022-09-27 11:23:41 +0200DavidBinder(~DavidBind@event202.raeume.uni-konstanz.de)
2022-09-27 11:24:23 +0200 <ski> (i guess e.g. `forall a. Eq (IORef a)' would be one such example .. any others that spring to mind ?)
2022-09-27 11:26:27 +0200Pickchea(~private@user/pickchea)
2022-09-27 11:28:15 +0200ellensol(~ellen@ua-84-216-129-63.bbcust.telenor.se)
2022-09-27 11:28:24 +0200 <ski> Clinton[m] : your exact code for `blah' would work, with [Leary]'s suggestion. but the question is whether you'd be able to satisfy the context on the instance
2022-09-27 11:28:28 +0200zaquest(~notzaques@5.130.79.72) (Remote host closed the connection)
2022-09-27 11:30:02 +0200luffy(~chenqisu1@183.217.203.170)
2022-09-27 11:30:53 +0200rockymarine(~rocky@user/rockymarine)
2022-09-27 11:31:35 +0200 <ski> jackdk : such an instance, for a particular `c' ?
2022-09-27 11:31:50 +0200img(~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in)
2022-09-27 11:33:26 +0200 <kuribas> tdammers: that's a red herring, most people mocking don't have real world side-effects like a nuclear blast.
2022-09-27 11:33:33 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 265 seconds)
2022-09-27 11:34:07 +0200 <kuribas> tdammers: and obviously you want to mock for that (contrived) case.
2022-09-27 11:34:40 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2022-09-27 11:34:45 +0200img(~img@user/img)
2022-09-27 11:34:56 +0200ellensol(~ellen@ua-84-216-129-63.bbcust.telenor.se) (Read error: Connection reset by peer)
2022-09-27 11:35:04 +0200 <kuribas> tdammers: but mocking and effect systems do not make this claim (to avoid irreversable real world interactions), but they use examples like "getting the time".
2022-09-27 11:35:12 +0200 <jackdk> ski: come again?
2022-09-27 11:35:20 +0200 <kuribas> tdammers: I don't see how "getting the time" is having a lasting impact on the world...
2022-09-27 11:35:53 +0200rockymarine(~rocky@user/rockymarine) (Ping timeout: 250 seconds)
2022-09-27 11:36:25 +0200zxx7529(~Thunderbi@user/zxx7529) (Quit: zxx7529)
2022-09-27 11:36:51 +0200 <ski> jackdk : `instance Has c f => c (Exists f)' doesn't look like valid Haskell code to me. i was wondering if you meant it for particular values of `c' (or else maybe meant to write something between the `=>' and the `c')
2022-09-27 11:38:15 +0200 <jackdk> ski: right, yes. some concrete capital C.
2022-09-27 11:38:32 +0200skinods
2022-09-27 11:39:21 +0200 <tdammers> kuribas: it's an extreme example, but I can come up with milder ones if you like
2022-09-27 11:39:34 +0200 <kuribas> tdammers: please do :)
2022-09-27 11:39:39 +0200 <tdammers> "getting the time" is actually a pretty good one
2022-09-27 11:40:01 +0200 <tdammers> how do you test whether your code will work as designed during DST transition, when you're testing against an actual system clock?
2022-09-27 11:40:20 +0200 <kuribas> tdammers: I just pass the time to the pure logic?
2022-09-27 11:40:27 +0200 <tdammers> exactly
2022-09-27 11:40:57 +0200 <kuribas> but that's not what I mean with "mocking".
2022-09-27 11:40:58 +0200 <tdammers> and as long as your code is written in such a way that "get the current real-world time" is just accessing a pure input, that's fine
2022-09-27 11:41:30 +0200 <tdammers> but at some point, your system will interact with a real hardware clock in some way, and somewhere between that and the pure logic on the inside, there's still room for errors, and you want to test that stuff
2022-09-27 11:41:31 +0200luffy(~chenqisu1@183.217.203.170) (Ping timeout: 250 seconds)
2022-09-27 11:41:48 +0200 <tdammers> or how about concurrent code? how do you test concurrency scenarios?
2022-09-27 11:42:04 +0200 <kuribas> tdammers: sure. But that's an integration test, not mocking.
2022-09-27 11:42:12 +0200 <__monty__> There's also more practical reasons. Spinning up a local DB for every test just takes longer than mocking the expected replies.
2022-09-27 11:42:17 +0200 <jackdk> property-based state machine testing?
2022-09-27 11:43:13 +0200 <kuribas> yeah, hedgehog has state maching testing
2022-09-27 11:44:14 +0200 <kuribas> https://hedgehog.qa/article/haskell-state-machine
2022-09-27 11:44:28 +0200Pickchea(~private@user/pickchea) (Quit: Leaving)
2022-09-27 11:46:57 +0200 <tdammers> kuribas: no, that's not "integration testing", you're not interested in the integration between the actual real-time clock and your code, the goal is still to only test your own code
2022-09-27 11:47:14 +0200 <tdammers> it's just that "your own code" has a real-time clock as a sidechannel dependency
2022-09-27 11:47:52 +0200 <kuribas> "your system will interact with a real hardware clock in some way" <- that isn't solved with mocking.
2022-09-27 11:48:18 +0200rockymarine(~rocky@user/rockymarine)
2022-09-27 11:48:20 +0200 <tdammers> OK, let's talk code
2022-09-27 11:48:49 +0200tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz)
2022-09-27 11:48:54 +0200 <tdammers> so you have your time logic that goes something like this: getAgeInYears :: Person -> UTCTime -> Int
2022-09-27 11:49:24 +0200 <tdammers> Pretty straightforward, no? You get the person's birth date (which is part of the Person data type somehow), you take a current UTC time, and it gives you their age in years.
2022-09-27 11:49:43 +0200 <tdammers> You don't need to mock anything to test this, you can just feed it whatever dates you want
2022-09-27 11:49:46 +0200 <tdammers> that's great.
2022-09-27 11:49:46 +0200 <kuribas> you need a timezone as well.
2022-09-27 11:49:53 +0200jonathanx(~jonathan@h-98-128-168-222.NA.cust.bahnhof.se) (Ping timeout: 252 seconds)
2022-09-27 11:49:58 +0200 <tdammers> sure, but let's ignore timezones for the moment
2022-09-27 11:50:00 +0200 <dminuoso> kuribas: A very simple example: You use an external API that is not developed by yourself, and the service provider has no testing/staging environment, only production.
2022-09-27 11:50:12 +0200 <dminuoso> That is an extremely common reality for a lot of developers.
2022-09-27 11:50:29 +0200 <tdammers> let's just assume we have their birth date in UTC, and we're interested in biological age, not bureaucratic age
2022-09-27 11:50:40 +0200 <tdammers> not the point anyway
2022-09-27 11:50:53 +0200 <tdammers> but now we have some other function, say: printPersonAge :: Person -> IO ()
2022-09-27 11:51:01 +0200 <tdammers> which goes something like this:
2022-09-27 11:51:26 +0200 <kuribas> the service provider doesn't need "staging", you can just make a separate account for staging data.
2022-09-27 11:51:44 +0200 <tdammers> printPersonAge p = do { t <- getCurrentUTCTime; printf "%s is %i years old.\n" (personName p) (getAgeInYears p t) }
2022-09-27 11:52:08 +0200 <maerwald[m]> kuribas: ah... separate account for staging on a real blockchain?
2022-09-27 11:52:12 +0200 <tdammers> we can't test this against arbitrary timestamps anymore, because getCurrentUTCTime is a sidechannel dependency
2022-09-27 11:52:16 +0200 <dminuoso> kuribas: That is not always an option.
2022-09-27 11:52:16 +0200 <maerwald[m]> Who's gonna pay for the tests
2022-09-27 11:53:20 +0200 <dminuoso> kuribas: We're a mobile reseller, we have to interface with Telefonica for a variety of services (SIM registration, mobile number portability). This is not something you can really play with.
2022-09-27 11:53:39 +0200 <dminuoso> Nor is this going to be cheap, as activating a SIM card is going to create a real cost for instance.
2022-09-27 11:54:04 +0200 <dminuoso> So the only realistic option is to mock out the API, so our telefonica interfacing code can be tested to some degree.
2022-09-27 11:54:28 +0200 <tdammers> you would even go and write a mock *client* in order to test your mock API
2022-09-27 11:54:48 +0200 <tdammers> so then you have a mock talking to a mock, with no production code at all in your test case
2022-09-27 11:55:25 +0200 <kuribas> dminuoso: sure, that looks like a good usecase.
2022-09-27 11:55:38 +0200 <kuribas> dminuoso: but still you want to test before deploying code to custumers right?
2022-09-27 11:55:44 +0200 <kuribas> dminuoso: or do you test in production?
2022-09-27 11:56:10 +0200ellensol(~ellen@emp-180-217.eduroam.uu.se)
2022-09-27 11:58:10 +0200 <kuribas> if you have some service which is really expensive, takes a long time, or does something dangerous, then having some mocks does make sense.
2022-09-27 11:58:16 +0200 <dminuoso> A mix of both. We have a staging environment which interfaces with external production APIs.
2022-09-27 11:59:08 +0200 <tdammers> I've been in similar situations with an online bookstore, who used a third-party API for backordering books - again not something you can just play with, because your API calls lead to actual physical books being loaded into actual physical crates and onto actual physical trucks that drive across the country and then those actual physical books land on the doorsteps of actual physical people, and
2022-09-27 11:59:10 +0200 <tdammers> someone has to actually pay for those books
2022-09-27 11:59:44 +0200 <tdammers> credit rating checks are another example of APIs that you can't just play with, because all credit rating requests 1) cost money, and 2) contribute to the rating of the subject you're inquiring about
2022-09-27 11:59:59 +0200 <dminuoso> So at some point we do try it out, and incur small costs. But its a manual process where its up to us to ensure we do not have active SIM cards left after the tests are done
2022-09-27 12:00:57 +0200 <dminuoso> Simple request/response schemes are simple to mock though. It gets way more tricky when the API is stateful.
2022-09-27 12:01:02 +0200 <tdammers> in the bookstore API case, we would never run automated tests against the real API, those would all run against a mock; but whenever we suspected that the mock wasn't faithful to the real API, we would occasionally order some books for real and just write them off
2022-09-27 12:01:25 +0200 <tdammers> oh, and the concurrency thing is another prime example
2022-09-27 12:01:42 +0200`2jt(~jtomas@105.red-88-17-232.dynamicip.rima-tde.net) (Remote host closed the connection)
2022-09-27 12:02:06 +0200 <dminuoso> At any rate, mocking for external dependencies is frequently the only choice you have. Internally I would avoid it whenever possible.
2022-09-27 12:02:10 +0200 <tdammers> the nasty thing about concurrency is that you often run into bugs that only occur when the stars align in a certain way, when the timing is juuuuust wrong, and those conditions can be rare but not rare enough to be acceptable
2022-09-27 12:02:43 +0200 <tdammers> so you kind of need a way to doctor the universe such that the "terrible conditions" occur all the time
2022-09-27 12:03:13 +0200 <dminuoso> Keeping mock behavior up-to-date with the actual behavior is going to create real headaches. *But*, if you do this in an automated fashion, you may get the benefit of doing partial integration tests.
2022-09-27 12:03:14 +0200 <kuribas> tdammers: in that case, isn't property testing more useful?
2022-09-27 12:03:20 +0200 <kuribas> tdammers: or something like tla?
2022-09-27 12:03:33 +0200 <tdammers> kuribas: no, because property testing cannot bend time
2022-09-27 12:03:51 +0200 <kuribas> it can "simulate" time
2022-09-27 12:03:51 +0200 <dminuoso> That is, if you have tests asserting that your mock corresponds to the real thing behaviorally, then mocks for internal dependencies can be a really cool thing.
2022-09-27 12:03:51 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-09-27 12:04:02 +0200 <tdammers> that's one peculiarity of Haskell's execution model: our notion of "effects" does not include execution time / performance
2022-09-27 12:04:06 +0200 <__monty__> tdammers: Wait what? People asking for your credit rating affects your credit rating? Negatively, I'm assuming?
2022-09-27 12:04:13 +0200 <dminuoso> __monty__: Of course.
2022-09-27 12:04:24 +0200 <tdammers> __monty__: that's undocumented and considered a trade secret, but, yes.
2022-09-27 12:05:05 +0200 <tdammers> I think the idea is that when there's a lot of credit rating requests, but not a lot of actual credit being granted, then that's a red flag
2022-09-27 12:06:22 +0200 <__monty__> Is this restricted to North America or does it go on behind the scenes everywhere?
2022-09-27 12:06:43 +0200 <dminuoso> __monty__: I would expect most private credit rating agencies to use similar techniques.
2022-09-27 12:06:44 +0200 <tdammers> this was the German "SCHUFA", so no, not North America
2022-09-27 12:07:14 +0200 <int-e> ...when there's no law against it...
2022-09-27 12:07:18 +0200 <dminuoso> It's absurd how SCHUFA manages to dodge GDPR regulators...
2022-09-27 12:07:32 +0200 <int-e> . o O ( systemrelevant )
2022-09-27 12:08:02 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
2022-09-27 12:08:31 +0200 <tdammers> Oh, and it also matters *who* makes the request. If you take a loan from a bank, they will pretty much *always* check your credit rating, so that's not a red flag; but shops selling commodities will not need to issue a query until you have failed to pay your bills with them before and want to order from them again, so when a request like that comes in, it means you have been "misbehaving" before,
2022-09-27 12:08:33 +0200 <tdammers> and that is going to count against you
2022-09-27 12:09:40 +0200 <dminuoso> But differences between countries are interesting again.
2022-09-27 12:09:55 +0200 <__monty__> This doesn't seem ripe for exploitation at all.
2022-09-27 12:10:12 +0200 <dminuoso> Supposedly, having more credit cards improves credit rating in the US. Not being constantly in-debt is weighted negatively there.
2022-09-27 12:10:31 +0200 <int-e> __monty__: tbf that's a given when banks are involved
2022-09-27 12:10:41 +0200 <dminuoso> But I suppose its a mental model designed to train people into constantly overspending.
2022-09-27 12:10:47 +0200xff0x(~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 252 seconds)
2022-09-27 12:10:47 +0200 <int-e> which they are, indirectly as it may seem
2022-09-27 12:11:38 +0200 <int-e> dminuoso: But it's all rasonable: somebody asking for credit who's never needed it before is a red flag too. :-/
2022-09-27 12:11:56 +0200DavidBinder(~DavidBind@event202.raeume.uni-konstanz.de) (Ping timeout: 252 seconds)
2022-09-27 12:12:13 +0200 <dminuoso> I dont know about you, but to me someone constantly asking for credit indicates not having enough money.
2022-09-27 12:12:19 +0200 <int-e> (I think the overspending is a problem. But it's profitable for banks as long as the people don't default. Which is pretty hard to do.)
2022-09-27 12:13:09 +0200zaquest(~notzaques@5.130.79.72)
2022-09-27 12:14:43 +0200 <int-e> ("hard to do"... John Oliver did a piece on bankruptcy a year ago: https://www.youtube.com/watch?v=GzFG0Cdh8D8 ...it was interesting)
2022-09-27 12:14:56 +0200jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2022-09-27 12:16:03 +0200seydar(~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 248 seconds)
2022-09-27 12:17:08 +0200gurkenglas(~gurkengla@p548ac72e.dip0.t-ipconnect.de)
2022-09-27 12:17:52 +0200jakalx(~jakalx@base.jakalx.net)
2022-09-27 12:21:37 +0200jmdaemon(~jmdaemon@user/jmdaemon) (Ping timeout: 260 seconds)
2022-09-27 12:33:23 +0200 <kuribas> tdammers: I wonder, instead of mocking your book order API, couldn't you just have your code return data of type [BookOrder]?
2022-09-27 12:34:29 +0200 <dminuoso> Yes, that's called mocking.
2022-09-27 12:35:12 +0200 <dminuoso> But as I pointed out, simple request/response schemes are trivial to mock - often you can also record real request/responses and just replay them
2022-09-27 12:39:01 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-09-27 12:43:04 +0200seydar(~seydar@154-27-113-252.starry-inc.net)
2022-09-27 12:47:31 +0200seydar(~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 246 seconds)
2022-09-27 12:50:36 +0200 <tdammers> kuribas: in principle yes, except that the interactions are more involved than just producing a list of book orders and throwing it over the fence
2022-09-27 12:50:53 +0200rockymarine(~rocky@user/rockymarine) (Ping timeout: 265 seconds)
2022-09-27 12:52:53 +0200 <tdammers> meaning that your backordering code needs some kind of state tracking, and it also needs to interleave database transactions with the API calls
2022-09-27 12:53:14 +0200 <tdammers> and of course you can model all that in a pure DSL - but guess what, that's *exactly* how you would mock these things in Haskell
2022-09-27 12:54:55 +0200 <kuribas> so, do you need a fancy effect system then?
2022-09-27 12:56:48 +0200xff0x(~xff0x@2405:6580:b080:900:a11c:672e:e426:9fe0)
2022-09-27 13:00:27 +0200seydar(~seydar@154-27-113-252.starry-inc.net)
2022-09-27 13:03:57 +0200rockymarine(~rocky@user/rockymarine)
2022-09-27 13:07:52 +0200kuribas`(~user@d51529c17.access.telenet.be)
2022-09-27 13:09:47 +0200frost(~frost@user/frost)
2022-09-27 13:09:51 +0200rockymarine(~rocky@user/rockymarine) (Ping timeout: 268 seconds)
2022-09-27 13:09:51 +0200kuribas(~user@ptr-17d51en07nrswztiuk4.18120a2.ip6.access.telenet.be) (Ping timeout: 268 seconds)
2022-09-27 13:11:35 +0200talismanick(~talismani@2601:200:c100:c9e0::24ac) (Ping timeout: 244 seconds)
2022-09-27 13:12:06 +0200david(~david@2a01:e34:ec2b:d430:44a:f5ca:9867:d69d) (Ping timeout: 244 seconds)
2022-09-27 13:12:23 +0200 <tdammers> no, though if you're using one anyway, you might be able to use it for that
2022-09-27 13:16:59 +0200ellensol(~ellen@emp-180-217.eduroam.uu.se) (Ping timeout: 265 seconds)
2022-09-27 13:17:11 +0200dminuosowants a ScopedTypeVariableWithoutForall
2022-09-27 13:17:20 +0200 <dminuoso> Call it ImplicitScopedTypeVariables if you want.
2022-09-27 13:17:51 +0200 <dminuoso> Im somewhat surprised this has not been the default from all the way to the beginning.
2022-09-27 13:18:29 +0200Ram-Z(~Ram-Z@li1814-254.members.linode.com) (Quit: ZNC - http://znc.in)
2022-09-27 13:20:31 +0200DavidBinder(~DavidBind@event202.raeume.uni-konstanz.de)
2022-09-27 13:21:37 +0200kuribas`(~user@d51529c17.access.telenet.be) (Ping timeout: 250 seconds)
2022-09-27 13:21:52 +0200Ram-Z(~Ram-Z@li1814-254.members.linode.com)
2022-09-27 13:22:24 +0200rockymarine(~rocky@user/rockymarine)
2022-09-27 13:24:01 +0200 <dr_merijn> dminuoso: That's intentional
2022-09-27 13:24:25 +0200 <dr_merijn> dminuoso: Because the goal was "enabling this extension should not break working code in the module you enable it in"
2022-09-27 13:24:47 +0200coot(~coot@213.134.165.79) (Quit: coot)
2022-09-27 13:25:18 +0200 <dminuoso> dr_merijn: No rather, why ScopedTypeVariables with implicit forall wasnt the default at the beginning of the language.
2022-09-27 13:25:24 +0200 <dr_merijn> ah
2022-09-27 13:26:18 +0200 <dr_merijn> Because that's now how researchers wrote code in the preceding lazy languages? :p
2022-09-27 13:27:10 +0200 <ski> dminuoso : yes, the whole extension is backwards
2022-09-27 13:27:14 +0200 <[Leary]> I would rather we had MandatoryForall from the start.
2022-09-27 13:28:55 +0200ellensol(~ellen@emp-50-230.eduroam.uu.se)
2022-09-27 13:29:30 +0200 <ski> (also, i'd like result type signatures with my `PatternSignatures', please)
2022-09-27 13:30:17 +0200 <dminuoso> Sure, MandatoryForall + type variable scoping would be fine too.
2022-09-27 13:30:21 +0200 <dr_merijn> I'd also like mandatory type signatures :p
2022-09-27 13:30:22 +0200 <dminuoso> Perhaps even the best of all solutions.
2022-09-27 13:30:42 +0200nate3(~nate@98.45.169.16)
2022-09-27 13:30:43 +0200 <dminuoso> Since that quickly lets you identify where quantification occurs, and when you use a type variable from an outer scope
2022-09-27 13:30:43 +0200rockymarine(~rocky@user/rockymarine) (Ping timeout: 252 seconds)
2022-09-27 13:31:49 +0200kuribas(~user@ptr-17d51en07nrswztiuk4.18120a2.ip6.access.telenet.be)
2022-09-27 13:32:31 +0200 <dminuoso> Let UnicodeSyntax be enabled by default too, ∀x. is very rapidly written and does not consume too much width either.
2022-09-27 13:33:29 +0200 <dr_merijn> dminuoso: It's only rapidly written by nerds like you (and maybe me xD), 90% of people don't have a clue how to type that without copy-paste :p
2022-09-27 13:33:56 +0200ellensol_(~ellen@ua-84-216-129-63.bbcust.telenor.se)
2022-09-27 13:34:04 +0200 <dminuoso> So? It's not mandated, non-nerds can type forall just fine.
2022-09-27 13:35:23 +0200 <dr_merijn> The real crime is the . separator for forall being one character while ::, -> and => are 2
2022-09-27 13:35:24 +0200 <kuribas> I don't know how to type it (without looking up some emacs commands).
2022-09-27 13:35:29 +0200 <dr_merijn> Wrecks aligning shit
2022-09-27 13:35:43 +0200 <kuribas> dr_merijn: I have this problem in idris :)
2022-09-27 13:35:43 +0200nate3(~nate@98.45.169.16) (Ping timeout: 268 seconds)
2022-09-27 13:35:43 +0200ellensol(~ellen@emp-50-230.eduroam.uu.se) (Ping timeout: 268 seconds)
2022-09-27 13:35:54 +0200 <dminuoso> dr_merijn: Okay, we should just make it: forall a..
2022-09-27 13:35:57 +0200 <dminuoso> :>
2022-09-27 13:36:00 +0200 <[Leary]> dr_merijn: = too. It should be :=.
2022-09-27 13:36:03 +0200 <kuribas> dr_merijn: suddenly : and -> don't align
2022-09-27 13:36:16 +0200 <dr_merijn> kuribas: I set up my mac to use the SEA interface to type LaTeX and get unicode :p
2022-09-27 13:36:16 +0200 <kuribas> even though IMO swapping : and :: is a mistake in haskell.
2022-09-27 13:36:31 +0200 <dr_merijn> [Leary]: Naah, that's ok, you don't generally need to align that
2022-09-27 13:37:20 +0200 <dminuoso> dr_merijn: but honestly the . issue is easily solved by font-lock mode.
2022-09-27 13:37:26 +0200 <dminuoso> Dont have emacs? Tough luck!
2022-09-27 13:38:08 +0200 <dminuoso> Maybe I should actually font-lock forall to ∀
2022-09-27 13:38:12 +0200waldo_(~waldo@user/waldo) (Ping timeout: 264 seconds)
2022-09-27 13:39:33 +0200 <dr_merijn> dminuoso: How does font-lock mode (whatever it is) solve the . issue?
2022-09-27 13:41:56 +0200rockymarine(~rocky@user/rockymarine)
2022-09-27 13:42:13 +0200 <dminuoso> dr_merijn: You can alter how things get displayed, so you can display the syntactic "." from forall as say ".."
2022-09-27 13:42:41 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 260 seconds)
2022-09-27 13:43:30 +0200yobson___(~yobson@mail.jotron.com) (Remote host closed the connection)
2022-09-27 13:45:12 +0200coot(~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
2022-09-27 13:46:54 +0200DavidBinder(~DavidBind@event202.raeume.uni-konstanz.de) (Ping timeout: 252 seconds)
2022-09-27 13:47:10 +0200 <dr_merijn> Vim can do that, but that seems like a crime against good taste :p
2022-09-27 13:47:51 +0200 <dminuoso> Well, in your view of the world everyone is a criminal, so...
2022-09-27 13:48:02 +0200 <dminuoso> (Except for yourself, perhaps?)
2022-09-27 13:48:40 +0200rockymarine(~rocky@user/rockymarine) (Ping timeout: 268 seconds)
2022-09-27 13:50:46 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Read error: Connection reset by peer)
2022-09-27 13:50:51 +0200skiwould like explicit `forall' prefixing the type signature to *inhibit* the tyvars scoping over the defining clauses
2022-09-27 13:52:08 +0200 <dminuoso> I mean there is some rational argument to be made with the inverse. The forall gives an explicit binding site, and just like in value-world, introduction of an additional binding site shadows outer binders.
2022-09-27 13:52:38 +0200 <dminuoso> It is a bit less convenient perhaps, but I feel like it would read a lot nicer
2022-09-27 13:52:47 +0200 <ski> yes, with `foo :: forall a. ..a..', obviously `a' only ought to be in scope in `..a..', nowhere else
2022-09-27 13:52:57 +0200 <ski> anything else is inconsistent
2022-09-27 13:54:06 +0200beteigeuze(~Thunderbi@a79-169-109-107.cpe.netcabo.pt)
2022-09-27 13:55:07 +0200 <[Leary]> By the same argument, arguments to a function shouldn't be in scope in where decls. Though I could get behind that.
2022-09-27 13:56:21 +0200 <dminuoso> And then we should also get a separate letrec
2022-09-27 13:56:24 +0200 <dr_merijn> [Leary]: That'd be a godawful regression in power that'd make a ton of my code way uglier ;_;
2022-09-27 13:56:34 +0200 <dminuoso> And maybe a whererec
2022-09-27 13:56:48 +0200yobson(~yobson@mail.jotron.com)
2022-09-27 13:57:38 +0200 <ski> [Leary] : no, because i read `foo x = ..y.. where y = ..x..' as `forall x y. (foo x = ..y.. where y = ..x..)', the `forall' scoping over both the main defining equation, and the attached `where'-claause
2022-09-27 13:57:46 +0200 <dr_merijn> My hot take: letrec is stupid and 100% of people (at least those I asked :p) who complain about Haskell not having letrec are 1) not using -Wall (or disabling name shadowing) and 2) being sloppy with their name shadowing and thus entirely too blame for their own misery :p
2022-09-27 13:58:09 +0200fef(~thedawn@user/thedawn)
2022-09-27 13:58:19 +0200DavidBinder(~DavidBind@event202.raeume.uni-konstanz.de)
2022-09-27 13:58:30 +0200 <ski> (you could also say `forall x. exists y.', if you prefer. it doesn't make a difference, since `y = ..x..' uniquely determines `y' (from `x'))
2022-09-27 13:58:33 +0200 <[Leary]> ski: Then you can apply the same scoping logic to type arguments.
2022-09-27 13:58:47 +0200ellensol(~ellen@emp-50-230.eduroam.uu.se)
2022-09-27 13:59:09 +0200 <ski> no, because `foo :: forall a. ..a..' is read as `foo :: (forall a. ..a..)'. `::' is the top-level construction in the AST
2022-09-27 13:59:09 +0200ellensol_(~ellen@ua-84-216-129-63.bbcust.telenor.se) (Ping timeout: 268 seconds)
2022-09-27 13:59:38 +0200dr_merijn(~merijn@86-86-29-250.fixed.kpn.net) (Quit: restart)
2022-09-27 14:02:51 +0200 <[Leary]> The AST isn't important. `foo :: Type; foo = ...` is just a nice syntax for `foo :: Type = ...`
2022-09-27 14:03:01 +0200 <[Leary]> In that view, the forall clearly scopes over the expression body.
2022-09-27 14:03:38 +0200coot(~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
2022-09-27 14:06:14 +0200 <[Leary]> s/Type/Foo
2022-09-27 14:07:58 +0200 <[Leary]> I mean, the AST is important if you're only talking about some strict interpretation of the syntax. But semantically I think this is a better interpretation.
2022-09-27 14:08:54 +0200DavidBinder(~DavidBind@event202.raeume.uni-konstanz.de) (Ping timeout: 252 seconds)
2022-09-27 14:10:57 +0200 <dminuoso> Another thing that comes to mind, is that with the view that `foo :: ..a..` is a top level construct there should be no reason this comes into scope for an unrelated top level construct at all. You would need an explicit @a binder `foo @a = ...` (which I guess is on its way to GHC, I recall a proposal for it), and then pass it along manually.
2022-09-27 14:11:12 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-09-27 14:11:18 +0200 <dminuoso> Consistency would demand no type-signature scoping here.
2022-09-27 14:11:47 +0200lyle(~lyle@104.246.145.85)
2022-09-27 14:13:59 +0200martin02(~silas@141.84.69.76) (Ping timeout: 252 seconds)
2022-09-27 14:15:39 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
2022-09-27 14:18:33 +0200kenran(~user@p200300df77304e009722e54b6bbb7be2.dip0.t-ipconnect.de) (Changing host)
2022-09-27 14:18:33 +0200kenran(~user@user/kenran)
2022-09-27 14:18:44 +0200off^(~off@173-160-76-137-atlanta.hfc.comcastbusiness.net) (Remote host closed the connection)
2022-09-27 14:18:53 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-09-27 14:19:51 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 258 seconds)
2022-09-27 14:20:07 +0200rockymarine(~rocky@user/rockymarine)
2022-09-27 14:21:54 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643)
2022-09-27 14:26:28 +0200merijn(~merijn@86-86-29-250.fixed.kpn.net)
2022-09-27 14:27:23 +0200econo(uid147250@user/econo) (Quit: Connection closed for inactivity)
2022-09-27 14:27:52 +0200titibandit(~titibandi@xdsl-212-8-150-57.nc.de) (Quit: Leaving.)
2022-09-27 14:31:08 +0200ec_(~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
2022-09-27 14:31:08 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
2022-09-27 14:31:08 +0200califax(~califax@user/califx) (Remote host closed the connection)
2022-09-27 14:31:08 +0200jpds1(~jpds@gateway/tor-sasl/jpds) (Read error: Connection reset by peer)
2022-09-27 14:31:08 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
2022-09-27 14:31:41 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643)
2022-09-27 14:31:54 +0200califax(~califax@user/califx)
2022-09-27 14:32:00 +0200jpds1(~jpds@gateway/tor-sasl/jpds)
2022-09-27 14:32:42 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-09-27 14:33:27 +0200ec_(~ec@gateway/tor-sasl/ec)
2022-09-27 14:35:00 +0200merijndr_merijn
2022-09-27 14:35:43 +0200coot(~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
2022-09-27 14:36:20 +0200troydm(~troydm@host-176-37-124-197.b025.la.net.ua) (Ping timeout: 244 seconds)
2022-09-27 14:36:46 +0200frost(~frost@user/frost) (Ping timeout: 252 seconds)
2022-09-27 14:37:55 +0200lemonsnicks(~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net) (Ping timeout: 248 seconds)
2022-09-27 14:37:58 +0200lemonsni-(~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net)
2022-09-27 14:39:12 +0200 <dminuoso> maerwald[m]: By the way. One thing I must get right. Recall how we talked about Monsanto and kill genes that prevent crops from producing seeds that can grow into plants again?
2022-09-27 14:39:30 +0200 <dminuoso> It turns out that this is not an evil thing. Its something farmers should *want*.
2022-09-27 14:39:53 +0200 <dr_merijn> dminuoso: To be fair, it can be both ;)
2022-09-27 14:40:00 +0200rockymarine(~rocky@user/rockymarine) (Ping timeout: 268 seconds)
2022-09-27 14:40:02 +0200pavonia(~user@user/siracusa) (Quit: Bye!)
2022-09-27 14:40:08 +0200 <dminuoso> Yeah but it's not evil at all.
2022-09-27 14:41:07 +0200kenran(~user@user/kenran) (Quit: ERC 5.4.1 (IRC client for GNU Emacs 29.0.50))
2022-09-27 14:41:41 +0200 <dminuoso> The reason you buy Monsanto crops is because you want extremely efficient yield from H1 crop. If that crop generates volunteer plants, it can decimate your profit margin rather quickly.
2022-09-27 14:41:53 +0200kenran(~user@user/kenran)
2022-09-27 14:42:14 +0200 <dminuoso> It's just another mechanism to increase yield.
2022-09-27 14:42:56 +0200kenran(~user@user/kenran) (Client Quit)
2022-09-27 14:49:55 +0200EvanR(~EvanR@user/evanr) (Remote host closed the connection)
2022-09-27 14:50:00 +0200ph88(~ph88@95.90.247.31)
2022-09-27 14:50:22 +0200EvanR(~EvanR@user/evanr)
2022-09-27 14:50:55 +0200cfricke(~cfricke@user/cfricke) (Quit: WeeChat 3.6)
2022-09-27 14:52:30 +0200rockymarine(~rocky@user/rockymarine)
2022-09-27 14:55:31 +0200 <ski> "In that view, the forall clearly scopes over the expression body." -- i still don't agree. i parse `foo :: Foo = ...' as `(foo :: Foo) = ...'. and even if we're not to think of the `::' as subordinate to `=' (so `::'-`=' being some kind of ternary/mixfix operator here), i would still think of it like `(foo) :: (Foo) = (...)'
2022-09-27 14:56:13 +0200 <ski> otoh, with `forall a. (foo :: Foo; foo = ...)' or even `forall a. (foo :: Foo = ...)', the situation is different
2022-09-27 14:57:02 +0200 <ski> dminuoso : considering the type-signature doesn't need to be grouped near the defining equations, yes
2022-09-27 14:57:08 +0200 <ski> [Leary] ^
2022-09-27 14:57:49 +0200 <dminuoso> I guess there is some point to that, you can actually put the type signature at the bottom of the file, but have its scope extend very illogically to some portion of the file.
2022-09-27 14:59:06 +0200king_gs(~Thunderbi@2806:103e:29:ac5e:a16e:4ac9:a89b:4d) (Quit: king_gs)
2022-09-27 14:59:10 +0200 <ski> also, there's `foo,bar :: T; foo = ...; bar = ...'
2022-09-27 14:59:28 +0200 <dminuoso> Heh you were faster than me here. :)
2022-09-27 14:59:46 +0200 <ski> .. about to type the same ? :)
2022-09-27 14:59:54 +0200 <dminuoso> Yeah.
2022-09-27 15:01:06 +0200 <dminuoso> I was considering something slightly more elaborate with quantification - `foo,bar :: forall t. ..t..` - but I was a bit stuck how to conjure a surprising example out of this
2022-09-27 15:02:08 +0200 <dminuoso> Another thing is, if memory serves right the Haskell report does not forbid duplicate type signatures.
2022-09-27 15:02:32 +0200ph88^(~ph88@95.90.247.31)
2022-09-27 15:03:18 +0200waleee(~waleee@h-176-10-137-138.NA.cust.bahnhof.se)
2022-09-27 15:04:15 +0200phma_(phma@2001:5b0:210b:aca8:55c3:ae:c6b9:e9a1)
2022-09-27 15:04:34 +0200 <ski> > let t,t :: (); t = () in t
2022-09-27 15:04:36 +0200 <lambdabot> error:
2022-09-27 15:04:36 +0200 <lambdabot> Duplicate type signatures for ‘t’
2022-09-27 15:04:36 +0200 <lambdabot> at <interactive>:1:5
2022-09-27 15:05:12 +0200acidjnk(~acidjnk@p200300d6e7137a8728215a7bf170f917.dip0.t-ipconnect.de) (Ping timeout: 264 seconds)
2022-09-27 15:05:45 +0200ph88(~ph88@95.90.247.31) (Ping timeout: 265 seconds)
2022-09-27 15:07:54 +0200 <ph88^> hey guys, i get an error like myprogram.EXE: C:\path\logfile: openFile: invalid argument (Invalid argument) when i copy that filepath and look for the file with powershell i can find the file. How can i debug this problem ?
2022-09-27 15:07:56 +0200gurkenglas(~gurkengla@p548ac72e.dip0.t-ipconnect.de) (Ping timeout: 265 seconds)
2022-09-27 15:07:56 +0200phma(~phma@host-67-44-208-193.hnremote.net) (Ping timeout: 265 seconds)
2022-09-27 15:07:58 +0200ellensol_(~ellen@ua-84-216-129-63.bbcust.telenor.se)
2022-09-27 15:08:15 +0200ellensol(~ellen@emp-50-230.eduroam.uu.se) (Ping timeout: 252 seconds)
2022-09-27 15:08:41 +0200waldo(~waldo@user/waldo)
2022-09-27 15:10:38 +0200bontaq`(~user@ool-45779fe5.dyn.optonline.net)
2022-09-27 15:10:45 +0200tomku(~tomku@user/tomku)
2022-09-27 15:11:33 +0200 <geekosaur> "invalid argument" isn't file not found. it's more likely you specified invalid open flags (possibly something not properly supported on Windows)
2022-09-27 15:13:15 +0200bontaq`bontaq
2022-09-27 15:14:16 +0200dr_merijn(~merijn@86-86-29-250.fixed.kpn.net) (Quit: leaving)
2022-09-27 15:16:19 +0200merijn(~merijn@86-86-29-250.fixed.kpn.net)
2022-09-27 15:17:15 +0200merijn(~merijn@86-86-29-250.fixed.kpn.net) (Client Quit)
2022-09-27 15:17:25 +0200causal(~user@50.35.83.177) (Quit: WeeChat 3.6)
2022-09-27 15:18:00 +0200merijn(~dr_merijn@86-86-29-250.fixed.kpn.net)
2022-09-27 15:18:30 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-09-27 15:19:06 +0200matthewmosior(~matthewmo@173.170.253.91) (Remote host closed the connection)
2022-09-27 15:19:13 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-09-27 15:21:25 +0200jonathanx(~jonathan@h-98-128-168-222.NA.cust.bahnhof.se)
2022-09-27 15:21:55 +0200merijndr_merijn
2022-09-27 15:22:55 +0200Joao003(~Joao003@187.85.87.1)
2022-09-27 15:23:08 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 265 seconds)
2022-09-27 15:23:09 +0200 <Joao003> I'm a newbie pls help me
2022-09-27 15:25:04 +0200jero98772(~jero98772@2800:484:1d80:d8ce:3490:26c5:1782:da8c)
2022-09-27 15:27:46 +0200 <geekosaur> what is your issue? (it's usually better to just start woith your actual question)
2022-09-27 15:29:44 +0200 <Joao003> everything
2022-09-27 15:31:39 +0200acidjnk(~acidjnk@p200300d6e7137a8728215a7bf170f917.dip0.t-ipconnect.de)
2022-09-27 15:32:07 +0200 <geekosaur> @where cis194
2022-09-27 15:32:07 +0200 <lambdabot> https://www.seas.upenn.edu/~cis194/spring13/lectures.html
2022-09-27 15:32:49 +0200chexum(~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
2022-09-27 15:32:57 +0200 <geekosaur> this is a good online course with exercises (unlike LYAH which is a good tour but doesn't really teach you much because it doesn't have exercises)
2022-09-27 15:33:33 +0200chexum(~quassel@gateway/tor-sasl/chexum)
2022-09-27 15:33:58 +0200 <geekosaur> that said, "everything" doesn't tell anyone much. are you having problems with a particular part of Haskell, or just looking for learning resources?
2022-09-27 15:34:19 +0200 <geekosaur> or maybe in a Haskell course and just plain lost
2022-09-27 15:35:02 +0200troydm(~troydm@176.37.124.197)
2022-09-27 15:35:09 +0200mesaoptimizer(apotheosis@user/PapuaHardyNet) (Quit: nyaa~)
2022-09-27 15:35:19 +0200mesaoptimizer(apotheosis@user/PapuaHardyNet)
2022-09-27 15:36:15 +0200raym(~raym@user/raym) (Quit: gonna try a theme change)
2022-09-27 15:37:45 +0200raym(~raym@user/raym)
2022-09-27 15:37:53 +0200raym(~raym@user/raym) (Client Quit)
2022-09-27 15:38:59 +0200kenran(~user@user/kenran)
2022-09-27 15:41:12 +0200waldo(~waldo@user/waldo) (Ping timeout: 264 seconds)
2022-09-27 15:42:28 +0200kenran`(~user@user/kenran)
2022-09-27 15:45:23 +0200edm(sid147314@id-147314.hampstead.irccloud.com)
2022-09-27 15:45:34 +0200ellensol_(~ellen@ua-84-216-129-63.bbcust.telenor.se) (Read error: Connection reset by peer)
2022-09-27 15:45:50 +0200wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-09-27 15:45:50 +0200wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-09-27 15:45:50 +0200wroathe(~wroathe@user/wroathe)
2022-09-27 15:46:23 +0200kenran(~user@user/kenran) (Ping timeout: 268 seconds)
2022-09-27 15:48:47 +0200jpds1(~jpds@gateway/tor-sasl/jpds) (Ping timeout: 258 seconds)
2022-09-27 15:50:11 +0200jpds1(~jpds@gateway/tor-sasl/jpds)
2022-09-27 15:50:19 +0200chexum(~quassel@gateway/tor-sasl/chexum) (Ping timeout: 258 seconds)
2022-09-27 15:50:41 +0200chexum(~quassel@gateway/tor-sasl/chexum)
2022-09-27 15:52:01 +0200kenran`kenran
2022-09-27 15:54:16 +0200jakalx(~jakalx@base.jakalx.net) ()
2022-09-27 15:54:26 +0200jakalx(~jakalx@base.jakalx.net)
2022-09-27 15:56:03 +0200jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
2022-09-27 15:56:29 +0200ellensol(~ellen@emp-50-230.eduroam.uu.se)
2022-09-27 15:57:41 +0200 <dminuoso> Mmm, say I have a bunch of polymorphic IsTree operations (but no RULES) that are mildly large that are going to be used at only two types. Two specialisation pragmas would be ideal right?
2022-09-27 15:58:02 +0200 <dminuoso> It feels like INLINABLE does not buy me much if I dont have RULES (or expect the code to optimize well with outer code)
2022-09-27 15:58:45 +0200jpds1(~jpds@gateway/tor-sasl/jpds) (Ping timeout: 258 seconds)
2022-09-27 16:00:35 +0200ellensol(~ellen@emp-50-230.eduroam.uu.se) (Ping timeout: 248 seconds)
2022-09-27 16:01:05 +0200titibandit(~titibandi@xdsl-212-8-150-57.nc.de)
2022-09-27 16:01:31 +0200raym(~aritra@user/raym)
2022-09-27 16:01:39 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 248 seconds)
2022-09-27 16:02:17 +0200rockymarine(~rocky@user/rockymarine) (Ping timeout: 265 seconds)
2022-09-27 16:03:21 +0200kenran(~user@user/kenran) (Remote host closed the connection)
2022-09-27 16:03:26 +0200rockymarine(~rocky@user/rockymarine)
2022-09-27 16:03:50 +0200kenran(~user@user/kenran)
2022-09-27 16:04:11 +0200 <ph88^> geekosaur, i was using openFile filepath ReadMode which works in an older version of my program
2022-09-27 16:04:20 +0200 <dminuoso> Alternatively, if I specify both INLINABLE and SPECIALISE, will I get the specialized unfoldings available as well?
2022-09-27 16:06:00 +0200jpds1(~jpds@gateway/tor-sasl/jpds)
2022-09-27 16:06:26 +0200 <geekosaur> ph88^, odd. any chance you have older build artifacts sitting around, maybe?
2022-09-27 16:07:28 +0200 <ph88^> geekosaur, ye the old binaries are available ... i'm putting some print statements in the old version of the code and rebuild them to compare the input path once again
2022-09-27 16:08:42 +0200 <geekosaur> I didn't mean that, I meant older objects possibly confusing the build. hard for me to imagine it breaking like that otherwise, unless something else changed (ghc version, etc.)
2022-09-27 16:08:53 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:54a2:286d:4b33:4572) (Quit: WeeChat 2.8)
2022-09-27 16:09:45 +0200 <geekosaur> I'd also check the pathname going in except that I think Windows doesn't have invalid-for-open filetypes (e.g. AF_LOCAL sockets, Xenix name files)
2022-09-27 16:13:49 +0200shriekingnoise(~shrieking@186.137.167.202)
2022-09-27 16:13:50 +0200waldo(~waldo@user/waldo)
2022-09-27 16:13:59 +0200 <geekosaur> hm, except maybe directories. on unix that would get EISDIR instead of EINVAL…
2022-09-27 16:16:44 +0200gay9(~quassel@94-168-123-190.static.v4.ziggozakelijk.nl) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
2022-09-27 16:17:59 +0200waldo(~waldo@user/waldo) (Ping timeout: 250 seconds)
2022-09-27 16:19:53 +0200fserucas(~fserucas@2001:818:e376:a400:fb92:70c1:dd88:c7d7)
2022-09-27 16:21:52 +0200coot(~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
2022-09-27 16:23:58 +0200 <ph88^> geekosaur, i cloned the repository again, ghc version is the same. "C:/Users/ph88/log\\SAPR742EDL.IS4" works "C:/Users/ph88/log\\SAPL756HG1.IS4" fails when i right click the file and check file attributes they are also the same (except filesize and contents)
2022-09-27 16:24:03 +0200fserucas(~fserucas@2001:818:e376:a400:fb92:70c1:dd88:c7d7) (Remote host closed the connection)
2022-09-27 16:24:27 +0200fserucas(~fserucas@2001:818:e376:a400:fb92:70c1:dd88:c7d7)
2022-09-27 16:24:43 +0200 <ph88^> by the way i am trying to create 5585 handles on open files at once .. maybe it's because of this
2022-09-27 16:24:54 +0200 <geekosaur> that I wouldn't know
2022-09-27 16:25:29 +0200 <geekosaur> hm, Phyx isn't in #haskell. your question might be for them
2022-09-27 16:25:59 +0200 <geekosaur> I don't see anything obvious (like a Windows device name) wrong
2022-09-27 16:26:19 +0200 <ph88^> how could i put a breakpoint in the openFile function ?
2022-09-27 16:27:11 +0200raym(~aritra@user/raym) (Quit: leaving)
2022-09-27 16:27:40 +0200raym(~aritra@user/raym)
2022-09-27 16:28:16 +0200stiell_(~stiell@gateway/tor-sasl/stiell) (Ping timeout: 258 seconds)
2022-09-27 16:29:26 +0200gurkenglas(~gurkengla@p548ac72e.dip0.t-ipconnect.de)
2022-09-27 16:29:56 +0200 <geekosaur> https://downloads.haskell.org/ghc/9.2.3/docs/html/libraries/base-4.16.2.0/src/GHC.IO.StdHandles.ht… looks slightly weird on Windows, tries POSIX style first and then native
2022-09-27 16:30:01 +0200yobson(~yobson@mail.jotron.com) (Remote host closed the connection)
2022-09-27 16:30:09 +0200ellensol(~ellen@emp-50-230.eduroam.uu.se)
2022-09-27 16:31:01 +0200 <ph88^> is it possible to put a breakpoint there and then step through the code ?
2022-09-27 16:31:51 +0200stiell_(~stiell@gateway/tor-sasl/stiell)
2022-09-27 16:31:54 +0200 <geekosaur> stepping probably requires source to base (therefore GHC)
2022-09-27 16:32:16 +0200KaipiiKaiepi
2022-09-27 16:35:09 +0200ellensol(~ellen@emp-50-230.eduroam.uu.se) (Ping timeout: 265 seconds)
2022-09-27 16:35:27 +0200 <ph88^> i think i'm having this problem https://stackoverflow.com/a/683582
2022-09-27 16:36:26 +0200seydar(~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 268 seconds)
2022-09-27 16:38:37 +0200Sgeo(~Sgeo@user/sgeo)
2022-09-27 16:40:35 +0200yobson(~yobson@mail.jotron.com)
2022-09-27 16:41:17 +0200yobson(~yobson@mail.jotron.com) (Remote host closed the connection)
2022-09-27 16:42:15 +0200yobson(~yobson@mail.jotron.com)
2022-09-27 16:43:23 +0200yobson(~yobson@mail.jotron.com) (Remote host closed the connection)
2022-09-27 16:46:34 +0200david(~david@2a01:e34:ec2b:d430:44a:f5ca:9867:d69d)
2022-09-27 16:48:00 +0200fserucas(~fserucas@2001:818:e376:a400:fb92:70c1:dd88:c7d7) (Remote host closed the connection)
2022-09-27 16:50:33 +0200phma_phma
2022-09-27 16:52:50 +0200yobson(~yobson@mail.jotron.com)
2022-09-27 16:53:24 +0200yobson(~yobson@mail.jotron.com) (Remote host closed the connection)
2022-09-27 16:53:44 +0200Joao003(~Joao003@187.85.87.1) (Quit: Client closed)
2022-09-27 17:01:13 +0200matthewmosior(~matthewmo@173.170.253.91) (Remote host closed the connection)
2022-09-27 17:04:21 +0200dr_merijn(~dr_merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 250 seconds)
2022-09-27 17:04:40 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-09-27 17:04:56 +0200 <ph88^> thanks for thinking along geekosaur i fixed the issue by not opening all handles up front but to wait until they are necessary
2022-09-27 17:06:28 +0200 <ph88^> i'm using streamly to do some thing in parallel .. how can i give each parallel stream a name and then show the current active streams? similar how ghc shows the modules it's currently compiling ?
2022-09-27 17:06:54 +0200geekosaurdoesn't know streamly, sorry
2022-09-27 17:08:24 +0200yobson(~yobson@mail.jotron.com)
2022-09-27 17:09:47 +0200yobson(~yobson@mail.jotron.com) (Remote host closed the connection)
2022-09-27 17:10:19 +0200rockymarine(~rocky@user/rockymarine) (Ping timeout: 268 seconds)
2022-09-27 17:10:26 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 265 seconds)
2022-09-27 17:10:57 +0200ellensol(~ellen@emp-234-199.eduroam.uu.se)
2022-09-27 17:12:50 +0200yobson(~yobson@mail.jotron.com)
2022-09-27 17:13:51 +0200yobson(~yobson@mail.jotron.com) (Remote host closed the connection)
2022-09-27 17:14:36 +0200waldo(~waldo@user/waldo)
2022-09-27 17:14:39 +0200yobson(~yobson@mail.jotron.com)
2022-09-27 17:15:25 +0200stiell_(~stiell@gateway/tor-sasl/stiell) (Ping timeout: 258 seconds)
2022-09-27 17:15:27 +0200yobson(~yobson@mail.jotron.com) (Remote host closed the connection)
2022-09-27 17:15:52 +0200stiell_(~stiell@gateway/tor-sasl/stiell)
2022-09-27 17:18:36 +0200jonathanx(~jonathan@h-98-128-168-222.NA.cust.bahnhof.se) (Remote host closed the connection)
2022-09-27 17:18:54 +0200yobson_(~yobson@mail.jotron.com)
2022-09-27 17:20:16 +0200yobson_(~yobson@mail.jotron.com) (Remote host closed the connection)
2022-09-27 17:23:49 +0200ellensol(~ellen@emp-234-199.eduroam.uu.se) (Ping timeout: 268 seconds)
2022-09-27 17:23:58 +0200fef(~thedawn@user/thedawn) (Remote host closed the connection)
2022-09-27 17:23:58 +0200califax(~califax@user/califx) (Read error: Connection reset by peer)
2022-09-27 17:23:58 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Write error: Connection reset by peer)
2022-09-27 17:23:58 +0200ChaiTRex(~ChaiTRex@user/chaitrex) (Remote host closed the connection)
2022-09-27 17:23:58 +0200jpds1(~jpds@gateway/tor-sasl/jpds) (Read error: Connection reset by peer)
2022-09-27 17:24:15 +0200slack1256(~slack1256@191.126.227.202)
2022-09-27 17:24:24 +0200califax(~califax@user/califx)
2022-09-27 17:24:29 +0200jpds1(~jpds@gateway/tor-sasl/jpds)
2022-09-27 17:24:58 +0200ddb(~ddb@tilde.club)
2022-09-27 17:25:00 +0200cheater(~Username@user/cheater) (Ping timeout: 264 seconds)
2022-09-27 17:25:07 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-09-27 17:25:25 +0200ChaiTRex(~ChaiTRex@user/chaitrex)
2022-09-27 17:26:07 +0200 <slack1256> When using eventlog2html and a .eventlog for profiling, how do I recover the full cost-centre stack from a label? The old .hp format had a text line where it mapped the label like 3320 to a cost-center stack. I don't seen something like using `ghc-events show` on the eventlog.
2022-09-27 17:26:44 +0200yobson_(~yobson@mail.jotron.com)
2022-09-27 17:26:46 +0200cheater(~Username@user/cheater)
2022-09-27 17:27:46 +0200yobson_(~yobson@mail.jotron.com) (Remote host closed the connection)
2022-09-27 17:29:44 +0200yobson_(~yobson@mail.jotron.com)
2022-09-27 17:30:08 +0200yobson_(~yobson@mail.jotron.com) (Remote host closed the connection)
2022-09-27 17:31:05 +0200dr_merijn(~dr_merijn@86-86-29-250.fixed.kpn.net)
2022-09-27 17:32:13 +0200nate3(~nate@98.45.169.16)
2022-09-27 17:32:58 +0200yobson(~yobson@mail.jotron.com)
2022-09-27 17:34:02 +0200yobson(~yobson@mail.jotron.com) (Remote host closed the connection)
2022-09-27 17:37:09 +0200nate3(~nate@98.45.169.16) (Ping timeout: 244 seconds)
2022-09-27 17:39:11 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-09-27 17:41:10 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-09-27 17:43:07 +0200chexum(~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
2022-09-27 17:43:14 +0200ellensol(~ellen@ua-84-216-129-63.bbcust.telenor.se)
2022-09-27 17:43:22 +0200chexum(~quassel@gateway/tor-sasl/chexum)
2022-09-27 17:43:37 +0200nschoe(~quassel@178.251.84.79) (Ping timeout: 246 seconds)
2022-09-27 17:45:14 +0200waleee(~waleee@h-176-10-137-138.NA.cust.bahnhof.se) (Ping timeout: 265 seconds)
2022-09-27 17:47:13 +0200matthewmosior(~matthewmo@173.170.253.91) (Remote host closed the connection)
2022-09-27 17:47:20 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-09-27 17:50:56 +0200yobson_(~yobson@mail.jotron.com)
2022-09-27 17:51:59 +0200yobson_(~yobson@mail.jotron.com) (Remote host closed the connection)
2022-09-27 17:59:49 +0200jero98772(~jero98772@2800:484:1d80:d8ce:3490:26c5:1782:da8c) (Ping timeout: 250 seconds)
2022-09-27 18:00:02 +0200yobson(~yobson@mail.jotron.com)
2022-09-27 18:01:14 +0200yobson(~yobson@mail.jotron.com) (Remote host closed the connection)
2022-09-27 18:03:22 +0200yobson_(~yobson@mail.jotron.com)
2022-09-27 18:04:00 +0200MajorBiscuit(~MajorBisc@145.94.161.115) (Ping timeout: 264 seconds)
2022-09-27 18:04:18 +0200yobson_(~yobson@mail.jotron.com) (Remote host closed the connection)
2022-09-27 18:05:07 +0200jakalx(~jakalx@base.jakalx.net) ()
2022-09-27 18:08:20 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2022-09-27 18:08:25 +0200ec_(~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
2022-09-27 18:09:00 +0200jakalx(~jakalx@base.jakalx.net)
2022-09-27 18:09:23 +0200Guest62(~Guest62@host-95-250-40-158.retail.telecomitalia.it)
2022-09-27 18:09:44 +0200 <Guest62> I’m having issues setting up Xmonad, can I get some help here?
2022-09-27 18:11:05 +0200ec_(~ec@gateway/tor-sasl/ec)
2022-09-27 18:11:34 +0200 <Guest62> Where can I get support cause this place looks pretty dead
2022-09-27 18:11:59 +0200Guest62(~Guest62@host-95-250-40-158.retail.telecomitalia.it) (Client Quit)
2022-09-27 18:12:14 +0200Guest62(~Guest62@host-95-250-40-158.retail.telecomitalia.it)
2022-09-27 18:12:31 +0200 <johnw> Guest62: we're not dead, but we're here for Haskell language discussion; Xmonad as an application should have its own support channels somewhere -- but here is not that place, unfortunately.
2022-09-27 18:12:43 +0200jero98772(~jero98772@2800:484:1d80:d8ce:efcc:cbb3:7f2a:6dff)
2022-09-27 18:13:18 +0200 <yushyin> Guest62: https://xmonad.org/community.html
2022-09-27 18:14:44 +0200 <slack1256> Guest62: XMonad's community tends to coordinate via the xmonad mailing list. I always get answers on there.
2022-09-27 18:15:15 +0200 <Guest62> I’m trying to ask for support on their irc chat but it’s silent
2022-09-27 18:15:23 +0200 <slack1256> Yeah, not that popular.
2022-09-27 18:15:39 +0200 <Guest62> Can I DM in case you know anything about xmonad?
2022-09-27 18:15:45 +0200 <Guest62> i have been trying for 2 days staright
2022-09-27 18:16:04 +0200 <slack1256> Guest62: I prefer not, I at work rn. I came for answers myself :laughs:.
2022-09-27 18:16:31 +0200 <Guest62> This whole Xmonad stuff is making me wanna jms ngo
2022-09-27 18:16:40 +0200 <Guest62> I meant kms
2022-09-27 18:17:22 +0200Guest62(~Guest62@host-95-250-40-158.retail.telecomitalia.it) (Quit: Client closed)
2022-09-27 18:17:35 +0200acidjnk(~acidjnk@p200300d6e7137a8728215a7bf170f917.dip0.t-ipconnect.de) (Ping timeout: 250 seconds)
2022-09-27 18:17:42 +0200 <yushyin> have a little patience, not all irc channels are active around the clock
2022-09-27 18:17:58 +0200 <slack1256> He went away...
2022-09-27 18:18:22 +0200 <yushyin> no patience there :D
2022-09-27 18:20:38 +0200yobson(~yobson@mail.jotron.com)
2022-09-27 18:21:05 +0200yobson(~yobson@mail.jotron.com) (Remote host closed the connection)
2022-09-27 18:23:34 +0200biberu(~biberu@user/biberu) (Read error: Connection reset by peer)
2022-09-27 18:25:39 +0200kenran(~user@user/kenran) (Remote host closed the connection)
2022-09-27 18:26:15 +0200coot(~coot@213.134.165.79)
2022-09-27 18:27:32 +0200Tuplanolla(~Tuplanoll@91-159-69-34.elisa-laajakaista.fi)
2022-09-27 18:28:18 +0200biberu(~biberu@user/biberu)
2022-09-27 18:29:21 +0200chexum(~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
2022-09-27 18:29:56 +0200chexum(~quassel@gateway/tor-sasl/chexum)
2022-09-27 18:31:37 +0200ellensol(~ellen@ua-84-216-129-63.bbcust.telenor.se) (Read error: Connection reset by peer)
2022-09-27 18:31:59 +0200califax(~califax@user/califx) (Remote host closed the connection)
2022-09-27 18:33:31 +0200califax(~califax@user/califx)
2022-09-27 18:35:45 +0200yobson_(~yobson@mail.jotron.com)
2022-09-27 18:36:32 +0200DavidBinder(~DavidBind@46-253-189-142.dynamic.monzoon.net)
2022-09-27 18:37:21 +0200DavidBinder(~DavidBind@46-253-189-142.dynamic.monzoon.net) (Client Quit)
2022-09-27 18:39:15 +0200 <monochrom> Entitled presumptious millenials.
2022-09-27 18:39:27 +0200 <zzz> what is kms ngo?
2022-09-27 18:39:29 +0200tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
2022-09-27 18:39:55 +0200 <c_wraith> the ultimate in self-indulgent drama
2022-09-27 18:40:03 +0200yobson_(~yobson@mail.jotron.com) (Ping timeout: 248 seconds)
2022-09-27 18:40:16 +0200 <zzz> kill many suspicious non governmental orgs?
2022-09-27 18:40:31 +0200 <monochrom> In undegrad academia the PIazza course forum system is pretty popular. I had to explain to my students why I refuse to use it.
2022-09-27 18:40:33 +0200 <Franciman> killy myself probablyu
2022-09-27 18:40:51 +0200coot(~coot@213.134.165.79) (Quit: coot)
2022-09-27 18:41:23 +0200Henson(~kvirc@207.136.101.195)
2022-09-27 18:42:02 +0200 <monochrom> Among other anti-theses to pedagogy, it is designed to foster a competition of "who gives answers most quickly". It brainwashes students to believe in instant gratification. "If you don't get an answer in 2 minutes, the forum is dead."
2022-09-27 18:42:22 +0200 <zzz> monochrom: does it make you wanna kms ngo?
2022-09-27 18:42:56 +0200 <Franciman> apparently, monochrom, it's not due to the nature of the forum, but to the nature of modern society and internet
2022-09-27 18:43:05 +0200mmhat(~mmh@p200300f1c7062305ee086bfffe095315.dip0.t-ipconnect.de)
2022-09-27 18:43:08 +0200 <Franciman> everything RIGHT NOW everything FAST or it's not worth it
2022-09-27 18:43:20 +0200 <monochrom> And here is my economic explanation of why Piazza is designed this way. Its income comes from connecting students with head hunters. Its income does not come from improving pedagogy.
2022-09-27 18:43:59 +0200 <ph88^> does anyone know what is the fastest regex library in haskell ?
2022-09-27 18:44:00 +0200 <monochrom> If you make money from getting more students to sign up, clearly you optimize for kissing up, not teaching.
2022-09-27 18:44:54 +0200 <Franciman> monochrom: that's literally what universities do
2022-09-27 18:44:57 +0200 <EvanR> monochrom, you're not coping with the technological singularity well
2022-09-27 18:45:00 +0200 <Franciman> getting more students to sign up
2022-09-27 18:45:00 +0200 <monochrom> I don't know what's "kms ngo" either.
2022-09-27 18:45:17 +0200 <Franciman> does it imply that your job is optimised to kissing up
2022-09-27 18:45:19 +0200 <Franciman> and not to teaching?
2022-09-27 18:45:38 +0200 <EvanR> exponential increase in students, grades, degrees, until ???
2022-09-27 18:46:30 +0200 <monochrom> Franciman, you're right about the department of management one floor below my department of computer, math, and stats. :)
2022-09-27 18:47:18 +0200 <monochrom> Somehow my department worries about the opposite problem that too many students sign up and we need more ways to screen them and pick out the best ones.
2022-09-27 18:47:57 +0200 <Henson> if they were frustrated with xmonad, kms probably means "kill myself", but I'm not sure what ngo stands for
2022-09-27 18:48:11 +0200 <Franciman> maybe it was
2022-09-27 18:48:13 +0200 <Franciman> kms ngl
2022-09-27 18:48:35 +0200 <monochrom> Indeed if a management course grade is below B, their department starts asking questions. Whereas if a CS course grade is above C, my department starts asking questions!
2022-09-27 18:48:48 +0200 <slack1256> More like ngmi
2022-09-27 18:49:06 +0200 <Franciman> cringe
2022-09-27 18:49:08 +0200 <Franciman> kek
2022-09-27 18:49:15 +0200 <monochrom> And indeed it is true that some managment profs actually give too many hints before an exam to help students get higher grades.
2022-09-27 18:49:45 +0200 <Henson> does anybody use Doom Emacs for Haskell development in NixOS with lsp-haskell?
2022-09-27 18:50:03 +0200 <slack1256> Henson: Close, spacemacs but NixOS and lsp-haskell.
2022-09-27 18:50:03 +0200 <monochrom> OK I'll stop, it has been offtopic heh.
2022-09-27 18:50:07 +0200 <slack1256> Works wonders!
2022-09-27 18:50:32 +0200 <Henson> slack1256: is that installed as a NixOS package, or is spacemacs installed from its own repository?
2022-09-27 18:50:40 +0200 <monochrom> Does Doom Emacs mean you use wasd for cursor movements? >:)
2022-09-27 18:50:55 +0200 <EvanR> I hope doom emacs is what it sounds like
2022-09-27 18:50:55 +0200 <Henson> monochrom: hahahaha!
2022-09-27 18:50:57 +0200 <monochrom> (vi totally missed that opportunity haha)
2022-09-27 18:51:07 +0200 <EvanR> that's vivivi
2022-09-27 18:51:07 +0200 <slack1256> Henson: Emacs from the nixpkgs repository. I just `git clone` spacemacs onto ~/.emacs.d
2022-09-27 18:52:10 +0200 <Henson> slack1256: Do you install the lsp-mode and lsp-haskell modules using NixOS, or does spacemacs have a package installation function that installs its own modules?
2022-09-27 18:52:27 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
2022-09-27 18:52:46 +0200yobson(~yobson@mail.jotron.com)
2022-09-27 18:52:51 +0200 <slack1256> I tell emacs to run everything through the `nix develop` or `nix-shell`
2022-09-27 18:53:32 +0200 <slack1256> On the `nix develop` environment I have lsp-haskell installed.
2022-09-27 18:53:36 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-09-27 18:54:25 +0200 <slack1256> Henson: https://pastebin.com/n3q9kS5b
2022-09-27 18:55:02 +0200 <Henson> slack1256: the problem I have is that Doom Emacs is installed via "git clone" and it installs its own Emacs packages. Vanilla Emacs is installed via Nix and loads Doom Emacs just fine. However, when I am inside a nix-shell doing development, the PATH variable for haskell-language-server and the other Haskell dev tools isn't propagated into the X11 version of Emacs. The console version works...
2022-09-27 18:55:12 +0200 <slack1256> Then when I am on a folder that has a shell.nix file or flake.nix file, I run (eval setup-nix-develop-environment).
2022-09-27 18:55:49 +0200 <Henson> slack1256: fine but the X11 version does not. It's unable to find the various Haskell tools to make lsp-haskell work.
2022-09-27 18:56:18 +0200 <monochrom> Perhaps you have to launch your emacs by a nix-shell command in a terminal, as opposed to clicking an icon...
2022-09-27 18:56:58 +0200 <monochrom> Either that or make an icon that runs said nix-shell command, but that's a lost art...
2022-09-27 18:57:00 +0200 <Henson> monochrom: I launch it from the terminal from within the nix-shell, but I haven't tried using nix-shell to launch emacs itself
2022-09-27 18:57:14 +0200 <slack1256> Henson: If you use the code sample I just sent you, it will work
2022-09-27 18:57:15 +0200 <monochrom> Ah OK then I don't know.
2022-09-27 18:57:39 +0200 <slack1256> You have to let lsp-emacs know how to modify its PATH.
2022-09-27 18:58:03 +0200rockymarine(~rocky@user/rockymarine)
2022-09-27 18:58:09 +0200 <slack1256> The other alternative is to use direnv.
2022-09-27 18:58:22 +0200 <Henson> slack1256: I am new to Emacs, just started learning last week. Can you tell me where to put that code sample. Do I need to manually activate it? Do I have to launch Emacs in a certain way to make it work?
2022-09-27 18:58:56 +0200 <slack1256> Mmm on doom emacs is different. Spacemacs has a .spacemacs file where you put your config.
2022-09-27 18:59:23 +0200 <Henson> slack1256: ok, so you just put that code sample somewhere it will get loaded on startup
2022-09-27 18:59:30 +0200 <slack1256> Right.
2022-09-27 18:59:35 +0200titibandit(~titibandi@xdsl-212-8-150-57.nc.de) (Quit: Leaving.)
2022-09-27 18:59:39 +0200 <monochrom> Oh hey direnv looks interesting and something I might have always wished for!
2022-09-27 18:59:40 +0200califax(~califax@user/califx) (Remote host closed the connection)
2022-09-27 18:59:55 +0200 <Henson> slack1256: are there any special launching instructions, or do you just start emacs from within a nix-shell and it will work?
2022-09-27 19:00:16 +0200 <slack1256> And when you want to activate it, you have to run M-: (eval setup-nix-shell-environment) RET
2022-09-27 19:00:37 +0200 <slack1256> Henson: I *don't* launch emacs inside of nix shell session!
2022-09-27 19:01:11 +0200 <slack1256> I launch emacs and then I let it a sub- nix-shell session where it has access to HLS.
2022-09-27 19:01:46 +0200 <slack1256> Inside the nix-shell session, you don't have permissions to use the X11 socket IIRC.
2022-09-27 19:01:52 +0200califax(~califax@user/califx)
2022-09-27 19:02:47 +0200 <Henson> how do you tell emacs which shell.nix file to use for its environment?
2022-09-27 19:04:25 +0200 <slack1256> Right, I run the M-: (eval setup-nix-shell-enviroment) RET from the main proyect folder
2022-09-27 19:05:30 +0200 <slack1256> First time it will take a while, as it downloading the environment.
2022-09-27 19:06:24 +0200 <Henson> slack1256: ok, I'll give that a try
2022-09-27 19:06:27 +0200Hensoncrosses his fingers
2022-09-27 19:07:51 +0200 <slack1256> Henson: I know it is bad to give advice and go away, but I have to let my doggy on a walk. I will msg tomorrow to see if you did make it.
2022-09-27 19:07:58 +0200slack1256(~slack1256@191.126.227.202) (Remote host closed the connection)
2022-09-27 19:08:50 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-09-27 19:10:18 +0200econo(uid147250@user/econo)
2022-09-27 19:11:14 +0200matthewmosior(~matthewmo@173.170.253.91) (Remote host closed the connection)
2022-09-27 19:13:41 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 265 seconds)
2022-09-27 19:14:37 +0200mbuf(~Shakthi@49.205.84.15) (Quit: Leaving)
2022-09-27 19:15:22 +0200mastarija(~mastarija@2a05:4f46:e03:6000:eff5:a18a:103b:db59)
2022-09-27 19:16:39 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-09-27 19:20:10 +0200zeenk(~zeenk@2a02:2f04:a311:2d00:6865:d863:4c93:799f) (Quit: Konversation terminated!)
2022-09-27 19:22:27 +0200 <mastarija> Does anyone know if it's possible to measure inner angles of a Trail in diagrams in a simple manner?
2022-09-27 19:23:03 +0200 <mastarija> Or get lengths of all Trail segments
2022-09-27 19:25:48 +0200 <[exa]> mastarija: you can get points from it using ToPath, right?
2022-09-27 19:27:05 +0200 <[exa]> (also maybe trailOffsets etc)
2022-09-27 19:27:05 +0200 <mastarija> I can get a `Path` :)
2022-09-27 19:27:13 +0200raym(~aritra@user/raym) (Ping timeout: 265 seconds)
2022-09-27 19:27:32 +0200Midjak(~Midjak@82.66.147.146)
2022-09-27 19:27:47 +0200zoomer123(~zoomer123@24.133.173.162)
2022-09-27 19:27:49 +0200 <byorgey> mastarija: did you see my answers in #diagrams?
2022-09-27 19:27:50 +0200 <mastarija> Yes, trailOffsets can be used to get points, but I was wondering if it's possible to get length of an arc
2022-09-27 19:27:57 +0200 <mastarija> byorgey: yes
2022-09-27 19:28:14 +0200vglfr(~vglfr@145.224.100.190) (Read error: Connection reset by peer)
2022-09-27 19:28:24 +0200 <mastarija> byorgey: however, if I have bezier, I can't really calculate the correct angle
2022-09-27 19:28:25 +0200vglfr(~vglfr@145.224.100.190)
2022-09-27 19:28:53 +0200 <byorgey> oh, sorry, I didn't know you were referring to bezier segments
2022-09-27 19:29:01 +0200 <mastarija> if I have a straight segment and then continue with a bezier, I'd like to get angle between them
2022-09-27 19:29:02 +0200 <byorgey> it should be possible but I'd have to think about it a bit harder
2022-09-27 19:29:19 +0200 <mastarija> I was wondering if there was something ready made
2022-09-27 19:30:32 +0200coot(~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
2022-09-27 19:31:15 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-09-27 19:31:19 +0200img(~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in)
2022-09-27 19:32:28 +0200beteigeuze(~Thunderbi@a79-169-109-107.cpe.netcabo.pt) (Ping timeout: 246 seconds)
2022-09-27 19:34:01 +0200 <EvanR> bezier have simple forms for their tangent vectors
2022-09-27 19:34:10 +0200zoomer123(~zoomer123@24.133.173.162) (Quit: Client closed)
2022-09-27 19:34:14 +0200img(~img@user/img)
2022-09-27 19:35:59 +0200 <mastarija> EvanR: what do you mean?
2022-09-27 19:36:28 +0200 <mastarija> You mean they are simple to calculate, or there is a concept called "simple forms"?
2022-09-27 19:36:34 +0200 <mastarija> :)
2022-09-27 19:36:43 +0200 <monochrom> dot-producting two tangent vectors gives you cos(the angle). The tangent vector for the straight line segment is easy. The tangent vector for the beizer segment has known formulas.
2022-09-27 19:36:47 +0200 <EvanR> if I can do the calculus it means its simple
2022-09-27 19:37:14 +0200 <monochrom> Yeah the English sense of "simple".
2022-09-27 19:37:15 +0200 <EvanR> like, if diagrams doesn't do it for you... it could xD
2022-09-27 19:37:28 +0200 <mastarija> Ok, so they are simple to calculate, got it. I assumed that's the case.
2022-09-27 19:37:43 +0200 <mastarija> I was just looking for a possible ready to go solution in diagrams :P
2022-09-27 19:38:08 +0200 <monochrom> Ah
2022-09-27 19:38:15 +0200beteigeuze(~Thunderbi@a79-169-109-107.cpe.netcabo.pt)
2022-09-27 19:38:32 +0200 <EvanR> it's because cubic bezier are formed from cubic polynomials
2022-09-27 19:38:54 +0200 <EvanR> so like... bring down the power times the coef decrement the power... stuff
2022-09-27 19:38:59 +0200matthewmosior(~matthewmo@173.170.253.91) (Remote host closed the connection)
2022-09-27 19:39:03 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 250 seconds)
2022-09-27 19:39:26 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-09-27 19:39:33 +0200califax(~califax@user/califx) (Ping timeout: 258 seconds)
2022-09-27 19:39:34 +0200 <EvanR> you don't even need transcendental math xD
2022-09-27 19:39:44 +0200califax_(~califax@user/califx)
2022-09-27 19:39:51 +0200 <EvanR> (ok, the inverse cosine monochrom mentioned)
2022-09-27 19:39:58 +0200 <mastarija> Although, I'm not sure how to get appropriate form in diagrams, since all coordinates are relative
2022-09-27 19:40:13 +0200 <mastarija> I'd have to get absolutely calculated path for that somehow.
2022-09-27 19:40:37 +0200 <EvanR> definitely something that needs to be integrated into the lib
2022-09-27 19:41:01 +0200califax_califax
2022-09-27 19:41:48 +0200 <monochrom> You know what, differentiation means relative coordinates are enough.
2022-09-27 19:42:31 +0200beteigeuze(~Thunderbi@a79-169-109-107.cpe.netcabo.pt) (Ping timeout: 250 seconds)
2022-09-27 19:43:17 +0200 <EvanR> yeah a vector doesn't have the concept of where it is based
2022-09-27 19:43:44 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
2022-09-27 19:47:40 +0200raym(~aritra@user/raym)
2022-09-27 19:52:09 +0200 <byorgey> mastarija: there is an easy way in diagrams to get the tangent at the end of a bezier segment, at least
2022-09-27 19:52:28 +0200 <byorgey> I forget what it is called though. Some class like Tangent or tangentOf or tangentAt or something like that
2022-09-27 19:53:34 +0200raym(~aritra@user/raym) (Remote host closed the connection)
2022-09-27 19:53:56 +0200kimjetwav(~user@2607:fea8:235e:b600:14cc:4122:217e:1d45) (Remote host closed the connection)
2022-09-27 19:54:28 +0200fef(~thedawn@user/thedawn)
2022-09-27 19:57:51 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2022-09-27 19:58:21 +0200yobson(~yobson@mail.jotron.com) (Ping timeout: 260 seconds)
2022-09-27 19:58:49 +0200raym(~aritra@user/raym)
2022-09-27 19:59:13 +0200mastarija(~mastarija@2a05:4f46:e03:6000:eff5:a18a:103b:db59) (Ping timeout: 268 seconds)
2022-09-27 20:00:32 +0200yobson_(~yobson@mail.jotron.com)
2022-09-27 20:00:57 +0200califax(~califax@user/califx) (Remote host closed the connection)
2022-09-27 20:01:32 +0200 <monochrom> Oh! Probably diagrams-lib Diagrams.Tangent :)
2022-09-27 20:04:49 +0200califax(~califax@user/califx)
2022-09-27 20:04:51 +0200yobson_(~yobson@mail.jotron.com) (Ping timeout: 248 seconds)
2022-09-27 20:07:28 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-09-27 20:10:19 +0200razetime(~quassel@117.193.7.114) (Remote host closed the connection)
2022-09-27 20:10:34 +0200jmdaemon(~jmdaemon@user/jmdaemon)
2022-09-27 20:15:05 +0200Guest73(~Guest73@p200300ef9718357f545f1ba775403e5c.dip0.t-ipconnect.de)
2022-09-27 20:18:38 +0200yobson_(~yobson@mail.jotron.com)
2022-09-27 20:19:51 +0200 <ph88^> before i opened a bunch of handles and then let several cpu threads work on these files and it parallized great .. now i let each thread open it's own handle and i see the main work is only done on a single thread .. how to debug ?
2022-09-27 20:21:23 +0200waleee(~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
2022-09-27 20:22:56 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-09-27 20:24:01 +0200califax(~califax@user/califx) (Ping timeout: 258 seconds)
2022-09-27 20:24:02 +0200yobson_(~yobson@mail.jotron.com) (Ping timeout: 244 seconds)
2022-09-27 20:24:32 +0200califax(~califax@user/califx)
2022-09-27 20:28:54 +0200LukeHoersten(~LukeHoers@user/lukehoersten)
2022-09-27 20:32:47 +0200 <monochrom> Under lack of information, blanket answer: Bisection to gain more information or at least identify code difference for potential blame; add more printf debugging to every thread to see where it is blocked.
2022-09-27 20:34:21 +0200 <monochrom> But that may be answering the wrong question.
2022-09-27 20:34:56 +0200 <ph88^> i'm using streamly, i'm not putting things on each threads manually
2022-09-27 20:35:01 +0200 <ph88^> thanks for thinking along monochrom
2022-09-27 20:35:49 +0200LukeHoersten(~LukeHoers@user/lukehoersten) (Ping timeout: 246 seconds)
2022-09-27 20:36:21 +0200kuribas(~user@ptr-17d51en07nrswztiuk4.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 26.3))
2022-09-27 20:36:51 +0200 <monochrom> The right question is not to debug an exiting rube goldberg machine, but to attempt to create from scratch a minimum reproduction that tries to corroborate with the hypothesis "opening all handles before creating threads is different from creating threads then open handles".
2022-09-27 20:37:15 +0200yobson(~yobson@mail.jotron.com)
2022-09-27 20:37:32 +0200 <monochrom> My expectation being you won't be able to reproduce that independently, therefore must reject the hypothesis and concede that something else you haven't thought of caused the problem.
2022-09-27 20:38:01 +0200 <monochrom> IOW the scientific method.
2022-09-27 20:41:10 +0200akegalj(~akegalj@213-202-90-31.dsl.iskon.hr)
2022-09-27 20:41:15 +0200 <ph88^> kk
2022-09-27 20:41:26 +0200akegalj(~akegalj@213-202-90-31.dsl.iskon.hr) ()
2022-09-27 20:41:29 +0200akegalj(~akegalj@213-202-90-31.dsl.iskon.hr)
2022-09-27 20:42:31 +0200 <EvanR> if you had a proof the parallel algorithm were correct, you could show it to the computer and ask for your money back
2022-09-27 20:42:39 +0200titibandit(~titibandi@xdsl-212-8-150-57.nc.de)
2022-09-27 20:45:40 +0200 <Henson> I figured out it. Doom Emacs uses its own environment-setting file. Whenever you type "doom sync" or "doom env" it will regenerate this environment file based on the environment of the shell that called this script. So all I have to do is run "doom env" from within my Nix shell and it will work.
2022-09-27 20:46:22 +0200 <EvanR> how did someone name something doom and have it not be related to doom
2022-09-27 20:46:53 +0200 <Henson> EvanR: the splash screen of Doom Emacs is a huge ASCII-art DOOM logo, so it's related in that sense :-)
2022-09-27 20:46:58 +0200 <EvanR> ok good
2022-09-27 20:47:12 +0200 <monochrom> Hell, how did Prolog name something "functor" and have it not be related to functor >:)
2022-09-27 20:47:22 +0200 <monochrom> s/Prolog/the Prolog people/
2022-09-27 20:48:40 +0200 <geekosaur> or s/Prolog/C++/
2022-09-27 20:49:00 +0200 <tdammers> let's just hope the JavaScript crowd never gets wind of that word
2022-09-27 20:49:02 +0200 <monochrom> More roast: How did the C++ people name something "acquisition is initialization" and have it not be related to acquisition or initialization? (It is about release, destruction, and exiting a lexical scope.)
2022-09-27 20:49:34 +0200 <monochrom> Fortunately the C++ people have backed off from "functor" and now say "function object".
2022-09-27 20:50:09 +0200 <yushyin> that's nice of them
2022-09-27 20:50:17 +0200 <Franciman> i wonder when haskell decides to switch to endofunctor
2022-09-27 20:50:38 +0200 <monochrom> Maybe 30 years.
2022-09-27 20:50:54 +0200 <geekosaur> RAII is related iff you know that any scope-based initialization implies scope-based deinitialization
2022-09-27 20:51:02 +0200 <geekosaur> that one doesn't bother me
2022-09-27 20:51:04 +0200 <monochrom> I mean that's also how long from C++'s "functor" to "function object".
2022-09-27 20:51:24 +0200 <Franciman> in haskell's case will be never
2022-09-27 20:51:29 +0200 <Franciman> ;)
2022-09-27 20:52:26 +0200 <geekosaur> probably correct since it'd cause even more churn than AMP or monad of no return
2022-09-27 20:52:27 +0200 <monochrom> I am bothered because even "FILE *f = fopen(...)" satisfies both words "acquisition" and "initialization" so it's the worst name possible.
2022-09-27 20:52:50 +0200 <geekosaur> but that's C think
2022-09-27 20:53:31 +0200 <monochrom> And then is "f <- openFile ..." Haskell think?
2022-09-27 20:53:34 +0200 <geekosaur> you don't *do* that in C++, you create a new scope for it
2022-09-27 20:53:48 +0200 <geekosaur> and let it go out of scope to deinitialize
2022-09-27 20:54:07 +0200 <geekosaur> that's imported C think. haskell think is withFile
2022-09-27 20:54:25 +0200chomwitt(~chomwitt@2a02:587:dc14:f500:71c3:d40e:3c82:7bf3)
2022-09-27 20:54:32 +0200fef(~thedawn@user/thedawn) (Remote host closed the connection)
2022-09-27 20:54:41 +0200Lord_of_Life_(~Lord@user/lord-of-life/x-2819915)
2022-09-27 20:54:44 +0200 <monochrom> So a correct name is "lexically scoped acqusition and release".
2022-09-27 20:54:44 +0200 <ph88^> can i get rts statistics in a easy computer parsable format ?
2022-09-27 20:54:50 +0200 <monochrom> LSAR
2022-09-27 20:55:03 +0200 <geekosaur> but in C++ that is implicit, as I said
2022-09-27 20:55:14 +0200fef(~thedawn@user/thedawn)
2022-09-27 20:55:47 +0200 <geekosaur> it's the native programming idiom, so something that fits that idiom is reasonably so named
2022-09-27 20:56:09 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 265 seconds)
2022-09-27 20:56:14 +0200__monty__(~toonn@user/toonn) (Quit: leaving)
2022-09-27 20:56:31 +0200 <geekosaur> you trip over it because you';re accustomed to C idiom instead of C++
2022-09-27 20:56:58 +0200 <geekosaur> but a new C++ programmer would be told not to do that
2022-09-27 20:57:28 +0200Lord_of_Life_Lord_of_Life
2022-09-27 21:00:29 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
2022-09-27 21:00:50 +0200jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2022-09-27 21:01:01 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643)
2022-09-27 21:01:11 +0200lemonsni-(~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net) (Quit: ZNC 1.8.2 - https://znc.in)
2022-09-27 21:01:13 +0200jakalx(~jakalx@base.jakalx.net)
2022-09-27 21:04:46 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2022-09-27 21:06:38 +0200 <dminuoso> monochrom: Well I think the problem is that RAII has turned into *more* than was originally meant.
2022-09-27 21:06:42 +0200 <monochrom> I am not sure whether I'm accustomed to the C idiom or anyone would invent that idiom on their own as a first instinct until being told what can go wrong with it.
2022-09-27 21:06:50 +0200pavonia(~user@user/siracusa)
2022-09-27 21:07:13 +0200 <dminuoso> RAII, as its name suggests, is about tying resource initialization (that is, establishment of whatever invariants you want your stateful data and the external resource to hold) to acquisition.
2022-09-27 21:07:15 +0200 <geekosaur> my impression is that it's intended as a counter to the other approved C++ way of acquisition, namely operator new
2022-09-27 21:07:40 +0200 <dminuoso> It's about tying getResource and initResource together into a singular atomic (not in the sense of concurrency) step
2022-09-27 21:07:47 +0200 <monochrom> I mean in Lisp and Haskell we do "f x = x : x : []" all the time. Right there I'm allocating a couple of cons cells that are deliberating not destructed upon exiting its lexical scope.
2022-09-27 21:08:17 +0200 <geekosaur> but you should generally avoid acquiring resources that way unless needed; scoped is preferred, since C++ doesn't do GC so `new`d resources must be explicitly `delete`d
2022-09-27 21:09:01 +0200 <geekosaur> and something like `fopen` is C-think: you should use a constructor, implying an object with a constructor and probably a destructor
2022-09-27 21:09:32 +0200 <monochrom> I say that it is not that C taught us to do it, even not that Algol taught us to do it, rather it's every human's first instinct and so we taught every language to do it until 30 years later we realize that it doesn't scale.
2022-09-27 21:09:46 +0200 <dminuoso> I think its a common theme to pick up on a word or abbreviation that is not well understood, and using it for whatever you think it really means (or what it means to you)
2022-09-27 21:09:56 +0200 <dminuoso> That's how `function` has become twisted in programming languages the way it has
2022-09-27 21:10:25 +0200 <tdammers> naming abstract things is hard, so it's actually surprising we have a few that have perfectly reasonable names
2022-09-27 21:10:53 +0200 <dminuoso> Just like people use REST whenever they see a HTTP-based API, despite almost none of them having read the initial PhD thesis that introduced a very clear definition of what REST even means.
2022-09-27 21:11:08 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 265 seconds)
2022-09-27 21:11:35 +0200 <tdammers> haha, yeah. literally just serving HTML pages over HTTP is closer to "REST" than 99% of today's "REST"-APIs
2022-09-27 21:11:55 +0200califax(~califax@user/califx) (Remote host closed the connection)
2022-09-27 21:13:09 +0200 <geekosaur> mm, I'm thinking in terms of C++ history, as programmers realized what worked and what didn't and that new/delete (never mind C style) meant keeping the same bugs you had with C, so scoped variables were to be strongly preferred
2022-09-27 21:13:16 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:e619:12ba:2d7e:50d6)
2022-09-27 21:13:17 +0200 <geekosaur> RAII grew out of that but came later
2022-09-27 21:14:46 +0200califax(~califax@user/califx)
2022-09-27 21:16:29 +0200 <monochrom> dminuoso: Oh! Probably ACID too.
2022-09-27 21:17:18 +0200 <monochrom> I had thought "ACID is a fad" until one day I learned that there was a very good paper defining ACID rigorously.
2022-09-27 21:17:34 +0200jargon(~jargon@184.101.186.15)
2022-09-27 21:17:34 +0200 <EvanR> whatever RAII is, I'm really dejected by Godot which has crippled the class initializer so it can't practically take arguments most of the time, and so can't properly initialize anything. You have to do that separately, after object creation!
2022-09-27 21:17:40 +0200 <dminuoso> Would you happen to remember that paper, monochrom?
2022-09-27 21:17:42 +0200 <EvanR> dunno if that's normal in OOP but its terrible
2022-09-27 21:18:00 +0200 <monochrom> (And predating "ACID" becoming a popular word.)
2022-09-27 21:18:13 +0200 <monochrom> I forgot. But it was a serious database research paper.
2022-09-27 21:18:37 +0200 <EvanR> it's using some sort of resource initialization XOR resource acquisition
2022-09-27 21:19:11 +0200 <EvanR> another name for it, dumb constructor pattern
2022-09-27 21:19:19 +0200 <dminuoso> Also on that note, I just recently learned that not all PostgreSQL transactions are greated equal, and that the default isolation level is READ COMMITED which in principle permit non-repeating reads, phantom reads and serialization anomalies.
2022-09-27 21:19:47 +0200 <monochrom> Oh! https://queue.acm.org/detail.cfm?id=3469647 has a reference, look for "I had a chance recently to chat with my old friend, Andreas Reuter, the inventor of ACID. He and his Ph.D. advisor, Theo Härder, coined the term in their famous 1983 paper, Principles of Transaction-Oriented Database Recovery."
2022-09-27 21:20:53 +0200jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Remote host closed the connection)
2022-09-27 21:21:03 +0200 <dminuoso> DOI 10.1145/289.291 seems to be it :)
2022-09-27 21:21:07 +0200acidjnk(~acidjnk@p200300d6e7137a16b8753f0c5356e398.dip0.t-ipconnect.de)
2022-09-27 21:22:05 +0200 <monochrom> The acmqueue article itself is also worth a read. It explains that most of us misunderstood or watered-down the "C", and here is the right description.
2022-09-27 21:25:36 +0200jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
2022-09-27 21:26:01 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-09-27 21:26:52 +0200 <EvanR> yeah default isolation levels are usually not absolute
2022-09-27 21:26:58 +0200 <EvanR> for performance
2022-09-27 21:27:14 +0200 <monochrom> EvanR: So don't use Godot? :) Its way is the opposite of what's normal in OOP.
2022-09-27 21:27:51 +0200 <EvanR> it's kind of the only game (engine) in town
2022-09-27 21:28:32 +0200 <monochrom> Normal OOP all the way between python, js, java, c++ is that each constructor is empowered to properly initialize everything, you should never need to call another init method separately.
2022-09-27 21:28:46 +0200 <EvanR> ;_;
2022-09-27 21:29:22 +0200 <EvanR> yeah it's bad even by oop standards
2022-09-27 21:29:34 +0200 <tdammers> Although the "initialize an object with dummy values and then progressively replace them with the real values by means of 'fluid' method calls" *is* a common pattern in OOP
2022-09-27 21:30:10 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
2022-09-27 21:30:27 +0200 <monochrom> Yeah I just mean it's the norm. There are exceptions and they're well justified.
2022-09-27 21:30:38 +0200 <EvanR> yeah that's one way, and in some sense just as error prone because crashing now because you forgot to set a property, vs carrying on with the wrong property for unknown time
2022-09-27 21:30:58 +0200 <tdammers> it's usually a way of working around limited constructor syntax
2022-09-27 21:31:20 +0200 <monochrom> Or alternatively I mean that normal languages don't force you to initialize later.
2022-09-27 21:32:05 +0200 <EvanR> the reason is dumb: yeah the constructor works, but the serialization doesn't use it. It restores objects by creating them directly, first with .new() then setting all the properties from disk
2022-09-27 21:32:37 +0200 <EvanR> so it's broken if and only if the class is used in that context
2022-09-27 21:33:14 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2022-09-27 21:33:42 +0200 <EvanR> I wonder if that part could be fixed
2022-09-27 21:33:44 +0200nate3(~nate@98.45.169.16)
2022-09-27 21:37:43 +0200rockymarine(~rocky@user/rockymarine) (Ping timeout: 265 seconds)
2022-09-27 21:37:44 +0200 <dminuoso> Progressively replacing dummy values is also a coping mechanism for a code region that is too complex to do differently in.
2022-09-27 21:37:46 +0200mc47(~mc47@xmonad/TheMC47) (Remote host closed the connection)
2022-09-27 21:39:11 +0200nate3(~nate@98.45.169.16) (Ping timeout: 268 seconds)
2022-09-27 21:39:20 +0200 <dminuoso> It is the wonder of imperative programming, that you can always solve most problems by incrementally adding adhoc code.
2022-09-27 21:40:34 +0200 <dminuoso> Heck, even GHC has quite a few places where fields are, depending on the state, initialized with `error "blahablah"` because the alternative of using separate data types or using more sum types introduces too much extra effort
2022-09-27 21:41:10 +0200 <geekosaur> haskell does that if you fail to initialize a record field explicitly. at least it has a warning for it these days
2022-09-27 21:41:16 +0200yobson(~yobson@mail.jotron.com) (Ping timeout: 246 seconds)
2022-09-27 21:41:37 +0200 <dminuoso> Right in GHC these would contain error diagnostics about what went wrong if you ever managed to access those fields.
2022-09-27 21:44:28 +0200talismanick(~talismani@2601:200:c100:c9e0::24ac)
2022-09-27 21:44:55 +0200LukeHoersten(~LukeHoers@user/lukehoersten)
2022-09-27 21:47:19 +0200waldo(~waldo@user/waldo) (Quit: quit)
2022-09-27 21:49:23 +0200ubert(~Thunderbi@178.165.197.10.wireless.dyn.drei.com) (Ping timeout: 252 seconds)
2022-09-27 21:51:05 +0200rockymarine(~rocky@user/rockymarine)
2022-09-27 21:53:00 +0200yobson(~yobson@mail.jotron.com)
2022-09-27 21:57:23 +0200yobson(~yobson@mail.jotron.com) (Ping timeout: 248 seconds)
2022-09-27 21:58:00 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-09-27 21:58:07 +0200slack1256(~slack1256@191.126.227.202)
2022-09-27 21:58:54 +0200LukeHoersten(~LukeHoers@user/lukehoersten) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2022-09-27 22:01:54 +0200ellensol(~ellen@178-78-210-152.customers.ownit.se)
2022-09-27 22:02:06 +0200chomwitt(~chomwitt@2a02:587:dc14:f500:71c3:d40e:3c82:7bf3) (Remote host closed the connection)
2022-09-27 22:02:36 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 260 seconds)
2022-09-27 22:04:16 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 244 seconds)
2022-09-27 22:05:10 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:e619:12ba:2d7e:50d6) (Quit: WeeChat 2.8)
2022-09-27 22:05:16 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-09-27 22:08:03 +0200jinsun(~jinsun@user/jinsun) (Ping timeout: 248 seconds)
2022-09-27 22:09:30 +0200yobson(~yobson@mail.jotron.com)
2022-09-27 22:09:37 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 246 seconds)
2022-09-27 22:10:50 +0200mvk(~mvk@2607:fea8:5ce3:8500::778c)
2022-09-27 22:20:32 +0200wroathe(~wroathe@50.205.197.50)
2022-09-27 22:20:33 +0200wroathe(~wroathe@50.205.197.50) (Changing host)
2022-09-27 22:20:33 +0200wroathe(~wroathe@user/wroathe)
2022-09-27 22:20:53 +0200jinsun(~jinsun@user/jinsun)
2022-09-27 22:22:25 +0200 <ph88^> i'm parsing some big log files line by line and it's going really slow .. does anyone know how to do that in a fast way ?
2022-09-27 22:23:04 +0200marinelli[m](~marinelli@2001:470:69fc:105::2d8)
2022-09-27 22:23:05 +0200gmg(~user@user/gehmehgeh) (Quit: Leaving)
2022-09-27 22:26:26 +0200 <slack1256> ph88^: Without more specific there are not actionable advice: 1) have you tried not do that? maybe load onto a DB and interface doing that if the file is CSV 2) Are you using Bytestring/Text or everything goes through String? 3) Do you need to process all the lines? if so that is a hard limit, you *will* need to process step by step.
2022-09-27 22:29:14 +0200 <sm> 4) are you using memory inefficiently, causing the RTS to do a bunch of wasteful work ? Check with a profile chart or +RTS -s
2022-09-27 22:30:26 +0200nate3(~nate@98.45.169.16)
2022-09-27 22:31:18 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-09-27 22:34:17 +0200marinelli[m](~marinelli@2001:470:69fc:105::2d8) (Quit: Reconnecting)
2022-09-27 22:34:31 +0200marinelli[m](~marinelli@2001:470:69fc:105::2d8)
2022-09-27 22:35:58 +0200 <EvanR> using String = [Char] subtly wrong will cause severe slowdown, or back when I started haskell, exhaustion of allowed stack, whatever the error for that is called
2022-09-27 22:36:18 +0200 <EvanR> now I think it will just let you use insane amounts of memory
2022-09-27 22:37:08 +0200 <EvanR> using [Char] properly shouldn't be that bad but not as efficient as Text
2022-09-27 22:40:04 +0200coot(~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
2022-09-27 22:40:55 +0200 <EvanR> [Char] vs Text turns out to be 1 of the main reasons C exists. Strings in B consisted of arrays of words with 2, 4, 5, or whatever convenient number of characters was convenient to pack into the word, per word
2022-09-27 22:41:37 +0200 <EvanR> when computers starting coming out with byte-based addresses, packed chars started looking very dumb
2022-09-27 22:42:11 +0200 <EvanR> so they added types to B so you can specify if you're talking about int (word) or char (byte)
2022-09-27 22:42:44 +0200 <EvanR> RIP
2022-09-27 22:43:00 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2022-09-27 22:43:33 +0200 <EvanR> two ways to process the packed strings included unpacking the string into 1 char per word, processing, then repacking. And using bit munging to operate on individual chars while packed
2022-09-27 22:43:35 +0200 <geekosaur> computers already existed with byte based addresses. but they were IBM mainframes 🙂
2022-09-27 22:43:49 +0200 <EvanR> and here we are dealing with that exact thing in haskell
2022-09-27 22:44:04 +0200 <geekosaur> everyone else went wigth bizarre word sizes (DEC liked multiples of 3 for some reason, for example)
2022-09-27 22:46:35 +0200akegalj(~akegalj@213-202-90-31.dsl.iskon.hr) (Quit: leaving)
2022-09-27 22:46:39 +0200 <[exa]> 36 bits/word ftw
2022-09-27 22:47:27 +0200 <EvanR> so if haskell is on the right track with having both unpacked and packed strings, C shouldn't exist!
2022-09-27 22:47:32 +0200 <geekosaur> and weirdass addressing modes thatlet you select consecutive runs of multiple-of-3 bits to operate on
2022-09-27 22:48:18 +0200 <geekosaur> TYPE L 8 \o/
2022-09-27 22:50:31 +0200matthewmosior(~matthewmo@173.170.253.91) (Remote host closed the connection)
2022-09-27 22:50:37 +0200matthewm_(~matthewmo@173.170.253.91)
2022-09-27 22:57:24 +0200arahael(~arahael@203.217.43.212) (Ping timeout: 264 seconds)
2022-09-27 22:59:59 +0200matthewm_(~matthewmo@173.170.253.91) (Remote host closed the connection)
2022-09-27 23:00:34 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2022-09-27 23:01:44 +0200jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2022-09-27 23:04:29 +0200kenran(~user@user/kenran)
2022-09-27 23:04:43 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-09-27 23:04:53 +0200kenran(~user@user/kenran) (Remote host closed the connection)
2022-09-27 23:05:31 +0200mastarija(~mastarija@2a05:4f46:e03:6000:480e:b508:3f46:25c4)
2022-09-27 23:08:51 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
2022-09-27 23:09:04 +0200arahael(~arahael@203.217.43.212)
2022-09-27 23:09:19 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-09-27 23:13:46 +0200 <talismanick> Is there a notion of "eventual uniqueness" for linear values?
2022-09-27 23:14:40 +0200jakalx(~jakalx@base.jakalx.net)
2022-09-27 23:14:57 +0200 <talismanick> Linearity alone doesn't guarantee uniqueness because a nonlinear value can have multiple references and then be made linear (so no more can be added), but has anyone looked into what it takes to show a linear value will also be uniqueness when it's consumed?
2022-09-27 23:15:19 +0200 <talismanick> will also be unique*
2022-09-27 23:17:39 +0200yobson(~yobson@mail.jotron.com) (Read error: Connection reset by peer)
2022-09-27 23:17:46 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 265 seconds)
2022-09-27 23:18:10 +0200Guest73(~Guest73@p200300ef9718357f545f1ba775403e5c.dip0.t-ipconnect.de) (Quit: Client closed)
2022-09-27 23:18:10 +0200yobson(~yobson@mail.jotron.com)
2022-09-27 23:19:59 +0200takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2022-09-27 23:21:55 +0200titibandit(~titibandi@xdsl-212-8-150-57.nc.de) (Remote host closed the connection)
2022-09-27 23:22:18 +0200yobson(~yobson@mail.jotron.com) (Ping timeout: 244 seconds)
2022-09-27 23:23:29 +0200 <jackdk> I'm not really across the area, but I think linear-base does it by putting creation into a linear monad (like in https://hackage.haskell.org/package/linear-base-0.2.0/docs/System-IO-Resource-Linear.html )
2022-09-27 23:23:49 +0200zer0bitz_(~zer0bitz@2001:2003:f748:2000:add8:471e:b979:aa97) (Ping timeout: 246 seconds)
2022-09-27 23:27:43 +0200ft(~ft@p3e9bc57b.dip0.t-ipconnect.de)
2022-09-27 23:30:06 +0200 <talismanick> jackdk: Eh, but isn't that giving up the game a little too quickly? Monad opacity around code which manages resources explicitly discards the benefits, no?
2022-09-27 23:30:11 +0200mmhat(~mmh@p200300f1c7062305ee086bfffe095315.dip0.t-ipconnect.de) (Ping timeout: 248 seconds)
2022-09-27 23:30:16 +0200 <talismanick> + I still find monad transformers painful and confusing :)
2022-09-27 23:31:15 +0200acidjnk(~acidjnk@p200300d6e7137a16b8753f0c5356e398.dip0.t-ipconnect.de) (Ping timeout: 248 seconds)
2022-09-27 23:31:58 +0200notzmv(~zmv@user/notzmv) (Ping timeout: 268 seconds)
2022-09-27 23:32:39 +0200 <jackdk> Beats me. linear haskell was a balancing act based on what you can actually retrofit onto a rather old language. As I said, I'm not really across it: I tried to use it in a side project and was stymied by missing functions in linear-base. I would say that if you're still struggling with transformers, my advice for learning would be to defer thinking about anything linear.
2022-09-27 23:32:47 +0200michalz(~michalz@185.246.207.200) (Remote host closed the connection)
2022-09-27 23:33:53 +0200nate3(~nate@98.45.169.16) (Ping timeout: 252 seconds)
2022-09-27 23:34:04 +0200mastarija(~mastarija@2a05:4f46:e03:6000:480e:b508:3f46:25c4) (Quit: WeeChat 3.5)
2022-09-27 23:34:31 +0200 <[exa]> talismanick: maybe better just not allow anyone to create the references easily in the first place
2022-09-27 23:35:34 +0200yobson_(~yobson@mail.jotron.com)
2022-09-27 23:36:00 +0200 <[exa]> as in, if the value was nonlinear previously and no kittens exploded, why care making it linear?
2022-09-27 23:36:28 +0200 <talismanick> that's back to uniqueness typing, no?
2022-09-27 23:36:51 +0200 <talismanick> unless I'm misunderstanding
2022-09-27 23:37:00 +0200causal(~user@50.35.83.177)
2022-09-27 23:37:53 +0200 <[exa]> ok let's get technical; you say "references", I guess you mean the haskellish "2 bindings cheaply pointing to 1 thing", right?
2022-09-27 23:38:14 +0200 <talismanick> yeah, a pointer
2022-09-27 23:39:11 +0200 <talismanick> I haven't read much about closure reduction and the STG, so my default mental model for execution is graph reduction
2022-09-27 23:39:23 +0200rockymarine(~rocky@user/rockymarine) (Ping timeout: 252 seconds)
2022-09-27 23:39:27 +0200 <[exa]> yeah that's sufficiently close I'd say
2022-09-27 23:40:00 +0200yobson_(~yobson@mail.jotron.com) (Ping timeout: 264 seconds)
2022-09-27 23:42:24 +0200 <[exa]> as far as I know the aim of linear typing isn't uniqueness, instead just the fact that you 1] really consume the value 2] don't consume the value in an unexpected way. If you need uniqueness, you must introduce its semantics (and preferably implementation) manually
2022-09-27 23:42:41 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-09-27 23:43:13 +0200 <talismanick> I see
2022-09-27 23:43:17 +0200 <[exa]> one way to run uniqueness on linear types is to have this magic `makeASingleUniqueCopy` of something which returns a beancounted resource
2022-09-27 23:43:46 +0200mmhat(~mmh@p200300f1c7062304ee086bfffe095315.dip0.t-ipconnect.de)
2022-09-27 23:44:33 +0200 <[exa]> as far as I know there's currently no easy way to "get rid" of other parts of the graph that point to the thing that you want for yourself, except some dirty STG tricks (and making the copy)
2022-09-27 23:45:33 +0200 <talismanick> So, make a copy, and that unique copy will be safe to destructively update in-place, but the linear variable is a normal value with a stricter typing discipline?
2022-09-27 23:46:09 +0200 <[exa]> ...which may seem unfortunate in this case but the resource sharing by default is quite critical for haskells so I don't see it disappearing
2022-09-27 23:46:38 +0200 <[exa]> yeah, by copying it yourself you create a proof that you're also safe to kill it
2022-09-27 23:47:27 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 268 seconds)
2022-09-27 23:47:50 +0200 <talismanick> Could you automate a proof that linear variables made from a unique one are also unique so that they inherit the destructive update semantics?
2022-09-27 23:47:52 +0200 <[exa]> re "stricter typing discipline" -- not sure, I never checked how LH actually implements all that stuff, but I wouldn't expect anything remarkably more complicated.
2022-09-27 23:48:24 +0200 <[exa]> yeah well, if you have some proof that the original one is unique.....
2022-09-27 23:48:53 +0200 <talismanick> What kind of typeclass magic would that take?
2022-09-27 23:49:26 +0200 <[exa]> not sure if even typeclasses
2022-09-27 23:49:56 +0200 <talismanick> A GHC extension? >_>
2022-09-27 23:50:02 +0200 <talismanick> nvm then lol
2022-09-27 23:50:07 +0200 <[exa]> technically (for the usual unique purposes in haskells) you'd need to check the whole heap and see if something is pointing to the resource
2022-09-27 23:50:20 +0200 <talismanick> easier to build a new language at that point
2022-09-27 23:50:37 +0200 <[exa]> well good luck with walking heaps tbh :D
2022-09-27 23:51:48 +0200yobson_(~yobson@mail.jotron.com)
2022-09-27 23:51:55 +0200 <[exa]> I'd just make a copy
2022-09-27 23:52:51 +0200 <[exa]> technically you could enforce the language to do some beancounting and generate the original uniqueness proof for you
2022-09-27 23:53:35 +0200 <[exa]> but you might observe that is practically equivalent to really declaring the whole thing linear in the first place