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