2022-09-27 00:03:50 +0200 | seydar | (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 265 seconds) |
2022-09-27 00:06:11 +0200 | Guest73 | (~Guest73@p200300ef9718354c66b84bdd01ed06f1.dip0.t-ipconnect.de) |
2022-09-27 00:07:39 +0200 | Tuplanolla | (~Tuplanoll@91-159-69-34.elisa-laajakaista.fi) (Quit: Leaving.) |
2022-09-27 00:07:53 +0200 | rockymarine | (~rocky@user/rockymarine) (Ping timeout: 268 seconds) |
2022-09-27 00:13:05 +0200 | matthewm_ | (~matthewmo@173.170.253.91) (Remote host closed the connection) |
2022-09-27 00:15:08 +0200 | seydar | (~seydar@154-27-113-252.starry-inc.net) |
2022-09-27 00:16:20 +0200 | zeenk | (~zeenk@2a02:2f04:a311:2d00:6865:d863:4c93:799f) (Quit: Konversation terminated!) |
2022-09-27 00:19:41 +0200 | seydar | (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 244 seconds) |
2022-09-27 00:22:29 +0200 | rockymarine | (~rocky@user/rockymarine) |
2022-09-27 00:24:03 +0200 | moonsheep | (~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 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2022-09-27 00:26:24 +0200 | <DigitalKiwi> | david: ^ |
2022-09-27 00:29:09 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-09-27 00:30:17 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 250 seconds) |
2022-09-27 00:31:04 +0200 | seydar | (~seydar@154-27-113-252.starry-inc.net) |
2022-09-27 00:32:29 +0200 | ec_ | (~ec@gateway/tor-sasl/ec) |
2022-09-27 00:32:37 +0200 | ec | (~ec@gateway/tor-sasl/ec) (Ping timeout: 258 seconds) |
2022-09-27 00:32:52 +0200 | acidjnk | (~acidjnk@p200300d6e7137a2928215a7bf170f917.dip0.t-ipconnect.de) (Ping timeout: 246 seconds) |
2022-09-27 00:33:48 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Ping timeout: 265 seconds) |
2022-09-27 00:36:14 +0200 | waleee | (~waleee@h-176-10-137-138.NA.cust.bahnhof.se) |
2022-09-27 00:36:38 +0200 | matijja | (~matijja@193.77.181.201) (Quit: ZNC 1.8.2 - https://znc.in) |
2022-09-27 00:37:23 +0200 | matijja | (~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 +0200 | eL_Bart0- | (eL_Bart0@dietunichtguten.org) (Ping timeout: 268 seconds) |
2022-09-27 00:54:15 +0200 | dr_merijn | (~merijn@86-86-29-250.fixed.kpn.net) |
2022-09-27 00:55:02 +0200 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection) |
2022-09-27 00:55:39 +0200 | FinnElija | (~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 +0200 | justsomeguy | (~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 +0200 | eL_Bart0 | (eL_Bart0@dietunichtguten.org) |
2022-09-27 01:02:55 +0200 | matthewmosior | (~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 +0200 | matthewmosior | (~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 +0200 | Guest73 | (~Guest73@p200300ef9718354c66b84bdd01ed06f1.dip0.t-ipconnect.de) (Quit: Client closed) |
2022-09-27 01:10:57 +0200 | chexum | (~quassel@gateway/tor-sasl/chexum) (Ping timeout: 258 seconds) |
2022-09-27 01:11:48 +0200 | chexum | (~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 +0200 | turlando | (~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 +0200 | perrierjouet | (~perrier-j@modemcable048.127-56-74.mc.videotron.ca) (Quit: WeeChat 3.6) |
2022-09-27 01:24:46 +0200 | turlando | (~turlando@user/turlando) |
2022-09-27 01:24:51 +0200 | rockymarine | (~rocky@user/rockymarine) (Ping timeout: 248 seconds) |
2022-09-27 01:24:59 +0200 | emmanuelux | (~emmanuelu@2a01cb0000f393002cc82f80b6cb62ad.ipv6.abo.wanadoo.fr) |
2022-09-27 01:25:29 +0200 | perrierjouet | (~perrier-j@modemcable048.127-56-74.mc.videotron.ca) |
2022-09-27 01:28:23 +0200 | dr_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 +0200 | seydar | (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 265 seconds) |
2022-09-27 01:36:27 +0200 | srk | (~sorki@user/srk) (Ping timeout: 252 seconds) |
2022-09-27 01:37:51 +0200 | srk | (~sorki@user/srk) |
2022-09-27 01:39:08 +0200 | jmorris | (uid537181@id-537181.uxbridge.irccloud.com) |
2022-09-27 01:40:28 +0200 | emmanuelux | (~emmanuelu@2a01cb0000f393002cc82f80b6cb62ad.ipv6.abo.wanadoo.fr) (Quit: au revoir) |
2022-09-27 01:40:53 +0200 | matthewmosior | (~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 +0200 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 252 seconds) |
2022-09-27 01:44:10 +0200 | rockymarine | (~rocky@user/rockymarine) |
2022-09-27 01:45:20 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Ping timeout: 265 seconds) |
2022-09-27 01:46:32 +0200 | seydar | (~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 +0200 | rockymarine | (~rocky@user/rockymarine) (Ping timeout: 265 seconds) |
2022-09-27 01:49:38 +0200 | ellensol | (~ellen@178-78-210-152.customers.ownit.se) (Ping timeout: 268 seconds) |
2022-09-27 01:49:48 +0200 | rockymarine | (~rocky@user/rockymarine) |
2022-09-27 01:50:59 +0200 | seydar | (~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 +0200 | burnsidesLlama | (~burnsides@119247164140.ctinets.com) |
2022-09-27 02:03:08 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-09-27 02:03:10 +0200 | seydar | (~seydar@154-27-113-252.starry-inc.net) |
2022-09-27 02:04:59 +0200 | mmhat | (~mmh@p200300f1c710d3a5ee086bfffe095315.dip0.t-ipconnect.de) (Quit: WeeChat 3.6) |
2022-09-27 02:05:31 +0200 | ubert1 | (~Thunderbi@178.165.197.10.wireless.dyn.drei.com) |
2022-09-27 02:06:46 +0200 | ubert | (~Thunderbi@178.115.76.1.wireless.dyn.drei.com) (Ping timeout: 260 seconds) |
2022-09-27 02:06:46 +0200 | ubert1 | ubert |
2022-09-27 02:07:40 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Ping timeout: 244 seconds) |
2022-09-27 02:07:48 +0200 | burnsidesLlama | (~burnsides@119247164140.ctinets.com) (Remote host closed the connection) |
2022-09-27 02:08:33 +0200 | waleee | (~waleee@h-176-10-137-138.NA.cust.bahnhof.se) (Ping timeout: 265 seconds) |
2022-09-27 02:08:36 +0200 | nate3 | (~nate@98.45.169.16) |
2022-09-27 02:08:43 +0200 | Midjak | (~Midjak@82.66.147.146) (Quit: This computer has gone to sleep) |
2022-09-27 02:09:11 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-09-27 02:09:15 +0200 | ellensol | (~ellen@178-78-210-152.customers.ownit.se) |
2022-09-27 02:09:45 +0200 | waleee | (~waleee@h-176-10-137-138.NA.cust.bahnhof.se) |
2022-09-27 02:10:30 +0200 | haxcpu | ay |
2022-09-27 02:13:32 +0200 | <DigitalKiwi> | boo doctest doesn't find megaparsec |
2022-09-27 02:13:46 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Ping timeout: 260 seconds) |
2022-09-27 02:13:46 +0200 | ellensol | (~ellen@178-78-210-152.customers.ownit.se) (Ping timeout: 260 seconds) |
2022-09-27 02:16:06 +0200 | nate3 | (~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 +0200 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) |
2022-09-27 02:19:37 +0200 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
2022-09-27 02:19:37 +0200 | wroathe | (~wroathe@user/wroathe) |
2022-09-27 02:21:04 +0200 | zebrag | (~chris@user/zebrag) (Quit: Konversation terminated!) |
2022-09-27 02:21:13 +0200 | euandreh | (~euandreh@179.214.113.107) (Ping timeout: 250 seconds) |
2022-09-27 02:21:39 +0200 | euandreh | (~euandreh@179.214.113.107) |
2022-09-27 02:22:04 +0200 | rockymarine | (~rocky@user/rockymarine) (Ping timeout: 265 seconds) |
2022-09-27 02:24:02 +0200 | rockymarine | (~rocky@user/rockymarine) |
2022-09-27 02:28:50 +0200 | rockymarine | (~rocky@user/rockymarine) (Ping timeout: 265 seconds) |
2022-09-27 02:29:34 +0200 | dcoutts_ | (~duncan@host86-151-44-255.range86-151.btcentralplus.com) |
2022-09-27 02:29:55 +0200 | beteigeuze | (~Thunderbi@a79-169-109-107.cpe.netcabo.pt) |
2022-09-27 02:31:03 +0200 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) |
2022-09-27 02:31:57 +0200 | dcoutts | (~duncan@host86-151-44-255.range86-151.btcentralplus.com) (Ping timeout: 244 seconds) |
2022-09-27 02:34:32 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-09-27 02:38:25 +0200 | beteigeuze | (~Thunderbi@a79-169-109-107.cpe.netcabo.pt) (Ping timeout: 252 seconds) |
2022-09-27 02:41:11 +0200 | burnsidesLlama | (~burnsides@119247164140.ctinets.com) |
2022-09-27 02:42:15 +0200 | rockymarine | (~rocky@user/rockymarine) |
2022-09-27 02:44:20 +0200 | Guest5033 | (~Guest50@192.182.150.125) |
2022-09-27 02:46:47 +0200 | burnsidesLlama | (~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 +0200 | rockymarine | (~rocky@user/rockymarine) (Ping timeout: 265 seconds) |
2022-09-27 02:50:37 +0200 | rockymarine | (~rocky@user/rockymarine) |
2022-09-27 02:50:46 +0200 | DigitalKiwi | would 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 +0200 | Guest73 | (~Guest73@p200300ef9718354c66b84bdd01ed06f1.dip0.t-ipconnect.de) |
2022-09-27 02:52:40 +0200 | Guest73 | (~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 +0200 | machinedgod | (~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 +0200 | mvk | (~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 +0200 | gurkenglas | (~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 +0200 | albet70 | (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection) |
2022-09-27 03:10:57 +0200 | jero98772 | (~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 +0200 | Guest5033 | (~Guest50@192.182.150.125) (Quit: Client closed) |
2022-09-27 03:12:21 +0200 | xff0x | (~xff0x@2405:6580:b080:900:5a06:dee8:84af:56be) (Ping timeout: 250 seconds) |
2022-09-27 03:15:17 +0200 | dsrt^ | (~dsrt@173-160-76-137-atlanta.hfc.comcastbusiness.net) (Remote host closed the connection) |
2022-09-27 03:16:45 +0200 | albet70 | (~xxx@2400:8902::f03c:92ff:fe60:98d8) |
2022-09-27 03:17:49 +0200 | caryhartline | (~caryhartl@2600:1700:2d0:8d30:1160:bb30:e810:5f52) |
2022-09-27 03:17:53 +0200 | burnsidesLlama | (~burnsides@119247164140.ctinets.com) |
2022-09-27 03:22:25 +0200 | burnsidesLlama | (~burnsides@119247164140.ctinets.com) (Ping timeout: 252 seconds) |
2022-09-27 03:25:07 +0200 | kimjetwav | (~user@2607:fea8:235e:b600:14cc:4122:217e:1d45) |
2022-09-27 03:25:15 +0200 | dr_merijn | (~merijn@86.86.29.250) |
2022-09-27 03:30:01 +0200 | off^ | (~off@173-160-76-137-atlanta.hfc.comcastbusiness.net) |
2022-09-27 03:31:12 +0200 | ddellacosta | (~ddellacos@143.244.47.90) |
2022-09-27 03:38:50 +0200 | jinsun__ | (~jinsun@user/jinsun) |
2022-09-27 03:38:50 +0200 | jinsun | (~jinsun@user/jinsun) (Killed (zirconium.libera.chat (Nickname regained by services))) |
2022-09-27 03:38:50 +0200 | jinsun__ | jinsun |
2022-09-27 03:39:05 +0200 | nahcetan | (~nate@98.45.169.16) (Read error: Connection reset by peer) |
2022-09-27 03:39:42 +0200 | natechan | (~nate@98.45.169.16) |
2022-09-27 03:40:59 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Ping timeout: 265 seconds) |
2022-09-27 03:40:59 +0200 | natechan | (~nate@98.45.169.16) (Read error: Connection reset by peer) |
2022-09-27 03:41:36 +0200 | natechan | (~nate@98.45.169.16) |
2022-09-27 03:42:52 +0200 | Me-me | (~me-me@user/me-me) (Quit: Disconnecting on purpose.) |
2022-09-27 03:43:19 +0200 | natechan | (~nate@98.45.169.16) (Read error: Connection reset by peer) |
2022-09-27 03:43:23 +0200 | Me-me | (~me-me@tunnel690570-pt.tunnel.tserv12.mia1.ipv6.he.net) |
2022-09-27 03:43:28 +0200 | neightchan | (~nate@98.45.169.16) |
2022-09-27 03:44:52 +0200 | Me-me | (~me-me@tunnel690570-pt.tunnel.tserv12.mia1.ipv6.he.net) (Changing host) |
2022-09-27 03:44:52 +0200 | Me-me | (~me-me@user/me-me) |
2022-09-27 03:49:02 +0200 | burnsidesLlama | (~burnsides@119247164140.ctinets.com) |
2022-09-27 03:49:56 +0200 | caryhartline | (~caryhartl@2600:1700:2d0:8d30:1160:bb30:e810:5f52) (Quit: caryhartline) |
2022-09-27 03:50:02 +0200 | xstill_ | (xstill@fimu/xstill) (Ping timeout: 265 seconds) |
2022-09-27 03:51:20 +0200 | xff0x | (~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 +0200 | burnsidesLlama | (~burnsides@119247164140.ctinets.com) (Ping timeout: 268 seconds) |
2022-09-27 03:54:59 +0200 | TonyStone | (~TonyStone@2603-7080-8607-c36a-cc48-2eb7-9785-f03a.res6.spectrum.com) (Quit: Leaving) |
2022-09-27 03:57:32 +0200 | xstill_ | (xstill@fimu/xstill) |
2022-09-27 03:57:53 +0200 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) |
2022-09-27 03:59:01 +0200 | dr_merijn | (~merijn@86.86.29.250) (Ping timeout: 246 seconds) |
2022-09-27 04:01:09 +0200 | rockymarine | (~rocky@user/rockymarine) (Ping timeout: 265 seconds) |
2022-09-27 04:04:00 +0200 | cyphase | (~cyphase@user/cyphase) (Ping timeout: 264 seconds) |
2022-09-27 04:06:12 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2022-09-27 04:09:07 +0200 | cyphase | (~cyphase@user/cyphase) |
2022-09-27 04:09:11 +0200 | frost | (~frost@user/frost) |
2022-09-27 04:09:33 +0200 | zmt00 | (~zmt00@user/zmt00) (Read error: Connection reset by peer) |
2022-09-27 04:10:44 +0200 | zmt00 | (~zmt00@user/zmt00) |
2022-09-27 04:15:42 +0200 | TonyStone | (~TonyStone@2603-7080-8607-c36a-cc48-2eb7-9785-f03a.res6.spectrum.com) |
2022-09-27 04:15:43 +0200 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 258 seconds) |
2022-09-27 04:17:03 +0200 | td_ | (~td@muedsl-82-207-238-079.citykom.de) (Ping timeout: 268 seconds) |
2022-09-27 04:18:35 +0200 | srk- | (~sorki@user/srk) |
2022-09-27 04:18:50 +0200 | td_ | (~td@muedsl-82-207-238-071.citykom.de) |
2022-09-27 04:20:23 +0200 | off^ | (~off@173-160-76-137-atlanta.hfc.comcastbusiness.net) (Ping timeout: 250 seconds) |
2022-09-27 04:20:43 +0200 | srk | (~sorki@user/srk) (Ping timeout: 252 seconds) |
2022-09-27 04:21:06 +0200 | srk- | srk |
2022-09-27 04:21:44 +0200 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija))) |
2022-09-27 04:21:44 +0200 | finn_elija | (~finn_elij@user/finn-elija/x-0085643) |
2022-09-27 04:21:44 +0200 | finn_elija | FinnElija |
2022-09-27 04:22:16 +0200 | off^ | (~off@173-160-76-137-atlanta.hfc.comcastbusiness.net) |
2022-09-27 04:24:40 +0200 | Ristovski | (~Ristovski@hellomouse/perf/ristovski) (Remote host closed the connection) |
2022-09-27 04:25:37 +0200 | Ristovski | (~Ristovski@hellomouse/perf/ristovski) |
2022-09-27 04:26:37 +0200 | luffy | (~chenqisu1@183.217.203.170) |
2022-09-27 04:26:46 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-09-27 04:27:59 +0200 | nate3 | (~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 +0200 | jero98772 | (~jero98772@2800:484:1d80:d8ce:3490:26c5:1782:da8c) (Ping timeout: 248 seconds) |
2022-09-27 04:39:49 +0200 | jero98772 | (~jero98772@2800:484:1d80:d8ce:dac1:63d7:4353:6597) |
2022-09-27 04:46:11 +0200 | king_gs | (~Thunderbi@187.201.192.184) |
2022-09-27 04:47:55 +0200 | chexum | (~quassel@gateway/tor-sasl/chexum) (Ping timeout: 258 seconds) |
2022-09-27 04:48:14 +0200 | chexum | (~quassel@gateway/tor-sasl/chexum) |
2022-09-27 04:50:06 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Ping timeout: 260 seconds) |
2022-09-27 05:00:01 +0200 | TonyStone | (~TonyStone@2603-7080-8607-c36a-cc48-2eb7-9785-f03a.res6.spectrum.com) (Ping timeout: 260 seconds) |
2022-09-27 05:02:18 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-09-27 05:03:25 +0200 | ddellacosta | (~ddellacos@143.244.47.90) (Ping timeout: 246 seconds) |
2022-09-27 05:05:27 +0200 | king_gs | (~Thunderbi@187.201.192.184) (Read error: Connection reset by peer) |
2022-09-27 05:05:44 +0200 | king_gs | (~Thunderbi@2806:103e:29:ac5e:a16e:4ac9:a89b:4d) |
2022-09-27 05:05:50 +0200 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) |
2022-09-27 05:06:53 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Ping timeout: 265 seconds) |
2022-09-27 05:07:01 +0200 | waleee | (~waleee@h-176-10-137-138.NA.cust.bahnhof.se) (Ping timeout: 260 seconds) |
2022-09-27 05:07:57 +0200 | jero98772 | (~jero98772@2800:484:1d80:d8ce:dac1:63d7:4353:6597) (Remote host closed the connection) |
2022-09-27 05:10:04 +0200 | king_gs | (~Thunderbi@2806:103e:29:ac5e:a16e:4ac9:a89b:4d) (Ping timeout: 246 seconds) |
2022-09-27 05:10:40 +0200 | TonyStone | (~TonyStone@2603-7080-8607-c36a-cc48-2eb7-9785-f03a.res6.spectrum.com) |
2022-09-27 05:14:51 +0200 | rockymarine | (~rocky@user/rockymarine) |
2022-09-27 05:16:43 +0200 | seydar | (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 250 seconds) |
2022-09-27 05:18:01 +0200 | Guest3352 | (~Guest33@pool-108-50-195-90.nwrknj.fios.verizon.net) |
2022-09-27 05:19:26 +0200 | Guest3352 | (~Guest33@pool-108-50-195-90.nwrknj.fios.verizon.net) (Client Quit) |
2022-09-27 05:21:26 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-09-27 05:25:30 +0200 | crns | (~netcrns@user/crns) (Quit: brb) |
2022-09-27 05:25:48 +0200 | crns | (~netcrns@p4ff5e2e3.dip0.t-ipconnect.de) |
2022-09-27 05:25:48 +0200 | crns | (~netcrns@p4ff5e2e3.dip0.t-ipconnect.de) (Changing host) |
2022-09-27 05:25:48 +0200 | crns | (~netcrns@user/crns) |
2022-09-27 05:39:45 +0200 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 265 seconds) |
2022-09-27 05:41:09 +0200 | king_gs | (~Thunderbi@187.201.192.184) |
2022-09-27 05:42:04 +0200 | luffy | (~chenqisu1@183.217.203.170) (Remote host closed the connection) |
2022-09-27 05:42:45 +0200 | luffy | (~chenqisu1@183.217.203.170) |
2022-09-27 05:43:00 +0200 | nate3 | (~nate@98.45.169.16) (Ping timeout: 264 seconds) |
2022-09-27 05:44:23 +0200 | Vajb | (~Vajb@2001:999:504:1841:9e47:1ec7:a52e:1d57) (Read error: Connection reset by peer) |
2022-09-27 05:44:40 +0200 | Vajb | (~Vajb@hag-jnsbng11-58c3a5-27.dhcp.inet.fi) |
2022-09-27 05:46:47 +0200 | seydar | (~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 +0200 | dr_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 +0200 | silph | (~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 +0200 | luffy | (~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 +0200 | burnsidesLlama | (~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 +0200 | lambdabot | activates 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 +0200 | ChanServ | +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 +0200 | johnw | -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 +0200 | burnsidesLlama | (~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 +0200 | matthewmosior | (~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 +0200 | talismanick | (~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 +0200 | libertyprime | (~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 +0200 | dr_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 +0200 | Vajb | (~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 +0200 | Vajb | (~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 +0200 | lisbeths | (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 +0200 | matthewmosior | (~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 +0200 | titibandit | (~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 +0200 | mbuf | (~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 +0200 | seydar | (~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 +0200 | king_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 +0200 | seydar | (~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 +0200 | takuan | (~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 +0200 | titibandit | (~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 +0200 | chomwitt | (~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 +0200 | nate3 | (~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 +0200 | nate3 | (~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 +0200 | tomku | (~tomku@user/tomku) (Ping timeout: 255 seconds) |
2022-09-27 07:19:21 +0200 | king_gs | (~Thunderbi@187.201.192.184) |
2022-09-27 07:20:19 +0200 | silph | (~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 +0200 | coot | (~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 +0200 | titibandit | (~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 +0200 | chomwitt | (~chomwitt@2a02:587:dc14:f500:e9fb:e2de:445:6771) (Ping timeout: 268 seconds) |
2022-09-27 07:36:10 +0200 | Goodbye_Vincent | (cyvahl@freakshells.net) |
2022-09-27 07:38:51 +0200 | king_gs | (~Thunderbi@187.201.192.184) (Read error: Connection reset by peer) |
2022-09-27 07:39:01 +0200 | king_gs1 | (~Thunderbi@2806:103e:29:ac5e:a16e:4ac9:a89b:4d) |
2022-09-27 07:41:20 +0200 | king_gs1 | king_gs |
2022-09-27 07:42:31 +0200 | libertyprime | (~libertypr@139.80.172.131) (Ping timeout: 265 seconds) |
2022-09-27 07:47:21 +0200 | razetime | (~quassel@117.193.7.114) |
2022-09-27 07:50:01 +0200 | Ram-Z | (~Ram-Z@li1814-254.members.linode.com) (Ping timeout: 246 seconds) |
2022-09-27 07:50:57 +0200 | trillp | (~trillp@2001:19f0:6401:b10:e09a:50b0:71c8:3a8e) |
2022-09-27 08:00:54 +0200 | jao | (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 268 seconds) |
2022-09-27 08:02:12 +0200 | raym | (~raym@user/raym) (Ping timeout: 264 seconds) |
2022-09-27 08:03:18 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Remote host closed the connection) |
2022-09-27 08:04:08 +0200 | raym | (~raym@user/raym) |
2022-09-27 08:04:43 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-09-27 08:13:41 +0200 | matthewmosior | (~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 +0200 | zeenk | (~zeenk@2a02:2f04:a311:2d00:6865:d863:4c93:799f) |
2022-09-27 08:26:31 +0200 | dr_merijn | (~merijn@86-86-29-250.fixed.kpn.net) |
2022-09-27 08:26:59 +0200 | jonathanx_ | (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Ping timeout: 265 seconds) |
2022-09-27 08:29:22 +0200 | thyriaen | (~thyriaen@2a02:8109:8340:686c:7383:e0e2:ad95:9fce) |
2022-09-27 08:29:30 +0200 | king_gs | (~Thunderbi@2806:103e:29:ac5e:a16e:4ac9:a89b:4d) (Remote host closed the connection) |
2022-09-27 08:29:47 +0200 | king_gs | (~Thunderbi@2806:103e:29:ac5e:a16e:4ac9:a89b:4d) |
2022-09-27 08:30:16 +0200 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
2022-09-27 08:31:17 +0200 | mc47 | (~mc47@xmonad/TheMC47) |
2022-09-27 08:35:16 +0200 | rockymarine | (~rocky@user/rockymarine) (Ping timeout: 260 seconds) |
2022-09-27 08:36:41 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-09-27 08:37:09 +0200 | rockymarine | (~rocky@user/rockymarine) |
2022-09-27 08:40:36 +0200 | trillp | (~trillp@2001:19f0:6401:b10:e09a:50b0:71c8:3a8e) (Quit: zzz) |
2022-09-27 08:40:49 +0200 | m5zs7k | (aquares@web10.mydevil.net) (Ping timeout: 250 seconds) |
2022-09-27 08:42:58 +0200 | jonathanx | (~jonathan@h-98-128-168-222.NA.cust.bahnhof.se) |
2022-09-27 08:43:29 +0200 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2022-09-27 08:44:37 +0200 | m5zs7k | (aquares@web10.mydevil.net) |
2022-09-27 08:47:19 +0200 | acidjnk | (~acidjnk@p200300d6e7137a8728215a7bf170f917.dip0.t-ipconnect.de) |
2022-09-27 08:48:31 +0200 | libertyprime | (~libertypr@118-92-64-32.dsl.dyn.ihug.co.nz) |
2022-09-27 08:50:04 +0200 | Sgeo | (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
2022-09-27 08:51:29 +0200 | Lycurgus | (~juan@user/Lycurgus) |
2022-09-27 08:58:15 +0200 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
2022-09-27 08:59:00 +0200 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Client Quit) |
2022-09-27 09:00:19 +0200 | dr_merijn | (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 248 seconds) |
2022-09-27 09:00:57 +0200 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
2022-09-27 09:01:18 +0200 | rockymarine | (~rocky@user/rockymarine) (Ping timeout: 268 seconds) |
2022-09-27 09:03:03 +0200 | kenran | (~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 +0200 | trillp | (~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 +0200 | jakalx | (~jakalx@base.jakalx.net) (Error from remote client) |
2022-09-27 09:06:42 +0200 | poscat | (~poscat@2408:8206:4823:6cd3:718a:f4cb:b156:91dd) (Ping timeout: 264 seconds) |
2022-09-27 09:07:28 +0200 | poscat | (~poscat@114.245.105.176) |
2022-09-27 09:09:40 +0200 | trillp | (~trillp@2001:19f0:6401:b10:e09a:50b0:71c8:3a8e) (Client Quit) |
2022-09-27 09:09:58 +0200 | michalz | (~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 +0200 | lortabac | (~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 +0200 | Ram-Z | (~Ram-Z@li1814-254.members.linode.com) |
2022-09-27 09:16:47 +0200 | rockymarine | (~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 +0200 | phma_ | (~phma@host-67-44-208-193.hnremote.net) |
2022-09-27 09:20:47 +0200 | xstill_ | (xstill@fimu/xstill) (Quit: Ping timeout (120 seconds)) |
2022-09-27 09:21:03 +0200 | xstill_ | (xstill@fimu/xstill) |
2022-09-27 09:21:21 +0200 | lagash | (lagash@lagash.shelltalk.net) (Ping timeout: 260 seconds) |
2022-09-27 09:21:47 +0200 | shriekingnoise | (~shrieking@186.137.167.202) (Quit: Quit) |
2022-09-27 09:22:05 +0200 | lagash | (lagash@lagash.shelltalk.net) |
2022-09-27 09:22:06 +0200 | shriekingnoise | (~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 +0200 | phma | (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 +0200 | jmorris | (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 +0200 | libertyprime | (~libertypr@118-92-64-32.dsl.dyn.ihug.co.nz) (Quit: leaving) |
2022-09-27 09:29:11 +0200 | nate3 | (~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 +0200 | dr_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 +0200 | nate3 | (~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 +0200 | dr_merijn | (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 244 seconds) |
2022-09-27 09:35:47 +0200 | Lycurgus | (~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 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Ping timeout: 265 seconds) |
2022-09-27 09:40:35 +0200 | cfricke | (~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 +0200 | gmg | (~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 +0200 | poscat0x04 | (~poscat@2408:8206:4823:2a7:d78b:34b7:cd4f:29cd) |
2022-09-27 09:44:51 +0200 | poscat | (~poscat@114.245.105.176) (Ping timeout: 252 seconds) |
2022-09-27 09:44:57 +0200 | dr_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 +0200 | razetime | (~quassel@117.193.7.114) (Ping timeout: 265 seconds) |
2022-09-27 09:48:17 +0200 | DavidBinder | (~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 +0200 | machinedgod | (~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 +0200 | lisbeths | (uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
2022-09-27 09:57:22 +0200 | machinedgod | (~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 +0200 | machinedgod | (~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 +0200 | lottaquestions_ | (~nick@104.221.24.83) |
2022-09-27 10:02:23 +0200 | yobson_ | (~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 +0200 | lottaquestions | (~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 +0200 | razetime | (~quassel@117.193.7.114) |
2022-09-27 10:06:19 +0200 | shriekingnoise | (~shrieking@186.137.167.202) (Quit: Quit) |
2022-09-27 10:06:42 +0200 | lottaquestions_ | (~nick@104.221.24.83) (Quit: Konversation terminated!) |
2022-09-27 10:07:06 +0200 | lottaquestions_ | (~nick@2607:fa49:503e:7100:7430:a788:fee1:3622) |
2022-09-27 10:08:30 +0200 | jonathanx | (~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 +0200 | DavidBinder | (~DavidBind@event202.raeume.uni-konstanz.de) (Ping timeout: 252 seconds) |
2022-09-27 10:10:14 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-09-27 10:11:36 +0200 | DavidBinder | (~DavidBind@event202.raeume.uni-konstanz.de) |
2022-09-27 10:13:20 +0200 | mvk | (~mvk@2607:fea8:5ce3:8500::778c) (Ping timeout: 244 seconds) |
2022-09-27 10:13:54 +0200 | DavidBinder9 | (~DavidBind@event202.raeume.uni-konstanz.de) |
2022-09-27 10:14:18 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2022-09-27 10:14:35 +0200 | jakalx | (~jakalx@base.jakalx.net) |
2022-09-27 10:15:01 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Ping timeout: 260 seconds) |
2022-09-27 10:15:16 +0200 | rockymarine | (~rocky@user/rockymarine) (Ping timeout: 265 seconds) |
2022-09-27 10:16:48 +0200 | DavidBinder | (~DavidBind@event202.raeume.uni-konstanz.de) (Ping timeout: 252 seconds) |
2022-09-27 10:17:25 +0200 | rockymarine | (~rocky@user/rockymarine) |
2022-09-27 10:25:50 +0200 | ft | (~ft@p3e9bc57b.dip0.t-ipconnect.de) (Quit: Lost terminal) |
2022-09-27 10:26:29 +0200 | titibandit | (~titibandi@xdsl-212-8-150-57.nc.de) (Quit: Leaving.) |
2022-09-27 10:27:13 +0200 | phma_ | phma |
2022-09-27 10:28:46 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-09-27 10:32:56 +0200 | DavidBinder9 | (~DavidBind@event202.raeume.uni-konstanz.de) (Ping timeout: 252 seconds) |
2022-09-27 10:35:51 +0200 | waldo | (~waldo@user/waldo) |
2022-09-27 10:40:06 +0200 | fjMSX | (~hypni2p@2.92.213.55) |
2022-09-27 10:41:08 +0200 | DavidBinder | (~DavidBind@event202.raeume.uni-konstanz.de) |
2022-09-27 10:41:14 +0200 | MajorBiscuit | (~MajorBisc@145.94.161.115) |
2022-09-27 10:43:12 +0200 | yobson___ | (~yobson@mail.jotron.com) |
2022-09-27 10:43:13 +0200 | yobson_ | (~yobson@mail.jotron.com) (Read error: Connection reset by peer) |
2022-09-27 10:43:46 +0200 | rockymarine | (~rocky@user/rockymarine) (Ping timeout: 265 seconds) |
2022-09-27 10:46:08 +0200 | jonathanx | (~jonathan@h-98-128-168-222.NA.cust.bahnhof.se) |
2022-09-27 10:46:57 +0200 | ellensol | (~ellen@ua-84-216-129-63.bbcust.telenor.se) |
2022-09-27 10:50:48 +0200 | kuribas | (~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 +0200 | rockymarine | (~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 +0200 | rockymarine | (~rocky@user/rockymarine) (Ping timeout: 268 seconds) |
2022-09-27 10:59:42 +0200 | olsner | (~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 +0200 | jonathanx | (~jonathan@h-98-128-168-222.NA.cust.bahnhof.se) (Remote host closed the connection) |
2022-09-27 11:01:16 +0200 | zxx7529 | (~Thunderbi@user/zxx7529) |
2022-09-27 11:01:23 +0200 | jonathanx | (~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 +0200 | olsner | (~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 +0200 | dminuoso | high 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 +0200 | titibandit | (~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 +0200 | frost | (~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 +0200 | eggplantade | (~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 +0200 | waldo_ | (~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 +0200 | nschoe | (~quassel@178.251.84.79) |
2022-09-27 11:17:34 +0200 | sagax | (~sagax_nb@user/sagax) (Ping timeout: 246 seconds) |
2022-09-27 11:18:01 +0200 | ellensol | (~ellen@ua-84-216-129-63.bbcust.telenor.se) (Quit: leaving) |
2022-09-27 11:18:02 +0200 | DavidBinder | (~DavidBind@event202.raeume.uni-konstanz.de) (Ping timeout: 252 seconds) |
2022-09-27 11:18:14 +0200 | waldo | (~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 +0200 | thyriaen | (~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 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 265 seconds) |
2022-09-27 11:20:09 +0200 | thyriaen | (~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 +0200 | thyriaen | (~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 +0200 | DavidBinder | (~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 +0200 | Pickchea | (~private@user/pickchea) |
2022-09-27 11:28:15 +0200 | ellensol | (~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 +0200 | zaquest | (~notzaques@5.130.79.72) (Remote host closed the connection) |
2022-09-27 11:30:02 +0200 | luffy | (~chenqisu1@183.217.203.170) |
2022-09-27 11:30:53 +0200 | rockymarine | (~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 +0200 | img | (~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 +0200 | matthewmosior | (~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 +0200 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2022-09-27 11:34:45 +0200 | img | (~img@user/img) |
2022-09-27 11:34:56 +0200 | ellensol | (~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 +0200 | rockymarine | (~rocky@user/rockymarine) (Ping timeout: 250 seconds) |
2022-09-27 11:36:25 +0200 | zxx7529 | (~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 +0200 | ski | nods |
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 +0200 | luffy | (~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 +0200 | Pickchea | (~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 +0200 | rockymarine | (~rocky@user/rockymarine) |
2022-09-27 11:48:20 +0200 | <tdammers> | OK, let's talk code |
2022-09-27 11:48:49 +0200 | tzh | (~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 +0200 | jonathanx | (~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 +0200 | ellensol | (~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 +0200 | matthewmosior | (~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 +0200 | matthewmosior | (~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 +0200 | xff0x | (~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 +0200 | DavidBinder | (~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 +0200 | zaquest | (~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 +0200 | jakalx | (~jakalx@base.jakalx.net) (Error from remote client) |
2022-09-27 12:16:03 +0200 | seydar | (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 248 seconds) |
2022-09-27 12:17:08 +0200 | gurkenglas | (~gurkengla@p548ac72e.dip0.t-ipconnect.de) |
2022-09-27 12:17:52 +0200 | jakalx | (~jakalx@base.jakalx.net) |
2022-09-27 12:21:37 +0200 | jmdaemon | (~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 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-09-27 12:43:04 +0200 | seydar | (~seydar@154-27-113-252.starry-inc.net) |
2022-09-27 12:47:31 +0200 | seydar | (~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 +0200 | rockymarine | (~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 +0200 | xff0x | (~xff0x@2405:6580:b080:900:a11c:672e:e426:9fe0) |
2022-09-27 13:00:27 +0200 | seydar | (~seydar@154-27-113-252.starry-inc.net) |
2022-09-27 13:03:57 +0200 | rockymarine | (~rocky@user/rockymarine) |
2022-09-27 13:07:52 +0200 | kuribas` | (~user@d51529c17.access.telenet.be) |
2022-09-27 13:09:47 +0200 | frost | (~frost@user/frost) |
2022-09-27 13:09:51 +0200 | rockymarine | (~rocky@user/rockymarine) (Ping timeout: 268 seconds) |
2022-09-27 13:09:51 +0200 | kuribas | (~user@ptr-17d51en07nrswztiuk4.18120a2.ip6.access.telenet.be) (Ping timeout: 268 seconds) |
2022-09-27 13:11:35 +0200 | talismanick | (~talismani@2601:200:c100:c9e0::24ac) (Ping timeout: 244 seconds) |
2022-09-27 13:12:06 +0200 | david | (~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 +0200 | ellensol | (~ellen@emp-180-217.eduroam.uu.se) (Ping timeout: 265 seconds) |
2022-09-27 13:17:11 +0200 | dminuoso | wants 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 +0200 | Ram-Z | (~Ram-Z@li1814-254.members.linode.com) (Quit: ZNC - http://znc.in) |
2022-09-27 13:20:31 +0200 | DavidBinder | (~DavidBind@event202.raeume.uni-konstanz.de) |
2022-09-27 13:21:37 +0200 | kuribas` | (~user@d51529c17.access.telenet.be) (Ping timeout: 250 seconds) |
2022-09-27 13:21:52 +0200 | Ram-Z | (~Ram-Z@li1814-254.members.linode.com) |
2022-09-27 13:22:24 +0200 | rockymarine | (~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 +0200 | coot | (~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 +0200 | ellensol | (~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 +0200 | nate3 | (~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 +0200 | rockymarine | (~rocky@user/rockymarine) (Ping timeout: 252 seconds) |
2022-09-27 13:31:49 +0200 | kuribas | (~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 +0200 | ellensol_ | (~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 +0200 | nate3 | (~nate@98.45.169.16) (Ping timeout: 268 seconds) |
2022-09-27 13:35:43 +0200 | ellensol | (~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 +0200 | waldo_ | (~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 +0200 | rockymarine | (~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 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Ping timeout: 260 seconds) |
2022-09-27 13:43:30 +0200 | yobson___ | (~yobson@mail.jotron.com) (Remote host closed the connection) |
2022-09-27 13:45:12 +0200 | coot | (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) |
2022-09-27 13:46:54 +0200 | DavidBinder | (~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 +0200 | rockymarine | (~rocky@user/rockymarine) (Ping timeout: 268 seconds) |
2022-09-27 13:50:46 +0200 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Read error: Connection reset by peer) |
2022-09-27 13:50:51 +0200 | ski | would 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 +0200 | beteigeuze | (~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 +0200 | yobson | (~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 +0200 | fef | (~thedawn@user/thedawn) |
2022-09-27 13:58:19 +0200 | DavidBinder | (~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 +0200 | ellensol | (~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 +0200 | ellensol_ | (~ellen@ua-84-216-129-63.bbcust.telenor.se) (Ping timeout: 268 seconds) |
2022-09-27 13:59:38 +0200 | dr_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 +0200 | coot | (~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 +0200 | DavidBinder | (~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 +0200 | matthewmosior | (~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 +0200 | lyle | (~lyle@104.246.145.85) |
2022-09-27 14:13:59 +0200 | martin02 | (~silas@141.84.69.76) (Ping timeout: 252 seconds) |
2022-09-27 14:15:39 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Ping timeout: 244 seconds) |
2022-09-27 14:18:33 +0200 | kenran | (~user@p200300df77304e009722e54b6bbb7be2.dip0.t-ipconnect.de) (Changing host) |
2022-09-27 14:18:33 +0200 | kenran | (~user@user/kenran) |
2022-09-27 14:18:44 +0200 | off^ | (~off@173-160-76-137-atlanta.hfc.comcastbusiness.net) (Remote host closed the connection) |
2022-09-27 14:18:53 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-09-27 14:19:51 +0200 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 258 seconds) |
2022-09-27 14:20:07 +0200 | rockymarine | (~rocky@user/rockymarine) |
2022-09-27 14:21:54 +0200 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) |
2022-09-27 14:26:28 +0200 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) |
2022-09-27 14:27:23 +0200 | econo | (uid147250@user/econo) (Quit: Connection closed for inactivity) |
2022-09-27 14:27:52 +0200 | titibandit | (~titibandi@xdsl-212-8-150-57.nc.de) (Quit: Leaving.) |
2022-09-27 14:31:08 +0200 | ec_ | (~ec@gateway/tor-sasl/ec) (Remote host closed the connection) |
2022-09-27 14:31:08 +0200 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection) |
2022-09-27 14:31:08 +0200 | califax | (~califax@user/califx) (Remote host closed the connection) |
2022-09-27 14:31:08 +0200 | jpds1 | (~jpds@gateway/tor-sasl/jpds) (Read error: Connection reset by peer) |
2022-09-27 14:31:08 +0200 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection) |
2022-09-27 14:31:41 +0200 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) |
2022-09-27 14:31:54 +0200 | califax | (~califax@user/califx) |
2022-09-27 14:32:00 +0200 | jpds1 | (~jpds@gateway/tor-sasl/jpds) |
2022-09-27 14:32:42 +0200 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) |
2022-09-27 14:33:27 +0200 | ec_ | (~ec@gateway/tor-sasl/ec) |
2022-09-27 14:35:00 +0200 | merijn | dr_merijn |
2022-09-27 14:35:43 +0200 | coot | (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) |
2022-09-27 14:36:20 +0200 | troydm | (~troydm@host-176-37-124-197.b025.la.net.ua) (Ping timeout: 244 seconds) |
2022-09-27 14:36:46 +0200 | frost | (~frost@user/frost) (Ping timeout: 252 seconds) |
2022-09-27 14:37:55 +0200 | lemonsnicks | (~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net) (Ping timeout: 248 seconds) |
2022-09-27 14:37:58 +0200 | lemonsni- | (~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 +0200 | rockymarine | (~rocky@user/rockymarine) (Ping timeout: 268 seconds) |
2022-09-27 14:40:02 +0200 | pavonia | (~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 +0200 | kenran | (~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 +0200 | kenran | (~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 +0200 | kenran | (~user@user/kenran) (Client Quit) |
2022-09-27 14:49:55 +0200 | EvanR | (~EvanR@user/evanr) (Remote host closed the connection) |
2022-09-27 14:50:00 +0200 | ph88 | (~ph88@95.90.247.31) |
2022-09-27 14:50:22 +0200 | EvanR | (~EvanR@user/evanr) |
2022-09-27 14:50:55 +0200 | cfricke | (~cfricke@user/cfricke) (Quit: WeeChat 3.6) |
2022-09-27 14:52:30 +0200 | rockymarine | (~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 +0200 | king_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 +0200 | ph88^ | (~ph88@95.90.247.31) |
2022-09-27 15:03:18 +0200 | waleee | (~waleee@h-176-10-137-138.NA.cust.bahnhof.se) |
2022-09-27 15:04:15 +0200 | phma_ | (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 +0200 | acidjnk | (~acidjnk@p200300d6e7137a8728215a7bf170f917.dip0.t-ipconnect.de) (Ping timeout: 264 seconds) |
2022-09-27 15:05:45 +0200 | ph88 | (~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 +0200 | gurkenglas | (~gurkengla@p548ac72e.dip0.t-ipconnect.de) (Ping timeout: 265 seconds) |
2022-09-27 15:07:56 +0200 | phma | (~phma@host-67-44-208-193.hnremote.net) (Ping timeout: 265 seconds) |
2022-09-27 15:07:58 +0200 | ellensol_ | (~ellen@ua-84-216-129-63.bbcust.telenor.se) |
2022-09-27 15:08:15 +0200 | ellensol | (~ellen@emp-50-230.eduroam.uu.se) (Ping timeout: 252 seconds) |
2022-09-27 15:08:41 +0200 | waldo | (~waldo@user/waldo) |
2022-09-27 15:10:38 +0200 | bontaq` | (~user@ool-45779fe5.dyn.optonline.net) |
2022-09-27 15:10:45 +0200 | tomku | (~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 +0200 | bontaq` | bontaq |
2022-09-27 15:14:16 +0200 | dr_merijn | (~merijn@86-86-29-250.fixed.kpn.net) (Quit: leaving) |
2022-09-27 15:16:19 +0200 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) |
2022-09-27 15:17:15 +0200 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) (Client Quit) |
2022-09-27 15:17:25 +0200 | causal | (~user@50.35.83.177) (Quit: WeeChat 3.6) |
2022-09-27 15:18:00 +0200 | merijn | (~dr_merijn@86-86-29-250.fixed.kpn.net) |
2022-09-27 15:18:30 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2022-09-27 15:19:06 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Remote host closed the connection) |
2022-09-27 15:19:13 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-09-27 15:21:25 +0200 | jonathanx | (~jonathan@h-98-128-168-222.NA.cust.bahnhof.se) |
2022-09-27 15:21:55 +0200 | merijn | dr_merijn |
2022-09-27 15:22:55 +0200 | Joao003 | (~Joao003@187.85.87.1) |
2022-09-27 15:23:08 +0200 | eggplantade | (~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 +0200 | jero98772 | (~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 +0200 | acidjnk | (~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 +0200 | chexum | (~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 +0200 | chexum | (~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 +0200 | troydm | (~troydm@176.37.124.197) |
2022-09-27 15:35:09 +0200 | mesaoptimizer | (apotheosis@user/PapuaHardyNet) (Quit: nyaa~) |
2022-09-27 15:35:19 +0200 | mesaoptimizer | (apotheosis@user/PapuaHardyNet) |
2022-09-27 15:36:15 +0200 | raym | (~raym@user/raym) (Quit: gonna try a theme change) |
2022-09-27 15:37:45 +0200 | raym | (~raym@user/raym) |
2022-09-27 15:37:53 +0200 | raym | (~raym@user/raym) (Client Quit) |
2022-09-27 15:38:59 +0200 | kenran | (~user@user/kenran) |
2022-09-27 15:41:12 +0200 | waldo | (~waldo@user/waldo) (Ping timeout: 264 seconds) |
2022-09-27 15:42:28 +0200 | kenran` | (~user@user/kenran) |
2022-09-27 15:45:23 +0200 | edm | (sid147314@id-147314.hampstead.irccloud.com) |
2022-09-27 15:45:34 +0200 | ellensol_ | (~ellen@ua-84-216-129-63.bbcust.telenor.se) (Read error: Connection reset by peer) |
2022-09-27 15:45:50 +0200 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) |
2022-09-27 15:45:50 +0200 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
2022-09-27 15:45:50 +0200 | wroathe | (~wroathe@user/wroathe) |
2022-09-27 15:46:23 +0200 | kenran | (~user@user/kenran) (Ping timeout: 268 seconds) |
2022-09-27 15:48:47 +0200 | jpds1 | (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 258 seconds) |
2022-09-27 15:50:11 +0200 | jpds1 | (~jpds@gateway/tor-sasl/jpds) |
2022-09-27 15:50:19 +0200 | chexum | (~quassel@gateway/tor-sasl/chexum) (Ping timeout: 258 seconds) |
2022-09-27 15:50:41 +0200 | chexum | (~quassel@gateway/tor-sasl/chexum) |
2022-09-27 15:52:01 +0200 | kenran` | kenran |
2022-09-27 15:54:16 +0200 | jakalx | (~jakalx@base.jakalx.net) () |
2022-09-27 15:54:26 +0200 | jakalx | (~jakalx@base.jakalx.net) |
2022-09-27 15:56:03 +0200 | jao | (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) |
2022-09-27 15:56:29 +0200 | ellensol | (~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 +0200 | jpds1 | (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 258 seconds) |
2022-09-27 16:00:35 +0200 | ellensol | (~ellen@emp-50-230.eduroam.uu.se) (Ping timeout: 248 seconds) |
2022-09-27 16:01:05 +0200 | titibandit | (~titibandi@xdsl-212-8-150-57.nc.de) |
2022-09-27 16:01:31 +0200 | raym | (~aritra@user/raym) |
2022-09-27 16:01:39 +0200 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 248 seconds) |
2022-09-27 16:02:17 +0200 | rockymarine | (~rocky@user/rockymarine) (Ping timeout: 265 seconds) |
2022-09-27 16:03:21 +0200 | kenran | (~user@user/kenran) (Remote host closed the connection) |
2022-09-27 16:03:26 +0200 | rockymarine | (~rocky@user/rockymarine) |
2022-09-27 16:03:50 +0200 | kenran | (~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 +0200 | jpds1 | (~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 +0200 | lortabac | (~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 +0200 | shriekingnoise | (~shrieking@186.137.167.202) |
2022-09-27 16:13:50 +0200 | waldo | (~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 +0200 | gay9 | (~quassel@94-168-123-190.static.v4.ziggozakelijk.nl) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.) |
2022-09-27 16:17:59 +0200 | waldo | (~waldo@user/waldo) (Ping timeout: 250 seconds) |
2022-09-27 16:19:53 +0200 | fserucas | (~fserucas@2001:818:e376:a400:fb92:70c1:dd88:c7d7) |
2022-09-27 16:21:52 +0200 | coot | (~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 +0200 | fserucas | (~fserucas@2001:818:e376:a400:fb92:70c1:dd88:c7d7) (Remote host closed the connection) |
2022-09-27 16:24:27 +0200 | fserucas | (~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 +0200 | raym | (~aritra@user/raym) (Quit: leaving) |
2022-09-27 16:27:40 +0200 | raym | (~aritra@user/raym) |
2022-09-27 16:28:16 +0200 | stiell_ | (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 258 seconds) |
2022-09-27 16:29:26 +0200 | gurkenglas | (~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 +0200 | yobson | (~yobson@mail.jotron.com) (Remote host closed the connection) |
2022-09-27 16:30:09 +0200 | ellensol | (~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 +0200 | stiell_ | (~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 +0200 | Kaipii | Kaiepi |
2022-09-27 16:35:09 +0200 | ellensol | (~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 +0200 | seydar | (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 268 seconds) |
2022-09-27 16:38:37 +0200 | Sgeo | (~Sgeo@user/sgeo) |
2022-09-27 16:40:35 +0200 | yobson | (~yobson@mail.jotron.com) |
2022-09-27 16:41:17 +0200 | yobson | (~yobson@mail.jotron.com) (Remote host closed the connection) |
2022-09-27 16:42:15 +0200 | yobson | (~yobson@mail.jotron.com) |
2022-09-27 16:43:23 +0200 | yobson | (~yobson@mail.jotron.com) (Remote host closed the connection) |
2022-09-27 16:46:34 +0200 | david | (~david@2a01:e34:ec2b:d430:44a:f5ca:9867:d69d) |
2022-09-27 16:48:00 +0200 | fserucas | (~fserucas@2001:818:e376:a400:fb92:70c1:dd88:c7d7) (Remote host closed the connection) |
2022-09-27 16:50:33 +0200 | phma_ | phma |
2022-09-27 16:52:50 +0200 | yobson | (~yobson@mail.jotron.com) |
2022-09-27 16:53:24 +0200 | yobson | (~yobson@mail.jotron.com) (Remote host closed the connection) |
2022-09-27 16:53:44 +0200 | Joao003 | (~Joao003@187.85.87.1) (Quit: Client closed) |
2022-09-27 17:01:13 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Remote host closed the connection) |
2022-09-27 17:04:21 +0200 | dr_merijn | (~dr_merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 250 seconds) |
2022-09-27 17:04:40 +0200 | matthewmosior | (~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 +0200 | geekosaur | doesn't know streamly, sorry |
2022-09-27 17:08:24 +0200 | yobson | (~yobson@mail.jotron.com) |
2022-09-27 17:09:47 +0200 | yobson | (~yobson@mail.jotron.com) (Remote host closed the connection) |
2022-09-27 17:10:19 +0200 | rockymarine | (~rocky@user/rockymarine) (Ping timeout: 268 seconds) |
2022-09-27 17:10:26 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Ping timeout: 265 seconds) |
2022-09-27 17:10:57 +0200 | ellensol | (~ellen@emp-234-199.eduroam.uu.se) |
2022-09-27 17:12:50 +0200 | yobson | (~yobson@mail.jotron.com) |
2022-09-27 17:13:51 +0200 | yobson | (~yobson@mail.jotron.com) (Remote host closed the connection) |
2022-09-27 17:14:36 +0200 | waldo | (~waldo@user/waldo) |
2022-09-27 17:14:39 +0200 | yobson | (~yobson@mail.jotron.com) |
2022-09-27 17:15:25 +0200 | stiell_ | (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 258 seconds) |
2022-09-27 17:15:27 +0200 | yobson | (~yobson@mail.jotron.com) (Remote host closed the connection) |
2022-09-27 17:15:52 +0200 | stiell_ | (~stiell@gateway/tor-sasl/stiell) |
2022-09-27 17:18:36 +0200 | jonathanx | (~jonathan@h-98-128-168-222.NA.cust.bahnhof.se) (Remote host closed the connection) |
2022-09-27 17:18:54 +0200 | yobson_ | (~yobson@mail.jotron.com) |
2022-09-27 17:20:16 +0200 | yobson_ | (~yobson@mail.jotron.com) (Remote host closed the connection) |
2022-09-27 17:23:49 +0200 | ellensol | (~ellen@emp-234-199.eduroam.uu.se) (Ping timeout: 268 seconds) |
2022-09-27 17:23:58 +0200 | fef | (~thedawn@user/thedawn) (Remote host closed the connection) |
2022-09-27 17:23:58 +0200 | califax | (~califax@user/califx) (Read error: Connection reset by peer) |
2022-09-27 17:23:58 +0200 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Write error: Connection reset by peer) |
2022-09-27 17:23:58 +0200 | ChaiTRex | (~ChaiTRex@user/chaitrex) (Remote host closed the connection) |
2022-09-27 17:23:58 +0200 | jpds1 | (~jpds@gateway/tor-sasl/jpds) (Read error: Connection reset by peer) |
2022-09-27 17:24:15 +0200 | slack1256 | (~slack1256@191.126.227.202) |
2022-09-27 17:24:24 +0200 | califax | (~califax@user/califx) |
2022-09-27 17:24:29 +0200 | jpds1 | (~jpds@gateway/tor-sasl/jpds) |
2022-09-27 17:24:58 +0200 | ddb | (~ddb@tilde.club) |
2022-09-27 17:25:00 +0200 | cheater | (~Username@user/cheater) (Ping timeout: 264 seconds) |
2022-09-27 17:25:07 +0200 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) |
2022-09-27 17:25:25 +0200 | ChaiTRex | (~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 +0200 | yobson_ | (~yobson@mail.jotron.com) |
2022-09-27 17:26:46 +0200 | cheater | (~Username@user/cheater) |
2022-09-27 17:27:46 +0200 | yobson_ | (~yobson@mail.jotron.com) (Remote host closed the connection) |
2022-09-27 17:29:44 +0200 | yobson_ | (~yobson@mail.jotron.com) |
2022-09-27 17:30:08 +0200 | yobson_ | (~yobson@mail.jotron.com) (Remote host closed the connection) |
2022-09-27 17:31:05 +0200 | dr_merijn | (~dr_merijn@86-86-29-250.fixed.kpn.net) |
2022-09-27 17:32:13 +0200 | nate3 | (~nate@98.45.169.16) |
2022-09-27 17:32:58 +0200 | yobson | (~yobson@mail.jotron.com) |
2022-09-27 17:34:02 +0200 | yobson | (~yobson@mail.jotron.com) (Remote host closed the connection) |
2022-09-27 17:37:09 +0200 | nate3 | (~nate@98.45.169.16) (Ping timeout: 244 seconds) |
2022-09-27 17:39:11 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2022-09-27 17:41:10 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-09-27 17:43:07 +0200 | chexum | (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection) |
2022-09-27 17:43:14 +0200 | ellensol | (~ellen@ua-84-216-129-63.bbcust.telenor.se) |
2022-09-27 17:43:22 +0200 | chexum | (~quassel@gateway/tor-sasl/chexum) |
2022-09-27 17:43:37 +0200 | nschoe | (~quassel@178.251.84.79) (Ping timeout: 246 seconds) |
2022-09-27 17:45:14 +0200 | waleee | (~waleee@h-176-10-137-138.NA.cust.bahnhof.se) (Ping timeout: 265 seconds) |
2022-09-27 17:47:13 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Remote host closed the connection) |
2022-09-27 17:47:20 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-09-27 17:50:56 +0200 | yobson_ | (~yobson@mail.jotron.com) |
2022-09-27 17:51:59 +0200 | yobson_ | (~yobson@mail.jotron.com) (Remote host closed the connection) |
2022-09-27 17:59:49 +0200 | jero98772 | (~jero98772@2800:484:1d80:d8ce:3490:26c5:1782:da8c) (Ping timeout: 250 seconds) |
2022-09-27 18:00:02 +0200 | yobson | (~yobson@mail.jotron.com) |
2022-09-27 18:01:14 +0200 | yobson | (~yobson@mail.jotron.com) (Remote host closed the connection) |
2022-09-27 18:03:22 +0200 | yobson_ | (~yobson@mail.jotron.com) |
2022-09-27 18:04:00 +0200 | MajorBiscuit | (~MajorBisc@145.94.161.115) (Ping timeout: 264 seconds) |
2022-09-27 18:04:18 +0200 | yobson_ | (~yobson@mail.jotron.com) (Remote host closed the connection) |
2022-09-27 18:05:07 +0200 | jakalx | (~jakalx@base.jakalx.net) () |
2022-09-27 18:08:20 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2022-09-27 18:08:25 +0200 | ec_ | (~ec@gateway/tor-sasl/ec) (Remote host closed the connection) |
2022-09-27 18:09:00 +0200 | jakalx | (~jakalx@base.jakalx.net) |
2022-09-27 18:09:23 +0200 | Guest62 | (~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 +0200 | ec_ | (~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 +0200 | Guest62 | (~Guest62@host-95-250-40-158.retail.telecomitalia.it) (Client Quit) |
2022-09-27 18:12:14 +0200 | Guest62 | (~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 +0200 | jero98772 | (~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 +0200 | Guest62 | (~Guest62@host-95-250-40-158.retail.telecomitalia.it) (Quit: Client closed) |
2022-09-27 18:17:35 +0200 | acidjnk | (~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 +0200 | yobson | (~yobson@mail.jotron.com) |
2022-09-27 18:21:05 +0200 | yobson | (~yobson@mail.jotron.com) (Remote host closed the connection) |
2022-09-27 18:23:34 +0200 | biberu | (~biberu@user/biberu) (Read error: Connection reset by peer) |
2022-09-27 18:25:39 +0200 | kenran | (~user@user/kenran) (Remote host closed the connection) |
2022-09-27 18:26:15 +0200 | coot | (~coot@213.134.165.79) |
2022-09-27 18:27:32 +0200 | Tuplanolla | (~Tuplanoll@91-159-69-34.elisa-laajakaista.fi) |
2022-09-27 18:28:18 +0200 | biberu | (~biberu@user/biberu) |
2022-09-27 18:29:21 +0200 | chexum | (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection) |
2022-09-27 18:29:56 +0200 | chexum | (~quassel@gateway/tor-sasl/chexum) |
2022-09-27 18:31:37 +0200 | ellensol | (~ellen@ua-84-216-129-63.bbcust.telenor.se) (Read error: Connection reset by peer) |
2022-09-27 18:31:59 +0200 | califax | (~califax@user/califx) (Remote host closed the connection) |
2022-09-27 18:33:31 +0200 | califax | (~califax@user/califx) |
2022-09-27 18:35:45 +0200 | yobson_ | (~yobson@mail.jotron.com) |
2022-09-27 18:36:32 +0200 | DavidBinder | (~DavidBind@46-253-189-142.dynamic.monzoon.net) |
2022-09-27 18:37:21 +0200 | DavidBinder | (~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 +0200 | tzh | (~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 +0200 | yobson_ | (~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 +0200 | coot | (~coot@213.134.165.79) (Quit: coot) |
2022-09-27 18:41:23 +0200 | Henson | (~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 +0200 | mmhat | (~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 +0200 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection) |
2022-09-27 18:52:46 +0200 | yobson | (~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 +0200 | bitdex | (~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 +0200 | rockymarine | (~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 +0200 | titibandit | (~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 +0200 | califax | (~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 +0200 | califax | (~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 +0200 | Henson | crosses 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 +0200 | slack1256 | (~slack1256@191.126.227.202) (Remote host closed the connection) |
2022-09-27 19:08:50 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2022-09-27 19:10:18 +0200 | econo | (uid147250@user/econo) |
2022-09-27 19:11:14 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Remote host closed the connection) |
2022-09-27 19:13:41 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 265 seconds) |
2022-09-27 19:14:37 +0200 | mbuf | (~Shakthi@49.205.84.15) (Quit: Leaving) |
2022-09-27 19:15:22 +0200 | mastarija | (~mastarija@2a05:4f46:e03:6000:eff5:a18a:103b:db59) |
2022-09-27 19:16:39 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-09-27 19:20:10 +0200 | zeenk | (~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 +0200 | raym | (~aritra@user/raym) (Ping timeout: 265 seconds) |
2022-09-27 19:27:32 +0200 | Midjak | (~Midjak@82.66.147.146) |
2022-09-27 19:27:47 +0200 | zoomer123 | (~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 +0200 | vglfr | (~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 +0200 | vglfr | (~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 +0200 | coot | (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) |
2022-09-27 19:31:15 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2022-09-27 19:31:19 +0200 | img | (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in) |
2022-09-27 19:32:28 +0200 | beteigeuze | (~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 +0200 | zoomer123 | (~zoomer123@24.133.173.162) (Quit: Client closed) |
2022-09-27 19:34:14 +0200 | img | (~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 +0200 | beteigeuze | (~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 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Remote host closed the connection) |
2022-09-27 19:39:03 +0200 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 250 seconds) |
2022-09-27 19:39:26 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-09-27 19:39:33 +0200 | califax | (~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 +0200 | califax_ | (~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 +0200 | califax_ | califax |
2022-09-27 19:41:48 +0200 | <monochrom> | You know what, differentiation means relative coordinates are enough. |
2022-09-27 19:42:31 +0200 | beteigeuze | (~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 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Ping timeout: 244 seconds) |
2022-09-27 19:47:40 +0200 | raym | (~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 +0200 | raym | (~aritra@user/raym) (Remote host closed the connection) |
2022-09-27 19:53:56 +0200 | kimjetwav | (~user@2607:fea8:235e:b600:14cc:4122:217e:1d45) (Remote host closed the connection) |
2022-09-27 19:54:28 +0200 | fef | (~thedawn@user/thedawn) |
2022-09-27 19:57:51 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2022-09-27 19:58:21 +0200 | yobson | (~yobson@mail.jotron.com) (Ping timeout: 260 seconds) |
2022-09-27 19:58:49 +0200 | raym | (~aritra@user/raym) |
2022-09-27 19:59:13 +0200 | mastarija | (~mastarija@2a05:4f46:e03:6000:eff5:a18a:103b:db59) (Ping timeout: 268 seconds) |
2022-09-27 20:00:32 +0200 | yobson_ | (~yobson@mail.jotron.com) |
2022-09-27 20:00:57 +0200 | califax | (~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 +0200 | califax | (~califax@user/califx) |
2022-09-27 20:04:51 +0200 | yobson_ | (~yobson@mail.jotron.com) (Ping timeout: 248 seconds) |
2022-09-27 20:07:28 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-09-27 20:10:19 +0200 | razetime | (~quassel@117.193.7.114) (Remote host closed the connection) |
2022-09-27 20:10:34 +0200 | jmdaemon | (~jmdaemon@user/jmdaemon) |
2022-09-27 20:15:05 +0200 | Guest73 | (~Guest73@p200300ef9718357f545f1ba775403e5c.dip0.t-ipconnect.de) |
2022-09-27 20:18:38 +0200 | yobson_ | (~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 +0200 | waleee | (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) |
2022-09-27 20:22:56 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2022-09-27 20:24:01 +0200 | califax | (~califax@user/califx) (Ping timeout: 258 seconds) |
2022-09-27 20:24:02 +0200 | yobson_ | (~yobson@mail.jotron.com) (Ping timeout: 244 seconds) |
2022-09-27 20:24:32 +0200 | califax | (~califax@user/califx) |
2022-09-27 20:28:54 +0200 | LukeHoersten | (~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 +0200 | LukeHoersten | (~LukeHoers@user/lukehoersten) (Ping timeout: 246 seconds) |
2022-09-27 20:36:21 +0200 | kuribas | (~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 +0200 | yobson | (~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 +0200 | akegalj | (~akegalj@213-202-90-31.dsl.iskon.hr) |
2022-09-27 20:41:15 +0200 | <ph88^> | kk |
2022-09-27 20:41:26 +0200 | akegalj | (~akegalj@213-202-90-31.dsl.iskon.hr) () |
2022-09-27 20:41:29 +0200 | akegalj | (~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 +0200 | titibandit | (~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 +0200 | chomwitt | (~chomwitt@2a02:587:dc14:f500:71c3:d40e:3c82:7bf3) |
2022-09-27 20:54:32 +0200 | fef | (~thedawn@user/thedawn) (Remote host closed the connection) |
2022-09-27 20:54:41 +0200 | Lord_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 +0200 | fef | (~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 +0200 | Lord_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 +0200 | Lord_of_Life_ | Lord_of_Life |
2022-09-27 21:00:29 +0200 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection) |
2022-09-27 21:00:50 +0200 | jakalx | (~jakalx@base.jakalx.net) (Error from remote client) |
2022-09-27 21:01:01 +0200 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) |
2022-09-27 21:01:11 +0200 | lemonsni- | (~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 +0200 | jakalx | (~jakalx@base.jakalx.net) |
2022-09-27 21:04:46 +0200 | eggplantade | (~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 +0200 | pavonia | (~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 +0200 | matthewmosior | (~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 +0200 | califax | (~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 +0200 | lortabac | (~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 +0200 | califax | (~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 +0200 | jargon | (~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 +0200 | jao | (~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 +0200 | acidjnk | (~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 +0200 | jao | (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) |
2022-09-27 21:26:01 +0200 | matthewmosior | (~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 +0200 | matthewmosior | (~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 +0200 | raehik | (~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 +0200 | nate3 | (~nate@98.45.169.16) |
2022-09-27 21:37:43 +0200 | rockymarine | (~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 +0200 | mc47 | (~mc47@xmonad/TheMC47) (Remote host closed the connection) |
2022-09-27 21:39:11 +0200 | nate3 | (~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 +0200 | yobson | (~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 +0200 | talismanick | (~talismani@2601:200:c100:c9e0::24ac) |
2022-09-27 21:44:55 +0200 | LukeHoersten | (~LukeHoers@user/lukehoersten) |
2022-09-27 21:47:19 +0200 | waldo | (~waldo@user/waldo) (Quit: quit) |
2022-09-27 21:49:23 +0200 | ubert | (~Thunderbi@178.165.197.10.wireless.dyn.drei.com) (Ping timeout: 252 seconds) |
2022-09-27 21:51:05 +0200 | rockymarine | (~rocky@user/rockymarine) |
2022-09-27 21:53:00 +0200 | yobson | (~yobson@mail.jotron.com) |
2022-09-27 21:57:23 +0200 | yobson | (~yobson@mail.jotron.com) (Ping timeout: 248 seconds) |
2022-09-27 21:58:00 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-09-27 21:58:07 +0200 | slack1256 | (~slack1256@191.126.227.202) |
2022-09-27 21:58:54 +0200 | LukeHoersten | (~LukeHoers@user/lukehoersten) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2022-09-27 22:01:54 +0200 | ellensol | (~ellen@178-78-210-152.customers.ownit.se) |
2022-09-27 22:02:06 +0200 | chomwitt | (~chomwitt@2a02:587:dc14:f500:71c3:d40e:3c82:7bf3) (Remote host closed the connection) |
2022-09-27 22:02:36 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Ping timeout: 260 seconds) |
2022-09-27 22:04:16 +0200 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 244 seconds) |
2022-09-27 22:05:10 +0200 | lortabac | (~lortabac@2a01:e0a:541:b8f0:e619:12ba:2d7e:50d6) (Quit: WeeChat 2.8) |
2022-09-27 22:05:16 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2022-09-27 22:08:03 +0200 | jinsun | (~jinsun@user/jinsun) (Ping timeout: 248 seconds) |
2022-09-27 22:09:30 +0200 | yobson | (~yobson@mail.jotron.com) |
2022-09-27 22:09:37 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 246 seconds) |
2022-09-27 22:10:50 +0200 | mvk | (~mvk@2607:fea8:5ce3:8500::778c) |
2022-09-27 22:20:32 +0200 | wroathe | (~wroathe@50.205.197.50) |
2022-09-27 22:20:33 +0200 | wroathe | (~wroathe@50.205.197.50) (Changing host) |
2022-09-27 22:20:33 +0200 | wroathe | (~wroathe@user/wroathe) |
2022-09-27 22:20:53 +0200 | jinsun | (~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 +0200 | marinelli[m] | (~marinelli@2001:470:69fc:105::2d8) |
2022-09-27 22:23:05 +0200 | gmg | (~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 +0200 | nate3 | (~nate@98.45.169.16) |
2022-09-27 22:31:18 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-09-27 22:34:17 +0200 | marinelli[m] | (~marinelli@2001:470:69fc:105::2d8) (Quit: Reconnecting) |
2022-09-27 22:34:31 +0200 | marinelli[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 +0200 | coot | (~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 +0200 | pretty_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 +0200 | akegalj | (~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 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Remote host closed the connection) |
2022-09-27 22:50:37 +0200 | matthewm_ | (~matthewmo@173.170.253.91) |
2022-09-27 22:57:24 +0200 | arahael | (~arahael@203.217.43.212) (Ping timeout: 264 seconds) |
2022-09-27 22:59:59 +0200 | matthewm_ | (~matthewmo@173.170.253.91) (Remote host closed the connection) |
2022-09-27 23:00:34 +0200 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2022-09-27 23:01:44 +0200 | jakalx | (~jakalx@base.jakalx.net) (Error from remote client) |
2022-09-27 23:04:29 +0200 | kenran | (~user@user/kenran) |
2022-09-27 23:04:43 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-09-27 23:04:53 +0200 | kenran | (~user@user/kenran) (Remote host closed the connection) |
2022-09-27 23:05:31 +0200 | mastarija | (~mastarija@2a05:4f46:e03:6000:480e:b508:3f46:25c4) |
2022-09-27 23:08:51 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Ping timeout: 244 seconds) |
2022-09-27 23:09:04 +0200 | arahael | (~arahael@203.217.43.212) |
2022-09-27 23:09:19 +0200 | matthewmosior | (~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 +0200 | jakalx | (~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 +0200 | yobson | (~yobson@mail.jotron.com) (Read error: Connection reset by peer) |
2022-09-27 23:17:46 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Ping timeout: 265 seconds) |
2022-09-27 23:18:10 +0200 | Guest73 | (~Guest73@p200300ef9718357f545f1ba775403e5c.dip0.t-ipconnect.de) (Quit: Client closed) |
2022-09-27 23:18:10 +0200 | yobson | (~yobson@mail.jotron.com) |
2022-09-27 23:19:59 +0200 | takuan | (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
2022-09-27 23:21:55 +0200 | titibandit | (~titibandi@xdsl-212-8-150-57.nc.de) (Remote host closed the connection) |
2022-09-27 23:22:18 +0200 | yobson | (~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 +0200 | zer0bitz_ | (~zer0bitz@2001:2003:f748:2000:add8:471e:b979:aa97) (Ping timeout: 246 seconds) |
2022-09-27 23:27:43 +0200 | ft | (~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 +0200 | mmhat | (~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 +0200 | acidjnk | (~acidjnk@p200300d6e7137a16b8753f0c5356e398.dip0.t-ipconnect.de) (Ping timeout: 248 seconds) |
2022-09-27 23:31:58 +0200 | notzmv | (~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 +0200 | michalz | (~michalz@185.246.207.200) (Remote host closed the connection) |
2022-09-27 23:33:53 +0200 | nate3 | (~nate@98.45.169.16) (Ping timeout: 252 seconds) |
2022-09-27 23:34:04 +0200 | mastarija | (~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 +0200 | yobson_ | (~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 +0200 | causal | (~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 +0200 | rockymarine | (~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 +0200 | yobson_ | (~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 +0200 | matthewmosior | (~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 +0200 | mmhat | (~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 +0200 | wroathe | (~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 +0200 | yobson_ | (~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 |