2023-03-16 00:00:29 +0100 | _ht | (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Quit: _ht) |
2023-03-16 00:02:33 +0100 | Square | (~Square4@user/square) (Remote host closed the connection) |
2023-03-16 00:02:48 +0100 | Square2 | (~Square4@user/square) |
2023-03-16 00:03:38 +0100 | Tuplanolla | (~Tuplanoll@91-159-68-152.elisa-laajakaista.fi) (Quit: Leaving.) |
2023-03-16 00:08:13 +0100 | segfaultfizzbuzz | (~segfaultf@108.211.201.53) (Ping timeout: 246 seconds) |
2023-03-16 00:16:39 +0100 | motherfsck | (~motherfsc@user/motherfsck) (Ping timeout: 260 seconds) |
2023-03-16 00:23:22 +0100 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) |
2023-03-16 00:25:33 +0100 | gurkenglas | (~gurkengla@dynamic-046-114-182-147.46.114.pool.telefonica.de) (Ping timeout: 250 seconds) |
2023-03-16 00:39:06 +0100 | segfaultfizzbuzz | (~segfaultf@108.211.201.53) |
2023-03-16 00:44:13 +0100 | bhall | (~brunohall@195.147.207.136) (Ping timeout: 276 seconds) |
2023-03-16 00:44:44 +0100 | bhall | (~brunohall@195.147.207.136) |
2023-03-16 00:44:55 +0100 | segfaultfizzbuzz | (~segfaultf@108.211.201.53) (Ping timeout: 265 seconds) |
2023-03-16 00:52:33 +0100 | opticblast | (~Thunderbi@172.58.84.141) |
2023-03-16 00:54:26 +0100 | caryhartline | (~caryhartl@cpe-76-184-32-233.tx.res.rr.com) (Remote host closed the connection) |
2023-03-16 00:56:47 +0100 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 246 seconds) |
2023-03-16 00:57:36 +0100 | opticblast | (~Thunderbi@172.58.84.141) (Quit: opticblast) |
2023-03-16 00:58:22 +0100 | segfaultfizzbuzz | (~segfaultf@108.211.201.53) |
2023-03-16 01:02:35 +0100 | freeside | (~mengwong@103.252.202.85) |
2023-03-16 01:07:15 +0100 | freeside | (~mengwong@103.252.202.85) (Ping timeout: 255 seconds) |
2023-03-16 01:07:37 +0100 | ryanbooker | (uid4340@id-4340.hampstead.irccloud.com) |
2023-03-16 01:10:52 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) |
2023-03-16 01:14:49 +0100 | segfaultfizzbuzz | (~segfaultf@108.211.201.53) (Ping timeout: 256 seconds) |
2023-03-16 01:16:25 +0100 | Midjak | (~Midjak@82.66.147.146) (Quit: Leaving) |
2023-03-16 01:16:25 +0100 | wroathe | (~wroathe@207-153-38-140.fttp.usinternet.com) |
2023-03-16 01:16:25 +0100 | wroathe | (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host) |
2023-03-16 01:16:25 +0100 | wroathe | (~wroathe@user/wroathe) |
2023-03-16 01:17:32 +0100 | Square2 | (~Square4@user/square) (Ping timeout: 268 seconds) |
2023-03-16 01:18:46 +0100 | irrgit | (~irrgit@146.70.27.242) (Ping timeout: 268 seconds) |
2023-03-16 01:24:55 +0100 | mmhat | (~mmh@p200300f1c715f77cee086bfffe095315.dip0.t-ipconnect.de) (Ping timeout: 250 seconds) |
2023-03-16 01:25:18 +0100 | mmhat | (~mmh@p200300f1c715f72bee086bfffe095315.dip0.t-ipconnect.de) |
2023-03-16 01:25:33 +0100 | thegeekinside | (~thegeekin@189.217.80.156) (Read error: Connection reset by peer) |
2023-03-16 01:26:36 +0100 | thegeekinside | (~thegeekin@189.217.80.156) |
2023-03-16 01:34:51 +0100 | masterbuilder | (~masterbui@user/masterbuilder) (Ping timeout: 248 seconds) |
2023-03-16 01:36:53 +0100 | masterbuilder | (~masterbui@user/masterbuilder) |
2023-03-16 01:44:16 +0100 | segfaultfizzbuzz | (~segfaultf@108.211.201.53) |
2023-03-16 01:48:59 +0100 | segfaultfizzbuzz | (~segfaultf@108.211.201.53) (Ping timeout: 268 seconds) |
2023-03-16 01:50:50 +0100 | vglfr | (~vglfr@37.73.89.236) (Ping timeout: 268 seconds) |
2023-03-16 01:54:29 +0100 | mauke_ | (~mauke@user/mauke) |
2023-03-16 01:55:51 +0100 | irrgit_ | (~irrgit@89.47.234.74) |
2023-03-16 01:56:22 +0100 | mauke | (~mauke@user/mauke) (Ping timeout: 276 seconds) |
2023-03-16 01:56:22 +0100 | mauke_ | mauke |
2023-03-16 01:56:50 +0100 | irrgit__ | (~irrgit@176.113.74.130) |
2023-03-16 02:00:27 +0100 | irrgit_ | (~irrgit@89.47.234.74) (Ping timeout: 250 seconds) |
2023-03-16 02:03:05 +0100 | <jean-paul[m]> | What are GHC.Num.Integer.IS, IP, IN? https://gist.github.com/exarkun/db734e5bb8bf6a4ddbf12549aa61f389 |
2023-03-16 02:08:58 +0100 | machinedgod | (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 246 seconds) |
2023-03-16 02:09:32 +0100 | <c_wraith> | that message makes no sense given that definition. |
2023-03-16 02:10:17 +0100 | caryhartline | (~caryhartl@cpe-76-184-32-233.tx.res.rr.com) |
2023-03-16 02:10:19 +0100 | albet70 | (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection) |
2023-03-16 02:10:43 +0100 | <c_wraith> | the definition isn't matching constructors - it uses a wildcard match. So it's impossible for there to be constructors it's not matching |
2023-03-16 02:11:44 +0100 | <jean-paul[m]> | glad it's not just me, I guess |
2023-03-16 02:12:37 +0100 | <jean-paul[m]> | maybe I shouldn't use ghc 9.0.2 |
2023-03-16 02:13:04 +0100 | <c_wraith> | as far as what those constructors are - they represent different cases of arbitrary-sized integers. But that's very internal stuff that you shouldn't need to know unless you're intentionally messing with the internals |
2023-03-16 02:14:13 +0100 | <jean-paul[m]> | hrm 9.4.0 says the same |
2023-03-16 02:14:44 +0100 | <jean-paul[m]> | the whole source file is "module CollatzConjecture (collatz) where" plus what's in the pastebin |
2023-03-16 02:15:01 +0100 | <c_wraith> | and what are you doing with the file? |
2023-03-16 02:15:57 +0100 | <jean-paul[m]> | stack build w/ this package.yaml - https://gist.github.com/exarkun/db734e5bb8bf6a4ddbf12549aa61f389 (gist updated to add file) |
2023-03-16 02:16:23 +0100 | <int-e> | jean-paul[m]: the constructors are an implementation detail you shouldn't have to worry about. I'd replace `odd n` by `otherwise`. |
2023-03-16 02:16:26 +0100 | albet70 | (~xxx@2400:8902::f03c:92ff:fe60:98d8) |
2023-03-16 02:16:27 +0100 | ddellacosta | (~ddellacos@146.70.171.100) |
2023-03-16 02:16:56 +0100 | <int-e> | (The constructurs are, respectively, for small integers (fitting into a single Int), and positive and negative big integers. |
2023-03-16 02:16:59 +0100 | <int-e> | ) |
2023-03-16 02:17:40 +0100 | <jean-paul[m]> | int-e: is the `otherwise` suggestion related to the warning? or just a general tip? |
2023-03-16 02:17:44 +0100 | <int-e> | The compiler doesn't understand that one of the final two guards will always match |
2023-03-16 02:18:02 +0100 | <c_wraith> | it will help with other warnings. not the one you're getting. |
2023-03-16 02:18:03 +0100 | <int-e> | it relates to the warning; with that change, the pattern will be seen as complete |
2023-03-16 02:18:28 +0100 | <jean-paul[m]> | so it sees through the pattern match into the guard cases and decides the guard cases are incomplete |
2023-03-16 02:18:29 +0100 | <jean-paul[m]> | ? |
2023-03-16 02:18:44 +0100 | <c_wraith> | Oh. That case. That seems silly, but yeah, I see. |
2023-03-16 02:18:58 +0100 | <jean-paul[m]> | (but if it is so smart why can't it say "guard cases incomplete" instead of "pattern matches non-exhaustive") |
2023-03-16 02:19:15 +0100 | <c_wraith> | It's not able to determine the pattern matches are complete, so it lists all the *constructors* that potentially won't be matched. |
2023-03-16 02:19:19 +0100 | <int-e> | No, the reason here is that it's not smart. |
2023-03-16 02:19:38 +0100 | <int-e> | So it assumes that there are cases where all the guards fail, and then you still have to match the argument. |
2023-03-16 02:19:50 +0100 | <int-e> | And it just lists all the constructors that the type happens to have. |
2023-03-16 02:20:08 +0100 | <int-e> | ...as c_wraith just said as well. |
2023-03-16 02:21:06 +0100 | <c_wraith> | I totally underestimated how weird that warning could get in that case |
2023-03-16 02:21:41 +0100 | <jean-paul[m]> | oh. hmm. so in general, if a case of a pattern match uses a guard that doesn't match a later pattern gets a chance at it? |
2023-03-16 02:21:42 +0100 | <jean-paul[m]> | I don't think I appreciated that fact. |
2023-03-16 02:21:51 +0100 | <c_wraith> | yes, that's true. |
2023-03-16 02:22:07 +0100 | <c_wraith> | patterns and guards are checked top to bottom, with fall-through |
2023-03-16 02:22:30 +0100 | <int-e> | > let f n | odd n = "odd"; f 0 = "zero"; f n = "anything else" in map f [-2..2] |
2023-03-16 02:22:30 +0100 | <jean-paul[m]> | great, learned something. thank you :) |
2023-03-16 02:22:32 +0100 | <lambdabot> | ["anything else","odd","zero","odd","anything else"] |
2023-03-16 02:30:38 +0100 | caryhartline | (~caryhartl@cpe-76-184-32-233.tx.res.rr.com) (Quit: caryhartline) |
2023-03-16 02:33:28 +0100 | segfaultfizzbuzz | (~segfaultf@108.211.201.53) |
2023-03-16 02:33:47 +0100 | razetime | (~Thunderbi@117.193.7.63) |
2023-03-16 02:37:43 +0100 | segfaultfizzbuzz | (~segfaultf@108.211.201.53) (Ping timeout: 250 seconds) |
2023-03-16 02:51:39 +0100 | mei | (~mei@user/mei) (Ping timeout: 255 seconds) |
2023-03-16 02:52:51 +0100 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) |
2023-03-16 02:55:43 +0100 | mei | (~mei@user/mei) |
2023-03-16 03:00:01 +0100 | mmhat | (~mmh@p200300f1c715f72bee086bfffe095315.dip0.t-ipconnect.de) (Quit: WeeChat 3.8) |
2023-03-16 03:00:41 +0100 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 246 seconds) |
2023-03-16 03:02:22 +0100 | xff0x | (~xff0x@ai098135.d.east.v6connect.net) (Ping timeout: 268 seconds) |
2023-03-16 03:03:19 +0100 | freeside | (~mengwong@103.252.202.85) |
2023-03-16 03:05:55 +0100 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) |
2023-03-16 03:08:35 +0100 | Fischmiep | (~Fischmiep@user/Fischmiep) (Ping timeout: 264 seconds) |
2023-03-16 03:09:10 +0100 | freeside | (~mengwong@103.252.202.85) (Ping timeout: 276 seconds) |
2023-03-16 03:11:48 +0100 | Fischmiep | (~Fischmiep@user/Fischmiep) |
2023-03-16 03:14:06 +0100 | adanwan_ | (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection) |
2023-03-16 03:14:06 +0100 | ec | (~ec@gateway/tor-sasl/ec) (Remote host closed the connection) |
2023-03-16 03:14:07 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection) |
2023-03-16 03:14:22 +0100 | adanwan | (~adanwan@gateway/tor-sasl/adanwan) |
2023-03-16 03:14:33 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) |
2023-03-16 03:14:38 +0100 | ec | (~ec@gateway/tor-sasl/ec) |
2023-03-16 03:16:45 +0100 | segfaultfizzbuzz | (~segfaultf@108.211.201.53) |
2023-03-16 03:19:07 +0100 | slack1256 | (~slack1256@186.11.43.166) |
2023-03-16 03:21:31 +0100 | segfaultfizzbuzz | (~segfaultf@108.211.201.53) (Ping timeout: 276 seconds) |
2023-03-16 03:21:58 +0100 | ddellacosta | (~ddellacos@146.70.171.100) (Quit: WeeChat 3.8) |
2023-03-16 03:25:39 +0100 | ddellacosta | (~ddellacos@146.70.165.203) |
2023-03-16 03:28:01 +0100 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 276 seconds) |
2023-03-16 03:29:17 +0100 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 250 seconds) |
2023-03-16 03:29:23 +0100 | Lord_of_Life_ | (~Lord@user/lord-of-life/x-2819915) |
2023-03-16 03:30:39 +0100 | Lord_of_Life_ | Lord_of_Life |
2023-03-16 03:32:50 +0100 | freeside | (~mengwong@103.252.202.85) |
2023-03-16 03:35:17 +0100 | chexum | (~quassel@gateway/tor-sasl/chexum) (Ping timeout: 255 seconds) |
2023-03-16 03:38:49 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection) |
2023-03-16 03:39:10 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) |
2023-03-16 03:41:13 +0100 | freeside | (~mengwong@103.252.202.85) (Ping timeout: 268 seconds) |
2023-03-16 03:45:09 +0100 | xff0x | (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) |
2023-03-16 03:46:32 +0100 | AlexZenon | (~alzenon@178.34.160.55) (Ping timeout: 246 seconds) |
2023-03-16 03:47:31 +0100 | Alex_test | (~al_test@178.34.160.55) (Ping timeout: 276 seconds) |
2023-03-16 03:47:38 +0100 | freeside | (~mengwong@103.252.202.85) |
2023-03-16 03:51:31 +0100 | Alex_test | (~al_test@178.34.160.55) |
2023-03-16 03:51:54 +0100 | gehmehgeh | (~user@user/gehmehgeh) |
2023-03-16 03:52:02 +0100 | AlexZenon | (~alzenon@178.34.160.55) |
2023-03-16 03:52:24 +0100 | freeside | (~mengwong@103.252.202.85) (Ping timeout: 255 seconds) |
2023-03-16 03:55:32 +0100 | gmg | (~user@user/gehmehgeh) (Ping timeout: 255 seconds) |
2023-03-16 03:56:54 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 255 seconds) |
2023-03-16 03:57:25 +0100 | ryanbooker | (uid4340@id-4340.hampstead.irccloud.com) (Quit: Connection closed for inactivity) |
2023-03-16 03:58:39 +0100 | chexum | (~quassel@gateway/tor-sasl/chexum) |
2023-03-16 04:02:53 +0100 | jero98772 | (~jero98772@2800:484:1d80:d8ce:efcc:cbb3:7f2a:6dff) (Remote host closed the connection) |
2023-03-16 04:04:16 +0100 | <EvanR> | imagine a bug where even n is False and odd n is also False xD |
2023-03-16 04:04:38 +0100 | <EvanR> | it would take days to track down |
2023-03-16 04:06:24 +0100 | segfaultfizzbuzz | (~segfaultf@108.211.201.53) |
2023-03-16 04:08:46 +0100 | freeside | (~mengwong@103.252.202.85) |
2023-03-16 04:10:49 +0100 | segfaultfizzbuzz | (~segfaultf@108.211.201.53) (Ping timeout: 268 seconds) |
2023-03-16 04:12:37 +0100 | gastus_ | (~gastus@5.83.191.17) |
2023-03-16 04:14:34 +0100 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection) |
2023-03-16 04:16:22 +0100 | gastus | (~gastus@5.83.191.9) (Ping timeout: 268 seconds) |
2023-03-16 04:16:46 +0100 | talismanick | (~talismani@2601:200:c000:f7a0::5321) |
2023-03-16 04:18:13 +0100 | freeside | (~mengwong@103.252.202.85) (Ping timeout: 268 seconds) |
2023-03-16 04:21:19 +0100 | td_ | (~td@i53870901.versanet.de) (Ping timeout: 276 seconds) |
2023-03-16 04:22:24 +0100 | td_ | (~td@i53870903.versanet.de) |
2023-03-16 04:24:44 +0100 | raym | (~ray@user/raym) (Ping timeout: 246 seconds) |
2023-03-16 04:25:20 +0100 | raym | (~ray@user/raym) |
2023-03-16 04:29:22 +0100 | razetime | (~Thunderbi@117.193.7.63) (Quit: See You Space Cowboy) |
2023-03-16 04:29:52 +0100 | dibblego | (~dibblego@haskell/developer/dibblego) (Ping timeout: 252 seconds) |
2023-03-16 04:34:51 +0100 | dibblego | (~dibblego@122-199-1-30.ip4.superloop.au) |
2023-03-16 04:34:51 +0100 | dibblego | (~dibblego@122-199-1-30.ip4.superloop.au) (Changing host) |
2023-03-16 04:34:51 +0100 | dibblego | (~dibblego@haskell/developer/dibblego) |
2023-03-16 04:39:56 +0100 | segfaultfizzbuzz | (~segfaultf@108.211.201.53) |
2023-03-16 04:47:45 +0100 | segfaultfizzbuzz | (~segfaultf@108.211.201.53) (Ping timeout: 255 seconds) |
2023-03-16 04:51:58 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija))) |
2023-03-16 04:51:58 +0100 | finn_elija | (~finn_elij@user/finn-elija/x-0085643) |
2023-03-16 04:51:58 +0100 | finn_elija | FinnElija |
2023-03-16 04:52:19 +0100 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) |
2023-03-16 04:58:40 +0100 | bhall | (~brunohall@195.147.207.136) (Ping timeout: 265 seconds) |
2023-03-16 05:17:15 +0100 | talismanick | (~talismani@2601:200:c000:f7a0::5321) (Ping timeout: 248 seconds) |
2023-03-16 05:21:45 +0100 | mbuf | (~Shakthi@49.207.178.186) |
2023-03-16 05:23:41 +0100 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) |
2023-03-16 05:28:15 +0100 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 255 seconds) |
2023-03-16 05:56:04 +0100 | trev | (~trev@user/trev) |
2023-03-16 05:56:33 +0100 | pyook | (~pyook@user/puke) |
2023-03-16 06:04:16 +0100 | bitmapper | (uid464869@id-464869.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
2023-03-16 06:09:29 +0100 | talismanick | (~talismani@2601:200:c000:f7a0::5321) |
2023-03-16 06:17:25 +0100 | slack1256 | (~slack1256@186.11.43.166) (Ping timeout: 256 seconds) |
2023-03-16 06:34:25 +0100 | freeside | (~mengwong@103.252.202.85) |
2023-03-16 06:38:47 +0100 | machinedgod | (~machinedg@d198-53-218-113.abhsia.telus.net) |
2023-03-16 06:38:57 +0100 | freeside | (~mengwong@103.252.202.85) (Ping timeout: 256 seconds) |
2023-03-16 06:46:50 +0100 | jonathanx | (~jonathan@h-176-10-144-60.NA.cust.bahnhof.se) (Remote host closed the connection) |
2023-03-16 06:51:38 +0100 | harveypwca | (~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67) |
2023-03-16 06:55:31 +0100 | bgs | (~bgs@212-85-160-171.dynamic.telemach.net) |
2023-03-16 06:57:19 +0100 | freeside | (~mengwong@103.252.202.85) |
2023-03-16 06:58:56 +0100 | jinsun | (~jinsun@user/jinsun) |
2023-03-16 07:00:48 +0100 | shriekingnoise_ | (~shrieking@186.137.175.87) |
2023-03-16 07:00:57 +0100 | YoungFrog | (~youngfrog@2a02:a03f:ca07:f900:9c2d:58ba:f0b6:128f) (Quit: ZNC 1.7.x-git-3-96481995 - https://znc.in) |
2023-03-16 07:01:17 +0100 | YoungFrog | (~youngfrog@39.129-180-91.adsl-dyn.isp.belgacom.be) |
2023-03-16 07:01:43 +0100 | shriekingnoise | (~shrieking@186.137.175.87) (Ping timeout: 260 seconds) |
2023-03-16 07:02:15 +0100 | freeside | (~mengwong@103.252.202.85) (Ping timeout: 268 seconds) |
2023-03-16 07:03:14 +0100 | freeside | (~mengwong@103.252.202.85) |
2023-03-16 07:08:11 +0100 | freeside | (~mengwong@103.252.202.85) (Ping timeout: 248 seconds) |
2023-03-16 07:09:30 +0100 | freeside | (~mengwong@103.252.202.85) |
2023-03-16 07:14:03 +0100 | freeside | (~mengwong@103.252.202.85) (Ping timeout: 248 seconds) |
2023-03-16 07:17:35 +0100 | takuan | (~takuan@178-116-218-225.access.telenet.be) |
2023-03-16 07:24:16 +0100 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) |
2023-03-16 07:28:49 +0100 | bhall | (~brunohall@195.147.207.136) |
2023-03-16 07:33:36 +0100 | razetime | (~Thunderbi@117.193.7.63) |
2023-03-16 07:38:32 +0100 | freeside | (~mengwong@122.11.248.245) |
2023-03-16 07:39:38 +0100 | michalz | (~michalz@185.246.207.221) |
2023-03-16 07:43:53 +0100 | acidjnk | (~acidjnk@p200300d6e715c492d58ba900f8be2eb5.dip0.t-ipconnect.de) |
2023-03-16 07:48:02 +0100 | thegeekinside | (~thegeekin@189.217.80.156) (Read error: Connection reset by peer) |
2023-03-16 07:57:45 +0100 | shriekingnoise_ | (~shrieking@186.137.175.87) (Ping timeout: 268 seconds) |
2023-03-16 07:58:32 +0100 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 246 seconds) |
2023-03-16 07:59:15 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
2023-03-16 08:01:26 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:19aa:397c:29a:40e4) (Remote host closed the connection) |
2023-03-16 08:09:35 +0100 | Midjak | (~Midjak@82.66.147.146) |
2023-03-16 08:10:51 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2023-03-16 08:11:43 +0100 | coot | (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) |
2023-03-16 08:12:12 +0100 | acidjnk | (~acidjnk@p200300d6e715c492d58ba900f8be2eb5.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
2023-03-16 08:21:54 +0100 | travisb__ | (~travisb@172-13-49-137.lightspeed.milwwi.sbcglobal.net) |
2023-03-16 08:23:35 +0100 | travisb_ | (~travisb@172-13-49-137.lightspeed.milwwi.sbcglobal.net) (Ping timeout: 264 seconds) |
2023-03-16 08:23:41 +0100 | Sgeo | (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
2023-03-16 08:46:33 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
2023-03-16 08:52:32 +0100 | coot | (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot) |
2023-03-16 08:53:49 +0100 | coot | (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) |
2023-03-16 08:54:07 +0100 | tzh | (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz) |
2023-03-16 08:58:36 +0100 | _ht | (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) |
2023-03-16 09:01:53 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:7045:17e1:cef7:25cd) |
2023-03-16 09:05:11 +0100 | harveypwca | (~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67) (Quit: Leaving) |
2023-03-16 09:05:31 +0100 | werneta | (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 248 seconds) |
2023-03-16 09:06:03 +0100 | razetime | (~Thunderbi@117.193.7.63) (Ping timeout: 255 seconds) |
2023-03-16 09:06:25 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:7045:17e1:cef7:25cd) (Ping timeout: 250 seconds) |
2023-03-16 09:07:15 +0100 | werneta | (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) |
2023-03-16 09:07:21 +0100 | lortabac | (~lortabac@2a01:e0a:541:b8f0:f01a:e318:a715:dc16) |
2023-03-16 09:13:09 +0100 | acidjnk | (~acidjnk@p200300d6e715c492d58ba900f8be2eb5.dip0.t-ipconnect.de) |
2023-03-16 09:13:35 +0100 | thyriaen | (~thyriaen@2a01:aea0:dd4:5328:6245:cbff:fe9f:48b1) |
2023-03-16 09:25:53 +0100 | razetime | (~Thunderbi@117.254.34.235) |
2023-03-16 09:25:55 +0100 | lortabac | (~lortabac@2a01:e0a:541:b8f0:f01a:e318:a715:dc16) (Ping timeout: 260 seconds) |
2023-03-16 09:33:46 +0100 | MajorBiscuit | (~MajorBisc@2001:1c00:2408:a400:67e:5371:52a7:9b9a) |
2023-03-16 09:35:23 +0100 | chele | (~chele@user/chele) |
2023-03-16 09:38:04 +0100 | ccapndave | (~ccapndave@xcpe-62-167-164-99.cgn.res.adslplus.ch) |
2023-03-16 09:39:12 +0100 | razetime | (~Thunderbi@117.254.34.235) (Quit: See You Space Cowboy) |
2023-03-16 09:39:12 +0100 | EvanR | (~EvanR@user/evanr) (Remote host closed the connection) |
2023-03-16 09:39:32 +0100 | EvanR | (~EvanR@user/evanr) |
2023-03-16 09:42:58 +0100 | Major_Biscuit | (~MajorBisc@c-001-031-036.client.tudelft.eduvpn.nl) |
2023-03-16 09:46:27 +0100 | MajorBiscuit | (~MajorBisc@2001:1c00:2408:a400:67e:5371:52a7:9b9a) (Ping timeout: 260 seconds) |
2023-03-16 09:47:20 +0100 | ccapndave | (~ccapndave@xcpe-62-167-164-99.cgn.res.adslplus.ch) (Quit: Textual IRC Client: www.textualapp.com) |
2023-03-16 09:50:24 +0100 | pyook | (~pyook@user/puke) () |
2023-03-16 10:03:05 +0100 | ft | (~ft@p3e9bc443.dip0.t-ipconnect.de) (Quit: leaving) |
2023-03-16 10:06:55 +0100 | econo | (uid147250@user/econo) (Quit: Connection closed for inactivity) |
2023-03-16 10:11:01 +0100 | bhall | (~brunohall@195.147.207.136) (Ping timeout: 276 seconds) |
2023-03-16 10:13:54 +0100 | lortabac | (~lortabac@2a01:e0a:541:b8f0:3f4e:b1b7:8b56:e5ae) |
2023-03-16 10:15:25 +0100 | bhall | (~brunohall@195.147.207.136) |
2023-03-16 10:19:45 +0100 | merijn | (~merijn@185.143.104.11) |
2023-03-16 10:21:27 +0100 | CiaoSen | (~Jura@p200300c957365a002a3a4dfffe84dbd5.dip0.t-ipconnect.de) |
2023-03-16 10:22:47 +0100 | chexum | (~quassel@gateway/tor-sasl/chexum) (Quit: No Ping reply in 180 seconds.) |
2023-03-16 10:23:53 +0100 | chexum | (~quassel@gateway/tor-sasl/chexum) |
2023-03-16 10:26:19 +0100 | kuribas | (~user@ip-188-118-57-242.reverse.destiny.be) |
2023-03-16 10:27:03 +0100 | talismanick | (~talismani@2601:200:c000:f7a0::5321) (Ping timeout: 260 seconds) |
2023-03-16 10:32:16 +0100 | freeside_ | (~mengwong@202.161.55.11) |
2023-03-16 10:34:06 +0100 | merijn | (~merijn@185.143.104.11) (Ping timeout: 265 seconds) |
2023-03-16 10:34:43 +0100 | freeside | (~mengwong@122.11.248.245) (Ping timeout: 246 seconds) |
2023-03-16 10:34:59 +0100 | acidjnk | (~acidjnk@p200300d6e715c492d58ba900f8be2eb5.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
2023-03-16 10:38:39 +0100 | cheater | (~Username@user/cheater) (Ping timeout: 256 seconds) |
2023-03-16 10:39:11 +0100 | mmhat | (~mmh@p200300f1c715f72bee086bfffe095315.dip0.t-ipconnect.de) |
2023-03-16 10:44:05 +0100 | cheater | (~Username@user/cheater) |
2023-03-16 10:48:59 +0100 | coot | (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot) |
2023-03-16 10:54:22 +0100 | cheater_ | (~Username@user/cheater) |
2023-03-16 10:54:55 +0100 | bhall | (~brunohall@195.147.207.136) (Read error: Connection reset by peer) |
2023-03-16 10:55:18 +0100 | bhall | (brunohall@gateway/vpn/protonvpn/bhall) |
2023-03-16 10:56:26 +0100 | pavonia_ | (~user@user/siracusa) |
2023-03-16 10:56:29 +0100 | cheater | (~Username@user/cheater) (Ping timeout: 250 seconds) |
2023-03-16 10:56:35 +0100 | Fischmiep | (~Fischmiep@user/Fischmiep) (Quit: Ping timeout (120 seconds)) |
2023-03-16 10:56:37 +0100 | cheater_ | cheater |
2023-03-16 10:57:06 +0100 | Fischmiep | (~Fischmiep@user/Fischmiep) |
2023-03-16 10:59:24 +0100 | tv | (~tv@user/tv) (Ping timeout: 252 seconds) |
2023-03-16 10:59:31 +0100 | pavonia | (~user@user/siracusa) (Ping timeout: 250 seconds) |
2023-03-16 10:59:36 +0100 | pavonia_ | pavonia |
2023-03-16 11:03:59 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:7045:17e1:cef7:25cd) |
2023-03-16 11:04:08 +0100 | ubert1 | (~Thunderbi@2a02:8109:abc0:6434:7f78:da32:9c8a:9bc6) |
2023-03-16 11:07:33 +0100 | xff0x | (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 255 seconds) |
2023-03-16 11:08:11 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:7045:17e1:cef7:25cd) (Ping timeout: 248 seconds) |
2023-03-16 11:11:44 +0100 | tv | (~tv@user/tv) |
2023-03-16 11:18:10 +0100 | gurkenglas | (~gurkengla@dynamic-046-114-182-248.46.114.pool.telefonica.de) |
2023-03-16 11:23:08 +0100 | freeside | (~mengwong@122.11.248.245) |
2023-03-16 11:24:01 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2023-03-16 11:25:49 +0100 | freeside_ | (~mengwong@202.161.55.11) (Ping timeout: 265 seconds) |
2023-03-16 11:28:02 +0100 | freeside | (~mengwong@122.11.248.245) (Ping timeout: 268 seconds) |
2023-03-16 11:28:14 +0100 | freeside | (~mengwong@122.11.214.174) |
2023-03-16 11:33:19 +0100 | mncheck | (~mncheck@193.224.205.254) |
2023-03-16 11:33:54 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
2023-03-16 11:34:58 +0100 | freeside | (~mengwong@122.11.214.174) (Read error: Connection reset by peer) |
2023-03-16 11:38:11 +0100 | L29Ah | (~L29Ah@wikipedia/L29Ah) (Read error: Connection reset by peer) |
2023-03-16 11:53:35 +0100 | lortabac | (~lortabac@2a01:e0a:541:b8f0:3f4e:b1b7:8b56:e5ae) (Ping timeout: 264 seconds) |
2023-03-16 11:59:45 +0100 | zeenk | (~zeenk@2a02:2f04:a307:2300::7fe) |
2023-03-16 11:59:48 +0100 | lortabac | (~lortabac@2a01:e0a:541:b8f0:2a8c:2678:6ba3:2f77) |
2023-03-16 12:04:19 +0100 | merijn | (~merijn@185.143.104.11) |
2023-03-16 12:05:44 +0100 | dcoutts | (~duncan@host86-144-78-144.range86-144.btcentralplus.com) |
2023-03-16 12:08:29 +0100 | merijn | (~merijn@185.143.104.11) (Ping timeout: 246 seconds) |
2023-03-16 12:11:51 +0100 | cheater_ | (~Username@user/cheater) |
2023-03-16 12:12:14 +0100 | xff0x | (~xff0x@ai098135.d.east.v6connect.net) |
2023-03-16 12:14:25 +0100 | _xor | (~xor@74.215.46.17) |
2023-03-16 12:14:30 +0100 | acidjnk | (~acidjnk@p200300d6e715c492d58ba900f8be2eb5.dip0.t-ipconnect.de) |
2023-03-16 12:14:34 +0100 | cheater | (~Username@user/cheater) (Ping timeout: 252 seconds) |
2023-03-16 12:14:36 +0100 | cheater_ | cheater |
2023-03-16 12:20:11 +0100 | lortabac | (~lortabac@2a01:e0a:541:b8f0:2a8c:2678:6ba3:2f77) (Ping timeout: 248 seconds) |
2023-03-16 12:23:17 +0100 | freeside | (~mengwong@122.11.248.245) |
2023-03-16 12:27:55 +0100 | freeside | (~mengwong@122.11.248.245) (Ping timeout: 250 seconds) |
2023-03-16 12:42:27 +0100 | Square2 | (~Square4@user/square) |
2023-03-16 12:43:41 +0100 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "") |
2023-03-16 12:47:18 +0100 | lortabac | (~lortabac@2a01:e0a:541:b8f0:4df1:b4ff:90fe:9e78) |
2023-03-16 12:53:21 +0100 | Square2 | (~Square4@user/square) (Quit: Leaving) |
2023-03-16 12:53:51 +0100 | Square2 | (~Square4@user/square) |
2023-03-16 12:57:06 +0100 | freeside | (~mengwong@122.11.248.245) |
2023-03-16 12:59:44 +0100 | Square2 | Square |
2023-03-16 13:01:11 +0100 | pavonia | (~user@user/siracusa) (Quit: Bye!) |
2023-03-16 13:01:58 +0100 | freeside | (~mengwong@122.11.248.245) (Ping timeout: 276 seconds) |
2023-03-16 13:09:47 +0100 | coot | (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) |
2023-03-16 13:12:45 +0100 | merijn | (~merijn@185.143.104.11) |
2023-03-16 13:12:54 +0100 | wootehfoot | (~wootehfoo@user/wootehfoot) |
2023-03-16 13:16:02 +0100 | <mesaoptimizer2> | note to self, I still have to make an issue re HLS eglot :config bug |
2023-03-16 13:21:59 +0100 | cheater_ | (~Username@user/cheater) |
2023-03-16 13:23:17 +0100 | cheater__ | (~Username@user/cheater) |
2023-03-16 13:23:27 +0100 | cheater | (~Username@user/cheater) (Ping timeout: 260 seconds) |
2023-03-16 13:23:32 +0100 | cheater__ | cheater |
2023-03-16 13:24:41 +0100 | merijn | (~merijn@185.143.104.11) (Ping timeout: 250 seconds) |
2023-03-16 13:26:25 +0100 | cheater_ | (~Username@user/cheater) (Ping timeout: 250 seconds) |
2023-03-16 13:27:23 +0100 | merijn | (~merijn@185.143.104.11) |
2023-03-16 13:28:51 +0100 | bhall | (brunohall@gateway/vpn/protonvpn/bhall) (Ping timeout: 255 seconds) |
2023-03-16 13:29:32 +0100 | ggVGc | (~ggVGc@a.lowtech.earth) |
2023-03-16 13:32:24 +0100 | freeside | (~mengwong@122.11.248.245) |
2023-03-16 13:36:01 +0100 | CiaoSen | (~Jura@p200300c957365a002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 256 seconds) |
2023-03-16 13:36:48 +0100 | freeside | (~mengwong@122.11.248.245) (Ping timeout: 265 seconds) |
2023-03-16 13:41:53 +0100 | L29Ah | (~L29Ah@wikipedia/L29Ah) |
2023-03-16 13:42:21 +0100 | wootehfoot | (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer) |
2023-03-16 13:47:29 +0100 | jmdaemon | (~jmdaemon@user/jmdaemon) (Ping timeout: 246 seconds) |
2023-03-16 14:00:21 +0100 | hugo- | (znc@verdigris.lysator.liu.se) (Ping timeout: 268 seconds) |
2023-03-16 14:06:41 +0100 | freeside | (~mengwong@122.11.248.245) |
2023-03-16 14:11:27 +0100 | freeside | (~mengwong@122.11.248.245) (Ping timeout: 268 seconds) |
2023-03-16 14:15:09 +0100 | cheater | (~Username@user/cheater) (Ping timeout: 268 seconds) |
2023-03-16 14:15:24 +0100 | cheater | (~Username@user/cheater) |
2023-03-16 14:19:39 +0100 | cheater | (~Username@user/cheater) (Ping timeout: 256 seconds) |
2023-03-16 14:20:23 +0100 | slack1256 | (~slack1256@186.11.43.166) |
2023-03-16 14:22:29 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2023-03-16 14:23:42 +0100 | cheater | (~Username@user/cheater) |
2023-03-16 14:24:45 +0100 | hugo- | (znc@verdigris.lysator.liu.se) |
2023-03-16 14:29:51 +0100 | freeside | (~mengwong@122.11.248.245) |
2023-03-16 14:32:23 +0100 | merijn | (~merijn@185.143.104.11) (Ping timeout: 265 seconds) |
2023-03-16 14:33:47 +0100 | merijn | (~merijn@185.143.104.11) |
2023-03-16 14:34:55 +0100 | freeside | (~mengwong@122.11.248.245) (Ping timeout: 276 seconds) |
2023-03-16 14:39:12 +0100 | bhall | (brunohall@gateway/vpn/protonvpn/bhall) |
2023-03-16 14:41:07 +0100 | merijn | (~merijn@185.143.104.11) (Ping timeout: 246 seconds) |
2023-03-16 14:41:44 +0100 | acidjnk | (~acidjnk@p200300d6e715c492d58ba900f8be2eb5.dip0.t-ipconnect.de) (Ping timeout: 246 seconds) |
2023-03-16 14:45:39 +0100 | wootehfoot | (~wootehfoo@user/wootehfoot) |
2023-03-16 14:48:04 +0100 | acidjnk | (~acidjnk@p200300d6e715c492f5536687732e5bb6.dip0.t-ipconnect.de) |
2023-03-16 14:50:18 +0100 | wootehfoot | (~wootehfoo@user/wootehfoot) (Ping timeout: 255 seconds) |
2023-03-16 14:54:28 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
2023-03-16 14:54:45 +0100 | Guest31 | (~Guest31@rrcs-74-219-213-86.central.biz.rr.com) |
2023-03-16 15:02:02 +0100 | elkcl | (~elkcl@broadband-37-110-27-252.ip.moscow.rt.ru) (Ping timeout: 246 seconds) |
2023-03-16 15:03:09 +0100 | freeside | (~mengwong@122.11.248.245) |
2023-03-16 15:07:23 +0100 | freeside | (~mengwong@122.11.248.245) (Ping timeout: 250 seconds) |
2023-03-16 15:08:12 +0100 | bitmapper | (uid464869@id-464869.lymington.irccloud.com) |
2023-03-16 15:08:56 +0100 | thegeekinside | (~thegeekin@189.217.80.156) |
2023-03-16 15:09:13 +0100 | razetime | (~Thunderbi@117.254.34.235) |
2023-03-16 15:25:50 +0100 | segfaultfizzbuzz | (~segfaultf@108.211.201.53) |
2023-03-16 15:27:25 +0100 | dsrt^ | (~dsrt@c-24-30-76-89.hsd1.ga.comcast.net) (Remote host closed the connection) |
2023-03-16 15:27:35 +0100 | gurkenglas | (~gurkengla@dynamic-046-114-182-248.46.114.pool.telefonica.de) (Ping timeout: 246 seconds) |
2023-03-16 15:29:31 +0100 | thegeekinside | (~thegeekin@189.217.80.156) (Read error: Connection reset by peer) |
2023-03-16 15:29:54 +0100 | thegeekinside | (~thegeekin@189.217.80.156) |
2023-03-16 15:32:58 +0100 | thegeekinside | (~thegeekin@189.217.80.156) (Remote host closed the connection) |
2023-03-16 15:33:08 +0100 | thegeekinside | (~thegeekin@189.217.80.156) |
2023-03-16 15:37:06 +0100 | freeside | (~mengwong@122.11.248.245) |
2023-03-16 15:40:08 +0100 | CiaoSen | (~Jura@p200300c957365a002a3a4dfffe84dbd5.dip0.t-ipconnect.de) |
2023-03-16 15:41:35 +0100 | freeside | (~mengwong@122.11.248.245) (Ping timeout: 264 seconds) |
2023-03-16 15:42:37 +0100 | gaff | (~gaff@49.207.227.108) |
2023-03-16 15:43:28 +0100 | <gaff> | is there a way to get the complete list of OPTIONS_GHC pragmas from the commandline? |
2023-03-16 15:43:54 +0100 | <gaff> | i need it for configuring omnicompletion in vim |
2023-03-16 15:44:15 +0100 | thegeekinside | (~thegeekin@189.217.80.156) (Remote host closed the connection) |
2023-03-16 15:45:44 +0100 | Guest31 | (~Guest31@rrcs-74-219-213-86.central.biz.rr.com) (Quit: Client closed) |
2023-03-16 15:46:12 +0100 | elkcl | (~elkcl@broadband-37-110-27-252.ip.moscow.rt.ru) |
2023-03-16 15:47:05 +0100 | <gaff> | sorry, i meant complete list of OPTIONS_GHC pragmas |
2023-03-16 15:49:00 +0100 | <geekosaur> | `ghc --show-options` ? although it doesn't leave out mode options, but you can distinguish those because they all start with `--` |
2023-03-16 15:50:59 +0100 | <geekosaur> | it also doesn't distinguish dynamic ones but I think at this point they're all either mode options or dynamic ones |
2023-03-16 15:51:23 +0100 | Sgeo | (~Sgeo@user/sgeo) |
2023-03-16 15:52:24 +0100 | freeside | (~mengwong@122.11.248.245) |
2023-03-16 15:52:36 +0100 | <geekosaur> | single character options being an exception here, so that may be a problem |
2023-03-16 15:56:46 +0100 | freeside | (~mengwong@122.11.248.245) (Ping timeout: 252 seconds) |
2023-03-16 15:57:26 +0100 | <gaff> | geekosaur: i ran that command just before you told me. but i noticed things are missing there; for example, -fno-warn-orphans |
2023-03-16 15:59:37 +0100 | y04nn | (~username@185.213.154.207) |
2023-03-16 15:59:44 +0100 | <mauke> | "In GHC < 8 the syntax for -W<wflag> was -fwarn-<wflag> (e.g. -fwarn-incomplete-patterns). This spelling is deprecated, but still accepted for backwards compatibility. Likewise, -Wno-<wflag> used to be fno-warn-<wflag> (e.g. -fno-warn-incomplete-patterns)." |
2023-03-16 16:00:11 +0100 | <mauke> | https://downloads.haskell.org/ghc/latest/docs/users_guide/using-warnings.html |
2023-03-16 16:01:17 +0100 | <gaff> | i am runing running ghc 8.10.4 |
2023-03-16 16:01:55 +0100 | <geekosaur> | right, so that's a backward compatibility thing |
2023-03-16 16:02:06 +0100 | <geekosaur> | I don't know how that's handled |
2023-03-16 16:02:18 +0100 | mjacob | (~mjacob@adrastea.uberspace.de) (Read error: Connection reset by peer) |
2023-03-16 16:02:34 +0100 | <geekosaur> | but the modern spelling is -Wno-orphans |
2023-03-16 16:02:38 +0100 | <mauke> | gaff: so that applies to you |
2023-03-16 16:03:40 +0100 | <gaff> | ah i see. thanks. i used the old -fno-warn-orphans in code and it works ... so i suppose it is the backward compatability thing |
2023-03-16 16:05:45 +0100 | <gaff> | geekosaur: so show-options output cleansed of mode options (the stuff preceeded by --) should work, uh? |
2023-03-16 16:06:18 +0100 | <geekosaur> | and single character options aside from -W/-w, yes |
2023-03-16 16:06:55 +0100 | <mauke> | if you want to see the deprecated forms as well, ghc --show-options | sed '/^-W/ { p; s/^-Wno/-fno-warn/; t; s/^-W/-fwarn-/ }' |
2023-03-16 16:06:57 +0100 | <geekosaur> | hm, actually more complex than that because you'll still get stuff like -odir |
2023-03-16 16:07:15 +0100 | <gaff> | geekosaur: yeah |
2023-03-16 16:07:25 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:7045:17e1:cef7:25cd) |
2023-03-16 16:07:36 +0100 | <geekosaur> | this might be a question for #ghc, there should probably be a way to get this (--show-dynamic-options?) |
2023-03-16 16:07:47 +0100 | <mauke> | (I've been practicing my sed) |
2023-03-16 16:07:48 +0100 | <geekosaur> | completion is pretty pervasive these days |
2023-03-16 16:07:50 +0100 | mjacob | (~mjacob@adrastea.uberspace.de) |
2023-03-16 16:08:05 +0100 | <gaff> | so how do you get the stuff that is just for the OPTIONS_GHC pragmas that put as file header? |
2023-03-16 16:09:15 +0100 | <gaff> | mauke: thanks for the sed thing; looks like an easy pattern match substitution |
2023-03-16 16:10:37 +0100 | <mauke> | as a human: https://downloads.haskell.org/ghc/latest/docs/users_guide/flags.html#flag-reference |
2023-03-16 16:10:49 +0100 | <mauke> | "Type: dynamic" are the ones that can be used in files |
2023-03-16 16:10:53 +0100 | <gaff> | i am looking for this stuff as input for some code i am writing for vim omnicompletion |
2023-03-16 16:11:12 +0100 | <geekosaur> | so if you keep asking you'll get a different answer? |
2023-03-16 16:11:57 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:7045:17e1:cef7:25cd) (Ping timeout: 250 seconds) |
2023-03-16 16:12:25 +0100 | freeside | (~mengwong@122.11.248.245) |
2023-03-16 16:12:32 +0100 | <gaff> | mauke: hey, thanks. have to manually parse that stuff |
2023-03-16 16:13:09 +0100 | <gaff> | geekosaur: no, sorry for the double prodding ... sometimes i can not remember |
2023-03-16 16:17:10 +0100 | werneta | (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Remote host closed the connection) |
2023-03-16 16:19:12 +0100 | <geekosaur> | mrr, does ghcup not install the ghc users guide? (trying to work out an awk expression to pull out dynamic options from that table) |
2023-03-16 16:19:27 +0100 | <geekosaur> | I see libraries but not the guide |
2023-03-16 16:22:49 +0100 | <gaff> | geekosaur: ghcup has the users guide, at least in my case. ~/.ghcup/ghc/8.10.4/share/doc/ghc-8.10.4/html/users_guide/ |
2023-03-16 16:23:53 +0100 | <geekosaur> | wonder what that translates to in xdg mode |
2023-03-16 16:24:07 +0100 | <mauke> | no, that only contains a man page here |
2023-03-16 16:24:41 +0100 | <geekosaur> | crud, I have it… for 8.10 |
2023-03-16 16:24:49 +0100 | <geekosaur> | not 9.2.5 which I was looking at |
2023-03-16 16:24:50 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:7045:17e1:cef7:25cd) |
2023-03-16 16:25:04 +0100 | <mauke> | oh, I'm dumb |
2023-03-16 16:25:18 +0100 | <mauke> | I was looking in users_guide, not html/users_guide |
2023-03-16 16:27:28 +0100 | <mauke> | heh, class="row-even" ... class="row-odd" |
2023-03-16 16:28:50 +0100 | <mauke> | get with the times, guys! tr:nth-child(even) |
2023-03-16 16:29:14 +0100 | aztex | (~aztex@ext-1-370.eduroam.chalmers.se) |
2023-03-16 16:29:36 +0100 | freeside | (~mengwong@122.11.248.245) (Ping timeout: 246 seconds) |
2023-03-16 16:29:44 +0100 | <aztex> | I was under the impression that a data type needs to have a Monad instance for using the do notationg |
2023-03-16 16:29:45 +0100 | <int-e> | . o O ( But will it work in Internet Explorer? ;-) ) |
2023-03-16 16:30:09 +0100 | slack1256 | (~slack1256@186.11.43.166) (Ping timeout: 250 seconds) |
2023-03-16 16:30:14 +0100 | <aztex> | but something like this: |
2023-03-16 16:30:14 +0100 | <aztex> | data Foo |
2023-03-16 16:30:15 +0100 | <aztex> | foo :: Foo |
2023-03-16 16:30:15 +0100 | <aztex> | foo = do |
2023-03-16 16:30:16 +0100 | <aztex> | baz "baz" |
2023-03-16 16:30:19 +0100 | <aztex> | seems to compile fine |
2023-03-16 16:30:34 +0100 | <aztex> | what does the compiler interpret the `do` notation in this program |
2023-03-16 16:30:47 +0100 | <aztex> | Foo is clearly not defined as a Monad |
2023-03-16 16:31:56 +0100 | <int-e> | @undo do baz "baz" |
2023-03-16 16:31:56 +0100 | <lambdabot> | baz "baz" |
2023-03-16 16:33:06 +0100 | <mauke> | aztex: the desugaring of multiple lines/"statements" requires Monad |
2023-03-16 16:33:08 +0100 | <int-e> | `do` notation is pure syntactic sugar; it's tied to Monad only if you have more than one non-let statement. |
2023-03-16 16:33:28 +0100 | <mauke> | for a single expression you don't need any extra operations |
2023-03-16 16:33:31 +0100 | <mauke> | or let, yeah |
2023-03-16 16:33:39 +0100 | <int-e> | cf. https://www.haskell.org/onlinereport/haskell2010/haskellch3.html#x8-470003.14 |
2023-03-16 16:33:57 +0100 | shriekingnoise | (~shrieking@186.137.175.87) |
2023-03-16 16:34:11 +0100 | <aztex> | ah okay so if I did `baz "baz"` twice it would fail right? |
2023-03-16 16:34:17 +0100 | <int-e> | yes |
2023-03-16 16:34:27 +0100 | cheater_ | (~Username@user/cheater) |
2023-03-16 16:34:27 +0100 | <int-e> | because then it would desugar to a use of >> |
2023-03-16 16:34:41 +0100 | <int-e> | @undo baz; bar |
2023-03-16 16:34:41 +0100 | <aztex> | phew thats a relief |
2023-03-16 16:34:41 +0100 | <lambdabot> | <unknown>.hs:1:4:Parse error: ; |
2023-03-16 16:34:45 +0100 | <int-e> | @undo do baz; bar |
2023-03-16 16:34:46 +0100 | <lambdabot> | baz >> bar |
2023-03-16 16:35:19 +0100 | <aztex> | I think I had the same intuition as everyone is discussing here but I was shocked when the do notation with one statement worked |
2023-03-16 16:36:03 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Read error: Connection reset by peer) |
2023-03-16 16:36:20 +0100 | econo | (uid147250@user/econo) |
2023-03-16 16:36:25 +0100 | <int-e> | understandable, but now you know why :)( |
2023-03-16 16:36:38 +0100 | <aztex> | yes thanks :) |
2023-03-16 16:37:55 +0100 | cheater | (~Username@user/cheater) (Ping timeout: 256 seconds) |
2023-03-16 16:38:31 +0100 | <gaff> | geekosaur: well, thanks for your help |
2023-03-16 16:38:39 +0100 | <gaff> | mauke: thanks a bunch |
2023-03-16 16:39:04 +0100 | <geekosaur> | I still think you should ask for --show-dynamic-options in #ghc, since completion isn't going away |
2023-03-16 16:39:29 +0100 | <geekosaur> | or file an issue for it (https://gitlab.haskell.org/ghc/ghc/issues) |
2023-03-16 16:39:36 +0100 | merijn | (~merijn@185.143.104.11) |
2023-03-16 16:39:42 +0100 | <gaff> | sure. i didn't know about the #ghc channel. hearing it for the first time from you |
2023-03-16 16:39:43 +0100 | cheater_ | (~Username@user/cheater) (Ping timeout: 276 seconds) |
2023-03-16 16:41:30 +0100 | gaff | (~gaff@49.207.227.108) () |
2023-03-16 16:42:44 +0100 | ddellacosta | (~ddellacos@146.70.165.203) (Quit: WeeChat 3.8) |
2023-03-16 16:43:48 +0100 | ddellacosta | (~ddellacos@146.70.165.203) |
2023-03-16 16:44:29 +0100 | aztex | (~aztex@ext-1-370.eduroam.chalmers.se) (Quit: Client closed) |
2023-03-16 16:45:34 +0100 | razetime | (~Thunderbi@117.254.34.235) (Quit: See You Space Cowboy) |
2023-03-16 16:51:25 +0100 | <EvanR> | :t let baz = undefined in do { baz "baz" } |
2023-03-16 16:51:26 +0100 | <lambdabot> | t |
2023-03-16 16:51:59 +0100 | <EvanR> | cool we can use do notation anywhere as long as it's 1 "statement" xD |
2023-03-16 16:52:09 +0100 | <geekosaur> | > do do do do do 1 |
2023-03-16 16:52:11 +0100 | <lambdabot> | 1 |
2023-03-16 16:52:49 +0100 | <EvanR> | > let please = id in please do "something" |
2023-03-16 16:52:50 +0100 | <lambdabot> | error: |
2023-03-16 16:52:50 +0100 | <lambdabot> | Unexpected do block in function application: |
2023-03-16 16:52:50 +0100 | <lambdabot> | do "something" |
2023-03-16 16:53:23 +0100 | lortabac | (~lortabac@2a01:e0a:541:b8f0:4df1:b4ff:90fe:9e78) (Quit: WeeChat 2.8) |
2023-03-16 16:53:32 +0100 | <geekosaur> | need BlockArguments |
2023-03-16 16:53:53 +0100 | <EvanR> | :set -XBlockArguments |
2023-03-16 16:54:16 +0100 | <geekosaur> | @let {-# LANGUAGE BlockArguments #-} |
2023-03-16 16:54:18 +0100 | <lambdabot> | Defined. |
2023-03-16 16:54:31 +0100 | <geekosaur> | > let please = id in please do "something" |
2023-03-16 16:54:33 +0100 | <lambdabot> | error: |
2023-03-16 16:54:33 +0100 | <lambdabot> | Unexpected do block in function application: |
2023-03-16 16:54:33 +0100 | <lambdabot> | do "something" |
2023-03-16 16:54:40 +0100 | <geekosaur> | hm |
2023-03-16 16:55:01 +0100 | <int-e> | :t let monadic :: Monad m => m a -> m a; monadic = id in monadic $ do undefined |
2023-03-16 16:55:03 +0100 | <lambdabot> | Monad m => m a |
2023-03-16 16:55:42 +0100 | dgb83 | (~dgb@astra4961.startdedicated.net) (Quit: The Lounge - https://thelounge.github.io) |
2023-03-16 16:56:17 +0100 | JamesG | (~JamesG@2600:8800:8c84:5d00:9878:b9de:731b:d1c2) |
2023-03-16 16:56:38 +0100 | <EvanR> | intercal's please syntax which if not used often enough results in the program randomly ... not doing something |
2023-03-16 16:56:39 +0100 | <int-e> | geekosaur: lambdabot parses the expression using haskell-src-exts before passing it on to ghc. |
2023-03-16 16:56:55 +0100 | <geekosaur> | hm, right |
2023-03-16 16:57:10 +0100 | <geekosaur> | so that doesn't know BlockArguments yet |
2023-03-16 16:57:30 +0100 | <int-e> | EvanR: hmm, that seems to be a mix of the politeness check and the random compiler error |
2023-03-16 16:57:44 +0100 | freeside | (~mengwong@122.11.248.245) |
2023-03-16 16:58:26 +0100 | <int-e> | (you can be either insufficiently and overly polite btw; both checks are deterministic) |
2023-03-16 16:58:38 +0100 | <EvanR> | a linter for intercal which mishaves even worse than the language |
2023-03-16 16:58:47 +0100 | <int-e> | (while the random compiler error non-deterministically introduces a run-time error into your code) |
2023-03-16 16:59:14 +0100 | <EvanR> | it's not random? ok |
2023-03-16 16:59:49 +0100 | <tdammers> | IIRC it's not random, but the correct percentage is undocumented and implementation-specific |
2023-03-16 17:00:00 +0100 | <dminuoso> | There was a simple way to take an arbitrary haskell expression and turn it into a Dec that TH would accept. Any pointers? |
2023-03-16 17:00:10 +0100 | steve[m] | (~stevetrou@2001:470:69fc:105::e0b) (Quit: You have been kicked for being idle) |
2023-03-16 17:00:11 +0100 | <dminuoso> | (or well, top level declaration rather than expression) |
2023-03-16 17:01:09 +0100 | <dminuoso> | Or do I need ghc-lib for that? |
2023-03-16 17:02:28 +0100 | freeside | (~mengwong@122.11.248.245) (Ping timeout: 276 seconds) |
2023-03-16 17:02:52 +0100 | <dminuoso> | % :set -XTemplateHaskell |
2023-03-16 17:02:52 +0100 | <yahb2> | <no output> |
2023-03-16 17:02:59 +0100 | <dminuoso> | % show [d| instance Show Foo |] |
2023-03-16 17:02:59 +0100 | <yahb2> | <interactive>:24:24: error: ; • Not in scope: type constructor or class ‘Foo’ ; • In the Template Haskell quotation [d| instance Show Foo |] |
2023-03-16 17:03:04 +0100 | <dminuoso> | % show [d| instance Show String |] |
2023-03-16 17:03:04 +0100 | <yahb2> | <interactive>:26:1: error: ; • Ambiguous type variable ‘m0’ arising from a use of ‘show’ ; prevents the constraint ‘(Show ; (m0 Language.Haskell.TH.Lib.I... |
2023-03-16 17:03:05 +0100 | <int-e> | dminuoso: just [| e |]... wait, Dec? There's [d| ... |] for DecsQ |
2023-03-16 17:03:21 +0100 | <dminuoso> | % :t [d| instance Show String |] |
2023-03-16 17:03:21 +0100 | <yahb2> | [d| instance Show String |] ; :: Language.Haskell.TH.Syntax.Quote m => ; m Language.Haskell.TH.Lib.Internal.Decs |
2023-03-16 17:03:32 +0100 | <dminuoso> | % show $([d| instance Show String |]) |
2023-03-16 17:03:32 +0100 | <yahb2> | <interactive>:30:8: error: ; • Couldn't match type ‘[Language.Haskell.TH.Syntax.Dec]’ ; with ‘Language.Haskell.TH.Syntax.Exp’ ; Expected: Language.Haskell.TH.Lib.Inte... |
2023-03-16 17:03:35 +0100 | <dminuoso> | Oh no mmm |
2023-03-16 17:04:00 +0100 | <dminuoso> | % runQ (liftIO . print $ [d| instance Show String |]) |
2023-03-16 17:04:01 +0100 | <yahb2> | <interactive>:32:1: error: Variable not in scope: runQ :: t0 -> t ; ; <interactive>:32:7: error: ; Variable not in scope: liftIO :: IO () -> t0 |
2023-03-16 17:04:55 +0100 | chomwitt | (~chomwitt@2a02:587:7a19:9200:1ac0:4dff:fedb:a3f1) |
2023-03-16 17:05:22 +0100 | <int-e> | % Language.Haskell.TH.runQ [d| instance Show String |] |
2023-03-16 17:05:22 +0100 | <yahb2> | [InstanceD Nothing [] (AppT (ConT GHC.Show.Show) (ConT GHC.Base.String)) []] |
2023-03-16 17:05:27 +0100 | <dminuoso> | Ah yes. |
2023-03-16 17:05:31 +0100 | <dminuoso> | Cheers. |
2023-03-16 17:05:40 +0100 | <dminuoso> | Hecate: ^- |
2023-03-16 17:05:51 +0100 | int-e | was testing in ghci (hint!) |
2023-03-16 17:05:58 +0100 | segfaultfizzbuzz | (~segfaultf@108.211.201.53) (Ping timeout: 268 seconds) |
2023-03-16 17:06:23 +0100 | cheater_ | (~Username@user/cheater) |
2023-03-16 17:06:23 +0100 | cheater_ | cheater |
2023-03-16 17:13:02 +0100 | coot | (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot) |
2023-03-16 17:14:21 +0100 | segfaultfizzbuzz | (~segfaultf@108.211.201.53) |
2023-03-16 17:14:27 +0100 | codaraxis | (~codaraxis@user/codaraxis) |
2023-03-16 17:16:24 +0100 | mixfix41 | (~sdenynine@user/mixfix41) |
2023-03-16 17:16:34 +0100 | Guest31 | (~Guest31@rrcs-74-219-213-86.central.biz.rr.com) |
2023-03-16 17:22:35 +0100 | mbuf | (~Shakthi@49.207.178.186) (Quit: Leaving) |
2023-03-16 17:24:34 +0100 | segfaultfizzbuzz | (~segfaultf@108.211.201.53) (Ping timeout: 246 seconds) |
2023-03-16 17:25:53 +0100 | mesaoptimizer2 | (34cef275bb@user/PapuaHardyNet) (Quit: Gateway shutdown) |
2023-03-16 17:26:02 +0100 | mesaoptimizer2 | (34cef275bb@198.108.77.94) |
2023-03-16 17:26:14 +0100 | mesaoptimizer2 | (34cef275bb@198.108.77.94) (Changing host) |
2023-03-16 17:26:14 +0100 | mesaoptimizer2 | (34cef275bb@user/PapuaHardyNet) |
2023-03-16 17:26:43 +0100 | Guest31 | (~Guest31@rrcs-74-219-213-86.central.biz.rr.com) (Ping timeout: 260 seconds) |
2023-03-16 17:29:50 +0100 | inversed | (~inversed@bcdcac82.skybroadband.com) (Read error: No route to host) |
2023-03-16 17:30:46 +0100 | freeside | (~mengwong@122.11.248.245) |
2023-03-16 17:34:31 +0100 | inversed | (~inversed@bcdcac82.skybroadband.com) |
2023-03-16 17:35:02 +0100 | freeside | (~mengwong@122.11.248.245) (Ping timeout: 246 seconds) |
2023-03-16 17:36:42 +0100 | Guest98 | (~Guest98@astra4961.startdedicated.net) |
2023-03-16 17:36:58 +0100 | Guest98 | (~Guest98@astra4961.startdedicated.net) (Client Quit) |
2023-03-16 17:40:17 +0100 | migas | (~migas@astra4961.startdedicated.net) |
2023-03-16 17:40:32 +0100 | elkcl | (~elkcl@broadband-37-110-27-252.ip.moscow.rt.ru) (Ping timeout: 252 seconds) |
2023-03-16 17:46:58 +0100 | Pickchea | (~private@user/pickchea) |
2023-03-16 17:50:00 +0100 | tzh | (~tzh@c-24-21-73-154.hsd1.or.comcast.net) |
2023-03-16 17:50:21 +0100 | cheater_ | (~Username@user/cheater) |
2023-03-16 17:52:15 +0100 | cheater | (~Username@user/cheater) (Ping timeout: 260 seconds) |
2023-03-16 17:52:25 +0100 | cheater_ | cheater |
2023-03-16 17:55:04 +0100 | kuribas | (~user@ip-188-118-57-242.reverse.destiny.be) (Ping timeout: 260 seconds) |
2023-03-16 17:55:59 +0100 | CiaoSen | (~Jura@p200300c957365a002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 264 seconds) |
2023-03-16 17:57:02 +0100 | harveypwca | (~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67) |
2023-03-16 17:58:02 +0100 | JamesG | (~JamesG@2600:8800:8c84:5d00:9878:b9de:731b:d1c2) (Quit: Client closed) |
2023-03-16 17:59:12 +0100 | freeside | (~mengwong@122.11.248.245) |
2023-03-16 18:05:40 +0100 | cheater_ | (~Username@user/cheater) |
2023-03-16 18:07:55 +0100 | <Profpatsch> | Is there a ghc-lib based quasiquote for haskell code? like the outdated https://hackage.haskell.org/package/haskell-src-exts-qq |
2023-03-16 18:08:45 +0100 | cheater__ | (~Username@user/cheater) |
2023-03-16 18:08:46 +0100 | cheater | (~Username@user/cheater) (Ping timeout: 276 seconds) |
2023-03-16 18:08:50 +0100 | cheater__ | cheater |
2023-03-16 18:09:23 +0100 | cassiopea | (~cassiopea@user/cassiopea) |
2023-03-16 18:09:49 +0100 | cheater_ | (~Username@user/cheater) (Ping timeout: 250 seconds) |
2023-03-16 18:11:18 +0100 | man_max | (~man_max@94-43-231-47.dsl.utg.ge) |
2023-03-16 18:11:57 +0100 | kuribas | (~user@ip-188-118-57-242.reverse.destiny.be) |
2023-03-16 18:12:02 +0100 | man_max | (~man_max@94-43-231-47.dsl.utg.ge) (Client Quit) |
2023-03-16 18:12:05 +0100 | <merijn> | Profpatsch: Isn't that just the standard TH quasiquoters? |
2023-03-16 18:12:42 +0100 | jmdaemon | (~jmdaemon@user/jmdaemon) |
2023-03-16 18:12:44 +0100 | kuribas | (~user@ip-188-118-57-242.reverse.destiny.be) (Client Quit) |
2023-03-16 18:13:03 +0100 | hrberg | (~quassel@171.79-160-161.customer.lyse.net) |
2023-03-16 18:13:29 +0100 | <Profpatsch> | merijn: you might have a point |
2023-03-16 18:13:31 +0100 | <Profpatsch> | huh |
2023-03-16 18:13:42 +0100 | <merijn> | i.e. [d|, [e| and friends |
2023-03-16 18:13:59 +0100 | <Profpatsch> | that, but I feel like I want to write code to generate haskell files |
2023-03-16 18:14:04 +0100 | <Profpatsch> | not immediately compile it |
2023-03-16 18:14:06 +0100 | <Profpatsch> | but check into git |
2023-03-16 18:14:26 +0100 | <merijn> | Profpatsch: -ddump-splices ;) |
2023-03-16 18:14:29 +0100 | <Profpatsch> | lol |
2023-03-16 18:14:50 +0100 | <geekosaur> | haskell-src-meta? |
2023-03-16 18:15:04 +0100 | <Hecate> | ooooooh |
2023-03-16 18:15:05 +0100 | <merijn> | You can even tell it to dump splices in a separate directory instead of dist-newstyle now (consult GHC user guide for details :p) |
2023-03-16 18:15:23 +0100 | <Hecate> | thank you int-e & dminuoso <3 |
2023-03-16 18:15:30 +0100 | <Profpatsch> | merijn: huh |
2023-03-16 18:15:34 +0100 | <Profpatsch> | maybe that’s actually a good idea |
2023-03-16 18:15:36 +0100 | <Profpatsch> | idk |
2023-03-16 18:15:50 +0100 | <Profpatsch> | feels like an idea worth trying |
2023-03-16 18:15:52 +0100 | <merijn> | Profpatsch: there's a dump-directory or something to aggregate all the splices in one place now |
2023-03-16 18:16:07 +0100 | <merijn> | I forget the exact flag, but it's in the user guide somewhere between the dump flags |
2023-03-16 18:16:15 +0100 | <merijn> | Gotta run and pretend to be social now ;) |
2023-03-16 18:16:48 +0100 | <Profpatsch> | geekosaur: idk what that does |
2023-03-16 18:16:50 +0100 | freeside | (~mengwong@122.11.248.245) (Ping timeout: 252 seconds) |
2023-03-16 18:17:06 +0100 | <Profpatsch> | but yeah, gotta run as well, train has arrived |
2023-03-16 18:17:10 +0100 | ubert1 | (~Thunderbi@2a02:8109:abc0:6434:7f78:da32:9c8a:9bc6) (Remote host closed the connection) |
2023-03-16 18:17:20 +0100 | L29Ah | (~L29Ah@wikipedia/L29Ah) () |
2023-03-16 18:17:24 +0100 | harveypwca | (~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67) (Quit: Leaving) |
2023-03-16 18:17:29 +0100 | <geekosaur> | primary intent is to use haskell-src-ext to parse Haskell and produce TH ASTs instead of HSE ASTs |
2023-03-16 18:18:12 +0100 | <geekosaur> | but you could presumably dump-splices that, or build your own quasiquoter using HSE |
2023-03-16 18:18:16 +0100 | feliix42_ | (~felix@gibbs.uberspace.de) (Read error: Connection reset by peer) |
2023-03-16 18:21:12 +0100 | merijn | (~merijn@185.143.104.11) (Ping timeout: 264 seconds) |
2023-03-16 18:21:25 +0100 | feliix42 | (~felix@gibbs.uberspace.de) |
2023-03-16 18:25:06 +0100 | inversed | (~inversed@bcdcac82.skybroadband.com) (Read error: Connection reset by peer) |
2023-03-16 18:25:33 +0100 | thyriaen | (~thyriaen@2a01:aea0:dd4:5328:6245:cbff:fe9f:48b1) (Quit: Leaving) |
2023-03-16 18:25:48 +0100 | inversed | (~inversed@bcdcac82.skybroadband.com) |
2023-03-16 18:26:08 +0100 | inversed | (~inversed@bcdcac82.skybroadband.com) (Read error: Connection reset by peer) |
2023-03-16 18:26:53 +0100 | inversed | (~inversed@bcdcac82.skybroadband.com) |
2023-03-16 18:28:07 +0100 | freeside | (~mengwong@122.11.248.245) |
2023-03-16 18:29:53 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds) |
2023-03-16 18:30:21 +0100 | y04nn | (~username@185.213.154.207) (Ping timeout: 255 seconds) |
2023-03-16 18:31:44 +0100 | noctux | (~noctux@user/noctux) (Read error: Connection reset by peer) |
2023-03-16 18:32:13 +0100 | elkcl | (~elkcl@broadband-37-110-27-252.ip.moscow.rt.ru) |
2023-03-16 18:32:23 +0100 | cheater | (~Username@user/cheater) (Ping timeout: 260 seconds) |
2023-03-16 18:32:52 +0100 | c_wraith | (~c_wraith@adjoint.us) (Ping timeout: 260 seconds) |
2023-03-16 18:33:02 +0100 | c_wraith | (~c_wraith@adjoint.us) |
2023-03-16 18:33:05 +0100 | notzmv | (~zmv@user/notzmv) |
2023-03-16 18:33:11 +0100 | freeside | (~mengwong@122.11.248.245) (Ping timeout: 264 seconds) |
2023-03-16 18:34:20 +0100 | noctux | (~noctux@user/noctux) |
2023-03-16 18:34:25 +0100 | Ashkan | (~Ashkan@ec2-54-78-14-109.eu-west-1.compute.amazonaws.com) |
2023-03-16 18:34:45 +0100 | <Ashkan> | Hello people:) |
2023-03-16 18:34:45 +0100 | <Ashkan> | Does this make sense https://paste.tomsmeding.com/0fxeAcDL ? |
2023-03-16 18:36:18 +0100 | <monochrom> | You can answer these kinds of questions ("I have thought up an abstraction. Does it make sense?") by providing both of the following: |
2023-03-16 18:36:55 +0100 | <Ashkan> | Idea is to give fine-grain control over how a game would interact with the input/output. A turn-based game can not progress unless some input is provided. The type class is meant to somewhat enforce that (by *not* providing a non-blocking input reading method). Real-time game is somewhat opposite : the game can progress on its own so a non-blocking |
2023-03-16 18:36:55 +0100 | <Ashkan> | read-input method is provided (`try`) |
2023-03-16 18:37:03 +0100 | <monochrom> | 1. Examples of useful programs written in terms of those methods only ("programming to the interface"). More examples are stronger evidence. |
2023-03-16 18:37:04 +0100 | cheater | (~Username@user/cheater) |
2023-03-16 18:37:28 +0100 | <monochrom> | 2. Examples of useful instances of those classes. More examples are stronger evidence. |
2023-03-16 18:38:29 +0100 | <monochrom> | Here is an example of someone achieving #1 brilliantly, but only because #2 is basically non-existent, thus showing that their abstraction is garbage. |
2023-03-16 18:38:37 +0100 | hugo- | (znc@verdigris.lysator.liu.se) (Ping timeout: 256 seconds) |
2023-03-16 18:39:00 +0100 | <EvanR> | most turn based games do have to do something apart from user input. Nethack is maybe the exception which can only manage to have the cursor blink while the user is thinking |
2023-03-16 18:39:03 +0100 | <monochrom> | There is a joke among mathematicians about an unlucky PhD student. |
2023-03-16 18:39:35 +0100 | segfaultfizzbuzz | (~segfaultf@108.211.201.53) |
2023-03-16 18:39:59 +0100 | <c_wraith> | Ashkan: based on your questions after the last few weeks, I have to suggest you forget about scala completely when you're writing Haskell, and that you try to see how far you can get without ever creating a new class. |
2023-03-16 18:40:19 +0100 | <Ashkan> | monochrom I have two example actually. (A) tic-tac-toe game. After coding I realised nowhere I used the non-blocking read-input so it game me the hint. (B) a rather contrived *counter* game which is not really a game per se but rather a process that increase a counter periodically and could be somehow controlled by input but progresses nonetheless |
2023-03-16 18:40:20 +0100 | <Ashkan> | even if left on its own. In this counter game I only use the non-blocking read-input function. So far I have two perfect fits:D |
2023-03-16 18:40:26 +0100 | <monochrom> | The PhD student thought up a new kind of abstraction --- the usual axioms of rings plus their own new axioms --- and can prove that every ring that satisifies those extra axioms have super-nice properties. So, like doing #1 with great success. |
2023-03-16 18:40:56 +0100 | <monochrom> | The supervisor asked "can you give an actual example of such kind of rings?" The student said no. |
2023-03-16 18:41:15 +0100 | <monochrom> | The supervisor went on to prove that the only ring that satisifies the extra axioms is {0}. |
2023-03-16 18:41:22 +0100 | <monochrom> | So, #2 utterly fails. |
2023-03-16 18:42:03 +0100 | <c_wraith> | is {0} even a ring? hmm. I suppose there's no requirement that the two identity elements be different |
2023-03-16 18:42:16 +0100 | <int-e> | Rolling with #1 though I imagine there should be a notion of time in a real-time game abstraction. |
2023-03-16 18:42:24 +0100 | <monochrom> | Yeah under some definitions {0} is allowed. |
2023-03-16 18:42:30 +0100 | <EvanR> | I miss the old days when haskell game questions instantly turned into suggestions and discussion of FRP. A system with really nice properties and no real examples xD |
2023-03-16 18:42:39 +0100 | <int-e> | Starting with #2 seems more healthy. |
2023-03-16 18:42:40 +0100 | <monochrom> | But it's a joke so I can easily say {0,1} instead. :) |
2023-03-16 18:43:22 +0100 | <monochrom> | Right. Exactly the disease of most OO people to start with #1 exclusively. |
2023-03-16 18:43:25 +0100 | <int-e> | monochrom: hey at least there was *one* example |
2023-03-16 18:43:56 +0100 | <Ashkan> | EvanR thank you for the example. This is a client-server game host (of sorts). In the world of my project (which is sometimes intentionally contrived to force certain ideas) a turn based game does not progress unless input is provided. The client side is at liberty to do its own thing while waiting for output from the game. |
2023-03-16 18:44:31 +0100 | <int-e> | (People complain about premature optimization but nobody complains about premature abstraction.) |
2023-03-16 18:44:46 +0100 | <c_wraith> | I actually see a lot of people trying to do things like unify mutable and persistent data structures under a single class somewhat often. that's a case where #2 is easy but #1 fails |
2023-03-16 18:44:47 +0100 | <monochrom> | Oh but I did :) |
2023-03-16 18:44:52 +0100 | <int-e> | monochrom: I know :) |
2023-03-16 18:44:53 +0100 | <monochrom> | @quote monochrom premature |
2023-03-16 18:44:53 +0100 | <lambdabot> | monochrom says: premature generality is the root of OOP |
2023-03-16 18:44:58 +0100 | <EvanR> | OO is full of examples. Unicorn horse, circle ellipse, you name it |
2023-03-16 18:45:05 +0100 | <int-e> | monochrom: Okay, I didn't know of that instance. |
2023-03-16 18:45:06 +0100 | <EvanR> | cat meow |
2023-03-16 18:45:45 +0100 | <int-e> | DesignPatternFactoryMethod |
2023-03-16 18:45:53 +0100 | <monochrom> | Anyway, both Piaget's theory for teaching-learning and programmers' advice of "make a prototype first" say that you should start with #2 not #1. |
2023-03-16 18:46:01 +0100 | Nosrep | (~Nosrep@user/nosrep) (Remote host closed the connection) |
2023-03-16 18:46:37 +0100 | <monochrom> | OO does not have to start with #1 but unfortunately most OO teachers teach that. Premature future-proofing, without even knowing the future. |
2023-03-16 18:47:41 +0100 | Pickchea | (~private@user/pickchea) (Ping timeout: 256 seconds) |
2023-03-16 18:47:41 +0100 | ghostbuster | (~admin@user/ghostbuster) (Ping timeout: 256 seconds) |
2023-03-16 18:48:01 +0100 | <monochrom> | The expression problem implies that there are at least two possible futures and future-proofing for one of them conflicts with future-proofing the other, so you will always be wrong (Murphy's law). |
2023-03-16 18:48:05 +0100 | Pickchea | (~private@user/pickchea) |
2023-03-16 18:48:34 +0100 | chele_ | (~chele@user/chele) |
2023-03-16 18:48:49 +0100 | segfaultfizzbuzz | (~segfaultf@108.211.201.53) (Ping timeout: 256 seconds) |
2023-03-16 18:49:13 +0100 | <Ashkan> | I have to read everything here twice, once read everything quickly and then again more carefully filter all your OOP-this OOP-that ,hmmm , opinions to actually get to the point of what your guys are saying:D I've been warned but honestly didn't expect this to be true:D |
2023-03-16 18:49:53 +0100 | whatsupdoc | (uid509081@id-509081.hampstead.irccloud.com) |
2023-03-16 18:49:55 +0100 | <EvanR> | OOP courses have to future proof their own need for existence |
2023-03-16 18:50:09 +0100 | ghostbuster | (~admin@user/ghostbuster) |
2023-03-16 18:50:09 +0100 | <monochrom> | heh |
2023-03-16 18:50:30 +0100 | <EvanR> | you're right why are we even talking about OOP |
2023-03-16 18:50:49 +0100 | <EvanR> | this is worse than AI |
2023-03-16 18:51:00 +0100 | chele | (~chele@user/chele) (Ping timeout: 246 seconds) |
2023-03-16 18:51:00 +0100 | <monochrom> | Oh that's because the pasted classes obviously came from OO thinking. :) |
2023-03-16 18:51:06 +0100 | <Ashkan> | I'm trying to understand why #2 is more important. So idea is if nothing fits the abstraction then its useless, right ? kinda obvious honestly or is there like a deeper meaning I'm missing ? |
2023-03-16 18:51:44 +0100 | <monochrom> | Oh, all great truths are obvious tautologies that people don't want to believe. |
2023-03-16 18:52:52 +0100 | <monochrom> | And that makes those tautologies so deep. At least feeling so deep. |
2023-03-16 18:53:20 +0100 | <EvanR> | every theorem is obvious once you have the proof, someone told me |
2023-03-16 18:53:23 +0100 | <monochrom> | My http://www.vex.net/~trebla/humour/tautologies.html is full of them :) |
2023-03-16 18:53:40 +0100 | <int-e> | Ashkan: Without examples to abstract from your abstraction will probably either provide too little or too much to fit the use cases, and erring on either side is painful (one side more than the other) |
2023-03-16 18:54:02 +0100 | hugo | (znc@verdigris.lysator.liu.se) |
2023-03-16 18:54:23 +0100 | Guest31 | (~Guest31@rrcs-74-219-213-86.central.biz.rr.com) |
2023-03-16 18:58:13 +0100 | <Ashkan> | Okay so , unless I'm missing the point here, there is only so much I can do right now in terms of examples. But that is the case with all the abstractions. If I had every (or even most of) actual things I'm gonna write against this and only then being to abstract away then I would simply refactor mechanically till the type-classes emerge. |
2023-03-16 18:58:40 +0100 | <geekosaur> | if any do |
2023-03-16 18:58:49 +0100 | <geekosaur> | most people never have to define a typeclass |
2023-03-16 18:58:55 +0100 | <int-e> | I guess I should say "generalization" because there's also the notion of "abstraction" that's about having a well-defined public interface. Which, in Haskell, you can achieve through modules; there's no need to have type classes. |
2023-03-16 18:59:32 +0100 | <Ashkan> | The point is to have rather very few but (hopefully) *representative* examples and try to exercise one's abstracting skills to a *problem statement*, not the solution ! |
2023-03-16 19:00:40 +0100 | freeside | (~mengwong@122.11.248.245) |
2023-03-16 19:01:32 +0100 | <EvanR> | to get concrete about blocking and non-blocking I/O stuff, check out haskell's concurrency primitives so you don't have to deal with blocking and non-blocking versions of things. I.e. use blocking everywhere |
2023-03-16 19:02:19 +0100 | <monochrom> | I don't abstract until there is sufficient benefit to abstract. So, until I repeat myself badly enough. |
2023-03-16 19:02:20 +0100 | <EvanR> | non-blocking I/O is this thing you need in C because multiple threads are so painful |
2023-03-16 19:03:15 +0100 | hugo | (znc@verdigris.lysator.liu.se) (Ping timeout: 246 seconds) |
2023-03-16 19:03:22 +0100 | <monochrom> | Plus the bonus that I actually see what I'm repeating at all. |
2023-03-16 19:04:14 +0100 | <monochrom> | If you say you already have two games and so you already know what they're repeating and your classes came from that, then cool. |
2023-03-16 19:05:58 +0100 | <Ashkan> | For example an application framework or a lib author might have a few real world example to being with and following this advice it would result in a piece of code that overfits those particular examples but can't comfortable model anything else. There is always a degree of introspection and seeing-into-the-future when modelling |
2023-03-16 19:05:58 +0100 | <Ashkan> | abstractions/generalisations. The whole point is that you don't have enough to mechanically arrive at a solution ! |
2023-03-16 19:06:36 +0100 | <monochrom> | Oh this is why versions 1, 2, 3, 4... all exist. :) |
2023-03-16 19:07:31 +0100 | cheater | (~Username@user/cheater) (Ping timeout: 256 seconds) |
2023-03-16 19:07:55 +0100 | <Ashkan> | That is also true but happens as a natural outcome of "not knowing everything right now" rather than "don't generalise because OOP":) |
2023-03-16 19:08:39 +0100 | <monochrom> | Well, like I said, OO is not by itself premature abstraction, but OO people do that all the time. |
2023-03-16 19:09:08 +0100 | <monochrom> | There is an economic plus Dunning-Kruger explanation. |
2023-03-16 19:09:28 +0100 | <int-e> | Without context, https://paste.tomsmeding.com/0fxeAcDL is a great example of premature abstraction. |
2023-03-16 19:09:31 +0100 | <monochrom> | Those who are actually good at guessing good abstractions have all gone to mathematics. |
2023-03-16 19:09:33 +0100 | freeside | (~mengwong@122.11.248.245) (Ping timeout: 246 seconds) |
2023-03-16 19:09:50 +0100 | <monochrom> | Programming is left with those who are bad at it. |
2023-03-16 19:10:16 +0100 | <int-e> | There may be a context in which this is useful, but I find it hard to imagine what that would be. |
2023-03-16 19:10:22 +0100 | <monochrom> | Now enter Dunning-Kruger to see that programmers think they're great at abstractions. |
2023-03-16 19:10:26 +0100 | cheater | (~Username@user/cheater) |
2023-03-16 19:10:35 +0100 | <EvanR> | this discussion is overly abstract xD |
2023-03-16 19:11:17 +0100 | shapr | (~user@68.54.166.125) |
2023-03-16 19:12:47 +0100 | <monochrom> | Programmers are also super grateful that OO allows them to feel productive (as opposed to being productive) because they can mindlessly write scaffolding and procrastinate asking the difficult questions. |
2023-03-16 19:13:52 +0100 | <EvanR> | that's a downside of haskell. I often realize I could just write the code to solve the problem without setting up a bunch of engineering first. So instead of cart before the horse there's just no cart |
2023-03-16 19:14:13 +0100 | <monochrom> | Haskell looks so hard because after writing "f x y =" you now have to immediately ask yourself which algorithm to use, why it's correct. No room for procrastination. |
2023-03-16 19:14:35 +0100 | <monochrom> | In OO you could keep on writing more class declarations. |
2023-03-16 19:14:46 +0100 | cheater_ | (~Username@user/cheater) |
2023-03-16 19:15:19 +0100 | cheater | (~Username@user/cheater) (Ping timeout: 260 seconds) |
2023-03-16 19:15:21 +0100 | cheater_ | cheater |
2023-03-16 19:16:11 +0100 | Guest31 | (~Guest31@rrcs-74-219-213-86.central.biz.rr.com) (Quit: Client closed) |
2023-03-16 19:16:32 +0100 | <monochrom> | Again, not to say that OO is meant to be abused this way, but consider human nature, what do you think selfish mediocre people actually want to do? |
2023-03-16 19:18:09 +0100 | <int-e> | . o O ( type RealTimeGame m i o = TurnBasedGame m (Maybe i) o ) |
2023-03-16 19:18:24 +0100 | <int-e> | . o O ( Looks weird, doesn't it? ) |
2023-03-16 19:19:02 +0100 | <monochrom> | That may require some kind of discrete-time assumption... |
2023-03-16 19:19:38 +0100 | <int-e> | Yeah I was getting there... I imagine the idea is to read input once per frame or some other sort of tick. |
2023-03-16 19:20:05 +0100 | <monochrom> | With this, one cannot avoid mentioning FRP any longer :) |
2023-03-16 19:22:54 +0100 | <EvanR> | FRP! |
2023-03-16 19:23:22 +0100 | <Ashkan> | Honestly I'm not sure I'm following ... lets make this conversation even more useful by solving this problem : |
2023-03-16 19:23:22 +0100 | <Ashkan> | Model the following: |
2023-03-16 19:23:23 +0100 | <Ashkan> | There is a client-server game setting. Games actually run on the server side and receive input / provide output. There is no graphics or rendering or complex IO of any kind to these games. All they do is to process input and produce output. |
2023-03-16 19:23:23 +0100 | <Ashkan> | There is a distinction between games that do not progress until next input is provided and those that might progress even if no input is provided. |
2023-03-16 19:23:28 +0100 | <int-e> | hmm "fast reverse proxy" |
2023-03-16 19:24:01 +0100 | bitmapper | (uid464869@id-464869.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
2023-03-16 19:24:27 +0100 | <int-e> | Ashkan: You can do that but WHY? |
2023-03-16 19:24:42 +0100 | gnalzo | (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) |
2023-03-16 19:25:24 +0100 | segfaultfizzbuzz | (~segfaultf@108.211.201.53) |
2023-03-16 19:26:00 +0100 | <int-e> | People write game. Some games are client-server games. What's the context in which you have so many different games that you want to abstract from them uniformly? And what makes you think that you can do that abstraction in a meaningful way without having a collection of actual games first? |
2023-03-16 19:26:19 +0100 | man_max | (~man_max@94-43-231-47.dsl.utg.ge) |
2023-03-16 19:26:21 +0100 | talismanick | (~talismani@2601:200:c000:f7a0::5321) |
2023-03-16 19:27:39 +0100 | <EvanR> | that client already has mildly complex IO requirements because of the full duplex |
2023-03-16 19:27:58 +0100 | cassiopea | (~cassiopea@user/cassiopea) (Remote host closed the connection) |
2023-03-16 19:28:01 +0100 | <Ashkan> | To avoid the million questions that could be asked about why a real programmer (as opposed to a Dun-Krueger OOP programmer) would ever want to do this exercise, assume you are given 1 million $ reward if you can provide a as-possibly-correct-as-reasonably-feasible answer. So our programmer has every motivation to get this as right as possible. Good |
2023-03-16 19:28:01 +0100 | <Ashkan> | enough:D ? |
2023-03-16 19:28:16 +0100 | <EvanR> | unless you never get anything from the server except after sending a message, and you get everything immediately |
2023-03-16 19:28:57 +0100 | <Ashkan> | The *game* has very limited access to the outside world (ideally only input/output but has to be seen). Everything else is handled by the *server* that hosts the game |
2023-03-16 19:29:00 +0100 | <EvanR> | in which case you can loop get command, send command, wait for response, print response |
2023-03-16 19:29:00 +0100 | <int-e> | Note that what you ended up with is a limited I/O abstraction with no relation to games when we ignore the identifiers. |
2023-03-16 19:29:34 +0100 | hugo | (znc@verdigris.lysator.liu.se) |
2023-03-16 19:29:58 +0100 | <Ashkan> | Essentially server provides input/output functions to the games. Games are to express their logic using the methods in the type-classes when they need input or are ready to emit an output |
2023-03-16 19:30:04 +0100 | <int-e> | How is this supposed to help with correctness... |
2023-03-16 19:30:27 +0100 | <int-e> | Eh, I don't think we'll agree that this is in any way useful. I'll shut up. |
2023-03-16 19:31:16 +0100 | Major_Biscuit | (~MajorBisc@c-001-031-036.client.tudelft.eduvpn.nl) (Ping timeout: 252 seconds) |
2023-03-16 19:31:19 +0100 | <EvanR> | > forever ((getLine >>= sendCommand) >> (awaitResponse >>= putStrLn)) |
2023-03-16 19:31:21 +0100 | <lambdabot> | error: |
2023-03-16 19:31:21 +0100 | <lambdabot> | Variable not in scope: sendCommand :: String -> IO a0error: |
2023-03-16 19:31:21 +0100 | <lambdabot> | Variable not in scope: awaitResponse :: IO String |
2023-03-16 19:31:31 +0100 | <EvanR> | I meant to do that |
2023-03-16 19:31:43 +0100 | <Ashkan> | I am *defining* a game as "something that doesn't do IO, only needs input and provides output as it processes the inputs and progresses the state" |
2023-03-16 19:32:16 +0100 | <EvanR> | are you talking about the server code or client code, because I think I just solved every client of this class above |
2023-03-16 19:33:14 +0100 | man_max | (~man_max@94-43-231-47.dsl.utg.ge) (Quit: Client closed) |
2023-03-16 19:34:00 +0100 | <Ashkan> | You guys simply can not accept that I *can* define notions that might not make much sense to you. The way to go is to just accept those notions from me (who is *defining* a world with those notions as the problem space) and then evaluate a proposed abstraction *against those definitions,*, not against your own ideas of what a game is. |
2023-03-16 19:34:29 +0100 | <Ashkan> | This is all in server code |
2023-03-16 19:34:55 +0100 | <int-e> | 18:34:45 <Ashkan> Does this make sense https://paste.tomsmeding.com/0fxeAcDL ? |
2023-03-16 19:35:01 +0100 | <int-e> | Not to us, evidently. |
2023-03-16 19:36:03 +0100 | <geekosaur> | the point is this is almost always "wrong use of typeclass" |
2023-03-16 19:36:17 +0100 | <int-e> | At least now it sounds more like you want a kind of sandbox. |
2023-03-16 19:36:19 +0100 | <geekosaur> | sure, you can define it. and make your life hell later |
2023-03-16 19:36:31 +0100 | <int-e> | That wasn't clear 5 minutes ago. |
2023-03-16 19:36:40 +0100 | <geekosaur> | becuase if it's "wring use of typeclass" it WILL bite you later |
2023-03-16 19:36:51 +0100 | <geekosaur> | *wrong |
2023-03-16 19:36:52 +0100 | mncheck | (~mncheck@193.224.205.254) (Ping timeout: 246 seconds) |
2023-03-16 19:36:59 +0100 | cassiopea | (~cassiopea@user/cassiopea) |
2023-03-16 19:37:07 +0100 | Major_Biscuit | (~MajorBisc@2001:1c00:2408:a400:67e:5371:52a7:9b9a) |
2023-03-16 19:37:30 +0100 | freeside | (~mengwong@122.11.248.245) |
2023-03-16 19:37:35 +0100 | <int-e> | It's still useless without concrete types for i and o; and the distinction between realtime and non-realtime is still tenuous. |
2023-03-16 19:37:51 +0100 | <int-e> | And wouldn't implementors be better served with having a game-specific EDSL? |
2023-03-16 19:38:11 +0100 | man_max | (~man_max@94-43-231-47.dsl.utg.ge) |
2023-03-16 19:39:28 +0100 | <dminuoso> | Sigh, GHC strikes again. |
2023-03-16 19:39:38 +0100 | <int-e> | @ghc |
2023-03-16 19:39:39 +0100 | <lambdabot> | The signature contexts in a mutually recursive group should all be identical |
2023-03-16 19:39:52 +0100 | <dminuoso> | `No instance for (Database.PostgreSQL.Simple.ToField.ToField EMailAddress) arising from a use of ‘executeMany’` |
2023-03-16 19:40:06 +0100 | <dminuoso> | Let me ask a perhaps weird question, but what is the factual information here? |
2023-03-16 19:40:17 +0100 | <dminuoso> | GHC is not telling me *why* the constraint arises. |
2023-03-16 19:40:38 +0100 | <Ashkan> | A game accepts only values of a certain type as input `i` and can produce values of a certain type as output `o`. Why do you need concrete types for that to make sense ? |
2023-03-16 19:41:27 +0100 | <dminuoso> | Oh gah, I think I know why. GHC could really do better, perhaps something like `Hey, in your use of executeMany I had to resolve ToRow a, I picked this instance, that instance introduced that new constraint I couldnt satisfy`... |
2023-03-16 19:41:36 +0100 | <EvanR> | another thing is sometimes a record instead of a typeclass is more flexible, so maybe you can combine and nest games dynamically |
2023-03-16 19:41:36 +0100 | Guest31 | (~Guest31@rrcs-74-219-213-86.central.biz.rr.com) |
2023-03-16 19:41:38 +0100 | <mauke> | <EvanR> non-blocking I/O is this thing you need in C because multiple threads are so painful <- and in Haskell, if you want tractable semantics |
2023-03-16 19:41:41 +0100 | <Ashkan> | int-e about the EDSL, they could be ... but how does that related to input/output ? in a way this is a very minimal DSL for input/output. |
2023-03-16 19:41:51 +0100 | <int-e> | dminuoso: Is that the whole error? But it's clearly from simplifying a ToRow constraint, as you're finding out. |
2023-03-16 19:42:12 +0100 | <dminuoso> | int-e: Yes (well there's some source hint where it originated from) |
2023-03-16 19:42:25 +0100 | <dminuoso> | It's just incredibly frustrating to not have more details how this constraint arised. |
2023-03-16 19:42:37 +0100 | <dminuoso> | Especially because GHC *knows* why, it did the journey itself. |
2023-03-16 19:42:41 +0100 | hugo | (znc@verdigris.lysator.liu.se) (Ping timeout: 265 seconds) |
2023-03-16 19:43:00 +0100 | <int-e> | . o O ( arose ) |
2023-03-16 19:43:10 +0100 | <int-e> | (or a-rows?) |
2023-03-16 19:43:24 +0100 | <dminuoso> | Yeah I guess arose. |
2023-03-16 19:43:34 +0100 | y04nn | (~username@2a03:1b20:5:f011::aaae) |
2023-03-16 19:43:42 +0100 | <dminuoso> | But unless GHC gets better at diagnostics, Im not going to improve my English. |
2023-03-16 19:43:46 +0100 | <dminuoso> | Im holding it hostage that way. |
2023-03-16 19:43:52 +0100 | <int-e> | dminuoso: it probably doesn't remember the constraint simplification steps |
2023-03-16 19:44:12 +0100 | <int-e> | dminuoso: you're not hurting GHC, you're hurting people |
2023-03-16 19:44:22 +0100 | <dminuoso> | Oh I see. So I should just stop improving my Haskell then. |
2023-03-16 19:44:49 +0100 | <dminuoso> | Think it will budge? |
2023-03-16 19:46:11 +0100 | <int-e> | I doubt it. I mean, yes, it would be nice to have an indication that the constraint used to be a "ToRow" constraint originally, rather than having to wade through the docs for that information. But I suspect the information is not readily available anymore when the type error manifests. |
2023-03-16 19:46:18 +0100 | Major_Biscuit | (~MajorBisc@2001:1c00:2408:a400:67e:5371:52a7:9b9a) (Ping timeout: 252 seconds) |
2023-03-16 19:52:19 +0100 | <dminuoso> | Okay. So the underlying error was using [] instead of () |
2023-03-16 19:52:38 +0100 | <dminuoso> | I will just file this under "typeclasses are not fun" |
2023-03-16 19:53:12 +0100 | hugo | (znc@verdigris.lysator.liu.se) |
2023-03-16 19:53:38 +0100 | freeside | (~mengwong@122.11.248.245) (Ping timeout: 252 seconds) |
2023-03-16 19:55:49 +0100 | <int-e> | dminuoso: Huh, how did it arrive at EMailAddress specifically then? I guess it depends on where you put that []... |
2023-03-16 19:56:22 +0100 | <dminuoso> | Oh I just wrote `executeMany conn qry [toEntity <$> addresses]` with addresses being a list |
2023-03-16 19:57:10 +0100 | <dminuoso> | Which produced some `[[EMailAddress]]`, so it ended up having to solve for `ToRow [EmailAddress]`, matching up with ToField a => ToRow [a] |
2023-03-16 19:57:53 +0100 | <dminuoso> | Its kind of funny because I remember wondering "dont I need a =<< here? this looks like a nested list.. uh I dont know - the compiler will surely tell me if Im doing something wrong" |
2023-03-16 19:58:27 +0100 | <int-e> | Ah, and it did, but in the form of a riddle. |
2023-03-16 19:59:53 +0100 | <EvanR> | GHC as an imposing sphinx |
2023-03-16 20:00:19 +0100 | <EvanR> | your code shall not pass without answering the riddles |
2023-03-16 20:01:01 +0100 | <opqdonut> | oof I hate the ToRow ToField stuff |
2023-03-16 20:01:11 +0100 | <opqdonut> | feels like a JS API in Haskell |
2023-03-16 20:03:54 +0100 | <sm> | good idea for a mascot / logo EvanR |
2023-03-16 20:04:16 +0100 | <EvanR> | some other functional or logic languages has to have already claimed that |
2023-03-16 20:04:41 +0100 | slack1256 | (~slack1256@186.11.43.166) |
2023-03-16 20:05:36 +0100 | <sm> | no! it shall be ours! |
2023-03-16 20:06:50 +0100 | coot | (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) |
2023-03-16 20:13:36 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:7045:17e1:cef7:25cd) (Remote host closed the connection) |
2023-03-16 20:19:31 +0100 | <tomsmeding> | I asked dall-e for "Haskell mascot" and it seems it's having trouble spelling "haskell" |
2023-03-16 20:19:40 +0100 | <tomsmeding> | besides choosing US sports themed stuff |
2023-03-16 20:19:49 +0100 | <tomsmeding> | https://tomsmeding.com/ss/get/tomsmeding/ZgJ1Gg |
2023-03-16 20:22:09 +0100 | freeside | (~mengwong@122.11.248.245) |
2023-03-16 20:23:44 +0100 | <EvanR> | for a split second I thought the one of the right used a lambda instead of a K |
2023-03-16 20:26:19 +0100 | freeside | (~mengwong@122.11.248.245) (Ping timeout: 250 seconds) |
2023-03-16 20:28:56 +0100 | <sm> | a most valuable haskell language post ! https://typeclasses.substack.com/p/whats-new-in-ghc-2021 |
2023-03-16 20:29:36 +0100 | slack1256 | (~slack1256@186.11.43.166) (Ping timeout: 255 seconds) |
2023-03-16 20:29:48 +0100 | <dminuoso> | "What's new in GHC 2021" - an article written in 2023. |
2023-03-16 20:29:52 +0100 | <dminuoso> | :) |
2023-03-16 20:30:45 +0100 | <monochrom> | haha |
2023-03-16 20:32:33 +0100 | <monochrom> | Also the wrong but credible interpretation that GHC2021 of 2023 is different from GHC2021 of 2021 hence "what's new" in 2023. |
2023-03-16 20:34:16 +0100 | <monochrom> | Personally I would think up the title "GHC2021 is a perfectly balanced language with no exploits" >:) |
2023-03-16 20:34:40 +0100 | <monochrom> | P.S. I just bought Yorkshire Tea yesterday! |
2023-03-16 20:40:08 +0100 | <mauke> | "The forall keyword is added, letting you explicitly bind type variable names. This is called existential quantification" - ah, yes |
2023-03-16 20:40:27 +0100 | <EvanR> | while we're calling everything wrong, waiting a year after GHC2021 to make a blog post doesn't add up to 2023 |
2023-03-16 20:41:19 +0100 | jero98772 | (~jero98772@2800:484:1d80:d8ce:efcc:cbb3:7f2a:6dff) |
2023-03-16 20:42:01 +0100 | <monochrom> | That one is excused by "or so". :) |
2023-03-16 20:42:13 +0100 | Guest31 | (~Guest31@rrcs-74-219-213-86.central.biz.rr.com) (Quit: Client closed) |
2023-03-16 20:44:17 +0100 | <EvanR> | error bars! |
2023-03-16 20:48:56 +0100 | ft | (~ft@p3e9bc443.dip0.t-ipconnect.de) |
2023-03-16 20:51:02 +0100 | coot | (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot) |
2023-03-16 20:51:07 +0100 | bhall | (brunohall@gateway/vpn/protonvpn/bhall) (Ping timeout: 248 seconds) |
2023-03-16 20:53:30 +0100 | freeside | (~mengwong@122.11.248.245) |
2023-03-16 20:54:24 +0100 | jappiejappie | (~jappiejap@89-70-67-77.dynamic.chello.pl) |
2023-03-16 20:58:01 +0100 | freeside | (~mengwong@122.11.248.245) (Ping timeout: 256 seconds) |
2023-03-16 21:08:34 +0100 | freeside | (~mengwong@122.11.248.245) |
2023-03-16 21:10:17 +0100 | y04nn | (~username@2a03:1b20:5:f011::aaae) (Ping timeout: 246 seconds) |
2023-03-16 21:12:06 +0100 | segfaultfizzbuzz | (~segfaultf@108.211.201.53) (Ping timeout: 265 seconds) |
2023-03-16 21:13:07 +0100 | freeside | (~mengwong@122.11.248.245) (Ping timeout: 250 seconds) |
2023-03-16 21:14:04 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:7045:17e1:cef7:25cd) |
2023-03-16 21:16:48 +0100 | y04nn | (~username@2a03:1b20:5:f011::aaae) |
2023-03-16 21:18:20 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:7045:17e1:cef7:25cd) (Ping timeout: 246 seconds) |
2023-03-16 21:19:28 +0100 | pavonia | (~user@user/siracusa) |
2023-03-16 21:37:35 +0100 | Ashkan | (~Ashkan@ec2-54-78-14-109.eu-west-1.compute.amazonaws.com) (Quit: Client closed) |
2023-03-16 21:40:05 +0100 | segfaultfizzbuzz | (~segfaultf@108.211.201.53) |
2023-03-16 21:40:25 +0100 | codaraxis | (~codaraxis@user/codaraxis) (Ping timeout: 246 seconds) |
2023-03-16 21:40:40 +0100 | freeside | (~mengwong@122.11.248.245) |
2023-03-16 21:41:19 +0100 | ubert1 | (~Thunderbi@p200300ecdf0c5775fd3777de0335b9cc.dip0.t-ipconnect.de) |
2023-03-16 21:43:29 +0100 | finsternis | (~X@23.226.237.192) |
2023-03-16 21:44:18 +0100 | segfaultfizzbuzz | (~segfaultf@108.211.201.53) (Ping timeout: 255 seconds) |
2023-03-16 21:45:12 +0100 | freeside | (~mengwong@122.11.248.245) (Ping timeout: 255 seconds) |
2023-03-16 21:47:43 +0100 | lxi | (~quassel@2a02:2f08:4303:7700:8735:4ae1:b0f9:22e6) |
2023-03-16 21:51:37 +0100 | zeenk | (~zeenk@2a02:2f04:a307:2300::7fe) (Quit: Konversation terminated!) |
2023-03-16 21:52:42 +0100 | y04nn | (~username@2a03:1b20:5:f011::aaae) (Remote host closed the connection) |
2023-03-16 21:56:22 +0100 | segfaultfizzbuzz | (~segfaultf@108.211.201.53) |
2023-03-16 21:56:22 +0100 | infinity0 | (~infinity0@pwned.gg) (Remote host closed the connection) |
2023-03-16 21:58:30 +0100 | infinity0 | (~infinity0@pwned.gg) |
2023-03-16 22:01:24 +0100 | lxi_ | (~quassel@2a02:2f08:4303:7700:6251:77c:f4b2:f7b8) |
2023-03-16 22:01:55 +0100 | lxi | (~quassel@2a02:2f08:4303:7700:8735:4ae1:b0f9:22e6) (Ping timeout: 260 seconds) |
2023-03-16 22:04:09 +0100 | Pickchea | (~private@user/pickchea) (Quit: Leaving) |
2023-03-16 22:04:30 +0100 | bhall | (brunohall@gateway/vpn/protonvpn/bhall) |
2023-03-16 22:05:27 +0100 | _ht | (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Quit: _ht) |
2023-03-16 22:14:48 +0100 | freeside | (~mengwong@122.11.248.245) |
2023-03-16 22:15:41 +0100 | codaraxis | (~codaraxis@user/codaraxis) |
2023-03-16 22:15:49 +0100 | L29Ah | (~L29Ah@wikipedia/L29Ah) |
2023-03-16 22:19:13 +0100 | man_max | (~man_max@94-43-231-47.dsl.utg.ge) (Quit: Client closed) |
2023-03-16 22:20:37 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
2023-03-16 22:22:05 +0100 | gnalzo | (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 3.8) |
2023-03-16 22:22:42 +0100 | <dminuoso> | mauke: Can we have an exists too for universal quantification? |
2023-03-16 22:22:55 +0100 | freeside | (~mengwong@122.11.248.245) (Ping timeout: 260 seconds) |
2023-03-16 22:24:27 +0100 | zeenk | (~zeenk@2a02:2f04:a307:2300::7fe) |
2023-03-16 22:24:58 +0100 | <mauke> | ∃∃∃ |
2023-03-16 22:28:46 +0100 | andrew78 | (~andrew@2a01:4b00:d108:2500:36c8:5cfb:343b:f1f3) |
2023-03-16 22:29:36 +0100 | <andrew78> | Question about the capability library. I've got a `HasState "name" Type m`, is there a way I can use this whenever I require a `HasReader "name" Type m` ? |
2023-03-16 22:30:20 +0100 | <dminuoso> | HasState tag r m => HasReader (tag :: k) r (ReadStatePure m) |
2023-03-16 22:30:28 +0100 | <dminuoso> | andrew78: ^- does this help? |
2023-03-16 22:31:07 +0100 | <dminuoso> | So using the ReadStatePure newtype it seems you should be able to do something. But I dont know much about capability |
2023-03-16 22:31:09 +0100 | <andrew78> | dminuoso yes and no, Ar eyou suggesting I implement this dminuoso |
2023-03-16 22:31:14 +0100 | <dminuoso> | No, that instance exists |
2023-03-16 22:31:29 +0100 | <dminuoso> | https://hackage.haskell.org/package/capability-0.5.0.1/docs/src/Capability.Reader.Internal.Strateg… |
2023-03-16 22:34:24 +0100 | <andrew78> | Ah I see, but then why do I get "Could not deduce (HasReader "name" Type" m) from context (HasState "name" Type m)"? I would assume it would make use of this instance to check the type of the callee |
2023-03-16 22:35:19 +0100 | <EvanR> | did you use the newtype wrapper |
2023-03-16 22:35:22 +0100 | michalz | (~michalz@185.246.207.221) (Remote host closed the connection) |
2023-03-16 22:35:39 +0100 | inversed | (~inversed@bcdcac82.skybroadband.com) (Ping timeout: 248 seconds) |
2023-03-16 22:35:58 +0100 | <andrew78> | No, you mean that I should wrap my call with `ReadStatePure`? |
2023-03-16 22:36:16 +0100 | <EvanR> | the instance is for ReadStatePure |
2023-03-16 22:36:34 +0100 | <EvanR> | m |
2023-03-16 22:36:45 +0100 | <andrew78> | I'm sorry I don't see how that helps me. Am I supposed to use it in a deriving clause? |
2023-03-16 22:37:04 +0100 | <andrew78> | I'm not trying to derive an instance, I'm just trying to call a `HasReader` from a `HasState` |
2023-03-16 22:37:23 +0100 | ubert1 | (~Thunderbi@p200300ecdf0c5775fd3777de0335b9cc.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
2023-03-16 22:37:42 +0100 | <EvanR> | you apply newtype wrappers to bring in instances |
2023-03-16 22:37:53 +0100 | <EvanR> | like Sum 4 <> Sum 6 |
2023-03-16 22:38:01 +0100 | <EvanR> | instead of 4 <> 6 |
2023-03-16 22:38:29 +0100 | takuan | (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
2023-03-16 22:38:47 +0100 | <andrew78> | yeah but I'm not dealing with concrete types, just with the capability classes |
2023-03-16 22:39:17 +0100 | <EvanR> | whatever operation you need to do is on something right. Do you have example code |
2023-03-16 22:39:37 +0100 | <andrew78> | I have `f :: (HasState "name" Ty) => m ()` and `g :: (HasReader "name" Ty m) => m ()` and I'm trying to do call g in f |
2023-03-16 22:39:47 +0100 | freeside | (~mengwong@122.11.248.245) |
2023-03-16 22:40:21 +0100 | <andrew78> | mistyped the `f`: `f :: (HasState "name" Ty m) => m ()` |
2023-03-16 22:41:31 +0100 | <EvanR> | ReadStatePure g |
2023-03-16 22:41:57 +0100 | <andrew78> | `Couldn't match type `m' with `ReadStatePure m0'` |
2023-03-16 22:42:35 +0100 | <andrew78> | which makes sense, I'm expecting `m` and this wraps the `m` into `ReadStatePure`. how can I get it out of `ReadStatePure` again? |
2023-03-16 22:42:35 +0100 | <EvanR> | is it a case of needing ScopedTypeVariables and forall to introduce m so the type checker knows it's the same m or |
2023-03-16 22:42:58 +0100 | <andrew78> | EvanR It's not |
2023-03-16 22:43:03 +0100 | inversed | (~inversed@bcdcac82.skybroadband.com) |
2023-03-16 22:43:27 +0100 | <andrew78> | I have ScopedTypeVariables and I just tried adding forall and I get the same error. It makes sense to me |
2023-03-16 22:43:33 +0100 | <EvanR> | well it needs to be the same underlying m |
2023-03-16 22:44:07 +0100 | <andrew78> | I think the problem is that `m` != `ReadStatePure m` |
2023-03-16 22:44:08 +0100 | freeside | (~mengwong@122.11.248.245) (Ping timeout: 252 seconds) |
2023-03-16 22:44:28 +0100 | <EvanR> | well you can unwrap any newtype wrapped thing |
2023-03-16 22:44:36 +0100 | <andrew78> | as a matter of fact, forcing the `m` with a type application gives us the expected error `Occurs check: cannot construct the infinite type: |
2023-03-16 22:44:36 +0100 | <andrew78> | m ~ ReadStatePure m` |
2023-03-16 22:44:39 +0100 | <andrew78> | EvanR how? |
2023-03-16 22:44:48 +0100 | <EvanR> | :i Sum |
2023-03-16 22:44:53 +0100 | <EvanR> | @src Sum |
2023-03-16 22:44:53 +0100 | <lambdabot> | newtype Sum a = Sum { getSum :: a } |
2023-03-16 22:45:07 +0100 | <EvanR> | in that case they added a handy accessor, but in this case they didn't add one so you need to pattern match |
2023-03-16 22:45:36 +0100 | <EvanR> | > (\(Sum x) -> x) (Sum 5) |
2023-03-16 22:45:38 +0100 | <lambdabot> | 5 |
2023-03-16 22:46:37 +0100 | <andrew78> | it makes no difference, I am back to square 1 with the error `Could not deduce (HasReader "name" Int m)` |
2023-03-16 22:46:57 +0100 | <andrew78> | I did `f = let ReadStatePure r = ReadStatePure g in r` |
2023-03-16 22:47:38 +0100 | <EvanR> | that does nothing |
2023-03-16 22:48:08 +0100 | <andrew78> | that's literally what you otld me to do, the `ReadStatePure` newtype has no accessor, so I pattern matched on it |
2023-03-16 22:48:26 +0100 | <EvanR> | you wrapped it and immediately unwrapped it |
2023-03-16 22:48:30 +0100 | <EvanR> | could just put g instead |
2023-03-16 22:48:47 +0100 | <andrew78> | yep, and that doesn't work, so what can I do? |
2023-03-16 22:49:08 +0100 | Ashkan | (~Ashkan@ec2-54-78-14-109.eu-west-1.compute.amazonaws.com) |
2023-03-16 22:49:21 +0100 | <EvanR> | normally if you needed a newtype for a new instance, you'd unwrap it after you did the thing you needed to do and got something that wasn't what you started with |
2023-03-16 22:49:31 +0100 | <EvanR> | > getSum (Sum 3 <> Sum 1) |
2023-03-16 22:49:33 +0100 | <lambdabot> | 4 |
2023-03-16 22:50:12 +0100 | <EvanR> | when you just wrapped it and used it, I presume, and got can't match m with m0, maybe they really are different monads |
2023-03-16 22:50:34 +0100 | <Ashkan> | Hello all. I'm trying to derive an Applicative for my newtype using `DerivingVia` but can't wrap my head around this "representation" thingie. I read a few examples yet can't figure out how to find an *equivalent* or suitable(?) type to give `via` to work with |
2023-03-16 22:51:17 +0100 | <andrew78> | EvanR I am not working with concrete types, there is no monad at this point, just typeclasses |
2023-03-16 22:51:25 +0100 | <Ashkan> | Can someone point me to a doc or an article or something about this please ? thanks |
2023-03-16 22:52:40 +0100 | <Ashkan> | This is the code for reference |
2023-03-16 22:52:40 +0100 | <Ashkan> | ``` |
2023-03-16 22:52:40 +0100 | <andrew78> | Ashkan I've been using this although it's not the best https://ghc.gitlab.haskell.org/ghc/doc/users_guide/exts/deriving_via.html |
2023-03-16 22:52:41 +0100 | <Ashkan> | data Room i o = Room {ichan :: TChan i, ochan :: TChan o} |
2023-03-16 22:52:41 +0100 | <Ashkan> | newtype RoomT i o a = RoomT {runRoomT :: Room i o -> IO a} deriving (Functor, Applicative) via _ |
2023-03-16 22:52:42 +0100 | <Ashkan> | ``` |
2023-03-16 22:53:14 +0100 | <TheMatten[m]> | Ashkan: What `deriving via` does is that it uses `coerce` to "coerce" type of your newtype into some other type you mention in `deriving via` clause, and basically reuses it's instance - see https://hackage.haskell.org/package/base-4.18.0.0/docs/Data-Coerce.html for how `coerce` works |
2023-03-16 22:53:32 +0100 | <Ashkan> | andrew78 thanks. Yeah read that already, can't figure it out for my case thought ... |
2023-03-16 22:54:09 +0100 | <TheMatten[m]> | Ashkan: You probably want `deriving (Functor, Applicative, Monad) via ReaderT (Room i o) IO` |
2023-03-16 22:55:28 +0100 | <TheMatten[m]> | Because `ReaderT r m a` is newtype over `r -> m a`, which matches shape of your inner type |
2023-03-16 22:57:47 +0100 | <Ashkan> | I was thinking Kleisli perhaps ... but honestly can't yet form an intuition around this |
2023-03-16 22:58:03 +0100 | <Ashkan> | by the way, what is a "representation" of a type, exactly ? |
2023-03-16 22:58:50 +0100 | jappiejappie | (~jappiejap@89-70-67-77.dynamic.chello.pl) (Quit: Client closed) |
2023-03-16 23:00:45 +0100 | <TheMatten[m]> | Ashkan: Hmm, yeah, but usually you'll probably want to derive in terms of types from `transformers`/`mtl`, because those have parameters in convenient order when you want to compose them |
2023-03-16 23:00:56 +0100 | <TheMatten[m]> | Ashkan: I guess that sort of depends on context in which you're asking |
2023-03-16 23:01:58 +0100 | <TheMatten[m]> | You may say two types have same "representation" if they're "coercible" through `coerce` interface (which I guess is your case here) |
2023-03-16 23:02:12 +0100 | <Ashkan> | Let me tell you my understanding and you tell me were I'm wrong: |
2023-03-16 23:02:13 +0100 | <Ashkan> | A `newtype` is essentially a wrapper around some other type. This other type is the representation of the newtype |
2023-03-16 23:03:04 +0100 | <Ashkan> | So `newtype Foo a b = Foo { name :: <some-type of a and b> }` then "<some type of a and b>" is the representation here |
2023-03-16 23:03:07 +0100 | <Ashkan> | so far correct ? |
2023-03-16 23:03:26 +0100 | <TheMatten[m]> | Ashkan: I mean, yeah, in principle |
2023-03-16 23:03:26 +0100 | <TheMatten[m]> | You could have nested newtypes too, and you can imagine that they could too be unwrapped to expose type that doesn't have any newtypes |
2023-03-16 23:03:32 +0100 | <mauke> | the <...> part does not have to use a or b |
2023-03-16 23:04:11 +0100 | <Ashkan> | yeah could be phantoms (that's the name, right ?) but didn't want to complicate things |
2023-03-16 23:05:33 +0100 | <Ashkan> | Now it comes to logic that since `newtype` (at least the simple, one layer ones) do not hide any inner structure or something, then essentially GHC should in principle be able to derive instances for the `newtype` if it can derive (or find) the instance for the representation, right ? |
2023-03-16 23:08:02 +0100 | <mauke> | Ashkan: https://downloads.haskell.org/ghc/latest/docs/users_guide/exts/newtype_deriving.html |
2023-03-16 23:08:37 +0100 | <Ashkan> | I've read all the standard doc, except for this `coerce` thingie:D |
2023-03-16 23:09:10 +0100 | <mauke> | you don't need coerce for generalized newtype deriving, though |
2023-03-16 23:09:26 +0100 | <Ashkan> | my problem is I can't figure out *how* to arrive at the suitable representation of my type to give it to `via` |
2023-03-16 23:10:06 +0100 | <Ashkan> | mauke yeah but generelized deriving failed with a message to the effect that it can not arrive at the proper eta-reduction |
2023-03-16 23:10:35 +0100 | <Ashkan> | That's why I turned into the (to my understanding) more powerful `DervivingVia` |
2023-03-16 23:10:38 +0100 | freeside | (~mengwong@122.11.248.245) |
2023-03-16 23:10:47 +0100 | <mauke> | why not just write the instance manually? |
2023-03-16 23:11:43 +0100 | <Ashkan> | mauke I did actually ! yet I have a feeling that if I did everything right, then GHC should be able to derive all the way to `MonadIO` with minimal help from me |
2023-03-16 23:11:52 +0100 | <mauke> | but yeah, what TheMatten[m] said |
2023-03-16 23:12:19 +0100 | <mauke> | your type is essentially a composition of IO and (Room i o ->) applied to a |
2023-03-16 23:12:36 +0100 | <mauke> | which corresponds to ReaderT ArgumentType IO |
2023-03-16 23:13:24 +0100 | <Ashkan> | it is `Room i o -> IO a` . Trying to figure out a representation for it (?) although it is itself a representation of something else:D |
2023-03-16 23:13:49 +0100 | <mauke> | newtype RoomT i o a = RoomT{ runRoomT :: ReaderT (Room i o) IO a } deriving (Functor, Applicative) -- :-) |
2023-03-16 23:14:07 +0100 | <Ashkan> | But isn't `ReaderT a IO` the opposite ? is it not supposed to produce an `a` in an `IO` setting ? |
2023-03-16 23:14:57 +0100 | <mauke> | no, ReaderT Env IO a produces an `a` in an `IO` setting *given some environment of type `Env`* |
2023-03-16 23:15:21 +0100 | freeside | (~mengwong@122.11.248.245) (Ping timeout: 268 seconds) |
2023-03-16 23:15:39 +0100 | <mauke> | @src ReaderT |
2023-03-16 23:15:39 +0100 | <lambdabot> | Source not found. I am sorry. |
2023-03-16 23:15:42 +0100 | <mauke> | :-( |
2023-03-16 23:15:53 +0100 | <Ashkan> | Ohhhh ... I see ... so it is essentially `Env -> IO a` . This is exactly like my case actually |
2023-03-16 23:16:07 +0100 | <mauke> | https://hackage.haskell.org/package/transformers-0.6.1.0/docs/src/Control.Monad.Trans.Reader.html#… |
2023-03-16 23:16:19 +0100 | <andrew78> | Sorry to interrupt but I think I've found the solution to my problem from earlier: |
2023-03-16 23:16:19 +0100 | <andrew78> | ``` |
2023-03-16 23:16:20 +0100 | <andrew78> | g :: HasReader "name" Int m => m () |
2023-03-16 23:16:20 +0100 | <andrew78> | g = pure () |
2023-03-16 23:16:21 +0100 | <andrew78> | f :: HasState "name" Int m => m () |
2023-03-16 23:16:21 +0100 | <andrew78> | f = magnify @"name" @ReadStatePure @'[] g |
2023-03-16 23:16:22 +0100 | <andrew78> | ``` |
2023-03-16 23:16:44 +0100 | <mauke> | pasting into IRC is not a good idea |
2023-03-16 23:16:55 +0100 | <davean> | Ashkan: its *litterly* Env -> IO a |
2023-03-16 23:17:03 +0100 | <davean> | infact, -> is a reader |
2023-03-16 23:17:06 +0100 | <mauke> | lrtly |
2023-03-16 23:17:21 +0100 | <Ashkan> | Yeah I see your point ... |
2023-03-16 23:17:30 +0100 | <Ashkan> | Woow I can model a lot of stuff lie this:D |
2023-03-16 23:17:35 +0100 | <davean> | https://hackage.haskell.org/package/mtl-2.3.1/docs/src/Control.Monad.Reader.Class.html#line-107 |
2023-03-16 23:17:42 +0100 | <Ashkan> | like* this |
2023-03-16 23:17:44 +0100 | <davean> | Like seriously LITTERLY |
2023-03-16 23:17:52 +0100 | <mauke> | *literally |
2023-03-16 23:18:15 +0100 | <mauke> | yeah, (->) is the "naked reader" form |
2023-03-16 23:18:22 +0100 | <davean> | Env -> IO a, is EXACTLY MonadReader Env -> |
2023-03-16 23:18:24 +0100 | <mauke> | without the newtype wrapper |
2023-03-16 23:18:46 +0100 | <davean> | So you can use it *directly* |
2023-03-16 23:18:52 +0100 | <mauke> | but -> has no corresponding transformer form, which is what you need in your case to get "into" IO |
2023-03-16 23:19:00 +0100 | <mauke> | hence ReaderT |
2023-03-16 23:19:03 +0100 | <davean> | Right |
2023-03-16 23:19:17 +0100 | zeenk | (~zeenk@2a02:2f04:a307:2300::7fe) (Quit: Konversation terminated!) |
2023-03-16 23:19:22 +0100 | <Ashkan> | Yeah, I'm seeing the light. Thanks guys. This really helps me. |
2023-03-16 23:20:00 +0100 | <davean> | I think it helps to see thats the exact thing MonadReader is and every other form is a juggling to make some sort of ergonomics nicer |
2023-03-16 23:21:03 +0100 | <mauke> | MonadReader is the general interface for all types that provide an environment of some sort |
2023-03-16 23:21:28 +0100 | <mauke> | you could probably define a MonadReader instance for State |
2023-03-16 23:23:20 +0100 | <davean> | mauke: eh ... it wouldn't really be lawful? |
2023-03-16 23:24:43 +0100 | <davean> | I mean you can make the instance but I think it would be semanticly incorrect |
2023-03-16 23:26:03 +0100 | Ashkan | (~Ashkan@ec2-54-78-14-109.eu-west-1.compute.amazonaws.com) (Ping timeout: 260 seconds) |
2023-03-16 23:26:13 +0100 | <EvanR> | andrew78, you can think of variables like m0 during type checking as an unknown by specific type, and the same rules apply as if it was a known specific type like Maybe |
2023-03-16 23:26:22 +0100 | <EvanR> | unknown but specific* |
2023-03-16 23:27:22 +0100 | <EvanR> | hypothetical types |
2023-03-16 23:27:43 +0100 | <EvanR> | that the code is in an instance definition vs a normal function definition doesn't matter |
2023-03-16 23:31:35 +0100 | andrew78 | (~andrew@2a01:4b00:d108:2500:36c8:5cfb:343b:f1f3) (Quit: Client closed) |
2023-03-16 23:32:33 +0100 | freeside | (~mengwong@122.11.248.245) |
2023-03-16 23:36:21 +0100 | andrew86 | (~andrew@2a01:4b00:d108:2500:36c8:5cfb:343b:f1f3) |
2023-03-16 23:37:15 +0100 | freeside | (~mengwong@122.11.248.245) (Ping timeout: 256 seconds) |
2023-03-16 23:40:19 +0100 | biberu | (~biberu@user/biberu) (Read error: Connection reset by peer) |
2023-03-16 23:42:18 +0100 | man_max | (~man_max@94-43-231-47.dsl.utg.ge) |
2023-03-16 23:43:18 +0100 | Ashkan | (~Ashkan@ec2-54-78-14-109.eu-west-1.compute.amazonaws.com) |
2023-03-16 23:43:18 +0100 | Tuplanolla | (~Tuplanoll@91-159-68-152.elisa-laajakaista.fi) |
2023-03-16 23:45:20 +0100 | biberu | (~biberu@user/biberu) |
2023-03-16 23:49:38 +0100 | yangby | (~secret@183.128.104.108) |
2023-03-16 23:49:39 +0100 | andrew86 | (~andrew@2a01:4b00:d108:2500:36c8:5cfb:343b:f1f3) (Quit: Client closed) |
2023-03-16 23:50:45 +0100 | yangby | (~secret@183.128.104.108) (Client Quit) |
2023-03-16 23:58:48 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |