2023/02/14

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