2023-02-10 00:01:15 +0100 | dcoutts_ | (~duncan@host81-156-211-188.range81-156.btcentralplus.com) |
2023-02-10 00:01:17 +0100 | gnalzo | (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 3.8) |
2023-02-10 00:03:32 +0100 | dcoutts | (~duncan@host81-156-211-203.range81-156.btcentralplus.com) (Ping timeout: 252 seconds) |
2023-02-10 00:03:47 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 255 seconds) |
2023-02-10 00:05:06 +0100 | dcoutts__ | (~duncan@host81-156-211-188.range81-156.btcentralplus.com) |
2023-02-10 00:05:44 +0100 | dcoutts_ | (~duncan@host81-156-211-188.range81-156.btcentralplus.com) (Ping timeout: 252 seconds) |
2023-02-10 00:06:46 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) |
2023-02-10 00:06:55 +0100 | dcoutts_ | (~duncan@host81-156-211-188.range81-156.btcentralplus.com) |
2023-02-10 00:09:34 +0100 | dcoutts__ | (~duncan@host81-156-211-188.range81-156.btcentralplus.com) (Ping timeout: 260 seconds) |
2023-02-10 00:13:24 +0100 | dcoutts | (~duncan@host86-150-41-141.range86-150.btcentralplus.com) |
2023-02-10 00:13:48 +0100 | dcoutts_ | (~duncan@host81-156-211-188.range81-156.btcentralplus.com) (Ping timeout: 252 seconds) |
2023-02-10 00:22:14 +0100 | dcoutts_ | (~duncan@host86-151-9-49.range86-151.btcentralplus.com) |
2023-02-10 00:23:42 +0100 | king_gs | (~Thunderbi@2806:103e:29:1779:fe89:b45a:2ae8:5941) (Remote host closed the connection) |
2023-02-10 00:24:01 +0100 | king_gs | (~Thunderbi@2806:103e:29:1779:fe89:b45a:2ae8:5941) |
2023-02-10 00:24:47 +0100 | dcoutts | (~duncan@host86-150-41-141.range86-150.btcentralplus.com) (Ping timeout: 264 seconds) |
2023-02-10 00:28:09 +0100 | Lycurgus | (~juan@user/Lycurgus) (Quit: Exeunt: personae.ai-integration.biz) |
2023-02-10 00:28:12 +0100 | cheater_ | (~Username@user/cheater) |
2023-02-10 00:30:00 +0100 | michalz | (~michalz@185.246.204.121) (Remote host closed the connection) |
2023-02-10 00:31:02 +0100 | cheater | (~Username@user/cheater) (Ping timeout: 268 seconds) |
2023-02-10 00:31:06 +0100 | cheater_ | cheater |
2023-02-10 00:31:55 +0100 | AlexZenon | (~alzenon@178.34.160.79) (Ping timeout: 248 seconds) |
2023-02-10 00:34:07 +0100 | Alex_test | (~al_test@178.34.160.79) (Ping timeout: 268 seconds) |
2023-02-10 00:34:59 +0100 | Square | (~adude___@user/square) (Ping timeout: 264 seconds) |
2023-02-10 00:37:17 +0100 | AlexZenon | (~alzenon@178.34.160.79) |
2023-02-10 00:39:09 +0100 | Alex_test | (~al_test@178.34.160.79) |
2023-02-10 00:40:24 +0100 | dcoutts | (~duncan@host86-151-9-49.range86-151.btcentralplus.com) |
2023-02-10 00:40:59 +0100 | dcoutts_ | (~duncan@host86-151-9-49.range86-151.btcentralplus.com) (Ping timeout: 264 seconds) |
2023-02-10 00:51:06 +0100 | Midjak | (~Midjak@82.66.147.146) |
2023-02-10 01:00:20 +0100 | nattiestnate | (~nate@202.138.250.11) |
2023-02-10 01:01:26 +0100 | nattiestnate | (~nate@202.138.250.11) (Client Quit) |
2023-02-10 01:05:30 +0100 | notzmv | (~zmv@user/notzmv) (Ping timeout: 252 seconds) |
2023-02-10 01:09:26 +0100 | jmorris | (uid537181@id-537181.uxbridge.irccloud.com) |
2023-02-10 01:09:31 +0100 | Tuplanolla | (~Tuplanoll@91-159-68-152.elisa-laajakaista.fi) (Quit: Leaving.) |
2023-02-10 01:10:27 +0100 | opticblast | (~Thunderbi@172.58.84.5) (Ping timeout: 260 seconds) |
2023-02-10 01:15:59 +0100 | coot | (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) () |
2023-02-10 01:18:26 +0100 | _leo___ | (~emmanuelu@user/emmanuelux) |
2023-02-10 01:21:11 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds) |
2023-02-10 01:21:40 +0100 | emmanuelux | (~emmanuelu@user/emmanuelux) (Ping timeout: 260 seconds) |
2023-02-10 01:24:52 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection) |
2023-02-10 01:25:29 +0100 | nattiestnate | (~nate@202.138.250.6) |
2023-02-10 01:25:31 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) |
2023-02-10 01:37:30 +0100 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) |
2023-02-10 01:38:44 +0100 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) |
2023-02-10 01:43:11 +0100 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 268 seconds) |
2023-02-10 01:54:18 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) |
2023-02-10 02:05:52 +0100 | wroathe | (~wroathe@207-153-38-140.fttp.usinternet.com) |
2023-02-10 02:05:52 +0100 | wroathe | (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host) |
2023-02-10 02:05:52 +0100 | wroathe | (~wroathe@user/wroathe) |
2023-02-10 02:05:55 +0100 | dcoutts_ | (~duncan@host86-167-90-212.range86-167.btcentralplus.com) |
2023-02-10 02:07:50 +0100 | dcoutts | (~duncan@host86-151-9-49.range86-151.btcentralplus.com) (Ping timeout: 252 seconds) |
2023-02-10 02:10:42 +0100 | albet70 | (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection) |
2023-02-10 02:11:21 +0100 | troydm | (~troydm@user/troydm) |
2023-02-10 02:16:49 +0100 | albet70 | (~xxx@2400:8902::f03c:92ff:fe60:98d8) |
2023-02-10 02:20:37 +0100 | werneta | (~werneta@137.79.195.231) (Remote host closed the connection) |
2023-02-10 02:26:59 +0100 | waleee | (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) (Ping timeout: 260 seconds) |
2023-02-10 02:31:32 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:54db:de44:4607:1cea) |
2023-02-10 02:35:59 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:54db:de44:4607:1cea) (Ping timeout: 248 seconds) |
2023-02-10 02:36:09 +0100 | geekosaur | (~geekosaur@xmonad/geekosaur) (Quit: Leaving) |
2023-02-10 02:40:27 +0100 | _xor | (~xor@74.215.182.83) (Quit: brb) |
2023-02-10 02:40:28 +0100 | codaraxis___ | (~codaraxis@user/codaraxis) (Ping timeout: 252 seconds) |
2023-02-10 02:41:41 +0100 | MQ-17J | (~MQ-17J@104.28.216.166) (Ping timeout: 246 seconds) |
2023-02-10 02:41:58 +0100 | geekosaur | (~geekosaur@xmonad/geekosaur) |
2023-02-10 02:42:13 +0100 | MQ-17J | (~MQ-17J@104.28.216.166) |
2023-02-10 02:43:32 +0100 | irrgit__ | (~irrgit@89.47.234.74) |
2023-02-10 02:44:47 +0100 | xff0x | (~xff0x@2405:6580:b080:900:876a:aa31:e2c4:b726) (Ping timeout: 255 seconds) |
2023-02-10 02:45:32 +0100 | irrgit_ | (~irrgit@176.113.74.130) (Ping timeout: 265 seconds) |
2023-02-10 02:47:17 +0100 | Sciencentistguy5 | (~sciencent@hacksoc/ordinary-member) |
2023-02-10 02:47:37 +0100 | thongpv87 | (~thongpv87@2402:9d80:36f:d082:2f70:3163:c158:b60a) |
2023-02-10 02:49:17 +0100 | Sciencentistguy | (~sciencent@hacksoc/ordinary-member) (Ping timeout: 252 seconds) |
2023-02-10 02:49:17 +0100 | Sciencentistguy5 | Sciencentistguy |
2023-02-10 03:06:44 +0100 | rettahcay | (~kaushikv@c-24-20-37-193.hsd1.or.comcast.net) |
2023-02-10 03:12:47 +0100 | MQ-17J | (~MQ-17J@104.28.216.166) (Ping timeout: 248 seconds) |
2023-02-10 03:13:19 +0100 | MQ-17J | (~MQ-17J@104.28.216.165) |
2023-02-10 03:22:35 +0100 | beteigeuze | (~Thunderbi@a79-169-109-107.cpe.netcabo.pt) (Ping timeout: 248 seconds) |
2023-02-10 03:24:07 +0100 | gehmehgeh | (~user@user/gehmehgeh) |
2023-02-10 03:24:31 +0100 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 252 seconds) |
2023-02-10 03:25:05 +0100 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) |
2023-02-10 03:25:23 +0100 | gmg | (~user@user/gehmehgeh) (Ping timeout: 255 seconds) |
2023-02-10 03:25:47 +0100 | MQ-17J | (~MQ-17J@104.28.216.165) (Quit: Quit) |
2023-02-10 03:26:00 +0100 | MQ-17J | (~MQ-17J@104.28.216.165) |
2023-02-10 03:38:48 +0100 | Midjak | (~Midjak@82.66.147.146) (Quit: This computer has gone to sleep) |
2023-02-10 03:40:25 +0100 | xff0x | (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) |
2023-02-10 03:44:17 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds) |
2023-02-10 03:44:24 +0100 | azimut_ | (~azimut@gateway/tor-sasl/azimut) |
2023-02-10 03:49:12 +0100 | rekahsoft | (~rekahsoft@bras-base-orllon1122w-grc-05-174-88-194-86.dsl.bell.ca) |
2023-02-10 03:50:53 +0100 | rekahsoft | (~rekahsoft@bras-base-orllon1122w-grc-05-174-88-194-86.dsl.bell.ca) (Remote host closed the connection) |
2023-02-10 03:51:38 +0100 | rekahsoft | (~rekahsoft@bras-base-orllon1122w-grc-05-174-88-194-86.dsl.bell.ca) |
2023-02-10 03:57:45 +0100 | rekahsoft | (~rekahsoft@bras-base-orllon1122w-grc-05-174-88-194-86.dsl.bell.ca) (Remote host closed the connection) |
2023-02-10 03:58:26 +0100 | rekahsoft | (~rekahsoft@bras-base-orllon1122w-grc-05-174-88-194-86.dsl.bell.ca) |
2023-02-10 04:02:52 +0100 | rekahsoft | (~rekahsoft@bras-base-orllon1122w-grc-05-174-88-194-86.dsl.bell.ca) (Remote host closed the connection) |
2023-02-10 04:05:29 +0100 | jero98772 | (~jero98772@2800:484:1d80:d8ce:9815:cfda:3661:17bb) (Remote host closed the connection) |
2023-02-10 04:05:52 +0100 | <EvanR> | this is kind of interesting. I have one VPS instance with enough memory to install ghc and compile hello world. This hello world binary runs. Then I move the binary to another VPS and it the program runs but says No such file or directory on stderr |
2023-02-10 04:06:21 +0100 | <EvanR> | ldd says "not a dynamic executable" |
2023-02-10 04:07:00 +0100 | <EvanR> | the two versions of the kernel and system software are a few years apart |
2023-02-10 04:08:42 +0100 | <yushyin> | EvanR: try strace -f that binary and filter/grep for 'No such file or directory' |
2023-02-10 04:09:09 +0100 | jmorris | (uid537181@id-537181.uxbridge.irccloud.com) (Quit: Connection closed for inactivity) |
2023-02-10 04:09:28 +0100 | <int-e> | . o O ( maybe it's a wrapper shell script ) |
2023-02-10 04:10:35 +0100 | <int-e> | Another thing I've seen is that it's an ELF executable but the corresponding "interpreter" (like /lib64/ld-linx-x86-64.so.2) is missing. |
2023-02-10 04:10:48 +0100 | <yushyin> | -f will trace child processes too |
2023-02-10 04:12:01 +0100 | <EvanR> | lets see if I can move strace over from the other VPS xD |
2023-02-10 04:12:32 +0100 | <EvanR> | /lib64/anything is definitely not there |
2023-02-10 04:12:40 +0100 | <yushyin> | do you have file? file shows the interpreter |
2023-02-10 04:12:49 +0100 | <sm> | are they both 64 bit ? |
2023-02-10 04:12:55 +0100 | <EvanR> | Main: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0x744bc042692450008ac194110400490945cc56e9, not stripped |
2023-02-10 04:13:25 +0100 | <EvanR> | if this is a 32 bit linux that will be wild |
2023-02-10 04:13:32 +0100 | stiell | (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 255 seconds) |
2023-02-10 04:13:35 +0100 | <sm> | arch -a |
2023-02-10 04:14:08 +0100 | <EvanR> | uname -m says -686 |
2023-02-10 04:14:12 +0100 | <EvanR> | i686 |
2023-02-10 04:14:14 +0100 | <int-e> | 32 bit! |
2023-02-10 04:14:18 +0100 | <int-e> | <3 |
2023-02-10 04:14:21 +0100 | <EvanR> | damn |
2023-02-10 04:14:22 +0100 | <yushyin> | there you go :D |
2023-02-10 04:14:23 +0100 | <sm> | and by the way you can have a frankenlinux like mine, that's both (32 bit vps upgraded over time to 64 bit software) |
2023-02-10 04:14:46 +0100 | eggplantade | (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) |
2023-02-10 04:15:00 +0100 | <EvanR> | I was hoping to trick these shitty VPS into doing my haskell bidding without getting dirty and just upgrading them |
2023-02-10 04:15:58 +0100 | <EvanR> | what's this about "dynamically linked (uses shared libs)" and ldd reports "not a dynamic executable" |
2023-02-10 04:16:03 +0100 | <int-e> | well, you can try to find a 32 bit ghc |
2023-02-10 04:16:51 +0100 | stiell | (~stiell@gateway/tor-sasl/stiell) |
2023-02-10 04:17:41 +0100 | stiell | (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection) |
2023-02-10 04:18:06 +0100 | <dminuoso> | 04:10:35 int-e | Another thing I've seen is that it's an ELF executable but the corresponding "interpreter" (like /lib64/ld-linx-x86-64.so.2) is missing. |
2023-02-10 04:18:12 +0100 | stiell | (~stiell@gateway/tor-sasl/stiell) |
2023-02-10 04:18:19 +0100 | <dminuoso> | If the elf interpreter is missing, you will just get an ominous "file not found" error. |
2023-02-10 04:18:21 +0100 | <int-e> | EvanR: AFAIK `ldd` works by tracing the actual dynamic linker as it's loading shared objects... that would be the /lib64/ld-linx-x86-64.so.2 thing that you don't have. |
2023-02-10 04:18:25 +0100 | <dminuoso> | Incredibly frustrating and incredibly misleading. |
2023-02-10 04:18:48 +0100 | <dminuoso> | Because as far as your eyes go, the executable you're trying to execute doesnt exist. But it does. |
2023-02-10 04:19:13 +0100 | <int-e> | Yeah, it was quite mystifying the first time I ran into this. |
2023-02-10 04:19:33 +0100 | <sm> | misleading error messages are a tool of satan |
2023-02-10 04:19:36 +0100 | <int-e> | The error is technically accurate of course. |
2023-02-10 04:19:52 +0100 | <dminuoso> | int-e: well it doesnt really matter whether its accurate, its *specified* in `man 2 execve` |
2023-02-10 04:19:53 +0100 | <EvanR> | I knew the exe was not not found because luckily the message is printed differently |
2023-02-10 04:20:00 +0100 | <dminuoso> | ENOENT The file pathname or a script or ELF interpreter does not exist. |
2023-02-10 04:20:01 +0100 | <int-e> | The kernel tries to map that file; it fails because the file does not exist. So that's the error returned... |
2023-02-10 04:20:18 +0100 | <EvanR> | nevermind, it's like the file is not found |
2023-02-10 04:20:19 +0100 | <dminuoso> | int-e: So really, execve cant differentiate between "file pathname does not exist" and "ELF interpreter does not exist" |
2023-02-10 04:20:40 +0100 | <dminuoso> | And I suppose there's no err string set to explain the difference |
2023-02-10 04:20:43 +0100 | <EvanR> | dminuoso, thanks for pointing out the additional nonsense there I didn't even notice |
2023-02-10 04:20:56 +0100 | <int-e> | But it's surprising at first that `exec` reads two files. |
2023-02-10 04:21:04 +0100 | <EvanR> | it's the shell telling me the exe is literally not found lol |
2023-02-10 04:21:20 +0100 | <dminuoso> | well thats dynamically linked executables for you] |
2023-02-10 04:21:24 +0100 | <int-e> | dminuoso: Where would that string be? There's only errno, I think. |
2023-02-10 04:21:37 +0100 | <dminuoso> | int-e: strerror |
2023-02-10 04:21:43 +0100 | <dminuoso> | or no hold on |
2023-02-10 04:21:59 +0100 | <int-e> | (And/or the return value from exec.) |
2023-02-10 04:22:23 +0100 | <int-e> | strerror is just a table of strings corresponding to the standard error return values. |
2023-02-10 04:22:34 +0100 | <dminuoso> | I cant recall the specific C function, but there was one using static storage, where you could extract an additional error message from the most recently errno |
2023-02-10 04:23:16 +0100 | <dminuoso> | Maybe that was glibc specific though |
2023-02-10 04:23:19 +0100 | <EvanR> | errno plus? heh |
2023-02-10 04:23:24 +0100 | <EvanR> | the shadow errno |
2023-02-10 04:24:03 +0100 | <int-e> | Anyway, the error is what it is; it can be explained, but it comes from a detail of loading ELF executables that nobody ordinarily thinks about. |
2023-02-10 04:24:23 +0100 | <dminuoso> | dynamically linked elf executables, though |
2023-02-10 04:24:29 +0100 | <int-e> | yes |
2023-02-10 04:24:54 +0100 | <int-e> | And maybe we should also blame `ldd` for blindly reporting that error. |
2023-02-10 04:25:28 +0100 | <dminuoso> | Well `ldd` would be subject to a TOCTOU condition if it tried to disambiguate |
2023-02-10 04:25:39 +0100 | <dminuoso> | There really isnt any way other than to introduce an additional errno to execve |
2023-02-10 04:26:18 +0100 | <int-e> | Well it could at least try to be more helpful. |
2023-02-10 04:26:29 +0100 | <dminuoso> | (And that can easily spawn philosophical discussions whether an almost-never-wrong behavior that has much improved diagnostics in 99.99% cases isnt flat out better) |
2023-02-10 04:26:32 +0100 | <EvanR> | I'm a bit surprised that this binary is dynamically linked |
2023-02-10 04:26:45 +0100 | <int-e> | Also if you use `ldd` in a scenario where you're subject to races you deserve what you get. |
2023-02-10 04:26:46 +0100 | <EvanR> | did I compile it wrong or |
2023-02-10 04:27:00 +0100 | whatsupdoc | (uid509081@id-509081.hampstead.irccloud.com) (Quit: Connection closed for inactivity) |
2023-02-10 04:27:21 +0100 | <EvanR> | well, the 64 bit thing is the nail in the coffin but. Didn't ghc usually statically link everything |
2023-02-10 04:27:24 +0100 | <dminuoso> | EvanR: its not dynamically linked, though |
2023-02-10 04:27:30 +0100 | <dminuoso> | EvanR | ldd says "not a dynamic executable |
2023-02-10 04:27:33 +0100 | <dminuoso> | Try `file` |
2023-02-10 04:27:52 +0100 | <dminuoso> | EvanR: yes and no. |
2023-02-10 04:28:08 +0100 | <EvanR> | I pasted the output of file above |
2023-02-10 04:28:08 +0100 | <dminuoso> | EvanR: ghc statically links Haskell modules in, but dynamically links the rest of the ELF |
2023-02-10 04:28:12 +0100 | <int-e> | Have you tried `ldd` on the host where the program works? |
2023-02-10 04:28:25 +0100 | <dminuoso> | EvanR: by default, anyway |
2023-02-10 04:29:15 +0100 | <EvanR> | yes it has 7 dynamically linked libraries |
2023-02-10 04:29:33 +0100 | <EvanR> | and lists the lib64 loader |
2023-02-10 04:30:12 +0100 | <EvanR> | cool |
2023-02-10 04:30:45 +0100 | rekahsoft | (~rekahsoft@bras-base-orllon1122w-grc-05-174-88-194-86.dsl.bell.ca) |
2023-02-10 04:31:11 +0100 | <EvanR> | so next year when I try this again and both linuxes are 64 bit, it will still be a roll of the dice if this shenanigan will work, because of those system libraries |
2023-02-10 04:31:28 +0100 | <sm> | at least you'll have a chance :) |
2023-02-10 04:34:23 +0100 | ft | (~ft@p508dbcc4.dip0.t-ipconnect.de) (Ping timeout: 248 seconds) |
2023-02-10 04:35:06 +0100 | <EvanR> | one of those libraries is libgmp btw |
2023-02-10 04:35:12 +0100 | finn_elija | (~finn_elij@user/finn-elija/x-0085643) |
2023-02-10 04:35:12 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija))) |
2023-02-10 04:35:12 +0100 | finn_elija | FinnElija |
2023-02-10 04:35:17 +0100 | <EvanR> | isn't this extraneous |
2023-02-10 04:35:49 +0100 | <EvanR> | don't we have a replacement that is pure haskell |
2023-02-10 04:36:16 +0100 | bitmapper | (uid464869@id-464869.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
2023-02-10 04:40:55 +0100 | ft | (~ft@p3e9bc443.dip0.t-ipconnect.de) |
2023-02-10 04:41:55 +0100 | rekahsoft | (~rekahsoft@bras-base-orllon1122w-grc-05-174-88-194-86.dsl.bell.ca) (Ping timeout: 252 seconds) |
2023-02-10 04:46:51 +0100 | mncheck | (~mncheck@193.224.205.254) (Ping timeout: 265 seconds) |
2023-02-10 04:47:07 +0100 | varoo | (~varoo@117.203.246.41) |
2023-02-10 04:47:20 +0100 | razetime | (~Thunderbi@117.193.2.129) |
2023-02-10 04:47:44 +0100 | <yushyin> | link gmp static too, if you like? |
2023-02-10 04:48:01 +0100 | <c_wraith> | there is a pure haskell replacement, but it's a lot slower |
2023-02-10 04:48:36 +0100 | <c_wraith> | and also, switching to it requires a different build of ghc |
2023-02-10 04:48:45 +0100 | <dminuoso> | Note, that libgmp is GPL/LGPL licensed. |
2023-02-10 04:48:56 +0100 | <dminuoso> | So statically linking can have a strong impact on your licensing. |
2023-02-10 04:51:17 +0100 | <dminuoso> | (If you do, you must license your software under GPLv3) |
2023-02-10 04:51:22 +0100 | varoo | (~varoo@117.203.246.41) (Ping timeout: 252 seconds) |
2023-02-10 04:51:30 +0100 | <dminuoso> | But integer-simple is a thing, luckily |
2023-02-10 04:51:57 +0100 | varoo | (~varoo@2401:4900:5d32:3584:d341:898a:30ee:d5df) |
2023-02-10 04:53:39 +0100 | varoo | (~varoo@2401:4900:5d32:3584:d341:898a:30ee:d5df) (Client Quit) |
2023-02-10 04:53:47 +0100 | varoo | (~varoo@2401:4900:5d32:3584:d341:898a:30ee:d5df) |
2023-02-10 04:54:09 +0100 | <int-e> | Was a thing; the story has changed to ghc-bignum with the "native" backend. |
2023-02-10 04:54:39 +0100 | <dminuoso> | Uh, I did not get that memo |
2023-02-10 04:55:12 +0100 | <dminuoso> | Okay cool, so that issue is gone completely |
2023-02-10 04:55:24 +0100 | <dminuoso> | https://iohk.io/en/blog/posts/2020/07/28/improving-haskells-big-numbers-support/ |
2023-02-10 04:55:25 +0100 | <yushyin> | https://www.gnu.org/licenses/gpl-faq.html#LGPLStaticVsDynamic you just need to provide the objects to relink |
2023-02-10 04:56:06 +0100 | <dminuoso> | Mmm |
2023-02-10 04:57:19 +0100 | machinedgod | (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 248 seconds) |
2023-02-10 04:58:30 +0100 | <dminuoso> | yushyin: I guess that can complicate the build process easily. |
2023-02-10 04:58:48 +0100 | <dminuoso> | Unless cabal has some first class support for that use case |
2023-02-10 04:59:03 +0100 | <dminuoso> | But anyhow, given that ghc-bignum is a thing now apparently, I guess that particular point is moot anyway |
2023-02-10 04:59:27 +0100 | td_ | (~td@i5387090F.versanet.de) (Ping timeout: 248 seconds) |
2023-02-10 05:00:14 +0100 | <yushyin> | just wanted to address a common misconception about LGPL |
2023-02-10 05:00:30 +0100 | <int-e> | dminuoso: The story is largely the same though; the backend is fixed when you build ghc. |
2023-02-10 05:01:02 +0100 | td_ | (~td@i53870923.versanet.de) |
2023-02-10 05:01:38 +0100 | thegeekinside | (~thegeekin@189.180.83.186) (Ping timeout: 252 seconds) |
2023-02-10 05:02:59 +0100 | <int-e> | And GMP is the default. I'm a fan of that because I deal with big integers fairly often. But it is a niche. |
2023-02-10 05:04:05 +0100 | <yushyin> | dminuoso: one could argue that a partly dynamically linked binary is already an object format that can be relinked against gmp ... :P |
2023-02-10 05:04:26 +0100 | <dminuoso> | yushyin: Sure, but we were talking about fully statically linked binaries previously |
2023-02-10 05:04:44 +0100 | gpncarl_ | (~gpncarl@222.249.231.3) |
2023-02-10 05:05:25 +0100 | <int-e> | OTOH I doubt EvanR is running into that licensing issue at all... |
2023-02-10 05:07:18 +0100 | gpncarl | (~gpncarl@210.12.195.6) (Ping timeout: 268 seconds) |
2023-02-10 05:07:25 +0100 | _xor | (~xor@74.215.182.83) |
2023-02-10 05:20:22 +0100 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection) |
2023-02-10 05:23:12 +0100 | werneta | (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) |
2023-02-10 05:25:06 +0100 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) |
2023-02-10 05:28:07 +0100 | jao | (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 252 seconds) |
2023-02-10 05:28:53 +0100 | thegeekinside | (~thegeekin@189.180.83.186) |
2023-02-10 05:30:25 +0100 | <dminuoso> | Mmm, is there a way to provide a StreamingBody for a servant-server endpoint? |
2023-02-10 05:30:35 +0100 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 248 seconds) |
2023-02-10 05:31:02 +0100 | <dminuoso> | It seems as if only `SourceT IO` is supported, and that seems a bit limiting |
2023-02-10 05:32:00 +0100 | maerwald | (~maerwald@user/maerwald) (Ping timeout: 248 seconds) |
2023-02-10 05:33:49 +0100 | thegeekinside | (~thegeekin@189.180.83.186) (Ping timeout: 268 seconds) |
2023-02-10 05:43:44 +0100 | freeside | (~mengwong@103.252.202.170) (Ping timeout: 248 seconds) |
2023-02-10 05:46:18 +0100 | sammelweis | (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Read error: Connection reset by peer) |
2023-02-10 05:46:37 +0100 | sammelweis | (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) |
2023-02-10 05:52:18 +0100 | freeside | (~mengwong@103.252.202.170) |
2023-02-10 05:56:05 +0100 | johnw | (~johnw@76-234-69-149.lightspeed.frokca.sbcglobal.net) (Quit: ZNC - http://znc.in) |
2023-02-10 06:04:57 +0100 | EvanR | (~EvanR@user/evanr) (Quit: Leaving) |
2023-02-10 06:07:52 +0100 | king_gs | (~Thunderbi@2806:103e:29:1779:fe89:b45a:2ae8:5941) (Ping timeout: 252 seconds) |
2023-02-10 06:11:03 +0100 | asscrackbandit | (~user@eth-west-pareq2-46-193-2-167.wb.wifirst.net) |
2023-02-10 06:16:36 +0100 | gpncarl | (~gpncarl@210.12.195.6) |
2023-02-10 06:18:55 +0100 | gpncarl_ | (~gpncarl@222.249.231.3) (Ping timeout: 248 seconds) |
2023-02-10 06:20:35 +0100 | asscrackbandit | (~user@eth-west-pareq2-46-193-2-167.wb.wifirst.net) (Ping timeout: 264 seconds) |
2023-02-10 06:24:23 +0100 | motherfsck | (~motherfsc@user/motherfsck) (Ping timeout: 268 seconds) |
2023-02-10 06:41:31 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 248 seconds) |
2023-02-10 06:43:28 +0100 | razetime | (~Thunderbi@117.193.2.129) (Ping timeout: 248 seconds) |
2023-02-10 06:46:49 +0100 | razetime | (~Thunderbi@117.254.34.69) |
2023-02-10 06:48:27 +0100 | jonathanx | (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Remote host closed the connection) |
2023-02-10 06:50:13 +0100 | michalz | (~michalz@185.246.204.107) |
2023-02-10 06:54:21 +0100 | asscrackbandit | (~user@eth-west-pareq2-46-193-2-167.wb.wifirst.net) |
2023-02-10 06:56:53 +0100 | marek443214321 | (~marek@46.204.100.225.nat.umts.dynamic.t-mobile.pl) |
2023-02-10 06:58:33 +0100 | thongpv87 | (~thongpv87@2402:9d80:36f:d082:2f70:3163:c158:b60a) (Read error: Connection reset by peer) |
2023-02-10 06:58:46 +0100 | Intel8086 | (~Intel8086@user/Intel8086) |
2023-02-10 06:59:25 +0100 | varoo | (~varoo@2401:4900:5d32:3584:d341:898a:30ee:d5df) (Ping timeout: 260 seconds) |
2023-02-10 06:59:48 +0100 | Intel8086 | (~Intel8086@user/Intel8086) (Max SendQ exceeded) |
2023-02-10 07:00:17 +0100 | Intel8086 | (~Intel8086@user/Intel8086) |
2023-02-10 07:00:18 +0100 | sefidel | (~sefidel@user/sefidel) (Remote host closed the connection) |
2023-02-10 07:00:34 +0100 | sefidel | (~sefidel@user/sefidel) |
2023-02-10 07:08:08 +0100 | Intel8086 | (~Intel8086@user/Intel8086) (Quit: Quit) |
2023-02-10 07:15:12 +0100 | marek443214321 | (~marek@46.204.100.225.nat.umts.dynamic.t-mobile.pl) (Remote host closed the connection) |
2023-02-10 07:15:31 +0100 | marek443214321 | (~marek@46.204.100.225.nat.umts.dynamic.t-mobile.pl) |
2023-02-10 07:19:12 +0100 | jonathanx | (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) |
2023-02-10 07:24:39 +0100 | king_gs | (~Thunderbi@187.201.41.239) |
2023-02-10 07:27:16 +0100 | takuan | (~takuan@178-116-218-225.access.telenet.be) |
2023-02-10 07:31:05 +0100 | rettahcay | (~kaushikv@c-24-20-37-193.hsd1.or.comcast.net) () |
2023-02-10 07:32:51 +0100 | takuan_dozo | (~takuan@178-116-218-225.access.telenet.be) |
2023-02-10 07:32:51 +0100 | takuan | (~takuan@178-116-218-225.access.telenet.be) (Read error: Connection reset by peer) |
2023-02-10 07:34:32 +0100 | theproffesor | (~theproffe@2601:282:8880:20::4a63) |
2023-02-10 07:34:32 +0100 | theproffesor | (~theproffe@2601:282:8880:20::4a63) (Changing host) |
2023-02-10 07:34:32 +0100 | theproffesor | (~theproffe@user/theproffesor) |
2023-02-10 07:44:15 +0100 | razetime | (~Thunderbi@117.254.34.69) (Ping timeout: 248 seconds) |
2023-02-10 07:51:10 +0100 | gpncarl | (~gpncarl@210.12.195.6) (Read error: Connection reset by peer) |
2023-02-10 07:51:34 +0100 | gpncarl | (~gpncarl@210.12.195.6) |
2023-02-10 07:53:16 +0100 | echoreply | (~echoreply@45.32.163.16) (Quit: WeeChat 2.8) |
2023-02-10 07:54:07 +0100 | varoo | (~varoo@117.203.246.41) |
2023-02-10 07:54:33 +0100 | echoreply | (~echoreply@45.32.163.16) |
2023-02-10 07:57:47 +0100 | ddellacosta | (~ddellacos@146.70.165.139) (Ping timeout: 248 seconds) |
2023-02-10 08:01:27 +0100 | tcard | (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) (Quit: Leaving) |
2023-02-10 08:01:43 +0100 | troydm | (~troydm@user/troydm) (Ping timeout: 252 seconds) |
2023-02-10 08:03:38 +0100 | tcard | (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) |
2023-02-10 08:07:54 +0100 | kritzefitz | (~kritzefit@debian/kritzefitz) (Ping timeout: 260 seconds) |
2023-02-10 08:08:07 +0100 | kritzefitz | (~kritzefit@debian/kritzefitz) |
2023-02-10 08:12:57 +0100 | king_gs | (~Thunderbi@187.201.41.239) (Read error: Connection reset by peer) |
2023-02-10 08:13:16 +0100 | king_gs | (~Thunderbi@2806:103e:29:1779:b5f0:ff23:4044:f15) |
2023-02-10 08:14:20 +0100 | <dminuoso> | Mmm, it occured to me that I could use Raw and then just work with StreamingBody directly |
2023-02-10 08:14:51 +0100 | marek443214321 | (~marek@46.204.100.225.nat.umts.dynamic.t-mobile.pl) (Ping timeout: 248 seconds) |
2023-02-10 08:16:36 +0100 | chomwitt | (~chomwitt@2a02:587:7a12:aa00:1ac0:4dff:fedb:a3f1) |
2023-02-10 08:20:12 +0100 | johnw | (~johnw@76-234-69-149.lightspeed.frokca.sbcglobal.net) |
2023-02-10 08:20:35 +0100 | gpncarl | (~gpncarl@210.12.195.6) (Quit: WeeChat 3.8) |
2023-02-10 08:25:03 +0100 | varoo_ | (~varoo@2a09:bac1:36e0:5f70::ca:21) |
2023-02-10 08:25:24 +0100 | Sauvin | (~sauvin@user/Sauvin) (Ping timeout: 260 seconds) |
2023-02-10 08:27:47 +0100 | varoo__ | (~varoo@117.203.246.41) |
2023-02-10 08:28:19 +0100 | varoo | (~varoo@117.203.246.41) (Ping timeout: 260 seconds) |
2023-02-10 08:30:26 +0100 | varoo__ | (~varoo@117.203.246.41) (Client Quit) |
2023-02-10 08:30:52 +0100 | varoo_ | (~varoo@2a09:bac1:36e0:5f70::ca:21) (Ping timeout: 252 seconds) |
2023-02-10 08:31:44 +0100 | asscrackbandit | (~user@eth-west-pareq2-46-193-2-167.wb.wifirst.net) (Ping timeout: 252 seconds) |
2023-02-10 08:35:04 +0100 | marek443214321 | (~marek@46.204.100.225.nat.umts.dynamic.t-mobile.pl) |
2023-02-10 08:40:26 +0100 | marek443214321 | (~marek@46.204.100.225.nat.umts.dynamic.t-mobile.pl) (Ping timeout: 246 seconds) |
2023-02-10 08:41:49 +0100 | Sauvin | (~sauvin@user/Sauvin) |
2023-02-10 08:44:32 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
2023-02-10 08:45:15 +0100 | chomwitt | (~chomwitt@2a02:587:7a12:aa00:1ac0:4dff:fedb:a3f1) (Ping timeout: 248 seconds) |
2023-02-10 08:47:35 +0100 | razetime | (~Thunderbi@117.254.34.69) |
2023-02-10 08:54:03 +0100 | Sgeo | (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
2023-02-10 08:54:44 +0100 | mei | (~mei@user/mei) (Remote host closed the connection) |
2023-02-10 08:54:56 +0100 | mncheck | (~mncheck@193.224.205.254) |
2023-02-10 08:55:19 +0100 | lortabac | (~lortabac@2a01:e0a:541:b8f0:7c13:bc21:ab83:3404) |
2023-02-10 08:59:36 +0100 | jonathanx | (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Read error: Connection reset by peer) |
2023-02-10 08:59:55 +0100 | jonathanx | (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) |
2023-02-10 09:02:12 +0100 | coot | (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) |
2023-02-10 09:03:57 +0100 | thongpv87 | (~thongpv87@2402:9d80:36d:9eb8:c69f:d737:e064:f8f1) |
2023-02-10 09:10:17 +0100 | phma | (phma@2001:5b0:211b:c068:2b96:30a1:aa3d:6ccd) (Read error: Connection reset by peer) |
2023-02-10 09:15:28 +0100 | phma | (~phma@2001:5b0:212a:e8d8:156a:28d7:9925:258) |
2023-02-10 09:16:20 +0100 | eggplantade | (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2023-02-10 09:20:08 +0100 | codaraxis___ | (~codaraxis@user/codaraxis) |
2023-02-10 09:21:18 +0100 | chele | (~chele@user/chele) |
2023-02-10 09:26:30 +0100 | razetime | (~Thunderbi@117.254.34.69) (Remote host closed the connection) |
2023-02-10 09:28:12 +0100 | zeenk | (~zeenk@2a02:2f04:a214:1e00::7fe) |
2023-02-10 09:32:40 +0100 | CiaoSen | (~Jura@p200300c9570460002a3a4dfffe84dbd5.dip0.t-ipconnect.de) |
2023-02-10 09:34:21 +0100 | trev | (~trev@user/trev) |
2023-02-10 09:36:14 +0100 | lortabac | (~lortabac@2a01:e0a:541:b8f0:7c13:bc21:ab83:3404) (Quit: WeeChat 2.8) |
2023-02-10 09:39:32 +0100 | ft | (~ft@p3e9bc443.dip0.t-ipconnect.de) (Quit: leaving) |
2023-02-10 09:47:04 +0100 | werneta | (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 260 seconds) |
2023-02-10 09:51:16 +0100 | machinedgod | (~machinedg@d198-53-218-113.abhsia.telus.net) |
2023-02-10 09:51:39 +0100 | avicenzi | (~avicenzi@2a00:ca8:a1f:b004::c32) |
2023-02-10 09:55:50 +0100 | maroloccio | (~marolocci@90.167.55.241) |
2023-02-10 10:02:46 +0100 | werneta | (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) |
2023-02-10 10:05:02 +0100 | merijn | (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl) |
2023-02-10 10:06:09 +0100 | vpan | (~0@212.117.1.172) |
2023-02-10 10:08:00 +0100 | _leo___ | (~emmanuelu@user/emmanuelux) (Read error: Connection reset by peer) |
2023-02-10 10:08:02 +0100 | Katarushisu | (~Katarushi@cpc147790-finc20-2-0-cust502.4-2.cable.virginm.net) (Quit: The Lounge - https://thelounge.chat) |
2023-02-10 10:08:42 +0100 | tzh | (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz) |
2023-02-10 10:08:46 +0100 | _leo___ | (~emmanuelu@user/emmanuelux) |
2023-02-10 10:08:48 +0100 | Katarushisu | (~Katarushi@cpc147790-finc20-2-0-cust502.4-2.cable.virginm.net) |
2023-02-10 10:10:49 +0100 | gnalzo | (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) |
2023-02-10 10:15:38 +0100 | MajorBiscuit | (~MajorBisc@145.94.153.3) |
2023-02-10 10:16:50 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:54db:de44:4607:1cea) |
2023-02-10 10:18:40 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2023-02-10 10:21:15 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:54db:de44:4607:1cea) (Ping timeout: 248 seconds) |
2023-02-10 10:23:04 +0100 | <jackdk> | dminuoso: here is an example of using servant to forward a stream from S3; it might be useful for you? https://github.com/aveltras/amazonka-servant-streaming/blob/main/src/Main.hs |
2023-02-10 10:23:57 +0100 | <jackdk> | Note the lack of resourceT in `oneStepHandler` so that the connection is closed only after production of the response completes. |
2023-02-10 10:26:27 +0100 | king_gs | (~Thunderbi@2806:103e:29:1779:b5f0:ff23:4044:f15) (Remote host closed the connection) |
2023-02-10 10:26:46 +0100 | king_gs | (~Thunderbi@2806:103e:29:1779:b5f0:ff23:4044:f15) |
2023-02-10 10:28:03 +0100 | remexre_ | (~remexre@mail.sift.net) |
2023-02-10 10:28:18 +0100 | remexre | (~remexre@user/remexre) (Read error: Connection reset by peer) |
2023-02-10 10:28:55 +0100 | remexre_ | remexre |
2023-02-10 10:29:56 +0100 | <dminuoso> | jackdk: Mmm, yeah so I would like my `mason` builder to directly write into the socket, avoiding intermediate allocations. |
2023-02-10 10:31:21 +0100 | <dminuoso> | But its still an interesting example given the streaming S3 forwarding |
2023-02-10 10:31:55 +0100 | <freeside> | when I define a type with arguments, e.g. data MyType a b c = Constructor a b c, what is the technical term for those arguments? are they "free type parameters"? |
2023-02-10 10:32:37 +0100 | <dminuoso> | freeside: You could call them type parameters (in the defining position), and type arguments in the type application position. |
2023-02-10 10:33:00 +0100 | <dminuoso> | One way to think about parameterized type constructors is as injective type functions |
2023-02-10 10:33:42 +0100 | <freeside> | Gotcha. I'm trying to communicate that as I go up the layers of my library stack, they start out free, and by the time we get close to the application, they're fixed, i.e. type MyConcreteType = MyType String Int State |
2023-02-10 10:34:24 +0100 | <dminuoso> | Another way of phrasing "free" and "fixed" is polymorphic/monomorphic |
2023-02-10 10:35:56 +0100 | <freeside> | ah, yes |
2023-02-10 10:37:56 +0100 | <dminuoso> | freeside: An additional benefit is that using `polymorphic` and `monomorphic` avoids needing to talk about type parameters/arguments altogether here. :p |
2023-02-10 10:38:14 +0100 | <freeside> | yes, that makes so much sense, thank you. |
2023-02-10 10:39:24 +0100 | <dminuoso> | jackdk: Im almost tempted to just use SourceIO after all, the main thing with Raw is that I dont know how to use my custom handler monad inside |
2023-02-10 10:39:45 +0100 | <dminuoso> | (because instead of the endpoint running as `MyMonad Application`, its `Tagged MyMonad Application` instead |
2023-02-10 10:41:29 +0100 | thongpv87 | (~thongpv87@2402:9d80:36d:9eb8:c69f:d737:e064:f8f1) (Read error: Connection reset by peer) |
2023-02-10 10:45:05 +0100 | <freeside> | So, ok, conceptually I have a tree -- the root is polymorphic, and as the paramters get fixed, the tree proceeds toward leaves which are entirely monomorphic. Is there some term for this tree? In OOP land one talks about class hierarchies ... here do we talk about type hierarchies? |
2023-02-10 10:45:47 +0100 | CiaoSen | (~Jura@p200300c9570460002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 248 seconds) |
2023-02-10 10:47:23 +0100 | <turlando> | Is that just for the sake of taxonomic pleasure or do you need to impose type constraints? |
2023-02-10 10:47:54 +0100 | cfricke | (~cfricke@user/cfricke) |
2023-02-10 10:48:11 +0100 | king_gs | (~Thunderbi@2806:103e:29:1779:b5f0:ff23:4044:f15) (Ping timeout: 264 seconds) |
2023-02-10 10:49:00 +0100 | CiaoSen | (~Jura@p200300c9570460002a3a4dfffe84dbd5.dip0.t-ipconnect.de) |
2023-02-10 10:49:24 +0100 | ubert | (~Thunderbi@p200300ecdf13012ec893c5f497fd9467.dip0.t-ipconnect.de) |
2023-02-10 10:50:50 +0100 | <freeside> | i'm not thinking about constraints here, just narrowing of `type MyNum a` to `MyNum Float` vs `MyNum Int` |
2023-02-10 10:55:13 +0100 | <dminuoso> | freeside: In previous discussions about related topics in #haskell we just said that "the leaves of the program are kept polymorphic" |
2023-02-10 10:56:50 +0100 | <[exa]> | freeside: you want to use the tree to actually model the class hierarchy? |
2023-02-10 10:56:55 +0100 | <dminuoso> | Usually such discussions involved final tagless encoding |
2023-02-10 10:57:25 +0100 | <dminuoso> | an example of which is writing leaf code as mtl polymorphic |
2023-02-10 10:57:38 +0100 | <dminuoso> | One of the ideas is that the more general the type, the less its implementation can do. |
2023-02-10 10:57:48 +0100 | <dminuoso> | So if its maximally polymorphic, its extremely constrained |
2023-02-10 10:58:22 +0100 | <dminuoso> | which helps reason about its behavior, in case of final tagless encoding, the idea is that keeping the code polymorphic means the only usable effects are those described in the constraints |
2023-02-10 10:58:29 +0100 | tcard | (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) (Ping timeout: 256 seconds) |
2023-02-10 10:59:03 +0100 | codaraxis__ | (~codaraxis@user/codaraxis) |
2023-02-10 11:00:51 +0100 | mei | (~mei@user/mei) |
2023-02-10 11:02:31 +0100 | codaraxis___ | (~codaraxis@user/codaraxis) (Ping timeout: 252 seconds) |
2023-02-10 11:02:58 +0100 | ski | disagrees about referring to them in terms of "polymorphic/monomorphic" |
2023-02-10 11:03:23 +0100 | tcard | (~tcard@229.12.156.220.rev.vmobile.jp) |
2023-02-10 11:03:31 +0100 | gurkenglas | (~gurkengla@dynamic-046-114-000-101.46.114.pool.telefonica.de) |
2023-02-10 11:03:34 +0100 | <ski> | freeside : it's say `MyNum Int' is more specific than, is a specialization of, `MyNum a' |
2023-02-10 11:03:54 +0100 | <dminuoso> | ski: How is `MyNum Int` not more monomorphic than `MyNum a`? |
2023-02-10 11:04:07 +0100 | <ski> | (but `MyNum' (nor `MyNum a') is definitely not polymorphic) |
2023-02-10 11:04:25 +0100 | <dminuoso> | Mmm |
2023-02-10 11:04:38 +0100 | <dminuoso> | because its terms that are polymorphic, not the types themselves? |
2023-02-10 11:04:52 +0100 | <dminuoso> | i.e. a polymorphic type would be a higher kinded type like `Const (t :: k) a`? |
2023-02-10 11:05:09 +0100 | <dminuoso> | oh `Const t (a :: k)` of course |
2023-02-10 11:05:33 +0100 | <ski> | if you say `foo :: MyNum a -> ..a..' (by which i mean `foo :: forall a. MyNum a -> ..a..', which is how it will be interpreted, in most contexts), and `bar :: MyNum Int -> ...', then `foo' is (more) polymorphic than the (monomorphic) `bar' |
2023-02-10 11:05:44 +0100 | xff0x | (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 252 seconds) |
2023-02-10 11:05:46 +0100 | <ski> | yes, dminuoso |
2023-02-10 11:06:36 +0100 | <ski> | you can say `MyNum' is a parameterized, or parametric, type. or, `MyNum' is a type function. or, `MuNum a' is type that's parameterized over `a' |
2023-02-10 11:07:04 +0100 | <dminuoso> | Okay thats a fine distinction, but I think largely irrelant to the intent of the discussion. |
2023-02-10 11:07:37 +0100 | irrgit_ | (~irrgit@176.113.74.130) |
2023-02-10 11:07:38 +0100 | tcard | (~tcard@229.12.156.220.rev.vmobile.jp) (Read error: Connection reset by peer) |
2023-02-10 11:07:43 +0100 | <dminuoso> | Saying that "the leaves of the program (which we could think of as the expressions/bindings) are polymorphic" seems fine even with that distinction |
2023-02-10 11:08:11 +0100 | <dminuoso> | Regardless, you're right I should have been more careful with my wording here. |
2023-02-10 11:08:20 +0100 | <ski> | (fwiw, i also dislike the term "higher kinded type". what that's about is really higher-order types. like e.g. `ReaderT', having kind `* -> (* -> *) -> * -> *', being a type function that takes another type function as argument/parameter, hence `ReaderT' being a higher-order type) |
2023-02-10 11:08:29 +0100 | <dminuoso> | Hjeh |
2023-02-10 11:08:36 +0100 | <dminuoso> | I was debating whether to correct myself and say `polykinded` here. |
2023-02-10 11:08:39 +0100 | AWizzArd | (~code@gehrels.uberspace.de) (Remote host closed the connection) |
2023-02-10 11:08:48 +0100 | <dminuoso> | Did realize that higher kinded was not appropriate here |
2023-02-10 11:09:14 +0100 | <ski> | not sure i get the tree and leaves thing |
2023-02-10 11:09:53 +0100 | <ski> | freeside said "the root is polymorphic, and as the paramters get fixed, the tree proceeds toward leaves which are entirely monomorphic" .. which seems to go in the opposite direction from what you're talking about (re leaves) ? |
2023-02-10 11:10:27 +0100 | <dminuoso> | If we imagine a program to be a tree in which nodes represent (top-level) bindings, and edges represent uses of bindings (i.e. given `bar = 1; foo = bar` then `foo` uses `bar`, and bar would be a leaf) |
2023-02-10 11:10:52 +0100 | irrgit__ | (~irrgit@89.47.234.74) (Ping timeout: 252 seconds) |
2023-02-10 11:10:53 +0100 | <dminuoso> | Think a final tagless encoding of an effect system, in which all your surrounding modules are written polymorphic |
2023-02-10 11:11:01 +0100 | <dminuoso> | and you instantiate them at concrete types along the spine of your program |
2023-02-10 11:11:53 +0100 | <ski> | my take on what freeside said was that they were thinking about writing some "core" operations, which tend to be polymorphic in type parameters like `a', re `MyNum a'. and then, when writing parts of the code that's closer to the application-specific details, those parameters would tend to get more specialized, like maybe `MyNum (Complex a)' and `MyNum Int', and we we're approaching "leaves" in that sense, |
2023-02-10 11:11:56 +0100 | <dminuoso> | So much of your server implementation might be written `getUser :: (HasDb m, HasLogger m) => Uid -> m User`, where almost never you refer to a specific monad |
2023-02-10 11:11:59 +0100 | <ski> | the operations which we write then would tend to be monomorphic |
2023-02-10 11:12:14 +0100 | mmhat | (~mmh@p200300f1c7108bb6ee086bfffe095315.dip0.t-ipconnect.de) |
2023-02-10 11:12:25 +0100 | <Hecate> | HELLO |
2023-02-10 11:12:34 +0100 | <ski> | ehlo, Hecate |
2023-02-10 11:12:41 +0100 | <Hecate> | I noticed we're talking about effects |
2023-02-10 11:13:08 +0100 | <Hecate> | I'd like to advise against polymorphic monads, they cannot be optimised whilst keeping reasonable compilation times |
2023-02-10 11:13:27 +0100 | <Hecate> | once you're past "toy project" size, it's a real burden at run-time |
2023-02-10 11:13:27 +0100 | <ski> | dminuoso : yea, i think that makes sense |
2023-02-10 11:14:04 +0100 | <ski> | (just not sure it's the same kind of situation that freeside had in mind .. and if it was, you two did have opposite terminologies wrt "leaf" vs. "root") |
2023-02-10 11:14:44 +0100 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 255 seconds) |
2023-02-10 11:17:10 +0100 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) |
2023-02-10 11:19:32 +0100 | <ski> | freeside : in `data MyType a b c = ..a..b..c..', i'd call the `a',`b',`c' (to the left of the `=') (formal) type parameters. (if in the body, to the right of `=', you say e.g. `Map a (Either b c)', then `a',`b',`c' (as well as `Either a b') are actual type parameters (to `Map' and `Either') there) |
2023-02-10 11:19:47 +0100 | mmhat | (~mmh@p200300f1c7108bb6ee086bfffe095315.dip0.t-ipconnect.de) (Quit: WeeChat 3.8) |
2023-02-10 11:20:21 +0100 | maroloccio | (~marolocci@90.167.55.241) (Quit: WeeChat 3.7.1) |
2023-02-10 11:21:36 +0100 | <ski> | freeside : i think "fixed" is okay. i might also say "specialized" or "specific". where by "specialize" i mean replace some type variables, in a type expression, by other type expressions (usually not all of the replacements being type variables) |
2023-02-10 11:21:44 +0100 | <dminuoso> | jackdk: but oh well, I think my best bet is to just use a lazy bytestring and OctetStream, thanks for your help. |
2023-02-10 11:23:29 +0100 | Guest67 | (~Guest67@159.153.150.4) |
2023-02-10 11:26:08 +0100 | <ski> | freeside : however, `Either c c' could be said to be a specialization of `Either a b'. since the former insists the two alternatives have the same type, while the latter allows them to not have the same type. however, i wouldn't exactly try to draw a type hieararchy of this, in a similar way to subtyping hierarchies in OO. e.g. because `Either a b' and `Either a c' are not the same type, although they're |
2023-02-10 11:26:14 +0100 | <ski> | equivalent (up to renaming type variables). but often, you're in a situation where you have some type variables in scope, that you can't just arbitrarily rename (without impacting other adjacent code). the type `b -> Either a b' is not equivalent to the type `b -> Either a c' |
2023-02-10 11:27:11 +0100 | <freeside> | mmm. The tree I have in mind is conceptual, I'm not trying to deal with an actual Data.Tree. I just meant, a sort of hierarchy, where the levels of the hierarchy denote increasing fixedness of the type arguments |
2023-02-10 11:27:26 +0100 | <freeside> | until eventually all the a b c params have been nailed down to Float Int String. |
2023-02-10 11:27:45 +0100 | glguy | (~glguy@libera/staff-emeritus/glguy) (Ping timeout: 260 seconds) |
2023-02-10 11:27:58 +0100 | glguy_ | (~glguy@libera/staff-emeritus/glguy) |
2023-02-10 11:28:46 +0100 | <ski> | (so, it doesn't make sense exactly, to try to put the "very non-specific" type `a' at one extreme end of a type hierarchy, and to put progressively more specific types, like `Maybe b',`Map b (Either b c)',`Map Int (Either Int c)', when going in the opposite direction. you can't just consider a type expression on its own, you also have to take into account which type variables are allowed to be used in it. |
2023-02-10 11:28:52 +0100 | <ski> | you can't directly compare two type expressions that allow different type variables) |
2023-02-10 11:29:07 +0100 | <freeside> | the "node" of that "tree" which has been fixed to Float Int String could be considered a "sibling" to a node which is fixed to Float Int Text.Text |
2023-02-10 11:29:08 +0100 | <ski> | yea, i get what you're thinking (i think), freeside |
2023-02-10 11:29:28 +0100 | <freeside> | :D |
2023-02-10 11:29:44 +0100 | <ski> | i'm just saying that it will not turn out quite the same way as a subtyping hierarchy with `Object'/`Any' being most non-specific |
2023-02-10 11:30:14 +0100 | <ski> | having type parameters (type variables) do add complications to that picture |
2023-02-10 11:30:51 +0100 | gnalzo | (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 3.8) |
2023-02-10 11:33:49 +0100 | beteigeuze | (~Thunderbi@a79-169-109-107.cpe.netcabo.pt) |
2023-02-10 11:34:16 +0100 | <ski> | .. i'm probably not really explaining the issue with the hierarchy quite well (meaning that i probably don't quite understand the issue well enough, on an explicit level. i guess one could say i have a "gut feeling" for the kind of trouble you get, but can't satisfactorially put my finger on it) |
2023-02-10 11:34:19 +0100 | gurkenglas | (~gurkengla@dynamic-046-114-000-101.46.114.pool.telefonica.de) (Ping timeout: 248 seconds) |
2023-02-10 11:35:27 +0100 | Inst__ | Inst |
2023-02-10 11:36:13 +0100 | Inst | (~Inst@2601:6c4:4081:54f0:d621:5cdd:9051:c240) (Quit: Leaving) |
2023-02-10 11:38:33 +0100 | Inst | (~Inst@2601:6c4:4081:54f0:d621:5cdd:9051:c240) |
2023-02-10 11:38:33 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
2023-02-10 11:38:48 +0100 | Inst | (~Inst@2601:6c4:4081:54f0:d621:5cdd:9051:c240) (Client Quit) |
2023-02-10 11:40:18 +0100 | Inst | (~Inst@2601:6c4:4081:54f0:d621:5cdd:9051:c240) |
2023-02-10 11:47:46 +0100 | glguy_ | (~glguy@libera/staff-emeritus/glguy) (Ping timeout: 252 seconds) |
2023-02-10 11:48:18 +0100 | glguy | (~glguy@libera/staff-emeritus/glguy) |
2023-02-10 11:54:55 +0100 | codaraxis__ | (~codaraxis@user/codaraxis) (Ping timeout: 260 seconds) |
2023-02-10 11:57:57 +0100 | chomwitt | (~chomwitt@2a02:587:7a12:aa00:1ac0:4dff:fedb:a3f1) |
2023-02-10 11:58:31 +0100 | __monty__ | (~toonn@user/toonn) |
2023-02-10 11:58:39 +0100 | CiaoSen | (~Jura@p200300c9570460002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
2023-02-10 11:59:55 +0100 | pernzs | (~pernzs@101.175.168.100) |
2023-02-10 12:04:10 +0100 | freeside | (~mengwong@103.252.202.170) (Ping timeout: 268 seconds) |
2023-02-10 12:04:23 +0100 | chomwitt | (~chomwitt@2a02:587:7a12:aa00:1ac0:4dff:fedb:a3f1) (Ping timeout: 264 seconds) |
2023-02-10 12:07:39 +0100 | Inst_ | (~Inst@2601:6c4:4081:54f0:d621:5cdd:9051:c240) |
2023-02-10 12:08:58 +0100 | CiaoSen | (~Jura@p200300c9570460002a3a4dfffe84dbd5.dip0.t-ipconnect.de) |
2023-02-10 12:09:48 +0100 | waleee | (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) |
2023-02-10 12:10:38 +0100 | Inst | (~Inst@2601:6c4:4081:54f0:d621:5cdd:9051:c240) (Ping timeout: 252 seconds) |
2023-02-10 12:16:13 +0100 | troydm | (~troydm@user/troydm) |
2023-02-10 12:16:18 +0100 | acidjnk | (~acidjnk@p200300d6e715c449a5c1454d82f25d58.dip0.t-ipconnect.de) |
2023-02-10 12:20:33 +0100 | gurkenglas | (~gurkengla@dynamic-046-114-000-101.46.114.pool.telefonica.de) |
2023-02-10 12:23:33 +0100 | maerwald | (~maerwald@mail.hasufell.de) |
2023-02-10 12:24:59 +0100 | gurkenglas | (~gurkengla@dynamic-046-114-000-101.46.114.pool.telefonica.de) (Ping timeout: 248 seconds) |
2023-02-10 12:25:45 +0100 | MQ-17J | (~MQ-17J@104.28.216.165) (Ping timeout: 268 seconds) |
2023-02-10 12:25:58 +0100 | gurkenglas | (~gurkengla@dynamic-046-114-000-101.46.114.pool.telefonica.de) |
2023-02-10 12:26:36 +0100 | trev | (~trev@user/trev) (Remote host closed the connection) |
2023-02-10 12:27:22 +0100 | trev | (~trev@user/trev) |
2023-02-10 12:27:51 +0100 | pavonia | (~user@user/siracusa) (Quit: Bye!) |
2023-02-10 12:30:00 +0100 | maerwald | (~maerwald@mail.hasufell.de) (Changing host) |
2023-02-10 12:30:00 +0100 | maerwald | (~maerwald@user/maerwald) |
2023-02-10 12:31:54 +0100 | yaroot | (~yaroot@p2790051-ipngn7801souka.saitama.ocn.ne.jp) (Ping timeout: 252 seconds) |
2023-02-10 12:32:36 +0100 | yaroot | (~yaroot@p3431218-ipngn9301souka.saitama.ocn.ne.jp) |
2023-02-10 12:38:57 +0100 | coot | (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot) |
2023-02-10 12:43:56 +0100 | npmania | (~Thunderbi@45.8.223.213) |
2023-02-10 12:50:28 +0100 | pernzs | (~pernzs@101.175.168.100) (Ping timeout: 260 seconds) |
2023-02-10 12:53:22 +0100 | thongpv | (~thongpv87@2402:9d80:32e:8f1:5f45:6f5f:527a:b486) |
2023-02-10 12:55:39 +0100 | pernzs | (~pernzs@101.175.168.100) |
2023-02-10 12:58:32 +0100 | tcard | (~tcard@p5309141-ipxg23901hodogaya.kanagawa.ocn.ne.jp) |
2023-02-10 13:03:24 +0100 | paulpaul1076 | (~textual@95-29-5-53.broadband.corbina.ru) (Quit: Textual IRC Client: www.textualapp.com) |
2023-02-10 13:03:26 +0100 | tcard_ | (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) |
2023-02-10 13:03:53 +0100 | tcard | (~tcard@p5309141-ipxg23901hodogaya.kanagawa.ocn.ne.jp) (Ping timeout: 252 seconds) |
2023-02-10 13:09:49 +0100 | shapr | (~user@net-5-88-238-17.cust.vodafonedsl.it) |
2023-02-10 13:10:16 +0100 | <shapr> | Does anyone have fourmolu working as an emacs save-hook? I'm using --no-cabal right now, but I'd prefer some way to point it to the cabal file if anyone has that |
2023-02-10 13:10:23 +0100 | econo | (uid147250@user/econo) (Quit: Connection closed for inactivity) |
2023-02-10 13:12:38 +0100 | lortabac | (~lortabac@2a01:e0a:541:b8f0:c52:e2ce:11c8:93da) |
2023-02-10 13:15:39 +0100 | jmdaemon | (~jmdaemon@user/jmdaemon) (Ping timeout: 248 seconds) |
2023-02-10 13:17:17 +0100 | CiaoSen | (~Jura@p200300c9570460002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 246 seconds) |
2023-02-10 13:21:38 +0100 | freeside | (~mengwong@151.192.86.187) |
2023-02-10 13:22:44 +0100 | xff0x | (~xff0x@2405:6580:b080:900:161d:e8bd:9253:e61c) |
2023-02-10 13:26:39 +0100 | freeside | (~mengwong@151.192.86.187) (Ping timeout: 248 seconds) |
2023-02-10 13:31:23 +0100 | pernzs | (~pernzs@101.175.168.100) (Quit: Client closed) |
2023-02-10 13:42:20 +0100 | anpad | (~pandeyan@user/anpad) (Quit: ZNC 1.8.2 - https://znc.in) |
2023-02-10 13:42:35 +0100 | chomwitt | (~chomwitt@2a02:587:7a12:aa00:1ac0:4dff:fedb:a3f1) |
2023-02-10 13:43:43 +0100 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) |
2023-02-10 13:44:45 +0100 | anpad | (~pandeyan@user/anpad) |
2023-02-10 13:46:03 +0100 | pernzs | (~pernzs@101.175.168.100) |
2023-02-10 13:46:51 +0100 | freeside | (~mengwong@151.192.86.187) |
2023-02-10 13:51:07 +0100 | freeside | (~mengwong@151.192.86.187) (Ping timeout: 260 seconds) |
2023-02-10 13:51:20 +0100 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 255 seconds) |
2023-02-10 13:53:05 +0100 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) |
2023-02-10 13:54:47 +0100 | gurkenglas | (~gurkengla@dynamic-046-114-000-101.46.114.pool.telefonica.de) (Ping timeout: 246 seconds) |
2023-02-10 14:00:22 +0100 | bgs | (~bgs@212-85-160-171.dynamic.telemach.net) |
2023-02-10 14:07:28 +0100 | pernzs | (~pernzs@101.175.168.100) (Ping timeout: 260 seconds) |
2023-02-10 14:13:25 +0100 | mncheck | (~mncheck@193.224.205.254) (Remote host closed the connection) |
2023-02-10 14:13:36 +0100 | mncheck | (~mncheck@193.224.205.254) |
2023-02-10 14:29:04 +0100 | sammelweis | (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 248 seconds) |
2023-02-10 14:33:46 +0100 | emmanuelux | (~emmanuelu@user/emmanuelux) |
2023-02-10 14:34:03 +0100 | acidjnk | (~acidjnk@p200300d6e715c449a5c1454d82f25d58.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
2023-02-10 14:36:59 +0100 | _leo___ | (~emmanuelu@user/emmanuelux) (Ping timeout: 260 seconds) |
2023-02-10 14:42:19 +0100 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "") |
2023-02-10 14:42:28 +0100 | npmania1 | (~Thunderbi@45.8.223.243) |
2023-02-10 14:42:33 +0100 | npmania | (~Thunderbi@45.8.223.213) (Ping timeout: 255 seconds) |
2023-02-10 14:42:33 +0100 | npmania1 | npmania |
2023-02-10 14:43:31 +0100 | notzmv | (~zmv@user/notzmv) |
2023-02-10 14:44:14 +0100 | AWizzArd | (~code@user/awizzard) |
2023-02-10 14:46:42 +0100 | freeside | (~mengwong@151.192.86.187) |
2023-02-10 14:51:19 +0100 | freeside | (~mengwong@151.192.86.187) (Ping timeout: 260 seconds) |
2023-02-10 14:52:40 +0100 | Feuermagier | (~Feuermagi@user/feuermagier) (Remote host closed the connection) |
2023-02-10 14:54:24 +0100 | lisbeths | (uid135845@id-135845.lymington.irccloud.com) |
2023-02-10 14:55:30 +0100 | jero98772 | (~jero98772@2800:484:1d80:d8ce:9815:cfda:3661:17bb) |
2023-02-10 14:55:50 +0100 | npmania1 | (~Thunderbi@45.8.223.228) |
2023-02-10 14:57:11 +0100 | Cale | (~cale@cpe80d04ade0a03-cm80d04ade0a01.cpe.net.cable.rogers.com) (Ping timeout: 264 seconds) |
2023-02-10 14:57:20 +0100 | yoneda | (~mike@193.206.102.122) (Quit: leaving) |
2023-02-10 14:57:47 +0100 | npmania | (~Thunderbi@45.8.223.243) (Ping timeout: 264 seconds) |
2023-02-10 14:57:48 +0100 | npmania1 | npmania |
2023-02-10 14:58:15 +0100 | gnalzo | (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) |
2023-02-10 14:59:46 +0100 | rburkholder | (~blurb@96.45.2.121) (Remote host closed the connection) |
2023-02-10 15:01:06 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) |
2023-02-10 15:01:15 +0100 | Cale | (~cale@cpe80d04ade0a03-cm80d04ade0a01.cpe.net.cable.rogers.com) |
2023-02-10 15:01:32 +0100 | azimut_ | (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds) |
2023-02-10 15:03:17 +0100 | Guest|81 | (~Guest|81@208.84.107.234) |
2023-02-10 15:05:38 +0100 | Guest|81 | (~Guest|81@208.84.107.234) (Client Quit) |
2023-02-10 15:06:40 +0100 | jinsun | (~jinsun@user/jinsun) (Read error: Connection reset by peer) |
2023-02-10 15:06:56 +0100 | ddellacosta | (~ddellacos@146.70.166.139) |
2023-02-10 15:07:31 +0100 | kurbus | (~kurbus@user/kurbus) |
2023-02-10 15:08:20 +0100 | jinsun | (~jinsun@user/jinsun) |
2023-02-10 15:12:26 +0100 | Midjak | (~Midjak@82.66.147.146) |
2023-02-10 15:14:27 +0100 | sefidel | (~sefidel@user/sefidel) (Remote host closed the connection) |
2023-02-10 15:14:41 +0100 | sefidel | (~sefidel@user/sefidel) |
2023-02-10 15:14:55 +0100 | npmania | (~Thunderbi@45.8.223.228) (Ping timeout: 248 seconds) |
2023-02-10 15:15:10 +0100 | npmania | (~Thunderbi@121.128.227.178) |
2023-02-10 15:15:34 +0100 | vpan | (~0@212.117.1.172) (Remote host closed the connection) |
2023-02-10 15:16:18 +0100 | <shapr> | does anyone use fourmolu with emacs? |
2023-02-10 15:16:36 +0100 | <shapr> | I'm using it with haskell-stylish, but I'd like to know of other options |
2023-02-10 15:17:53 +0100 | freeside | (~mengwong@151.192.86.187) |
2023-02-10 15:19:38 +0100 | Feuermagier | (~Feuermagi@user/feuermagier) |
2023-02-10 15:20:45 +0100 | npmania1 | (~Thunderbi@45.8.223.198) |
2023-02-10 15:21:13 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:54db:de44:4607:1cea) |
2023-02-10 15:21:54 +0100 | npmania | (~Thunderbi@121.128.227.178) (Ping timeout: 260 seconds) |
2023-02-10 15:21:54 +0100 | npmania1 | npmania |
2023-02-10 15:22:02 +0100 | freeside | (~mengwong@151.192.86.187) (Ping timeout: 252 seconds) |
2023-02-10 15:23:37 +0100 | thegeekinside | (~thegeekin@189.180.83.186) |
2023-02-10 15:25:44 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:54db:de44:4607:1cea) (Ping timeout: 255 seconds) |
2023-02-10 15:26:17 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 255 seconds) |
2023-02-10 15:28:27 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) |
2023-02-10 15:28:29 +0100 | rettahcay | (~kaushikv@c-24-20-37-193.hsd1.or.comcast.net) |
2023-02-10 15:29:33 +0100 | rettahcay | (~kaushikv@c-24-20-37-193.hsd1.or.comcast.net) () |
2023-02-10 15:34:13 +0100 | npmania1 | (~Thunderbi@45.8.223.243) |
2023-02-10 15:34:51 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection) |
2023-02-10 15:36:18 +0100 | npmania | (~Thunderbi@45.8.223.198) (Ping timeout: 268 seconds) |
2023-02-10 15:36:19 +0100 | npmania1 | npmania |
2023-02-10 15:36:29 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) |
2023-02-10 15:40:09 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2023-02-10 15:42:55 +0100 | vpan | (~0@212.117.1.172) |
2023-02-10 15:55:28 +0100 | chomwitt | (~chomwitt@2a02:587:7a12:aa00:1ac0:4dff:fedb:a3f1) (Ping timeout: 248 seconds) |
2023-02-10 15:56:51 +0100 | enoq | (~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7) |
2023-02-10 15:58:03 +0100 | cheater | (~Username@user/cheater) (Ping timeout: 252 seconds) |
2023-02-10 15:59:43 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
2023-02-10 16:00:59 +0100 | <shapr> | This channel sure is quiet in the european daytime |
2023-02-10 16:01:34 +0100 | megaTherion | (~therion@unix.io) (Quit: ZNC 1.8.2 - https://znc.in) |
2023-02-10 16:01:55 +0100 | <merijn> | shapr: It varies *a lot* :p |
2023-02-10 16:02:16 +0100 | <merijn> | Sometimes it's super busy, but today's quiet, yeah |
2023-02-10 16:03:14 +0100 | megaTherion | (~therion@unix.io) |
2023-02-10 16:03:15 +0100 | cfricke | (~cfricke@user/cfricke) (Quit: WeeChat 3.8) |
2023-02-10 16:03:52 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection) |
2023-02-10 16:04:35 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) |
2023-02-10 16:04:36 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection) |
2023-02-10 16:05:25 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) |
2023-02-10 16:06:45 +0100 | <[exa]> | depends a lot, e.g. now it's european friday and as far as I can see no one really cares here. :D |
2023-02-10 16:10:42 +0100 | enoq | (~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7) (Quit: enoq) |
2023-02-10 16:12:49 +0100 | sefidel | (~sefidel@user/sefidel) (Remote host closed the connection) |
2023-02-10 16:15:35 +0100 | ft | (~ft@p3e9bc443.dip0.t-ipconnect.de) |
2023-02-10 16:15:41 +0100 | sefidel | (~sefidel@user/sefidel) |
2023-02-10 16:17:15 +0100 | coot | (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) |
2023-02-10 16:19:31 +0100 | waleee | (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) (Ping timeout: 260 seconds) |
2023-02-10 16:22:56 +0100 | <vpan> | it seems the loss in migration from freenode to libera was significant, around 40% by now I suppose, as I recall the count to be over 1k. But I would guess the majority of active people are still here, so the majority of the people who fell off the train were lurkers and it should not affect the activity much. |
2023-02-10 16:23:53 +0100 | <Inst_> | how pissed off do you guys get if I describe Haskell education as "teaching C by starting with pointers?" |
2023-02-10 16:24:16 +0100 | <Hecate> | shapr: it's because we work during european day time :p |
2023-02-10 16:24:24 +0100 | <geekosaur> | if you;ve a better idea, we're all ears |
2023-02-10 16:25:11 +0100 | <shapr> | Hecate: c'est bien |
2023-02-10 16:25:36 +0100 | <Hecate> | :p |
2023-02-10 16:26:10 +0100 | <Inst_> | geekosaur: I just got hit by a ton of toxicity from FP Discord |
2023-02-10 16:26:34 +0100 | <Inst_> | the point with me is more, start with IO, start with stuff like this tutorial, which I think produces something fun and interesting |
2023-02-10 16:26:44 +0100 | <Inst_> | https://andrew.gibiansky.com/blog/haskell/haskell-gloss/ |
2023-02-10 16:26:45 +0100 | <geekosaur> | this is part of why I don't hang out there |
2023-02-10 16:27:20 +0100 | <Inst_> | start by teaching not FP, but imperative shell, functional core, and understand how to work a combination of imperative shell, functional core |
2023-02-10 16:27:54 +0100 | <Inst_> | and teach libs |
2023-02-10 16:34:29 +0100 | eruditass | (uid248673@id-248673.uxbridge.irccloud.com) (Quit: Connection closed for inactivity) |
2023-02-10 16:34:54 +0100 | mc47 | (~mc47@xmonad/TheMC47) |
2023-02-10 16:35:23 +0100 | <Inst_> | i guess you disagree vehemently, but have resolved not to be toxic? |
2023-02-10 16:35:32 +0100 | Inst_ | Inst |
2023-02-10 16:35:44 +0100 | <ski> | how to teach functional core, without teaching FP ? |
2023-02-10 16:35:45 +0100 | <Inst> | sorry, just on edge |
2023-02-10 16:35:54 +0100 | <ski> | no worry |
2023-02-10 16:35:55 +0100 | <Inst> | teach FP as the way to actually process the data |
2023-02-10 16:36:42 +0100 | <Inst> | get data, process data, do something impure with the data |
2023-02-10 16:36:54 +0100 | <ski> | there is no impure, in Haskell |
2023-02-10 16:37:00 +0100 | <Inst> | side-effecting |
2023-02-10 16:37:06 +0100 | <ski> | no side-effects |
2023-02-10 16:37:14 +0100 | jmdaemon | (~jmdaemon@user/jmdaemon) |
2023-02-10 16:37:33 +0100 | <Inst> | a function that produces an IO action with the data, with the IO action being connected to main |
2023-02-10 16:37:40 +0100 | <ski> | that's effects |
2023-02-10 16:37:44 +0100 | <dminuoso> | Mmm, after the previous discussion, Im beginning to dislike the entire notion of `side effects` |
2023-02-10 16:38:29 +0100 | <ski> | i'm not too clear what you place in the terms "FP" vs. "functional core" |
2023-02-10 16:39:21 +0100 | <[exa]> | is this discussion the side effect of side effects? |
2023-02-10 16:39:22 +0100 | ski | idly wonders in which sense dminuoso means that |
2023-02-10 16:40:07 +0100 | <Inst> | In this context, it's more, FP is taught through, pattern matching, higher order functions, processing data immutably |
2023-02-10 16:40:38 +0100 | <Inst> | functional core is just FP, but the notion is that we still use an imperative shell to make the FP part useful |
2023-02-10 16:41:28 +0100 | <Inst> | maybe use Py or mutable references as a way to demonstrate how FP creates more concise and maintainable code by comparison |
2023-02-10 16:42:06 +0100 | <ski> | pattern-matching is of fundamental importance, to be able to define and use custom `data' types. higher-order functions are quite useful as well, for abstracting out more complicated code, and separating concerns |
2023-02-10 16:42:47 +0100 | <ski> | ("Py" ?) |
2023-02-10 16:43:21 +0100 | <merijn> | Inst: I mean, the entire point of IO is that it *isn't* impure |
2023-02-10 16:43:25 +0100 | <Inst> | w/e, sorry, FP discord is just annoyed because this is like one of my hobby courses |
2023-02-10 16:43:32 +0100 | <Inst> | *hobbyhorses |
2023-02-10 16:43:35 +0100 | <Inst> | and I beat it once in a while |
2023-02-10 16:43:47 +0100 | <Inst> | Python |
2023-02-10 16:44:06 +0100 | <ski> | no issue with contemplating things, Inst |
2023-02-10 16:44:41 +0100 | <Hecate> | no Inst, FP Discord is annoyed because you're an expert beginner who is permanently confused (totally acceptable) but who is also poisoning the understanding of Haskell for new beginners. As such it is extremely draining to clean up behind you because you leave most newcomers confused as hell on topics in which you're also extremely confused about |
2023-02-10 16:44:59 +0100 | shapr | hugs Inst |
2023-02-10 16:45:17 +0100 | <shapr> | Inst: be nice as you can and things will work out |
2023-02-10 16:45:19 +0100 | shapr | hugs Hecate |
2023-02-10 16:45:29 +0100 | <Inst> | I don't think I message that much in #Haskell-beginners these days |
2023-02-10 16:45:40 +0100 | ski | hugs shapr |
2023-02-10 16:45:59 +0100 | shapr | hugs ski |
2023-02-10 16:46:02 +0100 | <shapr> | howdy! Long time no see |
2023-02-10 16:47:06 +0100 | Sgeo | (~Sgeo@user/sgeo) |
2023-02-10 16:47:43 +0100 | <Inst> | Or is it annoying that I've been teaching a friend TVar or some other mutvar to start out with? |
2023-02-10 16:47:43 +0100 | ski | 's been obsessing a bit over definitions and patterns, lately |
2023-02-10 16:49:03 +0100 | <ski> | annoying, how, Inst ? |
2023-02-10 16:49:14 +0100 | <Inst> | offensive, rather. |
2023-02-10 16:49:20 +0100 | <ski> | i dunno |
2023-02-10 16:49:32 +0100 | <ski> | might perhaps be confusing to them, after a while |
2023-02-10 16:49:45 +0100 | <Inst> | ehhh, point is that it's there, not that you should use it |
2023-02-10 16:50:14 +0100 | coot | (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot) |
2023-02-10 16:50:28 +0100 | <shapr> | ski: what kind of patterns? |
2023-02-10 16:51:14 +0100 | <ski> | i'd typically expect someone learning about `TVar's to already know about higher-order code, and about `data' types. perhaps one could do things in a different order .. but i'm not sure how useful that'd be |
2023-02-10 16:51:27 +0100 | <Inst> | ehhh, it's more like an experiment |
2023-02-10 16:51:48 +0100 | <Inst> | but, as i've mentioned, via Hecate's friend Julie Moronuki: |
2023-02-10 16:52:35 +0100 | <Inst> | actually, TVar comes in pretty late |
2023-02-10 16:52:39 +0100 | <Inst> | https://typeclasses.com/phrasebook/mutable-references |
2023-02-10 16:52:59 +0100 | <ski> | shapr : as in pattern-matching. i've been pondering various extensions to patterns (and how that interacts with defining equations) .. some of them, i'm not sure how practically useful they'd be .. but it's fun to ponder different variants |
2023-02-10 16:53:35 +0100 | <Inst> | for_ comes in after enum ranges, using the REPL, and case expressions |
2023-02-10 16:55:22 +0100 | <ski> | shapr : `let'-patterns, lambda-patterns, absurd-patterns, definiendum-patterns |
2023-02-10 16:58:09 +0100 | <ski> | shapr : part of the point is that i want a "logical" (as opposed to "algorithmic") static semantics, a set of inference rules where, if you erase the proof terms, you get reasonable-looking logical rules |
2023-02-10 16:59:47 +0100 | theproffesor | (~theproffe@user/theproffesor) (Ping timeout: 255 seconds) |
2023-02-10 17:00:27 +0100 | <ski> | `f x (\(x + y) -> g y) = g' is an example of a defining equation, using some of my extended pattern ideas |
2023-02-10 17:01:34 +0100 | <ski> | Inst : `for_' is higher-order, so you'd better cover higher-order operations, before `for_' .. unless you intend to treat it ad hoc, without explaining how it works |
2023-02-10 17:04:29 +0100 | <Inst> | ski: ever considered using empty backtick as a ditto mark in a sequence of pattern matching? |
2023-02-10 17:04:32 +0100 | <ski> | (`f :: Num a => a -> (a -> b) -> (a -> b)' is the inferred type for that example) |
2023-02-10 17:05:00 +0100 | <ski> | ditto mark, how do you mean ? |
2023-02-10 17:05:20 +0100 | <Inst> | "same as last element above" |
2023-02-10 17:05:25 +0100 | <Inst> | top-level pattern matching |
2023-02-10 17:05:38 +0100 | <Inst> | `` -> "same as corresponding element in previous top-level pattern match" |
2023-02-10 17:05:46 +0100 | <ski> | you mean, same as the corresponding position in the previous defining equation ? |
2023-02-10 17:05:54 +0100 | finn_elija | (~finn_elij@user/finn-elija/x-0085643) |
2023-02-10 17:05:54 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija))) |
2023-02-10 17:05:54 +0100 | finn_elija | FinnElija |
2023-02-10 17:06:11 +0100 | <Inst> | yeah, and i eventually just wandered off to using case-based pattern matching instead of top-level pattern matching for most cases |
2023-02-10 17:06:35 +0100 | <ski> | if that corresponding pattern mentioned variables, then this "ditto mark" would bring variables into scope, in the current defining equation, without mentioning them explicitly (no explicit binding site) .. which i don't really like |
2023-02-10 17:08:37 +0100 | <ski> | (no, i don't really like `RecordWildCards', `MkFoo {..}') |
2023-02-10 17:09:00 +0100 | <Inst> | i guess case + tuple is just better for that in general |
2023-02-10 17:09:41 +0100 | <Inst> | and tbh, for me personally, hof was hard only because of the name |
2023-02-10 17:10:07 +0100 | <Inst> | "higher-order function", sounds fancy. reality: "it's just a function that takes another function as an argument" |
2023-02-10 17:10:39 +0100 | troydm | (~troydm@user/troydm) (Ping timeout: 268 seconds) |
2023-02-10 17:10:48 +0100 | <Inst> | if you introduce . or even $ early, you're teaching hof |
2023-02-10 17:11:13 +0100 | <Inst> | so if you do a getline example with $, you're already teaching hof |
2023-02-10 17:11:25 +0100 | coot | (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) |
2023-02-10 17:12:45 +0100 | ski | . o O ( `\cases' <https://downloads.haskell.org/ghc/latest/docs/users_guide/exts/lambda_case.html>,<https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0302-cases.rst> ) |
2023-02-10 17:12:46 +0100 | <mauke> | yes (except I'd do map first) |
2023-02-10 17:12:59 +0100 | dcoutts | (~duncan@host86-167-90-212.range86-167.btcentralplus.com) |
2023-02-10 17:13:55 +0100 | dcoutts_ | (~duncan@host86-167-90-212.range86-167.btcentralplus.com) (Ping timeout: 252 seconds) |
2023-02-10 17:14:25 +0100 | <Inst> | map only makes sense if you teach pattern matching on lists, as well as recursion |
2023-02-10 17:14:31 +0100 | <Inst> | . and $ gets you an introduction to the concept |
2023-02-10 17:15:08 +0100 | acidjnk | (~acidjnk@p200300d6e715c445102af608dfe0cdc6.dip0.t-ipconnect.de) |
2023-02-10 17:16:29 +0100 | <ski> | strictly speaking, one would often say that a function that produces another function as output is also higher-order. however, if such a function is simply curried, doesn't do any interesting / non-trivial work, before receiving all the parameters (which is what you get with the usual curried style convention in Haskell), we tend to not count that as "serious higher-order" |
2023-02-10 17:16:30 +0100 | <mauke> | nah, I can just start with lists and map |
2023-02-10 17:16:52 +0100 | <Inst> | yeah, some kid who hates Haskell, and I'm basically thinking of him a lot, I'm trying to help him out |
2023-02-10 17:17:05 +0100 | <ski> | who ? |
2023-02-10 17:17:08 +0100 | <Inst> | I don't think he even got lists and list processing yet |
2023-02-10 17:17:14 +0100 | <mauke> | similarly, I can teach while loops in C without explaining condition flags or relative branching |
2023-02-10 17:17:57 +0100 | <ski> | for lists, one could choose to teach list comprehensions first |
2023-02-10 17:18:08 +0100 | <Inst> | do people actually like list comprehensions? |
2023-02-10 17:18:16 +0100 | <ski> | sometimes they're handy |
2023-02-10 17:18:36 +0100 | cheater | (~Username@user/cheater) |
2023-02-10 17:18:44 +0100 | <ski> | (there's even a `MonadComphrehensions' extension) |
2023-02-10 17:19:08 +0100 | <Inst> | I know, someone taught me a really cool trick with [myTerm | booleanExpression] |
2023-02-10 17:19:29 +0100 | <mauke> | list do > monad comprehensions |
2023-02-10 17:19:37 +0100 | <ski> | possibly failing patterns in generators can also be useful |
2023-02-10 17:23:43 +0100 | gurkenglas | (~gurkengla@dynamic-046-114-182-197.46.114.pool.telefonica.de) |
2023-02-10 17:24:36 +0100 | <Inst> | Also, I'm curious, what's your take on effect systems, or rather, the definition of such? |
2023-02-10 17:25:55 +0100 | <Inst> | I consider ALL languages to have an effect system; languages without an IO type have a nullary / unary effect system (every effect is allowed everywhere), Haskell in prelude has a unary / binary effect system (IO vs non-IO), then you have more complex effect systems |
2023-02-10 17:27:18 +0100 | <ski> | `Maybe' expresses an effect |
2023-02-10 17:27:23 +0100 | <Inst> | so does List, I guess |
2023-02-10 17:27:30 +0100 | [exa] | sees IO vs non-IO ----> [its_the_same_thing_meme.gif] |
2023-02-10 17:31:24 +0100 | merijn | (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl) (Ping timeout: 260 seconds) |
2023-02-10 17:33:01 +0100 | <[exa]> | Inst: btw did you try to consider the actual computation as an effect? As in "production of more organized results in the representation within the computer". The view you're using here seems to me very biased towards distinguishing between "internal program thinking" and "externally visible stuff", yet this precise distinction is quite unrealistic |
2023-02-10 17:34:47 +0100 | <Inst> | Why is it unrealistic? |
2023-02-10 17:35:06 +0100 | <Inst> | (also, even with pure, non-effecting code, space and time are still effects) |
2023-02-10 17:35:24 +0100 | <Inst> | actual side effects? |
2023-02-10 17:35:28 +0100 | <[exa]> | yep, and many other things are effects |
2023-02-10 17:35:47 +0100 | <[exa]> | is the microsonics that the CPUs do a "communication" effect? |
2023-02-10 17:35:59 +0100 | <[exa]> | (there's a paper about breaking RSA with microphones somewhere) |
2023-02-10 17:36:14 +0100 | <[exa]> | are the page requests from the operating system an effect? |
2023-02-10 17:36:17 +0100 | <Inst> | But why is it unrealistic? |
2023-02-10 17:37:30 +0100 | <[exa]> | because literally everyone can argue that everyone other has the distinction line wrong |
2023-02-10 17:37:43 +0100 | <[exa]> | it's completely under-defined |
2023-02-10 17:38:22 +0100 | <Inst> | Thanks, [exa]. I got trolled for a while by some guy who went on for ages about the definition of effect systems. |
2023-02-10 17:38:55 +0100 | <Inst> | And got really upset when I explained my definition of effect system, and was aiming to call me always wrong. |
2023-02-10 17:39:10 +0100 | <Inst> | Ended up blocking him. |
2023-02-10 17:39:10 +0100 | <[exa]> | yeah, that's the basic outcome of the property being under-defined |
2023-02-10 17:39:41 +0100 | AWizzArd | (~code@user/awizzard) (Quit: Lost terminal) |
2023-02-10 17:41:29 +0100 | <[exa]> | in haskell, the usual logical system that allows us to model stuff reliably (and without misinterpretation/handwaving) has no side effects, and the wiggly line of deciding what is a side effect and what's not is delegated to the description of the runtime which interprets the code |
2023-02-10 17:42:29 +0100 | <Inst> | The problem with starting with a language that's pure is that it's hard to understand what impurity means without the contrast. |
2023-02-10 17:42:34 +0100 | mastarija | (~mastarija@2a05:4f46:e03:6000:4eb2:bb7f:1ccf:de1a) |
2023-02-10 17:42:55 +0100 | <[exa]> | luckily there's no impurity, right? :D |
2023-02-10 17:44:41 +0100 | ubert | (~Thunderbi@p200300ecdf13012ec893c5f497fd9467.dip0.t-ipconnect.de) (Ping timeout: 246 seconds) |
2023-02-10 17:45:21 +0100 | razetime | (~Thunderbi@117.254.34.69) |
2023-02-10 17:45:48 +0100 | <[exa]> | btw I'm completely opposed to the impurity view even with imperative languages; in C you're writing down a list of instructions for the machine which is being interpreted by the machine, and what the machine does is similar to what it does with haskell (except for completely logic-irrelevant differences like the way you organize subroutines) |
2023-02-10 17:46:47 +0100 | __monty__ | (~toonn@user/toonn) (Quit: leaving) |
2023-02-10 17:47:34 +0100 | <Inst> | i suppose a PC becoming inoperable due to overclocking is an effect, no? |
2023-02-10 17:48:20 +0100 | <[exa]> | as in, it's the nice transformation of instructions into other instructions that the C language is about, not the execution and checking for whether the phenomena affect other phenomena |
2023-02-10 17:48:56 +0100 | <[exa]> | not really, it's how the machine works |
2023-02-10 17:49:09 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:54db:de44:4607:1cea) |
2023-02-10 17:49:32 +0100 | <ski> | what matters is what reasoning (including refactoring) you can do, at the level of the language |
2023-02-10 17:50:15 +0100 | <Inst> | i'm not sure, is this impure in Haskell? One, reading from a file, which breaks pure functions to an extent because the file is not under the program's control and can have any set of data |
2023-02-10 17:50:24 +0100 | <Inst> | Two, a function that takes a mutable reference as an argument? |
2023-02-10 17:50:34 +0100 | [exa] | needs to disappear shortly but will be back |
2023-02-10 17:51:00 +0100 | <ski> | imho, neither |
2023-02-10 17:51:25 +0100 | <Inst> | it's more like concealed effects |
2023-02-10 17:51:30 +0100 | <Inst> | or for that matter, System.Random |
2023-02-10 17:52:54 +0100 | <ski> | how does `hGetLine :: Handle -> IO String' "break pure functions to an extent" ? |
2023-02-10 17:53:16 +0100 | <ski> | or `readIORef :: IORef a -> IO a', for that matter |
2023-02-10 17:53:26 +0100 | lisbeths | (uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
2023-02-10 17:54:26 +0100 | <Inst> | the logic is more, the input is deterministic, it's always the same handle or the same IORef, but the underlying value of the IORef can vary, as can what's contained within the handle |
2023-02-10 17:54:31 +0100 | <ski> | .. however, if you want to talk about "pure", then perhaps you should read |
2023-02-10 17:54:36 +0100 | <ski> | @where purely-functional |
2023-02-10 17:54:36 +0100 | <lambdabot> | "What is a Purely Functional Language?" by Amr Sabry in 1993-01 at <https://www.cs.indiana.edu/~sabry/papers/purelyFunctional.ps> |
2023-02-10 17:54:44 +0100 | <Inst> | https://wiki.haskell.org/Pure |
2023-02-10 17:55:53 +0100 | <ski> | "but the underlying value of the IORef can vary, as can what's contained within the handle" -- conceptually, a value of type `IORef a' does *not* "contain" a value of type `a'. similarly, a value of type `Handle' does not contain `Char's |
2023-02-10 17:57:03 +0100 | <Inst> | IORef a contains a pointer and has the type of the value being referenced, iirc |
2023-02-10 17:57:35 +0100 | freeside | (~mengwong@103.252.202.170) |
2023-02-10 17:57:56 +0100 | merijn | (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl) |
2023-02-10 17:58:59 +0100 | MajorBiscuit | (~MajorBisc@145.94.153.3) (Ping timeout: 264 seconds) |
2023-02-10 17:59:13 +0100 | <ski> | (note that two `IORef a's can be compared for equality, without requiring equality on `a'. it's `instance Eq (IORef a)', not `instance Eq a => Eq (IORef a)'. conceptually, you can think of an `IORef a' as a bit like an `Int' that you use to index inside a `Map Int Blah' or `IntMap Blah' .. except that `IORef a' is parameterized by the "target type" `a', and the corresponding "map" is "heterogenous" .. a bit |
2023-02-10 17:59:19 +0100 | <ski> | comparable to `DMap IORef Identity') |
2023-02-10 17:59:22 +0100 | <ski> | @hackage dependent-map |
2023-02-10 17:59:22 +0100 | <lambdabot> | https://hackage.haskell.org/package/dependent-map |
2023-02-10 18:00:04 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2023-02-10 18:01:04 +0100 | vpan | (~0@212.117.1.172) (Quit: Leaving.) |
2023-02-10 18:01:08 +0100 | npmania1 | (~Thunderbi@121.128.227.178) |
2023-02-10 18:01:55 +0100 | <Inst> | is it wrong to think of IORef as just a pointer to a mutable? |
2023-02-10 18:02:11 +0100 | freeside | (~mengwong@103.252.202.170) (Ping timeout: 260 seconds) |
2023-02-10 18:02:39 +0100 | <ski> | i'm not sure what you mean by the latter |
2023-02-10 18:02:55 +0100 | npmania | (~Thunderbi@45.8.223.243) (Ping timeout: 256 seconds) |
2023-02-10 18:02:55 +0100 | npmania1 | npmania |
2023-02-10 18:03:07 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:54db:de44:4607:1cea) (Remote host closed the connection) |
2023-02-10 18:03:32 +0100 | <ski> | is an `Int' that you use to index inside an `IntMap Blah'/`Map Int Blah', or an `Array Int Blah', or a `Vector Blah' .. is such an `Int' a pointer ? |
2023-02-10 18:04:23 +0100 | <Inst> | mutable or pointer? |
2023-02-10 18:04:27 +0100 | <ski> | if you thread successive versions of such an `IntMap Blah'/.. through a computation .. is that a mutable structure ? |
2023-02-10 18:04:30 +0100 | <ski> | Inst : both |
2023-02-10 18:05:04 +0100 | merijn | (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl) (Ping timeout: 248 seconds) |
2023-02-10 18:06:06 +0100 | slack1256 | (~slack1256@186.11.102.104) |
2023-02-10 18:06:07 +0100 | <Inst> | that is to say, IORef is fundamentally immutable in its own way |
2023-02-10 18:06:08 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
2023-02-10 18:06:48 +0100 | <Inst> | the IORef always points to the same thing |
2023-02-10 18:06:56 +0100 | <Inst> | but the thing can change |
2023-02-10 18:09:09 +0100 | <ski> | > let fact n = factTimes n 1 where factTimes _ 0 = 0; factTimes 0 acc = acc; factTimes n acc = factTimes (n-1) (acc * n) in fact 5 -- does this computation express something that is mutable ? |
2023-02-10 18:09:11 +0100 | <lambdabot> | 120 |
2023-02-10 18:09:47 +0100 | <Inst> | it's iterative because of the accumulating parameter |
2023-02-10 18:10:09 +0100 | <ski> | does the accumulator express something mutable ? |
2023-02-10 18:10:51 +0100 | <Inst> | no, it doesn't, it doesn't mutate, but acts as though it does through passing the output of the argument around, modified |
2023-02-10 18:11:11 +0100 | <ski> | i would say it does. i would also answer my two previous questions with "yes" |
2023-02-10 18:11:43 +0100 | <Inst> | that's an interesting take, because people go "Haskell has no mutation" to newbies |
2023-02-10 18:11:45 +0100 | <ski> | it may or may not be *implemented* in terms of update-in-place .. but that's not the issue here |
2023-02-10 18:13:23 +0100 | <Inst> | why claim that acc is mutable, then? |
2023-02-10 18:13:26 +0100 | <ski> | the succession of versions of the accumulator expresses, de facto, a mutable concept, in my mind |
2023-02-10 18:13:29 +0100 | <dminuoso> | ski: So side effects usually relate to some observable state modification outside of the perspecftive you are considering. Either these side-effects are irrelevant, in which even giving it a name is relatively meaningless (i.e. do we ever care about the heat generation of a computation as a side effect?), or they are irrelevant, in which your perspective is probably ill tuned. |
2023-02-10 18:13:35 +0100 | <gurkenglas> | Free theorems let me encode some laws by cleverly picking my types. Can I do this for laws whose forall quantifier ranges over the values of a type instead of over all types? I'm hoping for "a:A B such that for any (f :: forall b. A b -> A b), f a == a" |
2023-02-10 18:14:13 +0100 | <c_wraith> | gurkenglas: you would need dependent types to express that |
2023-02-10 18:14:16 +0100 | <ski> | if you want to, you could say this is an encoding of something being mutable |
2023-02-10 18:14:36 +0100 | <Inst> | yes, it is, it's an attempt to translate a for loop |
2023-02-10 18:15:02 +0100 | <ski> | Inst : a single `acc' is not mutable. the succession of them (all being different variables, dynamically speaking), does express something mutable |
2023-02-10 18:15:15 +0100 | <Inst> | well, is shadowing mutation? |
2023-02-10 18:16:15 +0100 | <Inst> | > main = do {let x = 1; x <- x + 1; x <- x + 1; print x} |
2023-02-10 18:16:17 +0100 | <lambdabot> | <hint>:1:6: error: parse error on input ‘=’ |
2023-02-10 18:16:29 +0100 | <dminuoso> | ski: that is, there arent really any "outside" state variables. If you care about them, they are definitely not "outside", and if you dont, its irrelevant. |
2023-02-10 18:16:32 +0100 | <ski> | i'm not sure how shadowing is relevant. there's no shadowing in the example, except from the `n' in `fact' being shadowed by `n' in the last defining equation for `factTimes' .. but we could rename the former to say `n0', with no change in behaviour |
2023-02-10 18:16:40 +0100 | <Inst> | > do {let x = 1; x <- x + 1; x <- x + 1; print x} |
2023-02-10 18:16:42 +0100 | <lambdabot> | <hint>:1:18: error: |
2023-02-10 18:16:42 +0100 | <lambdabot> | parse error on input ‘<-’ |
2023-02-10 18:16:42 +0100 | <lambdabot> | Perhaps this statement should be within a 'do' block? |
2023-02-10 18:17:05 +0100 | <Inst> | > do ; let x = 1; x <- x+1; x <- x +1; print x |
2023-02-10 18:17:07 +0100 | <lambdabot> | <hint>:1:19: error: |
2023-02-10 18:17:07 +0100 | <lambdabot> | parse error on input ‘<-’ |
2023-02-10 18:17:07 +0100 | <lambdabot> | Perhaps this statement should be within a 'do' block? |
2023-02-10 18:17:15 +0100 | <Inst> | !!! >:( |
2023-02-10 18:17:18 +0100 | <geekosaur> | you need extra braces around the let bindings |
2023-02-10 18:17:25 +0100 | <geekosaur> | because let uses layout as well |
2023-02-10 18:17:43 +0100 | <geekosaur> | > do {let {x = 1}; x <- x + 1; x <- x + 1; print x} |
2023-02-10 18:17:44 +0100 | <lambdabot> | error: |
2023-02-10 18:17:44 +0100 | <lambdabot> | • No instance for (Num (IO (IO ()))) arising from a use of ‘+’ |
2023-02-10 18:17:44 +0100 | <lambdabot> | • In a stmt of a 'do' block: x <- x + 1 |
2023-02-10 18:17:48 +0100 | <Inst> | > do {{let x = 1}; x <- x + 1; x <- x + 1; print x} |
2023-02-10 18:17:49 +0100 | <lambdabot> | <hint>:1:5: error: parse error on input ‘{’ |
2023-02-10 18:17:53 +0100 | <ski> | dminuoso : itym s/or they are irrelevant/or they are relevant/ ? |
2023-02-10 18:18:28 +0100 | lortabac | (~lortabac@2a01:e0a:541:b8f0:c52:e2ce:11c8:93da) (Quit: WeeChat 2.8) |
2023-02-10 18:18:32 +0100 | ski | would not limit "side-effects" to state, fwiw |
2023-02-10 18:18:43 +0100 | <dminuoso> | I meant `state` in a very general sense |
2023-02-10 18:18:45 +0100 | <geekosaur> | and, as I showed, you have a type error because x is pure and therefore has the wrong type for `<-` |
2023-02-10 18:18:48 +0100 | <dminuoso> | The state of the world, if you want. |
2023-02-10 18:18:58 +0100 | <Inst> | > u = do {let {x = 1}; x <- pure $ x + 1; x <- pure $ x + 1; print x} |
2023-02-10 18:18:59 +0100 | <lambdabot> | <hint>:1:3: error: parse error on input ‘=’ |
2023-02-10 18:18:59 +0100 | <Inst> | whoops |
2023-02-10 18:19:42 +0100 | <ski> | i consider exceptions, nondeterminism, continuations, as other examples, that are not state |
2023-02-10 18:19:49 +0100 | <Inst> | > do {let {x = 1}; x <- pure $ x + 1; x <- pure $ x + 1; print x} |
2023-02-10 18:19:50 +0100 | <lambdabot> | <IO ()> |
2023-02-10 18:20:05 +0100 | <Inst> | > do {let {x = 1}; x <- pure $ x + 1; x <- pure $ x + 1; pure x} |
2023-02-10 18:20:06 +0100 | <lambdabot> | error: |
2023-02-10 18:20:06 +0100 | <lambdabot> | • Ambiguous type variable ‘m0’ arising from a use of ‘show_M627921637676... |
2023-02-10 18:20:06 +0100 | <lambdabot> | prevents the constraint ‘(Show (m0 Integer))’ from being solved. |
2023-02-10 18:20:32 +0100 | <tomsmeding> | % do {let {x = 1}; x <- pure $ x + 1; x <- pure $ x + 1; print x} |
2023-02-10 18:20:32 +0100 | <yahb2> | 3 |
2023-02-10 18:20:32 +0100 | kurbus | (~kurbus@user/kurbus) (Quit: Client closed) |
2023-02-10 18:20:33 +0100 | <Inst> | i'll stop spamming |
2023-02-10 18:22:06 +0100 | razetime | (~Thunderbi@117.254.34.69) (Remote host closed the connection) |
2023-02-10 18:22:11 +0100 | <ski> | dminuoso : i'm not really following what you're trying to get across, sorry |
2023-02-10 18:22:18 +0100 | <dminuoso> | ski: never mind, then. |
2023-02-10 18:24:25 +0100 | <ski> | trying to grasp what you meant by "outside of the perspecftive you are considering" |
2023-02-10 18:25:16 +0100 | Inst_ | (~Inst@2601:6c4:4081:54f0:d621:5cdd:9051:c240) |
2023-02-10 18:25:27 +0100 | <ski> | gurkenglas : hm, are you talking about operations whose type `forall'-quantifies not a type, but a value ? |
2023-02-10 18:27:12 +0100 | <gurkenglas> | ski: the operation f up there quantifies over types, but the equation f a == a quantifies over the possible values of f |
2023-02-10 18:27:36 +0100 | <ski> | would `b' and `B' be values, rather than types, there ? |
2023-02-10 18:27:50 +0100 | <gurkenglas> | both are types |
2023-02-10 18:28:02 +0100 | o-90 | (~o-90@gateway/tor-sasl/o-90) |
2023-02-10 18:28:12 +0100 | asscrackbandit | (~user@eth-west-pareq2-46-193-2-167.wb.wifirst.net) |
2023-02-10 18:28:23 +0100 | accord | (uid568320@id-568320.hampstead.irccloud.com) |
2023-02-10 18:28:26 +0100 | Inst | (~Inst@2601:6c4:4081:54f0:d621:5cdd:9051:c240) (Ping timeout: 246 seconds) |
2023-02-10 18:29:05 +0100 | o-90 | (~o-90@gateway/tor-sasl/o-90) (Client Quit) |
2023-02-10 18:29:23 +0100 | <ski> | which would be the operation (whose type) the free theorem was derived from ? |
2023-02-10 18:29:31 +0100 | freeside | (~mengwong@103.252.202.170) |
2023-02-10 18:31:36 +0100 | <gurkenglas> | I see whence the confusion, now - I had only stated the theorem I'd want, not the clever type that would get it |
2023-02-10 18:31:51 +0100 | waleee | (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) |
2023-02-10 18:31:56 +0100 | shriekingnoise | (~shrieking@186.137.175.87) (Ping timeout: 246 seconds) |
2023-02-10 18:33:48 +0100 | freeside | (~mengwong@103.252.202.170) (Ping timeout: 252 seconds) |
2023-02-10 18:33:57 +0100 | <ski> | any `f' of the appropriate type has `a' as a fixed point .. apparently |
2023-02-10 18:35:17 +0100 | <Inst_> | ... |
2023-02-10 18:35:46 +0100 | notzmv | (~zmv@user/notzmv) (Ping timeout: 265 seconds) |
2023-02-10 18:35:51 +0100 | <gurkenglas> | yes, that's what i want to encode. i don't have the solution yet, i was hoping Haskell lets me do this and someone knows how. I'm scribbling. |
2023-02-10 18:36:59 +0100 | tzh | (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) |
2023-02-10 18:39:32 +0100 | <Inst_> | ... |
2023-02-10 18:40:28 +0100 | ski | . o O ( "Internalizing Parametricity" by Guilhem Moulin in 2016 at <https://core.ac.uk/display/70616322> ) |
2023-02-10 18:40:44 +0100 | zeenk | (~zeenk@2a02:2f04:a214:1e00::7fe) (Quit: Konversation terminated!) |
2023-02-10 18:44:26 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2023-02-10 18:45:38 +0100 | asscrackbandit | (~user@eth-west-pareq2-46-193-2-167.wb.wifirst.net) (Ping timeout: 246 seconds) |
2023-02-10 18:48:37 +0100 | cheater_ | (~Username@user/cheater) |
2023-02-10 18:51:39 +0100 | cheater | (~Username@user/cheater) (Ping timeout: 248 seconds) |
2023-02-10 18:51:42 +0100 | <shapr> | I like list comprehensions. |
2023-02-10 18:51:43 +0100 | cheater_ | cheater |
2023-02-10 18:52:31 +0100 | <geekosaur> | I started out not liking them much but have warmed to them a bit |
2023-02-10 18:53:11 +0100 | pja | (~pja@2a02:8010:6098:0:e65f:1ff:fe1f:660f) (Read error: Connection reset by peer) |
2023-02-10 18:53:24 +0100 | npmania1 | (~Thunderbi@45.8.223.243) |
2023-02-10 18:54:07 +0100 | npmania | (~Thunderbi@121.128.227.178) (Ping timeout: 248 seconds) |
2023-02-10 18:54:08 +0100 | npmania1 | npmania |
2023-02-10 18:56:24 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:54db:de44:4607:1cea) |
2023-02-10 18:57:16 +0100 | jmdaemon | (~jmdaemon@user/jmdaemon) (Ping timeout: 252 seconds) |
2023-02-10 18:57:27 +0100 | pja | (~pja@2a02:8010:6098:0:e65f:1ff:fe1f:660f) |
2023-02-10 18:59:02 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
2023-02-10 19:00:06 +0100 | kurbus | (~kurbus@user/kurbus) |
2023-02-10 19:01:47 +0100 | shapr | (~user@net-5-88-238-17.cust.vodafonedsl.it) (Ping timeout: 248 seconds) |
2023-02-10 19:05:37 +0100 | merijn | (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl) |
2023-02-10 19:06:53 +0100 | freeside | (~mengwong@103.252.202.170) |
2023-02-10 19:11:31 +0100 | freeside | (~mengwong@103.252.202.170) (Ping timeout: 268 seconds) |
2023-02-10 19:22:15 +0100 | jmdaemon | (~jmdaemon@user/jmdaemon) |
2023-02-10 19:23:03 +0100 | kurbus | (~kurbus@user/kurbus) (Ping timeout: 260 seconds) |
2023-02-10 19:23:11 +0100 | king_gs | (~Thunderbi@187.201.41.239) |
2023-02-10 19:28:31 +0100 | <c_wraith> | I read a paper a while back that used sequence_ with a list comprehension instead of mapM_ . I couldn't wrap my head around that particular choice |
2023-02-10 19:32:10 +0100 | <glguy> | c_wraith: I don't know the example, but list comprehensions can be a much clearer way to write the list transformation than a lambda, especially with guards, patterns, and multiple bindings |
2023-02-10 19:32:28 +0100 | <c_wraith> | glguy: there was a do block inside the list comprehension. :P |
2023-02-10 19:33:20 +0100 | jao | (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) |
2023-02-10 19:33:32 +0100 | king_gs | (~Thunderbi@187.201.41.239) (Quit: king_gs) |
2023-02-10 19:39:59 +0100 | merijn | (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl) (Ping timeout: 248 seconds) |
2023-02-10 19:43:05 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection) |
2023-02-10 19:43:56 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) |
2023-02-10 19:47:27 +0100 | npmania | (~Thunderbi@45.8.223.243) (Quit: npmania) |
2023-02-10 19:48:27 +0100 | thongpv | (~thongpv87@2402:9d80:32e:8f1:5f45:6f5f:527a:b486) (Read error: Connection reset by peer) |
2023-02-10 19:49:04 +0100 | werneta | (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 260 seconds) |
2023-02-10 19:50:20 +0100 | Sinbad | (~Sinbad@user/sinbad) |
2023-02-10 19:50:45 +0100 | <ddellacosta> | So I'm trying to write some integration tests which start up my main process in an Async, I send messages to it via TQueue, then test some state to see if it behaved as expected. However, I realized my folly when the test returned with a failure before anything in the threaded process could run. Whoops. I'm thinking now that I could pass in another TQueue and send a message _from_ the main thread |
2023-02-10 19:50:46 +0100 | <ddellacosta> | once it's gotten to the end of its event loop (at which point I can check assertions), but this feels like an ugly hack just to support tests. Are there better approaches? |
2023-02-10 19:51:20 +0100 | Feuermagier_ | (~Feuermagi@user/feuermagier) |
2023-02-10 19:51:45 +0100 | <ski> | c_wraith : obviously ought to have used `MonadComprehensions', like `sequence_ [[foo a b | _ <- putStrLn "foo",a <- getLine,b <- readLn] | x <- xs,y <- ys]' ;) |
2023-02-10 19:51:57 +0100 | Feuermagier_ | (~Feuermagi@user/feuermagier) (Remote host closed the connection) |
2023-02-10 19:53:22 +0100 | Tuplanolla | (~Tuplanoll@91-159-68-152.elisa-laajakaista.fi) |
2023-02-10 19:53:44 +0100 | Feuermagier | (~Feuermagi@user/feuermagier) (Ping timeout: 252 seconds) |
2023-02-10 19:56:00 +0100 | beteigeuze | (~Thunderbi@a79-169-109-107.cpe.netcabo.pt) (Ping timeout: 265 seconds) |
2023-02-10 19:58:09 +0100 | beteigeuze | (~Thunderbi@a79-169-109-107.cpe.netcabo.pt) |
2023-02-10 19:59:08 +0100 | mjs2600 | (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) (Ping timeout: 246 seconds) |
2023-02-10 19:59:13 +0100 | mjs2600_ | (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) |
2023-02-10 20:04:23 +0100 | mechap | (~mechap@user/mechap) |
2023-02-10 20:05:24 +0100 | beteigeuze | (~Thunderbi@a79-169-109-107.cpe.netcabo.pt) (Ping timeout: 260 seconds) |
2023-02-10 20:07:08 +0100 | opticblast | (~Thunderbi@172.58.80.43) |
2023-02-10 20:11:11 +0100 | eruditass | (uid248673@id-248673.uxbridge.irccloud.com) |
2023-02-10 20:13:17 +0100 | beteigeuze | (~Thunderbi@bl14-81-220.dsl.telepac.pt) |
2023-02-10 20:19:08 +0100 | Feuermagier | (~Feuermagi@user/feuermagier) |
2023-02-10 20:19:52 +0100 | stiell | (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection) |
2023-02-10 20:20:44 +0100 | stiell | (~stiell@gateway/tor-sasl/stiell) |
2023-02-10 20:21:57 +0100 | irrgit_ | (~irrgit@176.113.74.130) (Read error: Connection reset by peer) |
2023-02-10 20:25:23 +0100 | beteigeuze | (~Thunderbi@bl14-81-220.dsl.telepac.pt) (Ping timeout: 264 seconds) |
2023-02-10 20:34:30 +0100 | thegeekinside | (~thegeekin@189.180.83.186) (Remote host closed the connection) |
2023-02-10 20:34:35 +0100 | werneta | (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) |
2023-02-10 20:35:53 +0100 | <Inst_> | i guess my issue with list comprehensions is that i've seen bad code done in list comprehensions |
2023-02-10 20:36:07 +0100 | <Inst_> | it seems that idiomatic list comprehensions use the Haskell whitespacing rules more efficiently |
2023-02-10 20:36:28 +0100 | freeside | (~mengwong@103.252.202.170) |
2023-02-10 20:36:58 +0100 | EvanR | (~EvanR@user/evanr) |
2023-02-10 20:37:16 +0100 | econo | (uid147250@user/econo) |
2023-02-10 20:40:36 +0100 | bgs | (~bgs@212-85-160-171.dynamic.telemach.net) (Remote host closed the connection) |
2023-02-10 20:40:43 +0100 | ddellacosta | (~ddellacos@146.70.166.139) (Ping timeout: 252 seconds) |
2023-02-10 20:40:51 +0100 | freeside | (~mengwong@103.252.202.170) (Ping timeout: 260 seconds) |
2023-02-10 20:43:00 +0100 | <davean> | Inst_: Is there something you haven't seen bad code done with? |
2023-02-10 20:44:24 +0100 | notzmv | (~zmv@user/notzmv) |
2023-02-10 20:45:08 +0100 | Inst_ | Inst |
2023-02-10 20:45:28 +0100 | ski | sometimes wonders whether lists, list comprehensions, ought to have used `;', rather than `,' |
2023-02-10 20:45:37 +0100 | <monochrom> | I'm pretty sure the answer is yes, and I'm also pretty sure human are absolutely biased and selective, so there is really nothing to discuss. |
2023-02-10 20:47:26 +0100 | <Inst> | if you're asking about my complaints about list syntax, it's that Julia and Matlab have better ways to handle matrices than Haskell |
2023-02-10 20:47:50 +0100 | <EvanR> | haskell isn't good at "everything is a matrix" |
2023-02-10 20:48:15 +0100 | <EvanR> | in the words of B user guide, it's good at non-numeric applications xD |
2023-02-10 20:48:18 +0100 | <geekosaur> | if you want matrices then use APL >.> |
2023-02-10 20:48:29 +0100 | <EvanR> | if you want to write numeric programs use fortran |
2023-02-10 20:48:49 +0100 | <Inst> | had some Julian run up and talk about how pretty their recursive fib definition was, until i pointed out that doing it via matrices was both more succinct and faster |
2023-02-10 20:49:09 +0100 | <Inst> | problem was, the Haskell port wasn't good |
2023-02-10 20:49:20 +0100 | chomwitt | (~chomwitt@2a02:587:7a12:aa00:1ac0:4dff:fedb:a3f1) |
2023-02-10 20:49:24 +0100 | <EvanR> | restructuring something as a matrix is always a cool party trick |
2023-02-10 20:49:47 +0100 | <monochrom> | If you like Haskell and APL, then use Haskell to give semantics to APL >:) https://link.springer.com/chapter/10.1007/978-3-662-54434-1_21 |
2023-02-10 20:49:59 +0100 | mjs2600 | (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) |
2023-02-10 20:50:10 +0100 | mjs2600_ | (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) (Read error: Connection reset by peer) |
2023-02-10 20:51:34 +0100 | <monochrom> | A linear transformation of a vector can always be linearized (pun intended haha) to tuple-manipulating code instead of invoking any matrix syntax. |
2023-02-10 20:52:12 +0100 | remedan | (~remedan@ip-94-112-0-18.bb.vodafone.cz) (Read error: Connection reset by peer) |
2023-02-10 20:53:19 +0100 | <davean> | Inst: What do lists have to do with matrixes? |
2023-02-10 20:53:19 +0100 | <Inst> | thanks, will show that to an APLer friend |
2023-02-10 20:53:31 +0100 | <Inst> | matrices in haskell are implemented as nested lists |
2023-02-10 20:53:41 +0100 | <davean> | No they aren't |
2023-02-10 20:53:45 +0100 | <EvanR> | among other ways |
2023-02-10 20:53:46 +0100 | <monochrom> | That's not what hmatrix does. |
2023-02-10 20:53:57 +0100 | <davean> | Thats just silly to claim |
2023-02-10 20:54:11 +0100 | <EvanR> | e.g. linear (package) 4x4 matrix is 4 V4s |
2023-02-10 20:54:24 +0100 | <Inst> | yes, i'm aware, typed matrices with a Nat for the size |
2023-02-10 20:54:25 +0100 | <monochrom> | See? I called it. There is really nothing to discuss. "discuss". |
2023-02-10 20:54:32 +0100 | <davean> | Inst: Not just that |
2023-02-10 20:54:55 +0100 | <EvanR> | oh, hmatrix implements matrices using a matrix? interesting |
2023-02-10 20:54:59 +0100 | <davean> | monochrom: yah this is pointless, this can't even be in good faith |
2023-02-10 20:55:10 +0100 | remedan | (~remedan@ip-94-112-0-18.bb.vodafone.cz) |
2023-02-10 20:55:15 +0100 | <Inst> | ???? |
2023-02-10 20:57:32 +0100 | <Inst> | but to finish, the point is, Haskell doesn't have first-class syntactical support for matrices, that's all |
2023-02-10 20:58:32 +0100 | <davean> | Inst: sure it does, naturally by how its syntax is designed so it doesn't need to special case it. You can just do it as a library |
2023-02-10 20:58:52 +0100 | <davean> | You can build syntax just fine |
2023-02-10 20:58:57 +0100 | beteigeuze | (~Thunderbi@bl14-81-220.dsl.telepac.pt) |
2023-02-10 20:59:08 +0100 | <davean> | And you can have matrix comprehensions too and such |
2023-02-10 20:59:39 +0100 | gurkenglas | (~gurkengla@dynamic-046-114-182-197.46.114.pool.telefonica.de) (Ping timeout: 248 seconds) |
2023-02-10 20:59:52 +0100 | <Inst> | i'm going through hmatrix lib right now |
2023-02-10 21:03:14 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija))) |
2023-02-10 21:03:14 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) |
2023-02-10 21:06:40 +0100 | foghorn | (~foghorn@user/foghorn) |
2023-02-10 21:07:58 +0100 | <Inst> | the syntax here at least seems to be converting from lists |
2023-02-10 21:07:59 +0100 | <Inst> | https://hackage.haskell.org/package/hmatrix-0.20.2/docs/Numeric-LinearAlgebra-Data.html |
2023-02-10 21:08:10 +0100 | <Inst> | with an annotation that converts a list to a matrix |
2023-02-10 21:10:26 +0100 | azure_vermilion | (~azure_ver@23.106.59.29) (Ping timeout: 255 seconds) |
2023-02-10 21:11:00 +0100 | azure_vermilion | (~azure_ver@164.39.138.83) |
2023-02-10 21:15:18 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:54db:de44:4607:1cea) (Remote host closed the connection) |
2023-02-10 21:18:40 +0100 | mechap | (~mechap@user/mechap) (Ping timeout: 252 seconds) |
2023-02-10 21:20:26 +0100 | mechap | (~mechap@user/mechap) |
2023-02-10 21:21:49 +0100 | gurkenglas | (~gurkengla@dynamic-046-114-182-197.46.114.pool.telefonica.de) |
2023-02-10 21:27:56 +0100 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) |
2023-02-10 21:29:58 +0100 | trev | (~trev@user/trev) (Remote host closed the connection) |
2023-02-10 21:33:47 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:54db:de44:4607:1cea) |
2023-02-10 21:33:53 +0100 | slack1256 | (~slack1256@186.11.102.104) (Remote host closed the connection) |
2023-02-10 21:35:00 +0100 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 260 seconds) |
2023-02-10 21:37:29 +0100 | bilegeek | (~bilegeek@2600:1008:b059:33a6:3874:3d26:7f6d:f6e5) |
2023-02-10 21:39:33 +0100 | <monochrom> | Ugh 9.2.6 is released. This recompiles everything again. |
2023-02-10 21:39:45 +0100 | monochrom | is on the 9.2.x stream. |
2023-02-10 21:40:55 +0100 | <Hecate> | monochrom: did you need the fixes? |
2023-02-10 21:41:08 +0100 | <monochrom> | I think no. :) |
2023-02-10 21:43:07 +0100 | <monochrom> | Yeah I'm a pretty light user, I hadn't run into the bugs. |
2023-02-10 21:45:25 +0100 | <Hecate> | ok :) |
2023-02-10 21:48:00 +0100 | <geekosaur> | still. so far I've found that someone will trip over them, so I try to keep up to date. but this one hasn't hit ghcup yet, from the looks of it |
2023-02-10 21:48:14 +0100 | <geekosaur> | speaking of, I need to try 9.6 alpha2 |
2023-02-10 21:54:00 +0100 | gehmehgeh | gmg |
2023-02-10 21:56:17 +0100 | notzmv | (~zmv@user/notzmv) (Ping timeout: 252 seconds) |
2023-02-10 21:59:15 +0100 | foul_owl | (~kerry@157.97.134.60) (Ping timeout: 268 seconds) |
2023-02-10 22:04:11 +0100 | gurkenglas | (~gurkengla@dynamic-046-114-182-197.46.114.pool.telefonica.de) (Ping timeout: 268 seconds) |
2023-02-10 22:05:17 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:54db:de44:4607:1cea) (Remote host closed the connection) |
2023-02-10 22:05:51 +0100 | pavonia | (~user@user/siracusa) |
2023-02-10 22:06:31 +0100 | eggplantade | (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) |
2023-02-10 22:08:00 +0100 | takuan_dozo | (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
2023-02-10 22:12:48 +0100 | foul_owl | (~kerry@193.29.61.35) |
2023-02-10 22:14:54 +0100 | mastarija | (~mastarija@2a05:4f46:e03:6000:4eb2:bb7f:1ccf:de1a) (Quit: WeeChat 3.7.1) |
2023-02-10 22:17:08 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds) |
2023-02-10 22:18:59 +0100 | mjs2600 | (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) (Ping timeout: 260 seconds) |
2023-02-10 22:19:54 +0100 | mjs2600 | (~mjs2600@143.244.44.172) |
2023-02-10 22:23:11 +0100 | mjs2600_ | (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) |
2023-02-10 22:23:20 +0100 | avicenzi | (~avicenzi@2a00:ca8:a1f:b004::c32) (Ping timeout: 246 seconds) |
2023-02-10 22:24:15 +0100 | mjs2600 | (~mjs2600@143.244.44.172) (Ping timeout: 248 seconds) |
2023-02-10 22:31:09 +0100 | <stefan-_> | when I have an list of values where I need to (often) swap two values at given indices, would be IOArray or Data.Vector better? |
2023-02-10 22:33:32 +0100 | <c_wraith> | if "often" is enough, both are slow and you should be using primops and the primitive types those libraries use. I've had to do that before. |
2023-02-10 22:34:02 +0100 | <c_wraith> | But for most use cases, either is fine. |
2023-02-10 22:34:22 +0100 | <c_wraith> | So long as you stick to a mutable api, anyway. pick whichever you like more |
2023-02-10 22:35:17 +0100 | eggplantade | (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2023-02-10 22:37:14 +0100 | Unicorn_Princess | (~Unicorn_P@user/Unicorn-Princess/x-3540542) |
2023-02-10 22:38:42 +0100 | telser | (~quassel@user/telser) |
2023-02-10 22:39:17 +0100 | <stefan-_> | c_wraith, ok, thanks, IOArray is actually fast enough for my purposes |
2023-02-10 22:39:44 +0100 | chele | (~chele@user/chele) (Remote host closed the connection) |
2023-02-10 22:40:33 +0100 | beteigeuze | (~Thunderbi@bl14-81-220.dsl.telepac.pt) (Quit: beteigeuze) |
2023-02-10 22:41:36 +0100 | jonathanx | (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Remote host closed the connection) |
2023-02-10 22:41:54 +0100 | jonathanx | (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) |
2023-02-10 22:42:26 +0100 | beteigeuze | (~Thunderbi@bl14-81-220.dsl.telepac.pt) |
2023-02-10 22:42:45 +0100 | <c_wraith> | man... when did I have to do that? Oh! It was implementing pbkdf2. The only library that had it back then was wrong, because the author misunderstood the spec. |
2023-02-10 22:43:16 +0100 | <c_wraith> | pbkdf2 is supposed to be slow, but your implementation is not supposed to be slower than everyone else's |
2023-02-10 22:51:54 +0100 | jonathanx_ | (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) |
2023-02-10 22:52:28 +0100 | jonathanx | (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Remote host closed the connection) |
2023-02-10 22:58:06 +0100 | accord | (uid568320@id-568320.hampstead.irccloud.com) (Quit: Connection closed for inactivity) |
2023-02-10 23:00:01 +0100 | Guest51 | (~Guest51@205.175.106.161) |
2023-02-10 23:01:06 +0100 | gurkenglas | (~gurkengla@dynamic-046-114-182-197.46.114.pool.telefonica.de) |
2023-02-10 23:14:41 +0100 | hpc | (~juzz@ip98-169-35-163.dc.dc.cox.net) (Ping timeout: 252 seconds) |
2023-02-10 23:14:42 +0100 | rburkholder | (~blurb@96.45.2.121) |
2023-02-10 23:17:35 +0100 | mncheck | (~mncheck@193.224.205.254) (Ping timeout: 246 seconds) |
2023-02-10 23:20:18 +0100 | beteigeuze | (~Thunderbi@bl14-81-220.dsl.telepac.pt) (Remote host closed the connection) |
2023-02-10 23:22:12 +0100 | beteigeuze | (~Thunderbi@bl14-81-220.dsl.telepac.pt) |
2023-02-10 23:25:32 +0100 | gurkenglas | (~gurkengla@dynamic-046-114-182-197.46.114.pool.telefonica.de) (Remote host closed the connection) |
2023-02-10 23:25:54 +0100 | gurkenglas | (~gurkengla@dynamic-046-114-182-197.46.114.pool.telefonica.de) |
2023-02-10 23:29:35 +0100 | forell_ | (~forell@host-178-216-90-220.sta.tvknaszapraca.pl) (Quit: ZNC - https://znc.in) |
2023-02-10 23:29:53 +0100 | forell | (~forell@user/forell) |
2023-02-10 23:32:33 +0100 | merijn | (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl) |
2023-02-10 23:35:50 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:54db:de44:4607:1cea) |
2023-02-10 23:37:08 +0100 | freeside | (~mengwong@103.252.202.170) |
2023-02-10 23:37:30 +0100 | merijn | (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl) (Ping timeout: 260 seconds) |
2023-02-10 23:37:36 +0100 | son0p | (~ff@181.136.122.143) (Remote host closed the connection) |
2023-02-10 23:38:12 +0100 | eruditass | (uid248673@id-248673.uxbridge.irccloud.com) (Quit: Connection closed for inactivity) |
2023-02-10 23:38:49 +0100 | Tuplanolla | (~Tuplanoll@91-159-68-152.elisa-laajakaista.fi) (Quit: Leaving.) |
2023-02-10 23:39:09 +0100 | gurkenglas | (~gurkengla@dynamic-046-114-182-197.46.114.pool.telefonica.de) (Ping timeout: 268 seconds) |
2023-02-10 23:41:47 +0100 | freeside | (~mengwong@103.252.202.170) (Ping timeout: 248 seconds) |
2023-02-10 23:45:24 +0100 | beteigeuze | (~Thunderbi@bl14-81-220.dsl.telepac.pt) (Quit: beteigeuze) |
2023-02-10 23:47:13 +0100 | beteigeuze | (~Thunderbi@bl14-81-220.dsl.telepac.pt) |
2023-02-10 23:49:15 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:54db:de44:4607:1cea) (Remote host closed the connection) |
2023-02-10 23:54:37 +0100 | <DigitalKiwi> | lmao |
2023-02-10 23:54:45 +0100 | freeside | (~mengwong@103.252.202.170) |
2023-02-10 23:56:10 +0100 | <EvanR> | stefan-_, relevant to the question of optimizing this is the size of the array and the probability distribution on the indices |
2023-02-10 23:56:21 +0100 | <EvanR> | weighted toward 0 or uniform |
2023-02-10 23:56:58 +0100 | <EvanR> | (in case there's something better than a mutable array) |
2023-02-10 23:57:27 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:54db:de44:4607:1cea) |
2023-02-10 23:57:59 +0100 | coot | (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot) |
2023-02-10 23:59:02 +0100 | freeside | (~mengwong@103.252.202.170) (Ping timeout: 252 seconds) |