Home liberachat/#haskell: Logs Calendar

Logs on 2023-02-14 (liberachat/#haskell)

00:01:47 × forell quits (~forell@user/forell) (Quit: ZNC - https://znc.in)
00:02:02 forell joins (~forell@user/forell)
00:02:30 notzmv joins (~zmv@user/notzmv)
00:02:50 × freeside quits (~mengwong@103.252.202.170) (Ping timeout: 260 seconds)
00:02:55 × merijn quits (~merijn@86.86.29.250) (Ping timeout: 252 seconds)
00:13:50 × acidjnk quits (~acidjnk@p200300d6e715c4786dabe743f9921989.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
00:15:31 TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker)
00:15:48 × TheCoffeMaker_ quits (~TheCoffeM@200.126.137.246) (Ping timeout: 255 seconds)
00:18:13 Alex_test_ joins (~al_test@178.34.160.79)
00:19:34 freeside joins (~mengwong@103.252.202.170)
00:19:47 × Alex_test quits (~al_test@178.34.160.79) (Ping timeout: 252 seconds)
00:23:49 × bitmapper quits (uid464869@id-464869.lymington.irccloud.com) (Quit: Connection closed for inactivity)
00:24:36 × mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection)
00:27:53 jmorris joins (uid537181@id-537181.uxbridge.irccloud.com)
00:32:15 × gurkenglas quits (~gurkengla@46.114.176.170) (Ping timeout: 252 seconds)
00:33:34 × waleee quits (~waleee@h-176-10-137-138.NA.cust.bahnhof.se) (Ping timeout: 252 seconds)
00:34:33 bgs joins (~bgs@212-85-160-171.dynamic.telemach.net)
00:47:10 gpncarl_ joins (~gpncarl@210.12.195.6)
00:48:13 szkl joins (uid110435@id-110435.uxbridge.irccloud.com)
00:48:49 bitmapper joins (uid464869@2a03:5180:f:2::7:17e5)
00:49:35 × gpncarl quits (~gpncarl@222.249.231.3) (Ping timeout: 248 seconds)
00:55:18 zaquest joins (~notzaques@5.130.79.72)
00:55:38 waleee joins (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7)
00:56:31 energizer_ is now known as energizer
01:00:25 × bilegeek quits (~bilegeek@2600:1008:b09e:5b5c:fb38:650f:1536:6b2d) (Remote host closed the connection)
01:00:51 bilegeek joins (~bilegeek@2600:1008:b09e:5b5c:fb38:650f:1536:6b2d)
01:00:57 AlexZenon_2 joins (~alzenon@178.34.160.79)
01:01:59 biberu\ joins (~biberu@user/biberu)
01:02:01 × accord quits (uid568320@id-568320.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
01:02:23 × AlexZenon quits (~alzenon@178.34.160.79) (Ping timeout: 248 seconds)
01:03:02 wroathe joins (~wroathe@207.153.38.140)
01:03:02 × wroathe quits (~wroathe@207.153.38.140) (Changing host)
01:03:02 wroathe joins (~wroathe@user/wroathe)
01:05:36 × biberu quits (~biberu@user/biberu) (Ping timeout: 248 seconds)
01:05:36 biberu\ is now known as biberu
01:08:14 × enoq quits (~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7) (Quit: enoq)
01:10:50 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
01:11:45 × bgs quits (~bgs@212-85-160-171.dynamic.telemach.net) (Remote host closed the connection)
01:16:57 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
01:19:55 × freeside quits (~mengwong@103.252.202.170) (Ping timeout: 252 seconds)
01:24:55 × bilegeek quits (~bilegeek@2600:1008:b09e:5b5c:fb38:650f:1536:6b2d) (Remote host closed the connection)
01:25:32 bilegeek joins (~bilegeek@2600:1008:b09e:5b5c:fb38:650f:1536:6b2d)
01:26:10 freeside joins (~mengwong@103.252.202.170)
01:26:11 king_gs joins (~Thunderbi@2806:103e:29:1779:19a5:ca6b:2f79:45e7)
01:27:28 × waleee quits (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) (Ping timeout: 252 seconds)
01:30:30 × freeside quits (~mengwong@103.252.202.170) (Ping timeout: 255 seconds)
01:37:39 lackita` joins (~user@73.114.250.252)
01:39:15 <lackita`> I'm having trouble with typeclasses, could use some help understanding what's going wrong with this code:
01:39:35 <lackita`> oh, sorry, don't use IRC much, one sec and I'll share the actual code
01:40:03 <lackita`> class KeyStore s where
01:40:03 <lackita`> lookup :: s -> k -> Maybe v
01:40:03 <lackita`>
01:40:03 <lackita`> instance KeyStore (Map.Map k v) where
01:40:06 <lackita`> lookup store key = Map.lookup key store
01:40:10 <lackita`>
01:40:16 <lackita`> Here's the error:
01:40:23 <lackita`> test/KeyStoreSpec.hs:7:37: error:
01:40:23 <lackita`> • Couldn't match type ‘k1’ with ‘k’
01:40:26 <lackita`> Expected: Map k1 v1
01:40:29 <lackita`> Actual: Map k v
01:40:29 <lackita`> ‘k1’ is a rigid type variable bound by
01:40:32 <lackita`> the type signature for:
01:40:36 <lackita`> KeyStore.lookup :: forall k1 v1. Map k v -> k1 -> Maybe v1
01:40:38 <davean> Please use a pastebin
01:40:41 <lackita`> at test/KeyStoreSpec.hs:7:3-8
01:40:44 <lackita`> ‘k’ is a rigid type variable bound by
01:40:44 <lackita`> the instance declaration
01:40:47 <lackita`> at test/KeyStoreSpec.hs:6:10-31
01:40:51 <lackita`> • In the second argument of ‘Map.lookup’, namely ‘store’
01:40:52 <mauke> ... and it's scrolled off
01:40:54 <lackita`> In the expression: Map.lookup key store
01:40:57 <lackita`> In an equation for ‘KeyStore.lookup’:
01:41:01 <lackita`> KeyStore.lookup store key = Map.lookup key store
01:41:04 <lackita`> • Relevant bindings include
01:41:07 <lackita`> key :: k1 (bound at test/KeyStoreSpec.hs:7:16)
01:41:11 <lackita`> store :: Map k v (bound at test/KeyStoreSpec.hs:7:10)
01:41:13 freeside joins (~mengwong@103.252.202.170)
01:41:14 <lackita`> lookup :: Map k v -> k1 -> Maybe v1
01:41:14 <lackita`> (bound at test/KeyStoreSpec.hs:7:3)
01:41:17 <lackita`> |
01:41:21 <lackita`> 7 | lookup store key = Map.lookup key store
01:41:24 <lackita`> | ^^^^^
01:41:27 <lackita`>
01:41:33 <lackita`> oh, sorry, I'll do that now
01:41:39 <davean> lackita`: you have nothing specifying what type 'k' is or how it relates to type 's'
01:41:48 <davean> It was at the very top
01:42:36 <davean> You can use Functional Dependencies to fix this, multiple parameter type classes, or associated types.
01:42:47 thongpv joins (~thongpv87@2402:9d80:3f1:9812:89bf:b07c:d355:c620)
01:43:02 <mauke> the type signature for lookup says I should be able to use it with any key type k, independent of the map type s
01:44:34 <lackita`> Here's the pastebin, btw: https://pastebin.com/BFWhG5wT
01:44:41 <davean> The same is true of type 'v' BTW
01:45:07 <davean> You have provided no connection between them, as the error message spells out.
01:45:43 <lackita`> Yeah, that was my general understanding, but I'm struggline to figure out how to communicate that relationship.
01:45:55 <davean> I gave you 3 options above
01:46:22 <lackita`> oh, hold on, too much scrolling
01:46:26 <mauke> isn't that really just 2 options?
01:46:41 <mauke> fundeps require multi-param type classes
01:46:46 <geekosaur> yes, either way it's an MPTC, with either fundeps or associated types
01:46:53 <davean> mauke: You don't have to use fundeps with MPTC
01:47:07 <mauke> ok, but that would be annoying to use
01:47:31 <davean> I was covering the full options
01:47:42 <davean> There are cases where there is no direct dependency
01:49:45 <davean> In this case there is a strong dependency but in others one of several choices could have to be infered from a set of options
01:51:20 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 260 seconds)
01:51:47 × ddellacosta quits (~ddellacos@143.244.47.81) (Quit: WeeChat 3.8)
01:53:20 ddellacosta joins (~ddellacos@143.244.47.81)
01:56:34 <lackita`> I see, so I guess I wasn't trying to require a tight relationship between the k and v of the instance and the k and v of the class. I guess the types would end up lining up, but I was considering them arbitrary type variables.
01:56:44 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
02:01:25 × bilegeek quits (~bilegeek@2600:1008:b09e:5b5c:fb38:650f:1536:6b2d) (Remote host closed the connection)
02:01:51 bilegeek joins (~bilegeek@2600:1008:b09e:5b5c:fb38:650f:1536:6b2d)
02:02:05 × lackita` quits (~user@73.114.250.252) (Ping timeout: 252 seconds)
02:05:56 <mauke> the class doesn't have k and v
02:06:16 <mauke> with your definition, every use of lookup gets to choose its own k and v
02:06:22 <monochrom> "any k" is ambiguous and you are precisely suffering from the wrong interpretation.
02:06:42 <monochrom> Your problem can be simplified and explained without type classes.
02:06:56 <monochrom> You are attempting "f :: k -> Int".
02:07:20 <monochrom> You think it means the implementer of f (that's you) gets to choose what k means.
02:07:46 <monochrom> But no. The user (that's me) chooses what k means and I can choose a different thing at a different call site.
02:08:17 × sidy quits (~sidy@user/sidy) (Remote host closed the connection)
02:08:18 <monochrom> At one site I'm entitled to make it "f :: Bool -> Int". At another I'm entitled "f :: String -> Int". What are you going to do?
02:08:37 sidy joins (~sidy@user/sidy)
02:08:44 <davean> monochrom: f = const 0
02:09:09 <mauke> parametricity rears its ugly head again
02:09:22 <davean> mauke: you mean its lovely head
02:09:39 <monochrom> How about: polymorphic head haha
02:10:17 <monochrom> @quote monochrom polymorphic
02:10:17 <lambdabot> monochrom says: All pointless debates can be settled by going polymorphic.
02:13:30 × lackita quits (~lackita@73.114.250.252) (Quit: Quit)
02:13:30 × beteigeuze quits (~Thunderbi@a79-169-109-107.cpe.netcabo.pt) (Ping timeout: 260 seconds)
02:15:18 thongpv87 joins (~thongpv87@2402:9d80:3f7:eb1f:5e9:5cfd:6906:7397)
02:17:35 × thongpv quits (~thongpv87@2402:9d80:3f1:9812:89bf:b07c:d355:c620) (Ping timeout: 260 seconds)
02:19:41 × oldfashionedcow quits (~Rahul_San@user/oldfashionedcow) (Ping timeout: 252 seconds)
02:20:12 lackita joins (~user@73.114.250.252)
02:20:48 <lackita> Thank you for the explanation before, sorry I dropped off in the middle, I think I better understand things now.
02:21:11 oldfashionedcow joins (~Rahul_San@user/oldfashionedcow)
02:22:11 × use-value quits (~Thunderbi@2a00:23c6:8a03:2f01:75c2:a71f:beaa:29bf) (Remote host closed the connection)
02:22:30 use-value joins (~Thunderbi@2a00:23c6:8a03:2f01:75c2:a71f:beaa:29bf)
02:24:38 merijn joins (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl)
02:26:54 × oldfashionedcow quits (~Rahul_San@user/oldfashionedcow) (Quit: WeeChat 3.8)
02:27:08 × king_gs quits (~Thunderbi@2806:103e:29:1779:19a5:ca6b:2f79:45e7) (Remote host closed the connection)
02:27:23 oldfashionedcow joins (~Rahul_San@user/oldfashionedcow)
02:27:25 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 252 seconds)
02:27:28 king_gs joins (~Thunderbi@2806:103e:29:1779:19a5:ca6b:2f79:45e7)
02:27:29 Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
02:28:47 Lord_of_Life_ is now known as Lord_of_Life
02:29:03 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:50a4:25c9:e12:371f)
02:29:50 × merijn quits (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl) (Ping timeout: 260 seconds)
02:31:44 × mncheckm quits (~mncheck@193.224.205.254) (Ping timeout: 246 seconds)
02:33:24 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:50a4:25c9:e12:371f) (Ping timeout: 255 seconds)
02:33:34 × justsomeguy quits (~justsomeg@user/justsomeguy) (Quit: WeeChat 3.6)
02:33:42 <davean> lackita: as a rule of thumb, ask "Why must this be right?" not "why could this be right?"
02:34:11 <lackita> got it, I'll try to keep that in mind
02:34:47 <lackita> still trying to make the mental shift, thank you for the advice
02:35:39 × machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 260 seconds)
02:36:11 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 252 seconds)
02:37:40 × jmorris quits (uid537181@id-537181.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
02:40:21 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
02:40:36 azimut joins (~azimut@gateway/tor-sasl/azimut)
02:57:27 gehmehgeh joins (~user@user/gehmehgeh)
02:57:54 Guest joins (~Guest@2409:4073:2e88:d92f:e409:ddc0:97e9:70a2)
02:58:41 × gmg quits (~user@user/gehmehgeh) (Ping timeout: 255 seconds)
02:59:19 × lackita quits (~user@73.114.250.252) (Ping timeout: 252 seconds)
02:59:36 × szkl quits (uid110435@id-110435.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
02:59:43 × PotentialUser-23 quits (~Potential@2600:8800:7b00:2aa0:829e:a723:57f0:e3b8) (Quit: Client closed)
02:59:49 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:50a4:25c9:e12:371f)
03:03:38 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
03:05:44 × jero98772 quits (~jero98772@2800:484:1d80:d8ce:efcc:cbb3:7f2a:6dff) (Remote host closed the connection)
03:09:23 × Guest quits (~Guest@2409:4073:2e88:d92f:e409:ddc0:97e9:70a2) (Ping timeout: 260 seconds)
03:11:15 × xff0x quits (~xff0x@2405:6580:b080:900:9474:b05a:3851:1ef1) (Ping timeout: 260 seconds)
03:19:18 × king_gs quits (~Thunderbi@2806:103e:29:1779:19a5:ca6b:2f79:45e7) (Ping timeout: 255 seconds)
03:27:00 × thongpv87 quits (~thongpv87@2402:9d80:3f7:eb1f:5e9:5cfd:6906:7397) (Ping timeout: 260 seconds)
03:31:10 burnsidesLlama joins (~burnsides@119247164140.ctinets.com)
03:35:27 × burnsidesLlama quits (~burnsides@119247164140.ctinets.com) (Ping timeout: 248 seconds)
03:42:53 rettahcay joins (~kaushikv@c-24-20-37-193.hsd1.or.comcast.net)
03:44:58 × Axman6 quits (~Axman6@user/axman6) (Remote host closed the connection)
03:46:34 Axman6 joins (~Axman6@user/axman6)
03:52:22 razetime joins (~Thunderbi@43.254.111.18)
03:55:23 × td_ quits (~td@83.135.9.23) (Ping timeout: 252 seconds)
03:57:10 td_ joins (~td@i5387090E.versanet.de)
03:59:12 finn_elija joins (~finn_elij@user/finn-elija/x-0085643)
03:59:12 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
03:59:12 finn_elija is now known as FinnElija
04:00:02 xff0x joins (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp)
04:10:27 harveypwca joins (~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67)
04:10:45 × thegeekinside quits (~thegeekin@189.180.83.186) (Ping timeout: 260 seconds)
04:12:15 burnsidesLlama joins (~burnsides@119247164140.ctinets.com)
04:12:15 × bilegeek quits (~bilegeek@2600:1008:b09e:5b5c:fb38:650f:1536:6b2d) (Quit: Leaving)
04:16:05 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 255 seconds)
04:16:52 × burnsidesLlama quits (~burnsides@119247164140.ctinets.com) (Ping timeout: 252 seconds)
04:19:24 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
04:26:42 × Xeroine_ quits (~Xeroine@user/xeroine) (Quit: ZNC 1.8.2+deb2+b1 - https://znc.in)
04:28:05 merijn joins (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl)
04:31:43 Xeroine_ joins (~Xeroine@user/xeroine)
04:37:11 mbuf joins (~Shakthi@49.204.117.35)
04:38:23 × TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Ping timeout: 260 seconds)
04:43:25 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 252 seconds)
04:48:03 × Axman6 quits (~Axman6@user/axman6) (Ping timeout: 240 seconds)
04:56:15 × Vajb quits (~Vajb@2001:999:404:9516:d621:6cbe:c71e:5686) (Read error: Connection reset by peer)
04:56:42 Vajb joins (~Vajb@88.195.165.27)
04:59:45 × merijn quits (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl) (Ping timeout: 255 seconds)
05:06:25 × Vajb quits (~Vajb@88.195.165.27) (Read error: Connection reset by peer)
05:08:53 king_gs joins (~Thunderbi@187.201.41.239)
05:09:10 Axman6 joins (~Axman6@user/axman6)
05:09:47 Vajb joins (~Vajb@2001:999:404:9516:d621:6cbe:c71e:5686)
05:21:05 × phma quits (~phma@host-67-44-208-29.hnremote.net) (Read error: Connection reset by peer)
05:22:04 phma joins (~phma@2001:5b0:210d:608:3734:a17:3698:d342)
05:22:30 × razetime quits (~Thunderbi@43.254.111.18) (Ping timeout: 260 seconds)
05:28:20 × king_gs quits (~Thunderbi@187.201.41.239) (Read error: Connection reset by peer)
05:28:34 king_gs joins (~Thunderbi@2806:103e:29:1779:19a5:ca6b:2f79:45e7)
05:29:31 rettahcay parts (~kaushikv@c-24-20-37-193.hsd1.or.comcast.net) ()
05:30:27 burnsidesLlama joins (~burnsides@119.247.164.140)
05:31:15 razetime joins (~Thunderbi@43.254.111.18)
05:34:33 × burnsidesLlama quits (~burnsides@119.247.164.140) (Remote host closed the connection)
05:36:21 burnsidesLlama joins (~burnsides@119247164140.ctinets.com)
05:37:45 × razetime quits (~Thunderbi@43.254.111.18) (Remote host closed the connection)
05:39:55 × gehmehgeh quits (~user@user/gehmehgeh) (Remote host closed the connection)
05:40:58 gehmehgeh joins (~user@user/gehmehgeh)
05:44:48 × burnsidesLlama quits (~burnsides@119247164140.ctinets.com) (Remote host closed the connection)
05:46:32 jakalx joins (~jakalx@base.jakalx.net)
05:59:01 <albet70> https://paste.tomsmeding.com/Ept5Rb5u this version of quickSort is very good usage on list comprehesion, but how about its speed?
06:00:30 <albet70> like p = s[2..] where s (x: xs) = s [i <- xs, mod i x /= 0]
06:01:25 <int-e> It's not great, even in the best case.
06:01:55 × freeside quits (~mengwong@103.252.202.170) (Ping timeout: 252 seconds)
06:02:13 ravamrt joins (~ravamrt@112.134.194.82)
06:02:13 <albet70> https://hackage.haskell.org/package/base-4.17.0.0/docs/src/Data.OldList.html#sort this version is best?
06:02:47 <int-e> For lists? It has been tuned a lot to be fast, afaik it's the best we have.
06:03:35 thegeekinside joins (~thegeekin@189.180.97.223)
06:03:41 <albet70> the list comprehension version is more easy to read
06:04:23 <albet70> its "let's assume there's a middle value called x, and we compare other values with x"
06:05:02 <albet70> and we actually don't know what x is, but we can use it, is that amazing
06:05:07 <albet70> in list comprehension
06:06:38 <int-e> But in the worst case, one of the recursive calls will get an empty list and the other one will get a list that has one element less than the original one, resulting in quadratic runtime instead of O(n log(n)).
06:07:09 <int-e> And it's library code, you don't really have to read it.
06:11:37 thongpv87 joins (~thongpv87@2402:9d80:3f7:eb1f:fd16:bff4:dc8f:c8d1)
06:14:11 trev joins (~trev@user/trev)
06:14:43 × thegeekinside quits (~thegeekin@189.180.97.223) (Ping timeout: 252 seconds)
06:14:59 falafel joins (~falafel@172.58.187.198)
06:15:19 burnsidesLlama joins (~burnsides@119247164140.ctinets.com)
06:16:47 × oldfashionedcow quits (~Rahul_San@user/oldfashionedcow) (Quit: WeeChat 3.8)
06:19:44 × burnsidesLlama quits (~burnsides@119247164140.ctinets.com) (Ping timeout: 248 seconds)
06:25:49 <albet70> is list comprehension equal to filter or fmap?
06:28:03 freeside joins (~mengwong@202.161.55.11)
06:29:50 takuan joins (~takuan@178-116-218-225.access.telenet.be)
06:31:35 <int-e> @undo [c | a <- [1..3], odd a, b <- [1..3], let c = a + b]
06:31:35 <lambdabot> concatMap (\ a -> if odd a then concatMap (\ b -> let { c = a + b} in [c]) [1 .. 3] else []) [1 .. 3]
06:32:14 <int-e> Oh, no filter? Interesting, I expected the guard to become a filter.
06:32:50 <int-e> @undo should follow what the report specifies; ghc probably does things slightly differently.
06:42:47 × opticblast quits (~Thunderbi@172.58.80.43) (Ping timeout: 264 seconds)
06:56:41 merijn joins (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl)
06:57:03 thegeekinside joins (~thegeekin@189.180.97.223)
06:57:32 × thegeekinside quits (~thegeekin@189.180.97.223) (Remote host closed the connection)
06:58:19 <Clinton[m]> If I have something like the following:... (full message at <https://libera.ems.host/_matrix/media/v3/download/libera.chat/09924ec0371c2773daef544c8a3c69fb2328e38b>)
06:59:54 mjacob joins (~mjacob@adrastea.uberspace.de)
07:01:08 × merijn quits (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl) (Ping timeout: 255 seconds)
07:03:28 <mjacob> i tried to define a function that returns itself: "let f x = f". but it fails with "Couldn't match expected type ‘t’ with actual type ‘p0 -> t’". what’s the problem? i can think of three things: 1) a function returning itself does not make sense at all 2) such function is not representable with haskell’s type system 3) i made a mistake in the definition
07:04:56 shapr joins (~user@net-5-88-238-17.cust.vodafonedsl.it)
07:05:19 Inst__ joins (~Inst@2601:6c4:4081:54f0:d621:5cdd:9051:c240)
07:07:12 × king_gs quits (~Thunderbi@2806:103e:29:1779:19a5:ca6b:2f79:45e7) (Ping timeout: 248 seconds)
07:08:06 thegeekinside joins (~thegeekin@189.180.97.223)
07:08:06 <int-e> mjacob: If a is the type of x, and b is the type of the right-hand side of f, then f has type a -> b. But you're returning f, so this only works if b = a -> b. But solving that would make b's type infinite. That's your error in a nutshell, except that the error uses p0 for a and t for b.
07:08:36 × Inst_ quits (~Inst@2601:6c4:4081:54f0:d621:5cdd:9051:c240) (Ping timeout: 252 seconds)
07:09:50 <mjacob> int-e: are "infinite types" non-sensical or does haskell just not happen to implement it?
07:10:00 <mjacob> is there something like "tying the knot" for types?
07:10:09 <int-e> If you actually want to do such things, you can wrap the result in a newtype: newtype F a = F (a -> F a); let f x = F f
07:10:57 <int-e> (whoops, the `let` is only correct when typing that as separate lines in a ghci context)
07:11:59 <int-e> note that F a is isomorphic to a -> F a, a -> a -> F a, so in the limit that's the infinite a -> a -> a -> ...
07:12:45 <Maxdamantus> Presumably for completeness you'd want `f = F (\x -> f)`
07:13:04 <int-e> what's the difference?
07:14:27 <Maxdamantus> Your one doesn't return `f`
07:15:17 <int-e> Ah right.
07:15:47 cheater_ joins (~Username@user/cheater)
07:15:53 <int-e> I'm kind of blind to that because I'm just ignoring the `F` wrapper newtype completely when reading it.
07:16:34 <Maxdamantus> and as for why Haskell doesn't allow infinite types, I suspect it's not really to do with being hard to implement, but more to do with reducing the chance of errors.
07:17:06 <Maxdamantus> since infinite types are relatively likely to be a sign of something illogical.
07:17:41 michalz joins (~michalz@185.246.204.107)
07:18:01 <int-e> I suspect they would actually cause a rather big mess in the type checker.
07:18:53 × cheater quits (~Username@user/cheater) (Ping timeout: 252 seconds)
07:19:02 cheater_ is now known as cheater
07:20:33 <int-e> For starters, while unification of finite tree-like graphs with loops works relatively easily, it has to interact with type functions too.
07:21:32 <int-e> Comparing two such graphs to check whether they're the same infinte type is not entirely trivial; it's definitely not handled by `deriving Eq` anymore.
07:21:39 int-e shrugs.
07:22:26 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
07:22:30 <int-e> Maxdamantus: Not insurmountable. The fact that this is usually a programming error (as you mentioned) weighs more heavily.
07:22:51 <int-e> I don't know what happens to this story when you mix in higher rank types.
07:23:01 <int-e> I probably don't want to know either :)
07:25:41 <Maxdamantus> https://mail.haskell.org/pipermail/haskell-cafe/2011-February/089492.html
07:26:18 <Maxdamantus> Yeah, so this basically alludes to how in the LC, everything is a function.
07:26:49 <Maxdamantus> it would be pretty useless to make a LC type system that just typed every function as `f = (a -> f)`
07:27:28 <Maxdamantus> or rather, `f = (f -> f)`
07:30:28 × thegeekinside quits (~thegeekin@189.180.97.223) (Ping timeout: 252 seconds)
07:30:28 × falafel quits (~falafel@172.58.187.198) (Ping timeout: 252 seconds)
07:33:32 <int-e> Yeah, newtype L = Abs { app :: L -> L } would be a really cool type for the untyped lamdba calculus except that it makes it fiendishly difficult to get any information out.
07:33:49 kenran joins (~user@user/kenran)
07:37:12 Guest7260 joins (~Guest72@165.57.80.205)
07:37:26 lortabac joins (~lortabac@2a01:e0a:541:b8f0:6d5d:8b8e:2d4b:5bae)
07:37:29 <int-e> "fiendishly difficult" -- you can do stuff with unsafePerformIO and exceptions.
07:44:52 king_gs joins (~Thunderbi@187.201.41.239)
07:51:12 × bontaq quits (~user@ool-45779fe5.dyn.optonline.net) (Ping timeout: 255 seconds)
07:52:22 mncheck joins (~mncheck@193.224.205.254)
07:52:24 × mncheck quits (~mncheck@193.224.205.254) (Remote host closed the connection)
07:53:58 mncheckm joins (~mncheck@193.224.205.254)
07:57:48 burnsidesLlama joins (~burnsides@119247164140.ctinets.com)
07:58:49 Inst_ joins (~Inst@2601:6c4:4081:54f0:d621:5cdd:9051:c240)
08:01:54 × Inst__ quits (~Inst@2601:6c4:4081:54f0:d621:5cdd:9051:c240) (Ping timeout: 255 seconds)
08:02:19 × burnsidesLlama quits (~burnsides@119247164140.ctinets.com) (Ping timeout: 260 seconds)
08:03:04 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
08:04:52 × phma quits (~phma@2001:5b0:210d:608:3734:a17:3698:d342) (Ping timeout: 252 seconds)
08:05:01 phma_ joins (~phma@host-67-44-208-68.hnremote.net)
08:06:43 × harveypwca quits (~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67) (Quit: Leaving)
08:06:55 merijn joins (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl)
08:10:08 × king_gs quits (~Thunderbi@187.201.41.239) (Read error: Connection reset by peer)
08:10:12 king_gs1 joins (~Thunderbi@2806:103e:29:1779:19a5:ca6b:2f79:45e7)
08:11:47 × merijn quits (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl) (Ping timeout: 255 seconds)
08:12:20 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 255 seconds)
08:12:30 king_gs1 is now known as king_gs
08:14:33 chele joins (~chele@user/chele)
08:15:29 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
08:17:53 Inst__ joins (~Inst@2601:6c4:4081:54f0:d621:5cdd:9051:c240)
08:17:55 zeenk joins (~zeenk@2a02:2f04:a214:1e00::7fe)
08:21:15 × Inst_ quits (~Inst@2601:6c4:4081:54f0:d621:5cdd:9051:c240) (Ping timeout: 255 seconds)
08:23:48 nschoe joins (~q@141.101.51.197)
08:24:12 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
08:28:08 × ft quits (~ft@p3e9bc443.dip0.t-ipconnect.de) (Quit: leaving)
08:29:19 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 252 seconds)
08:29:19 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
08:32:59 acidjnk joins (~acidjnk@p200300d6e715c4925d8ff2b2fdd73d05.dip0.t-ipconnect.de)
08:37:42 MajorBiscuit joins (~MajorBisc@2001:1c00:2408:a400:67e:5371:52a7:9b9a)
08:38:02 merijn joins (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl)
08:39:36 × lottaquestions_ quits (~nick@2607:fa49:503e:7100:97f3:c391:158c:f98a) (Remote host closed the connection)
08:40:01 lottaquestions_ joins (~nick@2607:fa49:503e:7100:ab:1d1a:a3a6:1b51)
08:43:05 kuribas joins (~user@ptr-17d51ep3y07q376bohf.18120a2.ip6.access.telenet.be)
08:43:07 <jackdk> https://hackage.haskell.org/package/acme-smuggler
08:44:17 BasLaa joins (~BasLaa@84-28-141-28.cable.dynamic.v4.ziggo.nl)
08:44:36 <[exa]> noooooooooooooo
08:45:15 <dminuoso_> Downloads: 1590 total
08:45:18 <dminuoso_> This has me worried a little.
08:45:31 <merijn> dminuoso_: I mean, loads of package have high downloads from crawlers
08:46:26 <mauke> ooh, neat
08:46:40 tomsmeding saw the Dynamic coming, not the exceptions
08:47:00 <tomsmeding> that's clever
08:47:32 <mauke> the values are all bottom
08:47:46 <tomsmeding> yeah
08:47:53 <tomsmeding> sad though
08:48:04 <tomsmeding> would've been nice to be able to 'show' that it's indeed "just" a unit
08:49:40 × cods quits (~fred@82-65-232-44.subs.proxad.net) (Ping timeout: 252 seconds)
08:51:10 × BasLaa quits (~BasLaa@84-28-141-28.cable.dynamic.v4.ziggo.nl) (Quit: Client closed)
08:51:21 cods joins (~fred@82-65-232-44.subs.proxad.net)
08:55:05 machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net)
08:58:35 × Inst__ quits (~Inst@2601:6c4:4081:54f0:d621:5cdd:9051:c240) (Ping timeout: 256 seconds)
08:59:34 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:50a4:25c9:e12:371f) (Remote host closed the connection)
08:59:37 cfricke joins (~cfricke@user/cfricke)
09:04:23 <Clinton[m]> Lets say I have the following:... (full message at <https://libera.ems.host/_matrix/media/v3/download/libera.chat/e0144bb5fd2d4469761cc1d74fcb26c97b356308>)
09:07:46 × dsal quits (sid13060@id-13060.lymington.irccloud.com) (Ping timeout: 252 seconds)
09:07:50 <Clinton[m]> * Lets say I have the following:... (full message at <https://libera.ems.host/_matrix/media/v3/download/libera.chat/384f0b3c7ac3c334192cf2e2514a0c26fc3b9ce5>)
09:08:03 × yandere quits (sid467876@id-467876.ilkley.irccloud.com) (Ping timeout: 255 seconds)
09:08:03 × edwardk quits (sid47016@haskell/developer/edwardk) (Ping timeout: 255 seconds)
09:08:03 × jakesyl____ quits (sid56879@id-56879.hampstead.irccloud.com) (Ping timeout: 255 seconds)
09:08:03 × alinab quits (sid468903@id-468903.helmsley.irccloud.com) (Ping timeout: 255 seconds)
09:08:14 yandere joins (sid467876@id-467876.ilkley.irccloud.com)
09:08:14 × xacktm quits (~xacktm@user/xacktm) (Quit: fBNC - https://bnc4free.com)
09:08:30 × lechner quits (~lechner@debian/lechner) (Ping timeout: 255 seconds)
09:08:30 × pjlsergeant__ quits (sid143467@id-143467.hampstead.irccloud.com) (Ping timeout: 255 seconds)
09:08:30 × hongminhee quits (sid295@id-295.tinside.irccloud.com) (Ping timeout: 255 seconds)
09:08:30 × lightandlight quits (sid135476@id-135476.helmsley.irccloud.com) (Ping timeout: 255 seconds)
09:08:30 × grfn quits (sid449115@id-449115.helmsley.irccloud.com) (Ping timeout: 255 seconds)
09:08:57 × azathough quits (uid589374@user/azathough) (Ping timeout: 255 seconds)
09:08:57 × scav quits (sid309693@user/scav) (Ping timeout: 255 seconds)
09:08:57 × dmj` quits (sid72307@id-72307.hampstead.irccloud.com) (Ping timeout: 255 seconds)
09:08:57 × PotatoGim quits (sid99505@id-99505.lymington.irccloud.com) (Ping timeout: 255 seconds)
09:09:21 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
09:09:24 × eruditass quits (uid248673@id-248673.uxbridge.irccloud.com) (Ping timeout: 255 seconds)
09:09:24 × megeve quits (uid523379@id-523379.hampstead.irccloud.com) (Ping timeout: 255 seconds)
09:09:24 × idnar quits (sid12240@debian/mithrandi) (Ping timeout: 255 seconds)
09:09:24 × glowcoil quits (sid3405@id-3405.tinside.irccloud.com) (Ping timeout: 255 seconds)
09:09:24 × wallymathieu quits (sid533252@id-533252.uxbridge.irccloud.com) (Ping timeout: 255 seconds)
09:09:32 dsal joins (sid13060@id-13060.lymington.irccloud.com)
09:09:51 × cyphase quits (~cyphase@user/cyphase) (Ping timeout: 255 seconds)
09:09:51 × gmc_ quits (sid58314@id-58314.ilkley.irccloud.com) (Ping timeout: 255 seconds)
09:09:51 × Guest585 quits (~mike@user/feetwind) (Ping timeout: 255 seconds)
09:09:51 × jmct quits (sid160793@id-160793.tinside.irccloud.com) (Ping timeout: 255 seconds)
09:09:59 × urdh quits (~urdh@user/urdh) (Ping timeout: 260 seconds)
09:10:27 megeve joins (sid523379@id-523379.hampstead.irccloud.com)
09:10:28 azathough joins (uid589374@user/azathough)
09:10:28 pjlsergeant__ joins (sid143467@id-143467.hampstead.irccloud.com)
09:10:30 × trev quits (~trev@user/trev) (Remote host closed the connection)
09:10:30 hongminhee joins (sid295@id-295.tinside.irccloud.com)
09:10:33 gmc_ joins (sid58314@id-58314.ilkley.irccloud.com)
09:10:44 cyphase joins (~cyphase@user/cyphase)
09:11:05 eruditass joins (uid248673@id-248673.uxbridge.irccloud.com)
09:11:12 trev joins (~trev@user/trev)
09:12:13 xacktm joins (~xacktm@user/xacktm)
09:12:24 grfn joins (sid449115@id-449115.helmsley.irccloud.com)
09:12:24 scav joins (sid309693@user/scav)
09:12:25 idnar joins (sid12240@debian/mithrandi)
09:12:26 edwardk joins (sid47016@haskell/developer/edwardk)
09:12:26 wallymathieu joins (sid533252@id-533252.uxbridge.irccloud.com)
09:12:27 glowcoil joins (sid3405@id-3405.tinside.irccloud.com)
09:12:27 alinab joins (sid468903@id-468903.helmsley.irccloud.com)
09:12:28 lightandlight joins (sid135476@id-135476.helmsley.irccloud.com)
09:12:28 jmct joins (sid160793@id-160793.tinside.irccloud.com)
09:12:38 PotatoGim joins (sid99505@id-99505.lymington.irccloud.com)
09:12:44 jakesyl____ joins (sid56879@id-56879.hampstead.irccloud.com)
09:12:50 dmj` joins (sid72307@id-72307.hampstead.irccloud.com)
09:13:51 mastarija joins (~mastarija@2a05:4f46:e03:6000:4d71:cd5a:a7fb:2ef7)
09:17:52 CiaoSen joins (~Jura@p200300c9570460002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
09:22:22 Guest585 joins (~mike@user/feetwind)
09:30:53 × cheater quits (~Username@user/cheater) (Read error: Connection timed out)
09:32:22 cheater joins (~Username@user/cheater)
09:33:07 × gpncarl_ quits (~gpncarl@210.12.195.6) (Ping timeout: 252 seconds)
09:33:26 gpncarl_ joins (~gpncarl@210.12.195.6)
09:37:03 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
09:39:01 × tzh quits (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
09:40:47 × jespada quits (~jespada@77.98.179.16) (Ping timeout: 252 seconds)
09:41:21 jespada joins (~jespada@cpc121308-nmal25-2-0-cust15.19-2.cable.virginm.net)
09:49:08 shapr` joins (~user@net-5-88-238-17.cust.vodafonedsl.it)
09:50:48 × shapr quits (~user@net-5-88-238-17.cust.vodafonedsl.it) (Ping timeout: 255 seconds)
09:58:04 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
10:00:03 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:50a4:25c9:e12:371f)
10:04:45 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:50a4:25c9:e12:371f) (Ping timeout: 255 seconds)
10:05:25 × xff0x quits (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 260 seconds)
10:06:31 gnalzo joins (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c)
10:17:26 × L29Ah quits (~L29Ah@wikipedia/L29Ah) (Read error: Connection reset by peer)
10:21:22 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
10:24:22 shapr` is now known as shapr
10:29:11 mmhat joins (~mmh@p200300f1c72b42b0ee086bfffe095315.dip0.t-ipconnect.de)
10:29:36 × mmhat quits (~mmh@p200300f1c72b42b0ee086bfffe095315.dip0.t-ipconnect.de) (Client Quit)
10:30:34 beteigeuze joins (~Thunderbi@a79-169-109-107.cpe.netcabo.pt)
10:52:06 × freeside quits (~mengwong@202.161.55.11) (Ping timeout: 255 seconds)
10:55:40 xff0x joins (~xff0x@2405:6580:b080:900:a328:3e4d:f447:d561)
10:59:16 × econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity)
11:01:41 × acidjnk quits (~acidjnk@p200300d6e715c4925d8ff2b2fdd73d05.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
11:04:38 × king_gs quits (~Thunderbi@2806:103e:29:1779:19a5:ca6b:2f79:45e7) (Ping timeout: 265 seconds)
11:06:11 × mechap quits (~mechap@user/mechap) (Ping timeout: 264 seconds)
11:08:04 mechap joins (~mechap@user/mechap)
11:10:24 __monty__ joins (~toonn@user/toonn)
11:10:28 × jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 252 seconds)
11:12:43 L29Ah joins (~L29Ah@wikipedia/L29Ah)
11:15:23 × mechap quits (~mechap@user/mechap) (Ping timeout: 255 seconds)
11:16:14 accord joins (uid568320@id-568320.hampstead.irccloud.com)
11:17:24 mechap joins (~mechap@user/mechap)
11:18:07 oldfashionedcow joins (~Rahul_San@user/oldfashionedcow)
11:20:38 jespada_ joins (~jespada@cpc121308-nmal25-2-0-cust15.19-2.cable.virginm.net)
11:20:43 lechner joins (~lechner@debian/lechner)
11:20:43 × jespada quits (~jespada@cpc121308-nmal25-2-0-cust15.19-2.cable.virginm.net) (Ping timeout: 248 seconds)
11:25:45 × gpncarl_ quits (~gpncarl@210.12.195.6) (Ping timeout: 255 seconds)
11:28:49 patrl joins (~patrl@user/patrl)
11:29:07 mc47 joins (~mc47@xmonad/TheMC47)
11:36:16 burnsidesLlama joins (~burnsides@119247164140.ctinets.com)
11:36:25 ubert1 joins (~Thunderbi@2a02:8109:abc0:6434:fdd9:182:a444:ad44)
11:36:42 Inst__ joins (~Inst@2601:6c4:4081:54f0:ca9:cf1a:975a:ad95)
11:48:29 acidjnk joins (~acidjnk@p200300d6e715c4924c46451fa3694d1b.dip0.t-ipconnect.de)
11:48:50 × haritzondo quits (~hrtz@82-69-11-11.dsl.in-addr.zen.co.uk) (Changing host)
11:48:50 haritzondo joins (~hrtz@user/haritz)
11:48:54 haritzondo is now known as haritz
11:50:31 × L29Ah quits (~L29Ah@wikipedia/L29Ah) (Read error: Connection reset by peer)
11:54:57 dcoutts_ joins (~duncan@host86-167-90-212.range86-167.btcentralplus.com)
11:57:32 L29Ah joins (~L29Ah@wikipedia/L29Ah)
12:01:18 × patrl quits (~patrl@user/patrl) (Remote host closed the connection)
12:03:15 × ravamrt quits (~ravamrt@112.134.194.82) (Ping timeout: 260 seconds)
12:07:49 × mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection)
12:08:55 × burnsidesLlama quits (~burnsides@119247164140.ctinets.com) (Remote host closed the connection)
12:09:07 burnsidesLlama joins (~burnsides@119247164140.ctinets.com)
12:17:31 gpncarl_ joins (~gpncarl@210.12.195.6)
12:22:27 × gpncarl_ quits (~gpncarl@210.12.195.6) (Ping timeout: 255 seconds)
12:29:07 lyle joins (~lyle@104.246.145.237)
12:32:05 × oldfashionedcow quits (~Rahul_San@user/oldfashionedcow) (Remote host closed the connection)
12:32:29 oldfashionedcow joins (~Rahul_San@user/oldfashionedcow)
12:36:16 × burnsidesLlama quits (~burnsides@119247164140.ctinets.com) (Remote host closed the connection)
12:40:32 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
12:47:12 × dcoutts_ quits (~duncan@host86-167-90-212.range86-167.btcentralplus.com) (Ping timeout: 255 seconds)
12:49:27 × Midjak quits (~Midjak@82.66.147.146) (Quit: Leaving)
12:54:25 freeside joins (~mengwong@103.252.202.170)
12:58:00 × mechap quits (~mechap@user/mechap) (Ping timeout: 255 seconds)
12:59:51 mechap joins (~mechap@user/mechap)
13:02:19 × cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.8)
13:04:45 × mechap quits (~mechap@user/mechap) (Ping timeout: 255 seconds)
13:05:37 dcoutts_ joins (~duncan@host86-167-90-212.range86-167.btcentralplus.com)
13:05:59 Midjak joins (~Midjak@82.66.147.146)
13:06:11 mechap joins (~mechap@user/mechap)
13:07:21 mc47 joins (~mc47@xmonad/TheMC47)
13:11:04 burnsidesLlama joins (~burnsides@119247164140.ctinets.com)
13:18:16 gpncarl_ joins (~gpncarl@210.12.195.6)
13:18:32 urdh joins (~urdh@user/urdh)
13:22:51 × gpncarl_ quits (~gpncarl@210.12.195.6) (Ping timeout: 255 seconds)
13:23:53 thegeekinside joins (~thegeekin@189.180.97.223)
13:31:12 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
13:31:40 × kenran quits (~user@user/kenran) (Remote host closed the connection)
13:32:01 × mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection)
13:32:32 ezzieygu1wuf joins (~Unknown@user/ezzieyguywuf)
13:32:53 × mechap quits (~mechap@user/mechap) (Quit: WeeChat 3.8)
13:33:39 × ezzieyguywuf quits (~Unknown@user/ezzieyguywuf) (Ping timeout: 260 seconds)
13:35:58 mc47 joins (~mc47@xmonad/TheMC47)
13:38:36 × freeside quits (~mengwong@103.252.202.170) (Ping timeout: 255 seconds)
13:49:58 × gnalzo quits (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 3.8)
13:50:12 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
13:53:35 kurbus joins (~kurbus@user/kurbus)
13:56:54 mechap joins (~mechap@user/mechap)
13:58:33 × jle` quits (~jle`@23.240.75.236) (Ping timeout: 252 seconds)
13:59:55 × Xeroine_ quits (~Xeroine@user/xeroine) (Ping timeout: 260 seconds)
14:00:42 jle` joins (~jle`@cpe-23-240-75-236.socal.res.rr.com)
14:03:50 Xeroine_ joins (~Xeroine@user/xeroine)
14:05:58 maroloccio joins (~marolocci@90.167.158.133)
14:08:57 razetime joins (~Thunderbi@117.193.2.42)
14:10:25 × burnsidesLlama quits (~burnsides@119247164140.ctinets.com) (Ping timeout: 260 seconds)
14:11:11 × maroloccio quits (~marolocci@90.167.158.133) (Quit: WeeChat 3.7.1)
14:11:36 maroloccio joins (~marolocci@90.167.158.133)
14:11:47 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
14:17:36 × Xeroine_ quits (~Xeroine@user/xeroine) (Ping timeout: 248 seconds)
14:17:59 × nschoe quits (~q@141.101.51.197) (Ping timeout: 252 seconds)
14:19:28 Xeroine_ joins (~Xeroine@user/xeroine)
14:26:28 nschoe joins (~q@141.101.51.197)
14:26:43 × hueso quits (~root@user/hueso) (Ping timeout: 268 seconds)
14:26:48 freeside joins (~mengwong@103.252.202.170)
14:30:22 hueso joins (~root@user/hueso)
14:31:14 × kurbus quits (~kurbus@user/kurbus) (Quit: Client closed)
14:37:06 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 255 seconds)
14:39:04 tr|ck joins (~trick@user/trck/x-5559992)
14:39:56 burnsidesLlama joins (~burnsides@119247164140.ctinets.com)
14:40:52 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
14:42:35 wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com)
14:42:35 × wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
14:42:35 wroathe joins (~wroathe@user/wroathe)
14:47:00 × tr|ck quits (~trick@user/trck/x-5559992) (Ping timeout: 255 seconds)
14:49:30 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 260 seconds)
14:51:08 waleee joins (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7)
14:55:20 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 260 seconds)
15:02:24 × Guest7260 quits (~Guest72@165.57.80.205) (Quit: Client closed)
15:04:30 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:50a4:25c9:e12:371f)
15:09:20 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:50a4:25c9:e12:371f) (Ping timeout: 260 seconds)
15:09:28 tr|ck joins (~trick@user/trck/x-5559992)
15:09:45 × oldfashionedcow quits (~Rahul_San@user/oldfashionedcow) (Quit: WeeChat 3.8)
15:12:11 × acidjnk quits (~acidjnk@p200300d6e715c4924c46451fa3694d1b.dip0.t-ipconnect.de) (Ping timeout: 248 seconds)
15:13:01 AlexZenon_2 is now known as AlexZenon
15:13:53 Alex_test_ is now known as Alex_test
15:15:08 enoq joins (~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7)
15:16:50 × nattiestnate quits (~nate@202.138.250.53) (Quit: WeeChat 3.8)
15:17:13 nattiestnate joins (~nate@202.138.250.37)
15:18:11 phma_ is now known as phma
15:23:37 hounded joins (~hounded@2603-7000-da43-eccc-0000-0000-0000-0cec.res6.spectrum.com)
15:23:57 hounded_woodstoc joins (~hounded@2603-7000-da43-eccc-0000-0000-0000-0cec.res6.spectrum.com)
15:25:30 tromp joins (~textual@92.110.219.57)
15:26:07 × use-value quits (~Thunderbi@2a00:23c6:8a03:2f01:75c2:a71f:beaa:29bf) (Remote host closed the connection)
15:26:25 use-value joins (~Thunderbi@2a00:23c6:8a03:2f01:75c2:a71f:beaa:29bf)
15:29:49 harveypwca joins (~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67)
15:30:27 acidjnk joins (~acidjnk@2003:d6:e715:c492:4016:f417:874:f7c3)
15:31:01 jinsun joins (~jinsun@user/jinsun)
15:31:27 gnalzo joins (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c)
15:34:51 × img quits (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in)
15:35:08 img joins (~img@user/img)
15:39:10 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:50a4:25c9:e12:371f)
15:39:30 × nek0 quits (~nek0@2a01:4f8:222:2b41::12) (Quit: I don't want to spoil the fun any further…)
15:39:39 Sgeo joins (~Sgeo@user/sgeo)
15:41:25 gurkenglas joins (~gurkengla@dynamic-046-114-176-170.46.114.pool.telefonica.de)
15:41:47 × burnsidesLlama quits (~burnsides@119247164140.ctinets.com) (Ping timeout: 255 seconds)
15:45:54 × accord quits (uid568320@id-568320.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
15:48:43 aryl joins (~aryl@pool175-134.domashka.kiev.ua)
15:49:27 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:6d5d:8b8e:2d4b:5bae) (Quit: WeeChat 2.8)
15:50:05 × Luj quits (~Luj@2a01:e0a:5f9:9681:e45d:27d5:311f:767e) (Quit: Ping timeout (120 seconds))
15:50:24 Luj joins (~Luj@2a01:e0a:5f9:9681:40ef:5a70:1bf4:6920)
15:52:27 × maroloccio quits (~marolocci@90.167.158.133) (Quit: WeeChat 3.7.1)
15:54:40 burnsidesLlama joins (~burnsides@119247164140.ctinets.com)
15:54:48 × burnsidesLlama quits (~burnsides@119247164140.ctinets.com) (Remote host closed the connection)
15:58:42 × aryl quits (~aryl@pool175-134.domashka.kiev.ua) (Quit: Leaving)
16:00:04 × Tisoxin quits (~ikosit@user/ikosit) (Quit: You have been kicked for being idle)
16:04:33 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:50a4:25c9:e12:371f) (Remote host closed the connection)
16:05:02 gpncarl_ joins (~gpncarl@210.12.195.6)
16:09:49 × gpncarl_ quits (~gpncarl@210.12.195.6) (Ping timeout: 252 seconds)
16:10:42 Guest|59 joins (~Guest|59@5072AF5A.static.ziggozakelijk.nl)
16:15:14 × mncheckm quits (~mncheck@193.224.205.254) (Read error: Connection reset by peer)
16:15:25 × Guest|59 quits (~Guest|59@5072AF5A.static.ziggozakelijk.nl) (Client Quit)
16:15:56 × waleee quits (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) (Quit: WeeChat 3.8)
16:19:21 × mbuf quits (~Shakthi@49.204.117.35) (Quit: Leaving)
16:25:43 kurbus joins (~kurbus@user/kurbus)
16:30:24 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:50a4:25c9:e12:371f)
16:31:30 kurbus is now known as npm_i_kurbus
16:32:42 azimut joins (~azimut@gateway/tor-sasl/azimut)
16:39:57 ravamrt joins (~ravamrt@112.134.195.223)
16:43:55 × werneta quits (~werneta@70.142.214.115) (Remote host closed the connection)
16:44:27 × nschoe quits (~q@141.101.51.197) (Ping timeout: 255 seconds)
16:46:09 × CiaoSen quits (~Jura@p200300c9570460002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 255 seconds)
16:47:24 bgs joins (~bgs@212-85-160-171.dynamic.telemach.net)
16:51:06 × lechner quits (~lechner@debian/lechner) (Ping timeout: 255 seconds)
16:51:14 × edwardk quits (sid47016@haskell/developer/edwardk) (Ping timeout: 252 seconds)
16:52:00 × dmj` quits (sid72307@id-72307.hampstead.irccloud.com) (Ping timeout: 255 seconds)
16:52:00 × hongminhee quits (sid295@id-295.tinside.irccloud.com) (Ping timeout: 255 seconds)
16:52:00 edwardk joins (sid47016@haskell/developer/edwardk)
16:52:09 hongminhee joins (sid295@id-295.tinside.irccloud.com)
16:52:27 × azathough quits (uid589374@user/azathough) (Ping timeout: 255 seconds)
16:53:04 × glowcoil quits (sid3405@id-3405.tinside.irccloud.com) (Ping timeout: 252 seconds)
16:53:21 × xff0x quits (~xff0x@2405:6580:b080:900:a328:3e4d:f447:d561) (Ping timeout: 255 seconds)
16:53:34 azathough joins (uid589374@user/azathough)
16:53:34 lechner joins (~lechner@debian/lechner)
16:53:38 xff0x joins (~xff0x@2405:6580:b080:900:a328:3e4d:f447:d561)
16:53:58 dmj` joins (sid72307@2a03:5180:f:4::1:1a73)
16:54:03 glowcoil joins (sid3405@id-3405.tinside.irccloud.com)
16:54:33 × acidjnk quits (~acidjnk@2003:d6:e715:c492:4016:f417:874:f7c3) (Ping timeout: 252 seconds)
16:55:35 patrl joins (~patrl@user/patrl)
17:01:52 Guest|60 joins (~Guest|60@wn-campus-nat-129-97-124-25.dynamic.uwaterloo.ca)
17:02:10 × Guest|60 quits (~Guest|60@wn-campus-nat-129-97-124-25.dynamic.uwaterloo.ca) (Client Quit)
17:04:28 Tuplanolla joins (~Tuplanoll@91-159-68-152.elisa-laajakaista.fi)
17:04:31 × razetime quits (~Thunderbi@117.193.2.42) (Remote host closed the connection)
17:06:21 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:50a4:25c9:e12:371f) (Remote host closed the connection)
17:10:28 accord joins (uid568320@id-568320.hampstead.irccloud.com)
17:10:46 oldfashionedcow joins (~Rahul_San@user/oldfashionedcow)
17:11:15 × ddellacosta quits (~ddellacos@143.244.47.81) (Ping timeout: 260 seconds)
17:14:48 shapr` joins (~user@net-5-88-239-92.cust.vodafonedsl.it)
17:16:23 × shapr quits (~user@net-5-88-238-17.cust.vodafonedsl.it) (Ping timeout: 264 seconds)
17:17:39 × dcoutts_ quits (~duncan@host86-167-90-212.range86-167.btcentralplus.com) (Ping timeout: 255 seconds)
17:18:23 × thongpv87 quits (~thongpv87@2402:9d80:3f7:eb1f:fd16:bff4:dc8f:c8d1) (Ping timeout: 248 seconds)
17:19:36 thongpv joins (~thongpv87@14.246.240.242)
17:21:43 Sgeo_ joins (~Sgeo@user/sgeo)
17:23:13 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:50a4:25c9:e12:371f)
17:23:50 × srk quits (~sorki@user/srk) (Ping timeout: 246 seconds)
17:23:54 × thegeekinside quits (~thegeekin@189.180.97.223) (Remote host closed the connection)
17:23:55 × shapr` quits (~user@net-5-88-239-92.cust.vodafonedsl.it) (Ping timeout: 248 seconds)
17:24:14 thegeekinside joins (~thegeekin@189.180.97.223)
17:25:05 Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
17:25:15 × Sgeo quits (~Sgeo@user/sgeo) (Ping timeout: 260 seconds)
17:26:18 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 255 seconds)
17:26:22 Lord_of_Life_ is now known as Lord_of_Life
17:32:49 tr|ck parts (~trick@user/trck/x-5559992) ()
17:33:08 Joao003 joins (~Joao003@2804:840:8309:8700:cf:9c07:d6ca:caa3)
17:34:58 × tromp quits (~textual@92.110.219.57) (Read error: Connection reset by peer)
17:42:17 × Joao003 quits (~Joao003@2804:840:8309:8700:cf:9c07:d6ca:caa3) (Read error: Connection reset by peer)
17:42:21 dcoutts_ joins (~duncan@host86-167-90-212.range86-167.btcentralplus.com)
17:48:07 × MajorBiscuit quits (~MajorBisc@2001:1c00:2408:a400:67e:5371:52a7:9b9a) (Ping timeout: 252 seconds)
17:49:55 andrewboltachev joins (~andrey@178.141.125.176)
17:52:32 werneta joins (~werneta@137.79.195.231)
17:52:52 × phma quits (~phma@host-67-44-208-68.hnremote.net) (Read error: Connection reset by peer)
17:53:06 × ubert1 quits (~Thunderbi@2a02:8109:abc0:6434:fdd9:182:a444:ad44) (Quit: ubert1)
17:53:46 phma joins (phma@2001:5b0:210d:bd78:7d2a:52e1:c274:2d5)
17:56:52 × enoq quits (~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7) (Quit: enoq)
17:57:25 econo joins (uid147250@user/econo)
17:58:19 × chele quits (~chele@user/chele) (Remote host closed the connection)
17:59:05 × bollu quits (~bollu@159.65.151.13) (Quit: Ping timeout (120 seconds))
17:59:17 tzh joins (~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
17:59:34 bollu joins (~bollu@159.65.151.13)
18:01:23 × ravamrt quits (~ravamrt@112.134.195.223) (Quit: Leaving.)
18:06:29 CiaoSen joins (~Jura@p200300c9570460002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
18:09:01 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:50a4:25c9:e12:371f) (Remote host closed the connection)
18:09:18 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
18:14:18 Joao003 joins (~Joao003@2804:840:8309:8700:b01f:79f9:8910:d564)
18:18:07 thongpv87 joins (~thongpv87@2402:9d80:3bb:7b3a:7018:2d58:855e:f2ef)
18:20:27 × thongpv quits (~thongpv87@14.246.240.242) (Ping timeout: 248 seconds)
18:21:48 rlj joins (~rlj@194-218-34-180.customer.telia.com)
18:22:38 xeph joins (~xeph@2a02-8428-8326-2501-4a51-c5ff-fe27-99a8.rev.sfr.net)
18:25:18 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
18:30:06 × beteigeuze quits (~Thunderbi@a79-169-109-107.cpe.netcabo.pt) (Ping timeout: 255 seconds)
18:30:58 beteigeuze joins (~Thunderbi@a79-169-109-107.cpe.netcabo.pt)
18:31:20 ravamrt joins (~ravamrt@112.134.195.223)
18:33:59 × ubert quits (~Thunderbi@84.140.142.240) (Quit: ubert)
18:35:12 × beteigeuze quits (~Thunderbi@a79-169-109-107.cpe.netcabo.pt) (Ping timeout: 248 seconds)
18:35:55 <Joao003> hi
18:36:03 <Joao003> how do i convert Char to String?
18:36:32 <trev> put it in a list
18:36:37 <Joao003> oh i can just nest it in a list
18:37:43 <Joao003> since String is just [Char] I can simply `\x -> [x]`
18:38:03 <Joao003> or even better: `return :: a -> [a]`
18:39:11 <geekosaur> > (:[]) 'a' -- munch!
18:39:13 <lambdabot> "a"
18:39:22 <[exa]> ( strings are chars cleaned of impurities, so `pure` should work just as well. )
18:42:27 × npm_i_kurbus quits (~kurbus@user/kurbus) (Quit: Client closed)
18:43:18 × xeph quits (~xeph@2a02-8428-8326-2501-4a51-c5ff-fe27-99a8.rev.sfr.net) (Ping timeout: 260 seconds)
18:47:27 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:50a4:25c9:e12:371f)
18:48:12 kurbus joins (~kurbus@user/kurbus)
18:49:20 × rlj quits (~rlj@194-218-34-180.customer.telia.com) (Quit: Client closed)
18:51:06 <Joao003> after all, `pure` is just `return`
18:53:02 tomsmeding sometimes uses 'pure' as a short idiom to put stuff in a singleton list, like 'map pure ...'
18:54:46 × mastarija quits (~mastarija@2a05:4f46:e03:6000:4d71:cd5a:a7fb:2ef7) (Quit: WeeChat 3.7.1)
18:54:57 × gurkenglas quits (~gurkengla@dynamic-046-114-176-170.46.114.pool.telefonica.de) (Ping timeout: 255 seconds)
18:58:57 Sciencentistguy5 joins (~sciencent@hacksoc/ordinary-member)
18:59:01 dsal always uses `pure` because pure code is better and doesn't want to return to the old ways
19:01:02 × Sciencentistguy quits (~sciencent@hacksoc/ordinary-member) (Ping timeout: 252 seconds)
19:01:02 Sciencentistguy5 is now known as Sciencentistguy
19:02:54 hounded_1969 joins (~hounded@2603-7000-da43-eccc-0000-0000-0000-0cec.res6.spectrum.com)
19:03:11 opticblast joins (~Thunderbi@172.58.82.191)
19:03:19 <Joao003> im in hexchat, how do i send these messages with asterisk
19:03:25 <tomsmeding> /me
19:04:01 Joao003 never uses `pure`, always uses `return`
19:04:43 <geekosaur> you miht want to get out of that habit in case the "monad of no return" proposal ever lands
19:05:07 <tomsmeding> why?
19:05:18 <geekosaur> (it's silly to have both `pure` and `return` when they have to do the same thing and `pure` is required via Applicative anyway)
19:05:36 <tomsmeding> surely 'return' will never vanish from Prelude
19:05:42 <tomsmeding> that would break absolutely everything
19:06:50 <dsal> `return` is just bad. It can be a compatibility function if someone wants it, but Haskell will be better when no code mentions `return`
19:07:12 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
19:08:35 <geekosaur> that being one of the sticking points on the proposal; it designates a deprecation schedule for `return` and not everyone agrees with that
19:08:49 <tomsmeding> I see
19:09:57 <dsal> Not everyone even agrees that `return` is bad. People like weird things.
19:11:39 gurkenglas joins (~gurkengla@dynamic-046-114-176-170.46.114.pool.telefonica.de)
19:11:49 <tomsmeding> I'm for removing 'return' from Monad, but I don't see how removing 'return' from Prelude accomplishes anything
19:11:53 <tomsmeding> should I just read the proposal?
19:12:12 Joao003 now only uses `return` situationally
19:12:47 <Joao003> yeah. i can use return in situations like `main = return ()`
19:12:59 <dsal> I don't think many people agree with what Prelude is meant to be, either.
19:13:11 <Joao003> it's like a pass in python
19:13:14 <tomsmeding> fair :)
19:13:23 <dsal> e.g., it's nice having `head` in there for people playing around and learning stuff, but it's bad for real apps.
19:13:35 <dsal> But we use an alternate prelude at work and I very much dislike it.
19:13:49 <Joao003> why an alternate prelude?
19:13:54 <dsal> Joao003: `pure ()` is as well, but has fewer characters and isn't weird.
19:14:11 <tomsmeding> why dislike, because of the hassle with NoImplicitPrelude?
19:14:26 <dsal> Prelude alternatives remove bad things (like `head`) and add things that you need all the time and don't want to have to import.
19:14:47 <Joao003> dsal: nah, `return ()` sounds more fine to me, coming from python
19:15:01 <dsal> Ours is mostly bad because it's significantly larger and I don't want to try to remember all the things in it. It also has monotraversable which most people agree is pretty awful.
19:15:11 <Joao003> ugh.
19:15:26 <dsal> Joao003: One of the things I don't like about `return` is that it "sounds fine" because it implies it's doing something that's not what it's actually doing.
19:15:42 × urdh quits (~urdh@user/urdh) (Quit: Boom!)
19:15:52 <dsal> The implementation of `return ()` is almost always `pure ()`
19:16:12 <dsal> (I'm not aware of cases where it isn't, but I assume anything that can be done poorly is)
19:16:20 <Joao003> yeah. return is not returning. returning is at the end of a function, not at any point.
19:16:49 ddellacosta joins (~ddellacos@146.70.166.203)
19:17:35 urdh joins (~urdh@user/urdh)
19:17:36 <dsal> It's also strange that you say you like `return` because it's like `pass` in python. But not `pure` which is more like `pass` in python than `return` is like `return` in python.
19:17:41 <Joao003> situation solved: `pass = pure (); main = pass` sounds very fine to a pythonist
19:18:21 <Joao003> if you don't know, pass in python is used when code is required but there is no code
19:19:06 <Joao003> like in `def f(): pass` (behind the curtains it returns None but anyways)
19:20:00 <dsal> Yeah, that's context-dependent, though. In that case maybe it's `mempty` or `()` or `id` or just `undefined` which I like because I need to go back and fix it.
19:20:39 <tomsmeding> :t mempty :: IO ()
19:20:40 <lambdabot> IO ()
19:20:50 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:50a4:25c9:e12:371f) (Remote host closed the connection)
19:20:54 <Joao003> code is cluttered
19:20:55 <tomsmeding> doesn't work for all monads though
19:21:05 <Joao003> > mempty :: IO ()
19:21:07 <lambdabot> <IO ()>
19:21:28 <Joao003> very cluttered. better use (pure () :: IO ())
19:22:00 <geekosaur> % mempty :: IO ()
19:22:00 <yahb2> <no output>
19:22:18 <Joao003> % pure () :: IO (); print "HI!"
19:22:18 <yahb2> <interactive>:30:1: error: ; Invalid type signature: pure () :: ... ; Should be of form <variable> :: <type>
19:22:29 <Joao003> % (pure () :: IO ()); print "HI!"
19:22:29 <yahb2> <interactive>:32:1: error: ; Parse error: module header, import declaration ; or top-level declaration expected.
19:22:30 <dsal> Nah, but `pure ()` can't just be put anywhere. If you're writing code that needs to "do nothing" the idea of "doing nothing" still has to fit with the types.
19:22:37 <tomsmeding> % do mempty; print "hi"
19:22:37 <yahb2> <interactive>:34:4: error: ; • Ambiguous type variable ‘a0’ arising from a use of ‘mempty’ ; prevents the constraint ‘(Monoid a0)’ from being solved. ; Probable fix: use a type anno...
19:22:37 <Joao003> oh.
19:22:43 <tomsmeding> % do (mempty :: IO ()); print "hi"
19:22:43 <yahb2> Oops, something went wrong
19:22:46 <tomsmeding> % do (mempty :: IO ()); print "hi"
19:22:46 <yahb2> "hi"
19:22:50 <tomsmeding> I really need to fix that
19:23:04 <Joao003> % do (pure () :: IO ()); print "hi"
19:23:04 <yahb2> "hi"
19:23:16 <Joao003> @src mempty
19:23:16 <lambdabot> Source not found. I feel much better now.
19:23:23 <tomsmeding> it's a method of Monoid
19:23:37 <Joao003> @src Monoid mempty
19:23:37 <lambdabot> Source not found. There are some things that I just don't know.
19:23:37 <tomsmeding> () is a (trivial) monoid, and IO a is a monoid whenever 'a' is
19:23:48 <tomsmeding> it wouldn't make sense to show that source
19:24:00 <tomsmeding> the source is in the instances
19:24:41 <Joao003> these monad applicative monoid are too complicated for me, a pythonist
19:24:54 <tomsmeding> a monoid is a thing with a 0 and a +
19:25:02 <tomsmeding> > mempty :: String
19:25:04 <lambdabot> ""
19:25:09 <tomsmeding> > "abc" <> "def"
19:25:10 <Joao003> basically group but less strict?
19:25:11 <lambdabot> "abcdef"
19:25:21 <tomsmeding> Joao003: precisely, a group without additive inverses
19:25:26 <Joao003> yeah
19:25:31 <Joao003> so it's less strict
19:25:56 <tomsmeding> % Sum 4 <> Sum 10 <> Sum 12
19:25:56 <yahb2> <interactive>:8:1: error: ; • Data constructor not in scope: Sum :: t2 -> a ; • Perhaps you meant variable ‘sum’ (imported from Prelude) ; ; <interactive>:8:10: error: ; • Data constru...
19:25:59 <tomsmeding> > Sum 4 <> Sum 10 <> Sum 12
19:26:01 <lambdabot> Sum {getSum = 26}
19:26:04 <Joao003> a functor is like an arrow from 1 element in a group to another
19:26:10 <tomsmeding> > Product 4 <> Product 10 <> Product 12
19:26:12 <lambdabot> Product {getProduct = 480}
19:26:25 <Joao003> wth is this sum and product thing
19:26:25 <tomsmeding> > (mempty :: Sum Int, mempty :: Product Int)
19:26:27 <lambdabot> (Sum {getSum = 0},Product {getProduct = 1})
19:26:38 <tomsmeding> data Sum a = Sum { getSum :: a }
19:26:41 <tomsmeding> similarly for Product
19:26:47 <tomsmeding> the interesting thing is their Monoid instance
19:26:57 × TimWolla quits (~timwolla@2a01:4f8:150:6153:beef::6667) (Quit: Bye)
19:27:05 <tomsmeding> (well, newtype actually, not data, but that's irrelevant to the current discussion)
19:27:05 <Joao003> @src Monoid Sum
19:27:05 <lambdabot> Source not found.
19:27:07 × oldfashionedcow quits (~Rahul_San@user/oldfashionedcow) (Ping timeout: 248 seconds)
19:27:13 <Joao003> .-.
19:27:16 <tomsmeding> https://hackage.haskell.org/package/base-4.17.0.0/docs/Data-Monoid.html#t:Sum
19:27:28 <tomsmeding> Joao003: https://hackage.haskell.org/package/base-4.17.0.0/docs/src/Data.Semigroup.Internal.html#line-227
19:27:41 <tomsmeding> ugly stuffs because people found it useful to optimise this
19:27:55 <tomsmeding> (<>) should read: Sum a <> Sum b = Sum (a + b)
19:28:15 <Joao003> ohhhhh
19:28:21 <mauke> Group without inverses
19:28:22 <tomsmeding> ((<>) is really in Semigroup, not in Monoid -- a Semigroup is a group without additive inverses and without zero, so only an associative +)
19:28:41 <Joao003> basically a group without inverses and a neutral element
19:28:48 <tomsmeding> yes
19:29:06 <Joao003> we usually don't call it zero
19:29:13 <tomsmeding> https://commons.wikimedia.org/wiki/File:Magma_to_group4.svg
19:29:27 <Joao003> good to see group theory pop out of nowhere
19:29:45 <tomsmeding> monoids turn out to be insanely useful
19:30:09 <tomsmeding> semigroups-that-are-not-monoids also sometimes occur, less often though
19:31:01 <Joao003> jsik is there a group typeclass?
19:31:09 <tomsmeding> not in base
19:31:17 <Joao003> .-.
19:31:23 <tomsmeding> @hackage groups
19:31:23 <lambdabot> https://hackage.haskell.org/package/groups
19:31:24 <Joao003> what is a functor then
19:31:42 <tomsmeding> the haskell Functor typeclass is kind of an endofunctor on Hask, if I'm not mistaken
19:31:56 <Joao003> so what's an endofunctor
19:32:03 <tomsmeding> or no, that's incorrectly stated: instances of the Functor typeclass are endofunctors on Hask
19:32:11 <dminuoso_> Joao003: Its a construction from category theory.
19:32:15 <tomsmeding> a functor from a category to itself, as opposed to to another category :p
19:32:22 <dminuoso_> Joao003: It's almost entirely irrelevant to the purpose of learning Haskell, mind you.
19:32:25 <tomsmeding> yes
19:32:32 TimWolla joins (~timwolla@2a01:4f8:150:6153:beef::6667)
19:32:55 <tomsmeding> for learning haskell, the relevant thing about Functor is that you can lift functions (a -> b) to functions (f a -> f b)
19:32:56 <dminuoso_> A pragmatic beginner intuition of what Functor is, is things you can "map over" in a sensible way.
19:33:10 <Joao003> so we have group theory and cat. theory in hask
19:33:48 <Joao003> it's basically each element having an arrow from itself to another element
19:34:19 <dminuoso_> Are you merely curious, or are you hoping to improve your Haskell with this?
19:34:30 <Joao003> im trying to improve my haskell
19:34:39 <dminuoso_> Then my recommendation, dont bother with the category part in the slightest.
19:34:49 <tomsmeding> agreed
19:34:51 <dminuoso_> It really wont help in all likelihood, unless you already have the category theory knowledge in the first place.
19:35:21 <Joao003> "a monad is a monoid in the category of endofunctors" is that correct?
19:35:29 <dminuoso_> Functor is the typeclass of things you can "map over" in a sensible fashion, as in `mapping with a function over a list`
19:35:40 <dminuoso_> Joao003: It's a joke that is, perfectly honest, inaccurately told.
19:35:48 <tomsmeding> it's correct but misses a bit of context, and is completely unhelpful and uninformative to any haskell programmer
19:35:49 <dminuoso_> It's not a means for understanding, it's really just a joke.
19:36:18 <Joao003> so monad is just a little typeclass with a few functions
19:36:28 <dminuoso_> Joao003: yes!
19:36:34 <dminuoso_> That's really all that monad is.
19:36:34 <tomsmeding> a very general and useful one, though
19:36:49 <Joao003> even [] is a monad
19:36:52 <dminuoso_> Yes.
19:37:01 <dminuoso_> Joao003: The somewhat difficult part is recognizing what it abstracts over, and that comes from just understanding each individual instance.
19:37:13 <Joao003> @src Monad
19:37:13 <lambdabot> class Applicative m => Monad m where
19:37:14 <lambdabot> -- Note: Applicative wasn't a superclass before GHC 7.10
19:37:14 <lambdabot> (>>=) :: m a -> (a -> m b) -> m b
19:37:14 <lambdabot> (>>) :: m a -> m b -> m b
19:37:14 <lambdabot> return :: a -> m a
19:37:15 <lambdabot> fail :: String -> m a
19:37:16 <dminuoso_> Each individual instance is very easy to learn by inexperienced beginners.
19:37:18 × urdh quits (~urdh@user/urdh) (Quit: Boom!)
19:37:27 <Joao003> so what's an applicative...?
19:37:32 jakalx joins (~jakalx@base.jakalx.net)
19:37:46 <tomsmeding> monad-ish, but weaker
19:37:47 <dminuoso_> Something that should be explained in your syllabus or book you should be studying.
19:37:54 <Joao003> @src Applicative
19:37:54 <lambdabot> class Functor f => Applicative f where
19:37:54 <tomsmeding> :D
19:37:54 <lambdabot> pure :: a -> f a
19:37:54 <lambdabot> (<*>) :: f (a -> b) -> f a -> f b
19:37:58 <Joao003> ooh
19:38:07 <Joao003> defines pure and <*>
19:38:12 oldfashionedcow joins (~Rahul_San@user/oldfashionedcow)
19:38:23 <Joao003> so return is just a trash pile in monad
19:38:58 <EvanR> pure and return create an action with no effect
19:38:58 <ddellacosta> it's just the same as pure
19:39:29 <Joao003> <*> takes a functor of functions, a functor and applies those functions to the value within functor
19:39:33 <ddellacosta> Joao003: https://hackage.haskell.org/package/base-4.17.0.0/docs/src/GHC.Base.html#return
19:39:43 <Joao003> i understand
19:40:11 <Joao003> @src return
19:40:11 <lambdabot> Source not found. I feel much better now.
19:40:35 <Joao003> it's like fmap isn't it
19:40:48 <Joao003> pure just wraps
19:41:10 × thongpv87 quits (~thongpv87@2402:9d80:3bb:7b3a:7018:2d58:855e:f2ef) (Ping timeout: 260 seconds)
19:41:15 <EvanR> wrapping and unwrapping might work for some examples but not others
19:41:35 <EvanR> as an analogy
19:42:37 × mcglk_ quits (~mcglk@131.191.49.120) (Read error: Connection reset by peer)
19:42:48 <Joao003> ok (>>=) is just fmap isn't it
19:42:55 <EvanR> no
19:43:06 <EvanR> it's a combination of fmap and join
19:43:19 <tomsmeding> with (>>=) you can choose what function to apply based on the "intermediate" value in your monadic computation
19:43:25 <tomsmeding> fmap applies the same function always
19:43:26 <Joao003> @src join
19:43:26 <lambdabot> join x = x >>= id
19:43:32 <EvanR> :t join
19:43:33 <lambdabot> Monad m => m (m a) -> m a
19:43:51 <EvanR> use the types luke
19:43:51 <Joao003> BUT JOIN IS DEFINED IN TERMS OF BIND HOW IN TARNATION AM I SUPPOSED TO GET BIND FROM TERMS OF JOIN
19:43:53 <geekosaur> using @src won't help because Haskell defines a monad "backwards"
19:43:54 urdh joins (~urdh@user/urdh)
19:44:05 <dminuoso_> Joao003: My recommendation, ignore applicative for now.
19:44:11 <Joao003> ... ok.
19:44:19 <dminuoso_> For a beginner you likely can get away with just Monad most of the time.
19:44:30 mcglk joins (~mcglk@131.191.49.120)
19:44:39 <dminuoso_> (Applicative becomes only a main concern for a select view types that have Applicative but not Monad, but thats nothing you need worry about for now)
19:44:44 <Joao003> but what the hell are all of these functions supposed to do
19:44:46 <geekosaur> you might want to start from lists, where fmap is map and join is concat
19:44:53 <tomsmeding> you can define join in terms of bind, and bind in terms of join; hence to define a monad, you can give either, and the other will be defined in terms of it
19:44:57 <Joao003> wth is fail for
19:45:01 <Joao003> @src [] fail
19:45:01 <lambdabot> fail _ = []
19:45:08 <geekosaur> mistakes, mostly 🙂
19:45:15 <tomsmeding> mathematicians tend to appreciate join more, for programmers join is almost completely useless and you use >>= always
19:45:21 <EvanR> fail is for monads that can fail
19:45:25 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Quit: Laa shay'a waqi'un moutlaq bale kouloun moumkine)
19:45:27 <EvanR> i.e. MonadFail
19:45:37 <geekosaur> basically, join is a hack for failed pattern matches
19:45:42 <geekosaur> er, fail is a hack
19:45:47 <Joao003> but hth can [] fail
19:45:47 <geekosaur> derp
19:45:57 <EvanR> [] is failure
19:46:03 <EvanR> any other list is success
19:46:07 <Joao003> lol
19:46:15 <EvanR> [] means you failed to produce any result
19:46:20 <Joao003> BUT WHY DOES [] FAIL TAKE A []
19:46:30 <dsal> :t fail
19:46:31 <lambdabot> MonadFail m => String -> m a
19:46:34 <EvanR> it takes a String
19:46:35 <dsal> Fail takes a string.
19:46:43 <geekosaur> fail takes a message. the message is unused for the list monad
19:46:43 <Joao003> but string is [char].
19:46:44 <[exa]> "" == []
19:46:59 <Joao003> "" == FAILURE
19:47:01 <geekosaur> for IO, fail produces an IO exception containing the message
19:47:07 <geekosaur> % fail "oops"
19:47:07 <yahb2> Oops, something went wrong
19:47:10 <geekosaur> % fail "oops"
19:47:10 <yahb2> *** Exception: user error (oops)
19:47:15 <Joao003> > fail "hehe"
19:47:17 <lambdabot> error:
19:47:17 <lambdabot> • Ambiguous type variables ‘m0’,
19:47:17 <lambdabot> ‘a0’ arising from a use of ‘show_M46332160034...
19:47:20 <[exa]> [] is extreme way of saying you have so much of nothing to say that it's not even worth the quotes
19:47:26 <Joao003> % fail "hehe"
19:47:26 <yahb2> *** Exception: user error (hehe)
19:47:30 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
19:47:47 <EvanR> it takes a message due to ancient attempts to convenience
19:47:50 <geekosaur> > fail "oops" :: Maybe ()
19:47:52 <lambdabot> Nothing
19:47:54 <EvanR> attempts at convenience
19:47:54 <Joao003> [exa]: lol
19:48:05 <geekosaur> > fail "oops" :: Either String ()
19:48:06 <lambdabot> error:
19:48:06 <lambdabot> • No instance for (MonadFail (Either String))
19:48:06 <lambdabot> arising from a use of ‘fail’
19:48:13 <Joao003> > fail "oopsie!" :: String
19:48:13 <geekosaur> right, that got removed
19:48:14 <lambdabot> ""
19:48:30 <EvanR> it doesn't even work xD
19:48:36 <geekosaur> used to be Left "oops"
19:48:39 <Joao003> wth is monadfail anyways
19:48:45 <dsal> I feel like I have to relearn the MonadFail Either thing all the time.
19:48:57 <[exa]> Joao003: a constructive concentration of failure opportunities
19:48:57 <EvanR> that's where fail got moved to, it used to be in the Monad class
19:48:58 <Joao003> @src MonadFail
19:48:58 <lambdabot> Source not found. I am sorry.
19:49:15 × urdh quits (~urdh@user/urdh) (Quit: Boom!)
19:49:23 <EvanR> now monad is just (>>=)
19:49:23 <Joao003> so basically a list of ways to FAIL?
19:49:34 <Joao003> what about (>>)
19:49:54 <EvanR> ok >> can be implemented if there's a more efficient version than
19:49:57 <EvanR> @src (>>)
19:49:57 <lambdabot> m >> k = m >>= \_ -> k
19:50:13 <EvanR> but it's not the core ability of monad
19:50:13 <dsal> But that may go away as well since it's unnecessary.
19:50:16 <Joao003> welp >> is just a semicolon in c
19:50:29 <[exa]> fail is a lack of success and there's 0 successes in []
19:50:53 <Joao003> and there's 0 successes in Nothing
19:51:06 ft joins (~ft@p3e9bc443.dip0.t-ipconnect.de)
19:51:08 <EvanR> if you want to really understand stuff, probably quit with the theories that "x is just a y" unless it really is just a y (sometimes it is, usually when "is just a" comes up... it's not!)
19:51:20 urdh joins (~urdh@user/urdh)
19:51:21 <EvanR> except for the stupid endofunctor category quote
19:51:40 <Joao003> yeah it's stupid
19:52:56 <Joao003> the category of endofunctors must contain a endofunctor in the category of endofunctors
19:53:29 <Joao003> how the hell are you supposed to find a monoid in a place with only endofunctors
19:53:58 <dminuoso_> Joao003: Its a rather complex construction, that you wont be able to understand without gaining a strong footing in category theory first.
19:54:29 <dminuoso_> Joao003: the term `monoid` means something different, the joke is inaccurately told.
19:54:35 <Joao003> lol
19:55:17 <Joao003> so just provide an accurate definition of a monad please
19:55:35 <dminuoso_> A typeclass with two functions and a bunch of laws.
19:55:40 <Joao003> lol
19:55:52 <dsal> That's a sort of long-running joke. People want to understand Monad in some way other than its definition.
19:55:54 <Joao003> for me i understand it as a box which you can put values in
19:55:59 <dminuoso_> Joao003: No, its not.
19:56:04 <dminuoso_> Joao003: drop all intuition, and dont look for one.
19:56:33 <dminuoso_> Joao003: Let me give you a different picture.
19:56:38 <dminuoso_> Imagine Haskell had the following two functions:
19:56:50 <Joao003> what are they
19:56:58 <dminuoso_> `nextIO :: IO a -> (a -> IO b) -> IO b` which takes one IO action, and sequences its result with another action
19:57:16 jmdaemon joins (~jmdaemon@user/jmdaemon)
19:57:17 <dminuoso_> and `pureIO :: a -> IO a` that creates an IO action that, as its only effect, will immediately produce its argument as a result.
19:57:34 <dminuoso_> Are these functions complicated? confusing?
19:57:41 <Joao003> nope.
19:57:45 <dminuoso_> Good.
19:58:04 <dminuoso_> Joao003: would you agree that you dont need any understanding of category theory in order to use nextIO or pureIO?
19:58:10 <Joao003> yes.
19:58:16 <dminuoso_> Superb.
19:58:29 eggplantade joins (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net)
19:58:58 <dminuoso_> Joao003: I will use a particular phrasing now: The function (>>=) at m ~ IO, is `nextIO` and `return` at m ~ IO is `pureIO`
19:59:02 <dminuoso_> By `at` I mean
19:59:06 <dminuoso_> % :t (>>=)
19:59:06 <yahb2> (>>=) :: Monad m => m a -> (a -> m b) -> m b
19:59:08 <dminuoso_> % :t return
19:59:08 <yahb2> return :: Monad m => a -> m a
19:59:13 <dminuoso_> Setting `m` to that particular type
19:59:32 <Joao003> gives us our 2 functions
19:59:39 <dminuoso_> Joao003: So you see, you dont need to undertand what Monad is about, in order to use its methods at a particular instance.
19:59:53 <dminuoso_> You just need to know that `Monad IO` is a thing, and that in its instance (>>=) and return do those two things.
20:00:12 <Joao003> And that Monad [] is a thing
20:00:13 <dminuoso_> In fact, you dont even need to know about all the other instances, in order to use (>>=) and return at m ~ IO.
20:00:15 <Joao003> etc.
20:00:18 <dminuoso_> Joao003: Well only if thats relevant to you.
20:00:23 <dminuoso_> That's the point sort of.
20:00:33 <dminuoso_> These instances only matter to you if you want to *use* them
20:00:39 <dminuoso_> Each instance has a particular implementation
20:01:16 <dminuoso_> So (>>=) at [] is a concatMap, which will take a function `(a -> [b])` map over a list of `[a]`, producing some nested list [[b]], and flatten it (by concatenating all inner lists together)
20:01:32 <dminuoso_> And `return` produces a singleton list containing just its argument.
20:01:46 <dminuoso_> Whether or not you need to know this, is only depending on whether you actually care to use this behavior or not.
20:01:47 <Joao003> `return` == `pure`
20:02:06 × yahb2 quits (~yahb2@2a01:4f8:c0c:5c7b::2) (Remote host closed the connection)
20:02:12 <Joao003> and just know that `pure` is a better name but still doesn't solve the problem
20:02:17 <dminuoso_> sure.
20:02:18 yahb2 joins (~yahb2@2a01:4f8:c0c:5c7b::2)
20:02:32 <dminuoso_> Joao003: all Im saying is, you dont need to care to understand what Monad is really to start with Haskell
20:02:38 <dminuoso_> Its rather the opposite thing:
20:02:57 <tomsmeding> (the yahb2 lots of "Oops" issue has been resolved I think)
20:03:05 <dminuoso_> If you need to sequence two IO actions, then the `Monad` methods is how you do it, using the `Monad IO` instance. Why the operator is named >>= or why Monad is named Monad is irrelevant
20:03:12 <Joao003> if i chose a name for `pure` it'd be `wrap`
20:03:23 × oldfashionedcow quits (~Rahul_San@user/oldfashionedcow) (Ping timeout: 248 seconds)
20:03:28 <dminuoso_> we could have named `Monad` just `FooThing`, it wouldnt make a different
20:03:40 <dminuoso_> Joao003: I think its less important to attach names to these things, because the behavior differs.
20:03:52 <dminuoso_> I can think of a bunch of instances where `pure` doesnt really "wrap" something.
20:04:04 <dminuoso_> What `pure` does depends on the instance.
20:04:17 <Joao003> you don't even need to care that monad exists. just care about (>>=) and `return`.
20:04:33 <dminuoso_> Joao003: In a simpler world, we wouldnt really have Monad at all
20:04:37 <dminuoso_> Instead we would have functions like
20:04:44 <dminuoso_> nextIO :: IO a -> (a -> IO b) -> IO b
20:04:50 <dminuoso_> concatMap :: [a] -> (a -> [b]) -> [b]
20:05:08 <Joao003> SO WHY DOES MONAD EXIST THEN
20:05:11 <dminuoso_> nextIfJust ::: Maybe a -> (a -> Maybe b) -> Maybe b
20:05:22 <dminuoso_> Joao003: That's a good question!
20:05:31 oldfashionedcow joins (~Rahul_San@user/oldfashionedcow)
20:05:31 <geekosaur> because all of these have a common pattern
20:05:40 <Joao003> yeah
20:05:41 mauke_ joins (~mauke@user/mauke)
20:05:58 <Joao003> they host a value inside or not at all
20:05:59 mauke_ is now known as mauke[i]
20:06:01 <dminuoso_> Joao003: two things. convenience - all the functions above have a similar shape - and they follow the same set of laws
20:06:05 <dminuoso_> but thats not really a good reason
20:06:06 <geekosaur> IO has no value inside
20:06:08 <dminuoso_> the other thing is
20:06:34 <dminuoso_> Joao003: There is a very deep common theme connecting all of these. And what Monad is mainly useful for, is not for you as a library consumer, but its more about library authors really.
20:06:36 gpncarl_ joins (~gpncarl@210.12.195.6)
20:06:43 <dminuoso_> The one thing you cant do with `nextIO`, `concatMap` and `nextIfJust`...
20:06:49 <dminuoso_> Is write a function that works over any such function
20:07:08 <Joao003> so (>>=) exists
20:07:23 <dminuoso_> Right, its chiefly useful for when you yourself write code that works polymorphically over *any* Monad instance.
20:07:30 <geekosaur> IO composes programs, and (a -> IO b) is a callback function appended to a program
20:07:33 <Joao003> also don't care about (=<<) it's just flip (>>=)
20:07:46 <dminuoso_> But if you yourself instantiate (>>=) at particular types, its not really useful much in itself, but its handy to have fewer names to remember.
20:07:56 <dminuoso_> 21:05:08 Joao003 | SO WHY DOES MONAD EXIST THEN
20:08:23 <dminuoso_> ^- crucially that surprise I think is important to understand.
20:08:30 <Joao003> but most of the time we just use do-notation
20:08:36 <dminuoso_> Well thats the thing
20:08:42 <dminuoso_> You can use do-notation with non-IO too!
20:08:48 <Joao003> ik
20:08:57 <mauke[i]> so how about monad transformers
20:09:08 <Joao003> do-notation is just syntactic sugar for (>>=) and (>>)
20:09:12 <dminuoso_> And if you do it long enough, with different instances (!), you automatically begin to develop an intuition what Monad really abstracts over.
20:09:35 <dminuoso_> Joao003: But you wont understand it by trying to just learn the abstract thing. Just use individual instances when you need them, and over time it will just click.
20:09:37 <dminuoso_> And the thing if
20:09:43 <dminuoso_> That `click` is not really important
20:09:54 × mei quits (~mei@user/mei) (Quit: mei)
20:10:07 <dminuoso_> Undertanding of Monad is not prerequisite to using IO, to using lists, to using Maybe, etc..
20:10:26 <geekosaur> the "click" really matters only if you want to define your own monad from scratch. which is vanishingly rare
20:10:37 <Joao003> monad is basically just a house with a few functions living on it
20:11:27 × gpncarl_ quits (~gpncarl@210.12.195.6) (Ping timeout: 255 seconds)
20:11:41 <Joao003> sorry ONE FUNCTION
20:11:43 <mauke[i]> one of my pet peeves is referring to "the IO monad" all the time, as if being a monad were the important part and not that it's IO
20:12:09 <mauke[i]> it's like calling [] "the list functor"
20:12:16 <Joao003> IO is really just an action that causes side effects and may or not return a value
20:12:33 <geekosaur> not even causing side effects. that's up to the implementation
20:13:01 <geekosaur> the IO monad is a monad solely for sequencing without requiring you to set up manual data dependencies
20:13:10 <geekosaur> everything else is IO's doing
20:13:23 <Joao003> imagine having (>>>=) just like we have (,,)
20:13:27 <dminuoso_> I think one story not frequently told, is how JavaScript async works.
20:13:56 <mauke[i]> hoho
20:13:56 <Joao003> ok if you're gonna talk js go to #javascript
20:13:58 <dminuoso_> Because JavaScript async sort of is a good stepping stone that displays this sort of "Oh hold on, there's a common pattern", and that seems to be easily picked up by thousands of developers.
20:14:18 <dminuoso_> I mean yes, on a formal level its ill constructed, but honestly sometimes a bit of squinting helps learning.
20:14:19 <mauke[i]> I've been thinking about implementing async/await in a new programming language, but mentally it always boils down to >>= for me
20:14:27 <dminuoso_> Okay "how it works" was ill phrased
20:14:39 <dminuoso_> but rather why JS has this `async` keyword.
20:15:02 × urdh quits (~urdh@user/urdh) (Quit: Boom!)
20:15:05 <Joao003> is js async just like goroutines in go
20:15:31 king_gs joins (~Thunderbi@187.201.41.239)
20:15:42 × trev quits (~trev@user/trev) (Remote host closed the connection)
20:16:19 × son0p quits (~ff@181.136.122.143) (Remote host closed the connection)
20:16:56 mei joins (~mei@user/mei)
20:17:19 son0p joins (~ff@181.136.122.143)
20:18:06 <dminuoso_> Sometimes I do wonder, if base had (>>=) and return instantiated at some of the basic types `Maybe`, `Either a`, `IO` and `[]` bound to functions like `nextIfJust`, `nextIfRight`, nextIO`, and `concatMap`, and had tutorials explain "do notations just desugars into uses of `nextIO` for IO", perhaps more confusion could have been avoided.
20:18:42 <dminuoso_> The term `monad` can be banished from early chapters in learning resources
20:19:35 <mauke[i]> for bootstrapping I would straight up restrict >>=/>>/return to IO
20:19:35 <darkling> Except, presumably, for the ones that specifically set out to describe why a monad is like a banana...
20:20:05 <mauke[i]> do-notation comes later (also restricted to IO)
20:20:13 <Joao003> darkling: wait what
20:21:48 <darkling> There's a load of monad tutorials (and blog posts) out there that make misleading or confusing analogies...
20:21:56 <dminuoso_> mauke[i]: Sure, I think there's some actual relevant haddock improvements out there.
20:22:17 <dminuoso_> Imagine a typeclass instance could be annotated more thoroughly, and the haddock page had a slider or a dropdown thing, where you can just select an instance
20:22:29 <dminuoso_> And when you selecft it, it will display the instantiated types, and the instance specific documentation instead.
20:22:31 <darkling> "Monads are just like breezeblocks", or "You can think of a Monad as a kind of aardvark." :)
20:22:49 <dminuoso_> Better instance documentation is something I have been wanting for a while
20:23:06 <dminuoso_> Perhaps I can dedicate some of my work time to improving haddock to that end.
20:23:24 <geekosaur> then there's dons mocking monad tutorials with a spacesuit comparison and people running with it
20:23:51 <dminuoso_> by `mocking monad tutorials`, are you talking about a tutorial explaining how to mock monadic code using a spacesuit comparison?
20:23:54 dminuoso_ is not sure
20:24:07 <dminuoso_> either way seems hilarious.
20:24:11 <geekosaur> no, mockery about monad tutorials
20:24:16 <geekosaur> s/about/of/
20:24:18 <dminuoso_> funny, but less interesting.
20:27:20 pavonia joins (~user@user/siracusa)
20:27:41 × eggplantade quits (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
20:27:53 programmeruser joins (21612@2a01:4f8:141:1272::2)
20:28:58 urdh joins (~urdh@user/urdh)
20:31:38 nek0 joins (~nek0@2a01:4f8:222:2b41::12)
20:33:05 × biberu quits (~biberu@user/biberu) (Read error: Connection reset by peer)
20:33:09 <Joao003> anyone has any uses of Ordering?
20:33:38 <mauke[i]> :t sortBy
20:33:39 <lambdabot> (a -> a -> Ordering) -> [a] -> [a]
20:33:57 <mauke[i]> :t comparing
20:33:58 <lambdabot> Ord a => (b -> a) -> b -> b -> Ordering
20:34:07 acidjnk joins (~acidjnk@p200300d6e715c408e15a683b71611690.dip0.t-ipconnect.de)
20:34:11 <Joao003> why can't we just use pairs of booleans
20:34:12 <geekosaur> usually we use its Monoid instance to chain together comparisons for e.g. sort, which gives you primary and secondary (and tertiary, etc.) keys
20:34:23 × urdh quits (~urdh@user/urdh) (Quit: Boom!)
20:34:58 <mauke[i]> Ordering has 3 values. pairs of booleans is 4 values
20:35:00 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Quit: Laa shay'a waqi'un moutlaq bale kouloun moumkine)
20:35:25 <mauke[i]> > sortBy (comparing length) (words "when the truth is found to be lies")
20:35:28 <lambdabot> ["is","to","be","the","when","lies","truth","found"]
20:35:37 <Joao003> but (True, True) would probably be unused
20:36:11 <geekosaur> C uses <-, 0, >0 for the "ordering" tristate
20:36:16 <Joao003> (True, True) could be used for something like "can't compare!"
20:36:19 <geekosaur> er, "<0"
20:36:42 <Joao003> any <=> fans out there
20:36:58 <mauke[i]> :t compare
20:36:59 <lambdabot> Ord a => a -> a -> Ordering
20:37:10 <geekosaur> also you invite boolean blindness. which pair of bools means which?
20:37:11 <mauke[i]> ^ that's basically <=>
20:37:19 <geekosaur> Ordering is self-descriptive
20:37:23 <smol-hors> Raku has leg
20:37:29 <smol-hors> the leg operator
20:37:34 <geekosaur> so did earlier versions of perl
20:37:36 Guest35 joins (~Guest35@mob-5-91-18-33.net.vodafone.it)
20:37:40 <smol-hors> ahh
20:37:42 <geekosaur> leg for lexical, <-> for numeric
20:37:46 <smol-hors> ye
20:37:47 <mauke[i]> wat
20:37:50 <Joao003> (a < b, a > b)
20:37:50 <geekosaur> <=>
20:37:55 <mauke[i]> <=> for numbers, cmp for strings
20:37:57 <mauke[i]> in perl, that is
20:37:58 <geekosaur> not typing well today
20:38:04 <mauke[i]> no idea what leg is
20:38:05 <geekosaur> oh, sammit
20:38:08 <geekosaur> dammit
20:38:10 × Guest35 quits (~Guest35@mob-5-91-18-33.net.vodafone.it) (Client Quit)
20:38:14 <geekosaur> can't type or remember
20:38:17 <Joao003> lol
20:38:18 <geekosaur> bleh
20:38:19 <mauke[i]> oh, less-equal-greater
20:38:39 × ddellacosta quits (~ddellacos@146.70.166.203) (Quit: WeeChat 3.8)
20:38:58 Guest35 joins (~Guest35@mob-5-91-18-33.net.vodafone.it)
20:39:02 <Joao003> any const users
20:39:03 <geekosaur> probably for te best I've been doing more haskell than perl if it's bitrotting on me
20:39:17 <mauke[i]> Joao003: const is just pure in the naked Reader monad
20:39:31 × Guest35 quits (~Guest35@mob-5-91-18-33.net.vodafone.it) (Client Quit)
20:39:44 <Joao003> no i'm saying const in prelude
20:39:49 <mauke[i]> yes
20:40:03 <mauke[i]> > const 42 "x"
20:40:05 <lambdabot> 42
20:40:08 <mauke[i]> > pure 42 "x"
20:40:10 <lambdabot> 42
20:40:11 Guest97 joins (~Guest97@cgn-89-1-59-168.nc.de)
20:40:23 <Joao003> > const id 42 "x"
20:40:26 <lambdabot> "x"
20:40:44 <mauke[i]> > pure ask 42 "x"
20:40:46 <lambdabot> "x"
20:40:50 × phma quits (phma@2001:5b0:210d:bd78:7d2a:52e1:c274:2d5) (*.net *.split)
20:40:50 × rodental quits (~rodental@38.146.5.222) (Remote host closed the connection)
20:40:57 <Joao003> WHY THE HELL IS ASK A THING
20:41:00 <Joao003> @src ask
20:41:00 <lambdabot> Source not found. BOB says: You seem to have forgotten your passwd, enter another!
20:41:03 <Joao003> wth
20:41:04 <mauke[i]> :t ask
20:41:05 <lambdabot> MonadReader r m => m r
20:41:11 <Joao003> what the fu
20:41:14 phma joins (phma@2001:5b0:210d:bd78:7d2a:52e1:c274:2d5)
20:41:18 <mauke[i]> it's for when you want to be polite
20:41:45 <Joao003> but why be polite to your pc when you can torture it and it's still fine
20:42:27 <Joao003> i bet there's please
20:42:31 <Joao003> :t please
20:42:32 <lambdabot> error:
20:42:32 <lambdabot> • Variable not in scope: please
20:42:32 <lambdabot> • Perhaps you meant one of these:
20:42:34 <Joao003> nope
20:43:01 × kuribas quits (~user@ptr-17d51ep3y07q376bohf.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 27.1))
20:43:01 <Joao003> @hoogle please
20:43:02 <lambdabot> Yesod.Auth.Message PleaseProvidePassword :: AuthMessage
20:43:02 <lambdabot> Yesod.Auth.Message PleaseProvideUsername :: AuthMessage
20:43:02 <lambdabot> Codec.BMP ErrorInternalErrorPleaseReport :: Error
20:43:13 <mauke[i]> :t ask `asTypeOf` asks
20:43:13 <EvanR> Joao003, ask retrieves the thing given to a Reader or ReaderT
20:43:14 <lambdabot> (r -> a) -> r -> a
20:43:24 <Joao003> :t asks
20:43:26 <lambdabot> MonadReader r m => (r -> a) -> m a
20:43:38 <Joao003> rama
20:43:40 <EvanR> asks hits it with it with a function first, pretty handy
20:43:59 × kurbus quits (~kurbus@user/kurbus) (Quit: Client closed)
20:44:10 × Guest97 quits (~Guest97@cgn-89-1-59-168.nc.de) (Quit: Client closed)
20:44:20 <Joao003> > (ask `asTypeOf` asks) (+1) 1
20:44:22 <lambdabot> 2
20:44:24 <Joao003> lol
20:44:27 <Joao003> its just id\
20:44:27 <dsal> Joao003: I use all of these things, but that's a weird way to examine a language. I use them because I need to do the thing that they do. I didn't start writing a program and try to figure out how to wedge `ask` into it.
20:44:44 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
20:44:51 <mauke[i]> :t [id, ($), ask, asks]
20:44:52 <lambdabot> [(a -> b) -> a -> b]
20:44:53 <dsal> There are a few things I can't imagine a use for, but have been obvious when I've needed them so I used them.
20:45:02 <EvanR> so much bad go out there that uses languages features because they exist (PHP...)
20:45:14 <EvanR> instead of using what's prudent to accomplish the task
20:45:17 <mauke[i]> PHP is indeed the worst go
20:45:20 <EvanR> bad code*
20:45:49 <EvanR> maybe go is on the hook for this I don't know
20:46:56 × ravamrt quits (~ravamrt@112.134.195.223) (Ping timeout: 248 seconds)
20:47:02 <Joao003> :t \ f x -> f . fst $ (x, ())
20:47:04 <lambdabot> (b -> c) -> b -> c
20:47:43 <EvanR> (f . fst) (x, ())
20:48:04 <Joao003> > ((+1) . fst) (1, ())
20:48:05 <lambdabot> 2
20:48:16 myyo joins (~myyo@71-211-142-215.hlrn.qwest.net)
20:48:26 <Joao003> :t [id, \ f x -> f . fst $ (x, ())]
20:48:27 <lambdabot> [(b -> c) -> b -> c]
20:50:27 <Joao003> nice that haskell expands id :: a -> a to id :: (a -> b) -> a -> b
20:54:39 × jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 255 seconds)
20:55:38 urdh joins (~urdh@user/urdh)
20:55:47 × urdh quits (~urdh@user/urdh) (Remote host closed the connection)
20:55:54 × accord quits (uid568320@id-568320.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
20:57:38 biberu joins (~biberu@user/biberu)
20:58:01 ddellacosta joins (~ddellacos@146.70.166.203)
20:59:18 × lyle quits (~lyle@104.246.145.237) (Quit: WeeChat 3.8)
21:10:24 × merijn quits (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl) (Ping timeout: 248 seconds)
21:11:13 waleee joins (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7)
21:13:59 AmyMalik is now known as MelMalik
21:18:42 <EvanR> Joao003, it's a specialization
21:19:37 urdh joins (~urdh@user/urdh)
21:20:21 gpncarl_ joins (~gpncarl@210.12.195.6)
21:21:42 × urdh quits (~urdh@user/urdh) (Client Quit)
21:23:20 urdh joins (~urdh@user/urdh)
21:25:15 × gpncarl_ quits (~gpncarl@210.12.195.6) (Ping timeout: 255 seconds)
21:25:34 <Joao003> Yo let's find weird synonyms for id
21:28:12 eggplantade joins (~Eggplanta@104.55.37.220)
21:28:25 × use-value quits (~Thunderbi@2a00:23c6:8a03:2f01:75c2:a71f:beaa:29bf) (Remote host closed the connection)
21:28:44 use-value joins (~Thunderbi@2a00:23c6:8a03:2f01:75c2:a71f:beaa:29bf)
21:30:38 <mauke[i]> :t fix . const
21:30:39 <lambdabot> c -> c
21:32:29 × eggplantade quits (~Eggplanta@104.55.37.220) (Ping timeout: 252 seconds)
21:32:33 <geekosaur> :t runReader ask
21:32:34 <lambdabot> a -> a
21:33:39 <dsal> :t flip const undefined
21:33:40 <lambdabot> c -> c
21:34:11 × zeenk quits (~zeenk@2a02:2f04:a214:1e00::7fe) (Quit: Konversation terminated!)
21:34:16 <dsal> I like the `fix . const` one.
21:35:13 × npmania quits (~Thunderbi@45.8.223.203) (Quit: npmania)
21:35:34 npmania joins (~Thunderbi@45.8.223.203)
21:37:11 merijn joins (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl)
21:37:19 × andrewboltachev quits (~andrey@178.141.125.176) (Quit: Leaving.)
21:37:55 × ystael quits (~ystael@user/ystael) (Ping timeout: 256 seconds)
21:38:39 × npmania quits (~Thunderbi@45.8.223.203) (Client Quit)
21:39:00 ystael joins (~ystael@user/ystael)
21:39:00 npmania joins (~Thunderbi@45.8.223.203)
21:41:19 × jinsun quits (~jinsun@user/jinsun) (Ping timeout: 252 seconds)
21:42:56 × zer0bitz quits (~zer0bitz@2001:2003:f443:d600:50e1:610d:453c:bdaa) (Read error: Connection reset by peer)
21:43:15 × gurkenglas quits (~gurkengla@dynamic-046-114-176-170.46.114.pool.telefonica.de) (Ping timeout: 255 seconds)
21:45:03 × merijn quits (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl) (Ping timeout: 248 seconds)
21:45:12 gurkenglas joins (~gurkengla@dynamic-046-114-001-228.46.114.pool.telefonica.de)
21:49:10 × bgs quits (~bgs@212-85-160-171.dynamic.telemach.net) (Remote host closed the connection)
21:52:23 Guest51 joins (~Guest51@76.136.211.144)
21:56:36 × Joao003 quits (~Joao003@2804:840:8309:8700:b01f:79f9:8910:d564) (Quit: Leaving)
21:57:10 merijn joins (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl)
21:57:41 × Guest51 quits (~Guest51@76.136.211.144) (Quit: Client closed)
21:58:38 <zero> i'm still trying to wrap my head around it
21:59:21 Guest35 joins (~Guest35@2601:189:8180:1870:f926:c45d:65c3:ea80)
22:01:28 × merijn quits (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl) (Ping timeout: 246 seconds)
22:01:38 <zero> i get it
22:02:17 <zero> > const 'a' (const undefined)
22:02:19 <lambdabot> 'a'
22:03:27 jmdaemon joins (~jmdaemon@user/jmdaemon)
22:03:35 × gnalzo quits (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 3.8)
22:06:22 × Guest35 quits (~Guest35@2601:189:8180:1870:f926:c45d:65c3:ea80) (Quit: Client closed)
22:14:18 merijn joins (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl)
22:14:21 <Inst__> hey [exa], can i ask you something?
22:14:34 Inst__ is now known as Inst
22:16:05 × michalz quits (~michalz@185.246.204.107) (Remote host closed the connection)
22:16:44 <[exa]> Inst: like, sure
22:19:19 × merijn quits (~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl) (Ping timeout: 246 seconds)
22:20:50 notzmv joins (~zmv@user/notzmv)
22:22:47 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
22:23:08 × king_gs quits (~Thunderbi@187.201.41.239) (Read error: Connection reset by peer)
22:23:10 king_gs1 joins (~Thunderbi@2806:103e:29:1779:19a5:ca6b:2f79:45e7)
22:24:36 × [Ristovski] quits (~Ristovski@hellomouse/perf/ristovski) (Quit: 0)
22:25:05 Guest35 joins (~Guest35@2601:189:8180:1870:f926:c45d:65c3:ea80)
22:25:15 <monochrom> @type id id
22:25:16 <lambdabot> a -> a
22:25:18 <monochrom> @type id id id
22:25:19 <lambdabot> a -> a
22:25:27 <monochrom> @quote monochrom 17-ary
22:25:27 king_gs1 is now known as king_gs
22:25:27 <lambdabot> monochrom says: I am 17-ary, going on 18-ary, I can take curry of you
22:28:09 × bjobjo quits (~bjobjo@user/bjobjo) (Ping timeout: 255 seconds)
22:28:10 [Ristovski] joins (~Ristovski@hellomouse/perf/ristovski)
22:29:36 bjobjo joins (~bjobjo@user/bjobjo)
22:31:21 <jackdk> :t (%%~)
22:31:22 <lambdabot> forall k (f :: k -> *) s (t :: k) a (b :: k). LensLike f s t a b -> (a -> f b) -> s -> f t
22:38:54 beteigeuze joins (~Thunderbi@bl14-81-220.dsl.telepac.pt)
22:42:45 × king_gs quits (~Thunderbi@2806:103e:29:1779:19a5:ca6b:2f79:45e7) (Quit: king_gs)
22:43:23 × mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection)
22:48:24 × thegeekinside quits (~thegeekin@189.180.97.223) (Ping timeout: 255 seconds)
22:49:51 falafel joins (~falafel@2607:fb91:143f:e47f:834a:55d5:1880:33be)
22:52:06 × bob quits (~bob22@user/bob) (Quit: ZNC - https://znc.in)
22:52:09 zeenk joins (~zeenk@2a02:2f04:a214:1e00::7fe)
22:58:48 thegeekinside joins (~thegeekin@189.180.97.223)
22:59:08 × Guest35 quits (~Guest35@2601:189:8180:1870:f926:c45d:65c3:ea80) (Quit: Client closed)
23:02:43 × CiaoSen quits (~Jura@p200300c9570460002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
23:04:30 × myyo quits (~myyo@71-211-142-215.hlrn.qwest.net) ()
23:07:15 anderson_ joins (~ande@user/anderson)
23:07:29 thongpv87 joins (~thongpv87@2402:9d80:3bb:7b3a:c56c:8a07:1b68:1877)
23:07:33 × mechap quits (~mechap@user/mechap) (Quit: WeeChat 3.8)
23:08:16 × anderson quits (~ande@user/anderson) (Quit: bye)
23:09:51 anderson_ is now known as anderson
23:10:25 × eldritch quits (~eldritch@user/eldritch) (Quit: bye)
23:12:32 × patrl quits (~patrl@user/patrl) (Ping timeout: 265 seconds)
23:15:22 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
23:21:17 Guest23 joins (~Guest23@c-24-56-246-176.customer.broadstripe.net)
23:21:33 × thongpv87 quits (~thongpv87@2402:9d80:3bb:7b3a:c56c:8a07:1b68:1877) (Remote host closed the connection)
23:22:09 × Guest23 quits (~Guest23@c-24-56-246-176.customer.broadstripe.net) (Client Quit)
23:22:20 Guest23 joins (~Guest23@c-24-56-246-176.customer.broadstripe.net)
23:22:35 × falafel quits (~falafel@2607:fb91:143f:e47f:834a:55d5:1880:33be) (Ping timeout: 255 seconds)
23:22:49 thongpv joins (~thongpv87@2402:9d80:3bb:7b3a:42c5:d1db:9622:c029)
23:23:46 × Guest23 quits (~Guest23@c-24-56-246-176.customer.broadstripe.net) (Client Quit)
23:27:53 utis joins (~utis@178.255.149.137)
23:29:12 <utis> if on voidlinux i try to install ghc and stack and run stack setup i get
23:29:14 <utis> Error: [S-9443]
23:29:14 <utis> No setup information found for ghc-9.2.5 on your platform.
23:29:14 <utis> This probably means a GHC bindist has not yet been added for OS key 'linux64-ncurses6'.
23:29:17 <utis> Supported versions: ghc-7.10.3, ghc-8.0.1, ghc-8.0.2, ghc-8.2.1, ghc-8.2.2
23:29:52 <utis> doas that mean i have to download an older version of ghc?
23:30:58 <c_wraith> that is a very old list of ghc versions
23:31:22 <geekosaur> where did you get ghc and stack from?
23:31:29 <c_wraith> I don't use stack though, so I have no idea why it thinks that is appropriate
23:32:03 gpncarl_ joins (~gpncarl@210.12.195.6)
23:32:55 <utis> voidlinux repo
23:33:10 <utis> but i ran stack upgrade too
23:33:54 <geekosaur> add ~/.local/bin to your PATH or you'll still be running the voidlinux one, which may be old enough to be looking at the ancient stack configuration repo
23:35:01 <utis> yeah, i did that
23:35:28 <geekosaur> beginning or end of PATH?
23:35:56 <utis> `type stack` confirms $HOME/bin/stack
23:36:14 <utis> (which i symlinked to ~/.local/bin)
23:36:39 × gpncarl_ quits (~gpncarl@210.12.195.6) (Ping timeout: 255 seconds)
23:37:30 <geekosaur> weird
23:37:57 <utis> version is 2.9.3
23:40:38 <geekosaur> https://docs.haskellstack.org/en/stable/faq/#how-do-i-install-ghc-in-stack-when-it-fails-with-the-error-missing-ghc-bindist-for-linux64-ncurses6 might work, if it's the libtinfo issue
23:41:30 × gurkenglas quits (~gurkengla@dynamic-046-114-001-228.46.114.pool.telefonica.de) (Ping timeout: 255 seconds)
23:43:41 <geekosaur> although that faq looks ancient
23:44:24 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
23:45:33 jargon joins (~jargon@184.101.95.90)
23:48:01 <utis> geekosaur: that worked! thanks!
23:49:19 × Midjak quits (~Midjak@82.66.147.146) (Quit: This computer has gone to sleep)
23:51:48 × oldfashionedcow quits (~Rahul_San@user/oldfashionedcow) (Ping timeout: 252 seconds)
23:53:41 × jargon quits (~jargon@184.101.95.90) (Remote host closed the connection)
23:53:49 × bitmapper quits (uid464869@2a03:5180:f:2::7:17e5) (Quit: Connection closed for inactivity)
23:55:54 oldfashionedcow joins (~Rahul_San@user/oldfashionedcow)
23:57:27 × utis quits (~utis@178.255.149.137) (Quit: leaving)
23:57:42 × jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 255 seconds)

All times are in UTC on 2023-02-14.