Logs on 2022-03-23 (liberachat/#haskell)
| 00:00:00 | <lambdabot> | error: |
| 00:00:00 | <lambdabot> | • Couldn't match expected type ‘Expr’ with actual type ‘First a0’ |
| 00:00:00 | <lambdabot> | • In the expression: foldMap First [a, b, c] :: Exprerror: |
| 00:00:15 | <Axman6> | > iterate reduce (a * 7) :: Expr |
| 00:00:17 | <lambdabot> | error: |
| 00:00:17 | <lambdabot> | • Couldn't match expected type ‘Expr’ with actual type ‘[Expr]’ |
| 00:00:17 | <lambdabot> | • In the expression: iterate reduce (a * 7) :: Expr |
| 00:00:22 | <Axman6> | > iterate reduce (a * 7 :: Expr) |
| 00:00:24 | <lambdabot> | [a * 7,a * 7,a * 7,a * 7,a * 7,a * 7,a * 7,a * 7,a * 7,a * 7,a * 7,a * 7,a *... |
| 00:00:43 | <Axman6> | > iterate reduce (a+a+a+a+a :: Expr) |
| 00:00:44 | <lambdabot> | [a + a + a + a + a,a + a + a + a + a,a + a + a + a + a,a + a + a + a + a,a +... |
| 00:00:50 | <abastro[m]> | foldMap First [a :: Expr, b, c] |
| 00:01:08 | <Axman6> | need more ? |
| 00:01:09 | <Axman6> | > |
| 00:02:21 | <abastro[m]> | > foldMap First [a :: Expr, b, c] |
| 00:02:22 | <lambdabot> | error: |
| 00:02:22 | <lambdabot> | • Couldn't match expected type ‘Maybe a’ with actual type ‘Expr’ |
| 00:02:22 | <lambdabot> | • In the expression: a :: Expr |
| 00:03:15 | × | nicbk quits (~nicbk@user/nicbk) (Ping timeout: 240 seconds) |
| 00:03:58 | <abastro[m]> | Uhm a bit tough to use |
| 00:04:12 | <geekosaur> | yes |
| 00:04:18 | <geekosaur> | and more than a bit limited |
| 00:04:29 | <geekosaur> | read the docs for the simple-reflect package for details |
| 00:04:36 | → | chenqisu1 joins (~chenqisu1@183.217.201.47) |
| 00:04:37 | <geekosaur> | (I pointed to it earlier) |
| 00:05:18 | <geekosaur> | that said, it can do a surprising amount of stuff |
| 00:06:19 | → | fluxit joins (~fluxit@techsmix.net) |
| 00:06:22 | <geekosaur> | > foldr f z [a,b,c] |
| 00:06:23 | <lambdabot> | f a (f b (f c z)) |
| 00:06:55 | <geekosaur> | > foldr (*) z [a,b,c] |
| 00:06:56 | <lambdabot> | a * (b * (c * z)) |
| 00:07:14 | <abastro[m]> | Interesting! |
| 00:07:29 | <abastro[m]> | > foldMap First [a, b, c] |
| 00:07:30 | <lambdabot> | error: |
| 00:07:30 | <lambdabot> | • Couldn't match expected type ‘Maybe a’ with actual type ‘Expr’ |
| 00:07:30 | <lambdabot> | • In the expression: a |
| 00:07:39 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 00:07:42 | <abastro[m]> | Uhm that is not working |
| 00:08:38 | <geekosaur> | First is a bit too tricky for it |
| 00:08:56 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 00:09:53 | <boxscape_> | what output would you expect from foldMap First [a, b, c]? |
| 00:12:20 | → | AdamConner-Sax[m joins (~adamcsmat@2001:470:69fc:105::1:e2c8) |
| 00:12:55 | × | acidsys quits (~LSD@2a03:4000:55:d20::3) (Excess Flood) |
| 00:13:25 | → | acidsys joins (~LSD@2a03:4000:55:d20::3) |
| 00:14:22 | → | azimut_ joins (~azimut@gateway/tor-sasl/azimut) |
| 00:15:55 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds) |
| 00:16:24 | <abastro[m]> | Hmm |
| 00:16:34 | <abastro[m]> | > foldMap f [a, b, c] |
| 00:16:35 | <lambdabot> | error: |
| 00:16:35 | <lambdabot> | • Ambiguous type variable ‘a0’ arising from a use of ‘show_M904037765254... |
| 00:16:35 | <lambdabot> | prevents the constraint ‘(Show a0)’ from being solved. |
| 00:16:56 | <abastro[m]> | Wait even that does not work |
| 00:17:02 | → | hgolden joins (~hgolden2@cpe-172-251-233-141.socal.res.rr.com) |
| 00:17:07 | <abastro[m]> | I just want it to try simplify |
| 00:17:32 | <abastro[m]> | Perhaps `First a <> First b <> First c` would do, idk |
| 00:18:06 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 00:18:41 | <boxscape_> | I was going to say maybe foldMap f [a, b, c] would work if Expr had a Monoid instance, but it does |
| 00:19:13 | → | yauhsien joins (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) |
| 00:19:16 | <boxscape_> | > mconcat [a, b, c] |
| 00:19:17 | <lambdabot> | mconcat [a,b,c] |
| 00:19:22 | <boxscape_> | great |
| 00:19:36 | <monochrom> | What is the type of First? |
| 00:20:01 | × | vorpuni quits (~pvorp@2001:861:3881:c690:c18a:999a:aef5:52af) (Quit: bye) |
| 00:20:23 | <monochrom> | Equivalently, why did the error message bring up Maybe? |
| 00:21:41 | <boxscape_> | > foldMap f [a, b, c] :: Expr |
| 00:21:42 | <lambdabot> | f a <> f b <> f c <> mempty |
| 00:21:44 | <boxscape_> | ^ abastro[m] |
| 00:22:03 | × | zeenk quits (~zeenk@2a02:2f04:a110:7d00:2011:cfed:bad7:3c94) (Quit: Konversation terminated!) |
| 00:22:20 | <abastro[m]> | Yea, so I think even with First |
| 00:22:34 | → | mvk joins (~mvk@2607:fea8:5cc3:7e00::7980) |
| 00:22:40 | <abastro[m]> | It could have gave me `First a <> First b <> First c <> mempty` but nah |
| 00:22:49 | <boxscape_> | :t First |
| 00:22:50 | <lambdabot> | Maybe a -> First a |
| 00:22:56 | <abastro[m]> | Idk, I guess I have many complaints |
| 00:23:08 | <hpc> | it can't unify Expr with (Maybe a) |
| 00:23:15 | <abastro[m]> | Ya, the type is not matching |
| 00:23:24 | × | lottaquestions quits (~nick@2607:fa49:5041:a200:746b:7a76:5f:680b) (Quit: Konversation terminated!) |
| 00:23:25 | <boxscape_> | abastro[m] I think you could make it work, but you'd need a FromExpr instance for `Maybe a` |
| 00:23:26 | <hpc> | Expr isn't a magical fill-stuff-in-wherever type, it's basically String |
| 00:23:35 | <monochrom> | Type checker says "the sentiment is mutual" :) |
| 00:23:38 | <abastro[m]> | I mean sometimes the user wants that kind of simplification. |
| 00:23:43 | <hpc> | you could make an Expr that renders as "First" though |
| 00:26:15 | × | charukiewicz quits (~charukiew@2600:1702:a90:2750:724d:7bff:fe2b:f560) (Remote host closed the connection) |
| 00:26:58 | × | grimey63 quits (~grimey@pool-108-26-37-118.syrcny.east.verizon.net) (Quit: Connection closed) |
| 00:27:21 | → | nicbk joins (~nicbk@user/nicbk) |
| 00:27:30 | → | charukiewicz joins (~charukiew@2600:1702:a90:2750::3c) |
| 00:28:35 | <boxscape_> | > foldMap First [f, g, h] :: First Expr |
| 00:28:37 | <lambdabot> | First {getFirst = Just f} |
| 00:28:53 | <boxscape_> | ^ abastro[m] I did this by first defining @let instance FromExpr (Maybe Expr) where fromExpr e = Just e |
| 00:29:31 | <boxscape_> | unfortunately doesn't really take into account the logic of First |
| 00:29:45 | <boxscape_> | or illustrates it I mean |
| 00:29:52 | <boxscape_> | because no Nothing elements can exist with this instance |
| 00:29:53 | × | [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer) |
| 00:30:15 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds) |
| 00:30:29 | <abastro[m]> | Hm, interesting |
| 00:32:38 | <boxscape_> | abastro[m] generally Expr from simple-reflect relies on being able to make free instance for classes, so when you have specific behavior like First that's not given by a class, it's less useful |
| 00:32:56 | <boxscape_> | (except for something like foldr where you can illustrate how it works on a container of expressions, I suppose) |
| 00:33:53 | → | notzmv joins (~zmv@user/notzmv) |
| 00:36:14 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 00:38:29 | <abastro[m]> | Hm, I guess what I want is actually |
| 00:39:29 | abastro[m] | sent a hs code block: https://libera.ems.host/_matrix/media/r0/download/libera.chat/91f90df4179b292c9a860c4637424f47bda61ae2 |
| 00:39:43 | <boxscape_> | yeah that makes sense |
| 00:40:28 | <boxscape_> | abastro[m] you might be interested in this which kind of goes in that direction https://youtu.be/xZmPuz9m2t0 |
| 00:40:47 | <Axman6> | > foldMap (First . Just) [a,b,c] :: First Expr |
| 00:40:48 | <lambdabot> | First {getFirst = Just a} |
| 00:41:20 | <boxscape_> | alternatively this which is a much shorter video but a similar idea https://youtu.be/SVRYcrhRCes |
| 00:43:08 | <abastro[m]> | Thx, I'll take a look |
| 00:48:43 | × | Flonk quits (~Flonk@vps-zap441517-1.zap-srv.com) (Quit: Ping timeout (120 seconds)) |
| 00:49:13 | → | Flonk joins (~Flonk@vps-zap441517-1.zap-srv.com) |
| 00:52:00 | × | Flonk quits (~Flonk@vps-zap441517-1.zap-srv.com) (Client Quit) |
| 00:52:27 | → | Flonk joins (~Flonk@vps-zap441517-1.zap-srv.com) |
| 00:52:39 | → | pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
| 00:55:27 | → | wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com) |
| 00:55:27 | × | wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
| 00:55:27 | → | wroathe joins (~wroathe@user/wroathe) |
| 00:57:09 | → | xff0x joins (~xff0x@125x102x200x106.ap125.ftth.ucom.ne.jp) |
| 00:57:42 | <Zemyla> | > (a + b) * c |
| 00:57:44 | <lambdabot> | (a + b) * c |
| 00:58:11 | → | Guest|6 joins (~Guest|6@189.128.188.226) |
| 00:59:00 | <Guest|6> | hi all, I am having some trouble installing haskell, I was wondering if someone could help me please |
| 01:02:12 | <sm> | what's your operating system and what have you tried, Guest|6 |
| 01:04:54 | <Guest|6> | I'm on windows 10, I tried installing haskell using the steps from the ghcup guide, and when I'm asked to install Msys2 it will throw an error |
| 01:05:47 | <Axman6> | can you share the error? |
| 01:07:33 | <Axman6> | @where paste |
| 01:07:33 | <lambdabot> | Help us help you: please paste full code, input and/or output at e.g. https://paste.tomsmeding.com |
| 01:08:07 | <Guest|6> | Exec: Error executing command curl.exe with arguments '-o |
| 01:09:22 | <koz> | Suppose I have v :: Vector a, and I want [Vector a], which is comprised of every sub-vector of v. What's the easiest way to write this? |
| 01:10:13 | <koz> | (specifically, proper sub-vector, aka not including v itself) |
| 01:10:13 | <Axman6> | surely there's a vector slice function? |
| 01:10:23 | × | dsrt^ quits (~dsrt@96-67-120-105-static.hfc.comcastbusiness.net) (Ping timeout: 256 seconds) |
| 01:10:31 | <koz> | Axman6: Yeah, I can do it with manual slicing, but I don't necessarily want _contiguous_ sub-vectors. |
| 01:10:41 | <Axman6> | oh, that's less fun... |
| 01:10:45 | <koz> | (like, non-contiguous ones should be included too) |
| 01:10:53 | <Axman6> | hmm, I'm sure there's a filerM trick |
| 01:11:11 | <Axman6> | > filterM (const [False,True] [1,2,3] |
| 01:11:12 | <lambdabot> | <hint>:1:36: error: |
| 01:11:12 | <lambdabot> | parse error (possibly incorrect indentation or mismatched brackets) |
| 01:11:17 | <Axman6> | > filterM (const [False,True]) [1,2,3] |
| 01:11:18 | <lambdabot> | [[],[3],[2],[2,3],[1],[1,3],[1,2],[1,2,3]] |
| 01:11:32 | <koz> | That's 100% what I want, except the last one. |
| 01:11:39 | <koz> | Could a list comprehension do this? |
| 01:11:40 | <Axman6> | init :) |
| 01:11:51 | <koz> | I guess init would work. |
| 01:11:55 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds) |
| 01:12:00 | <koz> | Something like |
| 01:12:02 | <Axman6> | > dropb 1 $ filterM (const [True,False]) [1,2,3] |
| 01:12:03 | <lambdabot> | error: |
| 01:12:03 | <lambdabot> | • Variable not in scope: dropb :: t0 -> [[b0]] -> t |
| 01:12:03 | <lambdabot> | • Perhaps you meant one of these: |
| 01:12:06 | <Axman6> | > drop 1 $ filterM (const [True,False]) [1,2,3] |
| 01:12:08 | <lambdabot> | [[1,2],[1,3],[1],[2,3],[2],[3],[]] |
| 01:12:11 | × | Guest|6 quits (~Guest|6@189.128.188.226) (Quit: Connection closed) |
| 01:12:30 | <koz> | [v' | v <- Vector.filterM (const [False, True]) v, v' /= v]? |
| 01:13:08 | <Axman6> | if you know where that once case is going to be, then just exclude it - it's either going to be the first or last element deopending on the order of True and False |
| 01:13:25 | <koz> | > [v' | v' <- filterM (const [False, True]) [1, 2, 3], v' /= [1, 2, 3]] |
| 01:13:27 | <lambdabot> | [[],[3],[2],[2,3],[1],[1,3],[1,2]] |
| 01:13:29 | <koz> | :D |
| 01:13:32 | <Axman6> | you're making it (more) O(n^2) by adding that check |
| 01:13:48 | <Axman6> | since it checks every single vector. just drop the last one with init |
| 01:13:58 | <koz> | I guess that works. |
| 01:14:01 | <koz> | Thanks! |
| 01:14:16 | <abastro[m]> | filterM is honestly impressive |
| 01:14:25 | <abastro[m]> | Had hard time replicating the behavior in Scala |
| 01:15:02 | → | lainon joins (~lainon@c-68-46-201-40.hsd1.al.comcast.net) |
| 01:15:24 | <koz> | Yeah, I always forget it exists, and then realize you can do so many things with it. |
| 01:15:37 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 01:16:11 | <koz> | OK, so how about this: I have v :: Vector Word8, and I wanna make [Vector Word8] such that they're all the same length as v, but have _at least one_ element somewhere be smaller than its corresponding position in v. |
| 01:16:35 | <koz> | Is that some kind of traverse + init combo again? |
| 01:16:43 | <Axman6> | > filterM (const [True,False]) "abcd" -- probably a better example since it's more concise |
| 01:16:44 | × | Flonk quits (~Flonk@vps-zap441517-1.zap-srv.com) (Quit: Ping timeout (120 seconds)) |
| 01:16:44 | <lambdabot> | ["abcd","abc","abd","ab","acd","ac","ad","a","bcd","bc","bd","b","cd","c","d... |
| 01:17:03 | → | Flonk joins (~Flonk@vps-zap441517-1.zap-srv.com) |
| 01:17:17 | × | yauhsien quits (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Ping timeout: 240 seconds) |
| 01:17:29 | <koz> | > traverse (\x -> [0 .. x]) [1, 2, 3] |
| 01:17:31 | <lambdabot> | [[0,0,0],[0,0,1],[0,0,2],[0,0,3],[0,1,0],[0,1,1],[0,1,2],[0,1,3],[0,2,0],[0,... |
| 01:17:44 | <koz> | > last . traverse (\x -> [0 .. x]) $ [1, 2, 3] |
| 01:17:45 | <lambdabot> | [1,2,3] |
| 01:17:48 | <koz> | HMMMM |
| 01:18:08 | <koz> | > last . traverse (\x -> [0 .. x]) $ [0, 1, 2] |
| 01:18:10 | <lambdabot> | [0,1,2] |
| 01:18:14 | <koz> | OK yeah, works. |
| 01:18:25 | <koz> | You could probably spell the filterM example with traverse too somehow. |
| 01:19:05 | <Axman6> | foo v = replicate (V.length v) (V.replicate (V.length v) 0) :P |
| 01:19:26 | × | lainon quits (~lainon@c-68-46-201-40.hsd1.al.comcast.net) (Quit: Palaver https://palaverapp.com) |
| 01:19:28 | <koz> | Wat. |
| 01:19:44 | → | lainon joins (~lainon@c-68-46-201-40.hsd1.al.comcast.net) |
| 01:20:01 | <Axman6> | unless v has length 1, that will produce a list of vectors where at least one element has a value lower than its index |
| 01:20:20 | <Axman6> | because all elements are 0 - problem solved! |
| 01:21:10 | × | Techcable quits (~Techcable@user/Techcable) (Remote host closed the connection) |
| 01:21:15 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds) |
| 01:22:13 | × | DNH quits (~DNH@2a02:8108:1100:16d8:b07b:b6be:41fa:d6a) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 01:22:39 | × | lainon quits (~lainon@c-68-46-201-40.hsd1.al.comcast.net) (Remote host closed the connection) |
| 01:22:45 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 01:22:47 | → | Techcable joins (~Techcable@user/Techcable) |
| 01:25:29 | → | DNH joins (~DNH@2a02:8108:1100:16d8:b07b:b6be:41fa:d6a) |
| 01:25:37 | × | lumberjack123 quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Remote host closed the connection) |
| 01:26:57 | × | DNH quits (~DNH@2a02:8108:1100:16d8:b07b:b6be:41fa:d6a) (Client Quit) |
| 01:30:27 | × | vglfr quits (~vglfr@88.155.11.162) (Ping timeout: 256 seconds) |
| 01:30:50 | → | lumberjack123 joins (~alMalsamo@gateway/tor-sasl/almalsamo) |
| 01:33:20 | → | lavaman joins (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) |
| 01:34:45 | → | haasn` joins (~nand@haasn.dev) |
| 01:35:33 | → | alp joins (~alp@user/alp) |
| 01:36:15 | × | zebrag quits (~chris@user/zebrag) (Quit: Konversation terminated!) |
| 01:36:24 | → | vysn joins (~vysn@user/vysn) |
| 01:38:43 | <abastro[m]> | Lmao |
| 01:38:45 | × | haasn quits (~nand@haasn.dev) (Ping timeout: 256 seconds) |
| 01:38:45 | haasn` | is now known as haasn |
| 01:41:11 | × | pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.4.1) |
| 01:41:34 | → | sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) |
| 01:42:28 | → | lainon joins (lainon@gateway/vpn/protonvpn/lainon) |
| 01:49:24 | → | merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) |
| 01:54:49 | × | jao quits (~jao@45.152.183.53) (Remote host closed the connection) |
| 01:59:24 | → | jao joins (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) |
| 02:05:40 | → | y04nn joins (~y04nn@2a03:1b20:1:e011::a19e) |
| 02:11:43 | × | jao quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Remote host closed the connection) |
| 02:13:57 | × | lavaman quits (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Ping timeout: 252 seconds) |
| 02:15:04 | → | jao joins (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) |
| 02:21:29 | → | yauhsien joins (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) |
| 02:23:43 | × | merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds) |
| 02:30:34 | × | awpr quits (uid446117@id-446117.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 02:34:15 | → | ubert1 joins (~Thunderbi@p200300ecdf1588c644ba34ac9ed54fc8.dip0.t-ipconnect.de) |
| 02:34:55 | × | ubert quits (~Thunderbi@p200300ecdf158894f1c8f499466ba149.dip0.t-ipconnect.de) (Ping timeout: 250 seconds) |
| 02:34:55 | ubert1 | is now known as ubert |
| 02:34:55 | × | azimut_ quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds) |
| 02:37:14 | × | neurocyte0917090 quits (~neurocyte@user/neurocyte) (Ping timeout: 268 seconds) |
| 02:54:20 | → | k8yun joins (~k8yun@user/k8yun) |
| 02:54:39 | × | alp quits (~alp@user/alp) (Ping timeout: 252 seconds) |
| 02:55:33 | × | Unicorn_Princess quits (~Unicorn_P@46-54-248-191.static.kate-wing.si) (Remote host closed the connection) |
| 02:56:08 | × | ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection) |
| 02:57:33 | → | Unicorn_Princess joins (~Unicorn_P@46-54-248-191.static.kate-wing.si) |
| 02:58:46 | × | yauhsien quits (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 02:59:18 | → | yauhsien joins (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) |
| 03:04:32 | × | yauhsien quits (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Ping timeout: 252 seconds) |
| 03:05:55 | × | nicbk quits (~nicbk@user/nicbk) (Ping timeout: 240 seconds) |
| 03:05:58 | → | vglfr joins (~vglfr@88.155.11.162) |
| 03:08:08 | → | nicbk joins (~nicbk@user/nicbk) |
| 03:10:46 | → | [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470) |
| 03:17:55 | × | lainon quits (lainon@gateway/vpn/protonvpn/lainon) (Quit: WeeChat 3.4) |
| 03:20:12 | × | waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 240 seconds) |
| 03:25:25 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 240 seconds) |
| 03:26:30 | <Axman6> | Where's the best place to ask about ghcup? the docs have instructions for bash completion ut provides zsh and fish completion files, and I don't know how to install those |
| 03:27:43 | <janus> | Axman6: i think this is a good place to ask but try asking when europe is awake |
| 03:28:25 | <Axman6> | WAKE UP EUROPE! |
| 03:29:25 | <Axman6> | On an unrelated note... are the colours of the ghcup site intentionally the ukrainian flag? |
| 03:29:46 | → | mbuf joins (~Shakthi@223.178.96.253) |
| 03:35:59 | × | lbseale quits (~ep1ctetus@user/ep1ctetus) (Read error: Connection reset by peer) |
| 03:36:15 | × | belphegor666 quits (~satan@ip-046-223-002-003.um13.pools.vodafone-ip.de) (Ping timeout: 256 seconds) |
| 03:36:39 | → | belphegor666 joins (~satan@ip-046-223-002-003.um13.pools.vodafone-ip.de) |
| 03:37:10 | × | Unicorn_Princess quits (~Unicorn_P@46-54-248-191.static.kate-wing.si) (Remote host closed the connection) |
| 03:38:38 | <abastro[m]> | Oh, the color scheme changed, I see |
| 03:38:57 | <abastro[m]> | Very courageous.. perhaps at cost of losing Russian userbase |
| 03:43:54 | <Axman6> | might hurt our Oleg-factor somewhat |
| 03:48:02 | → | yauhsien joins (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) |
| 03:49:41 | <koz> | Oleg K is basically OCamling now, and Oleg G is a Finn IIRC. |
| 03:49:45 | × | boxscape_ quits (~boxscape_@p4ff0b60b.dip0.t-ipconnect.de) (Quit: Connection closed) |
| 03:50:23 | × | k8yun quits (~k8yun@user/k8yun) (Quit: Leaving) |
| 03:51:51 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 252 seconds) |
| 03:52:12 | × | yauhsien quits (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Ping timeout: 240 seconds) |
| 03:53:16 | → | lainon joins (~lainon@c-68-46-201-40.hsd1.al.comcast.net) |
| 03:53:33 | × | lainon quits (~lainon@c-68-46-201-40.hsd1.al.comcast.net) (Remote host closed the connection) |
| 03:57:53 | × | ProfSimm quits (~ProfSimm@87.227.196.109) (Remote host closed the connection) |
| 03:58:13 | × | vglfr quits (~vglfr@88.155.11.162) (Ping timeout: 240 seconds) |
| 03:59:20 | <sm> | also #haskell-ghcup:libera.chat |
| 03:59:44 | <sm> | but.. shell completions ? really ? :) |
| 03:59:46 | <Axman6> | great, thanks |
| 03:59:57 | <Axman6> | well, if they're there, why not document how to use them |
| 04:00:02 | × | haasn quits (~nand@haasn.dev) (Quit: ZNC 1.7.5+deb4 - https://znc.in) |
| 04:00:11 | <sm> | that's fair enough :) |
| 04:01:23 | → | haasn joins (~nand@haasn.dev) |
| 04:11:42 | → | lavaman joins (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) |
| 04:16:13 | × | vysn quits (~vysn@user/vysn) (Ping timeout: 240 seconds) |
| 04:17:03 | → | gehmehgeh joins (~user@user/gehmehgeh) |
| 04:19:54 | → | merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) |
| 04:21:55 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds) |
| 04:23:14 | → | yauhsien joins (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) |
| 04:27:49 | × | yauhsien quits (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Ping timeout: 256 seconds) |
| 04:28:07 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 04:29:17 | × | jao quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 256 seconds) |
| 04:38:06 | × | kaph quits (~kaph@net-109-116-124-149.cust.vodafonedsl.it) (Read error: Connection reset by peer) |
| 04:40:05 | → | gehmehgeh_ joins (~user@user/gehmehgeh) |
| 04:41:15 | × | gehmehgeh quits (~user@user/gehmehgeh) (Ping timeout: 240 seconds) |
| 04:47:15 | × | wyrd quits (~wyrd@gateway/tor-sasl/wyrd) (Ping timeout: 240 seconds) |
| 04:49:18 | → | wyrd joins (~wyrd@gateway/tor-sasl/wyrd) |
| 04:52:05 | × | lavaman quits (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Ping timeout: 250 seconds) |
| 04:54:06 | → | yauhsien joins (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) |
| 04:54:13 | × | merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds) |
| 05:00:15 | → | vglfr joins (~vglfr@88.155.11.162) |
| 05:02:29 | → | Codaraxis_ joins (~Codaraxis@user/codaraxis) |
| 05:03:49 | × | Codaraxis quits (~Codaraxis@user/codaraxis) (Ping timeout: 240 seconds) |
| 05:10:15 | × | nicbk quits (~nicbk@user/nicbk) (Ping timeout: 240 seconds) |
| 05:11:26 | → | bahamas joins (~lucian@84.232.140.158) |
| 05:13:49 | → | nicbk joins (~nicbk@user/nicbk) |
| 05:20:17 | → | awpr joins (uid446117@id-446117.lymington.irccloud.com) |
| 05:21:37 | → | kaph joins (~kaph@net-109-116-124-149.cust.vodafonedsl.it) |
| 05:22:56 | → | ProfSimm joins (~ProfSimm@87.227.196.109) |
| 05:28:33 | → | zmt00 joins (~zmt00@user/zmt00) |
| 05:32:17 | × | nsyd quits (~psy@104-62-224-96.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 240 seconds) |
| 05:36:21 | × | bahamas quits (~lucian@84.232.140.158) (Ping timeout: 252 seconds) |
| 05:42:51 | <abastro[m]> | Oleg-factor XD |
| 05:51:01 | × | cheater quits (~Username@user/cheater) (Ping timeout: 250 seconds) |
| 05:52:04 | → | nsyd joins (~psy@104-62-224-96.lightspeed.chrlnc.sbcglobal.net) |
| 05:56:31 | → | lavaman joins (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) |
| 06:01:39 | × | vglfr quits (~vglfr@88.155.11.162) (Ping timeout: 252 seconds) |
| 06:03:35 | × | ProfSimm quits (~ProfSimm@87.227.196.109) (Ping timeout: 256 seconds) |
| 06:06:57 | × | Neuromancer quits (~Neuromanc@user/neuromancer) (Ping timeout: 240 seconds) |
| 06:07:05 | → | cheater joins (~Username@user/cheater) |
| 06:13:05 | → | ProfSimm joins (~ProfSimm@87.227.196.109) |
| 06:25:37 | × | leungbk quits (~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) (Ping timeout: 240 seconds) |
| 06:26:20 | <koz> | Slightly meta question: is there some abstraction that unifies mapping, filtering and folding? In the sense that any of those can be described with said abstraction. |
| 06:26:57 | <Axman6> | Witherable perhaps? jackdk talks about it often but I haven't run into it myself |
| 06:27:17 | <Axman6> | not a single abstraction, but it extends the idea of filtering to Traversables |
| 06:27:29 | <Axman6> | (I think) |
| 06:27:37 | <jackdk> | since you can recreate foldMap with traverse, perhaps you can do everything with witherable? |
| 06:27:48 | → | vglfr joins (~vglfr@88.155.11.162) |
| 06:27:51 | <abastro[m]> | (Well mapping is implemented by folding tho) .. but yea filtering requires sth like witherable |
| 06:28:51 | <koz> | This Witherable? https://hackage.haskell.org/package/witherable-0.4.2/docs/Data-Witherable.html#t:Witherable |
| 06:29:53 | <koz> | (also, that function argument should totes be 'a -> Compose f Maybe b') |
| 06:30:01 | <jackdk> | with `f ~ forall m . Const m` you can foldmap with that, but you're traverable anyway |
| 06:30:26 | → | Giovanni joins (~Giovanni@176.67.166.45) |
| 06:30:51 | <koz> | (heck, it should _really_ be Star (Compose f Maybe) a b) |
| 06:33:15 | <Axman6> | what's Star? |
| 06:33:22 | <koz> | Kleisli with more instances. |
| 06:33:32 | <koz> | (from profunctors) |
| 06:34:03 | <Axman6> | any reason why Kleisli couldn't have those instances too? I remember seeing Star in lens but never looked into it |
| 06:34:19 | <koz> | Axman6: No non-hysterical reasons. |
| 06:34:32 | <koz> | Star is just a more profunctorially-oriented Kleisli. |
| 06:34:59 | <Axman6> | damn raisins |
| 06:35:05 | <koz> | I know right. |
| 06:35:58 | <koz> | Annoyingly, Compose f Maybe doesn't automagic up an Alternative. |
| 06:36:03 | <koz> | (Compose Maybe f would) |
| 06:36:43 | → | leungbk joins (~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) |
| 06:36:50 | <koz> | I mean, I _guess_ if we have Traversable f it would? |
| 06:38:06 | <koz> | I wonder what method fails. |
| 06:38:33 | → | vysn joins (~vysn@user/vysn) |
| 06:38:35 | × | nicbk quits (~nicbk@user/nicbk) (Ping timeout: 240 seconds) |
| 06:39:08 | <koz> | Couldn't you define empty as 'pure empty' and '<|> |
| 06:39:19 | <koz> | ' as 'liftA2 <|> |
| 06:39:21 | <koz> | '? |
| 06:39:24 | <koz> | Curse my typing. |
| 06:39:34 | <Axman6> | we love typing though |
| 06:39:39 | <koz> | (well, modulo all the Compose and getCompose noise) |
| 06:40:09 | <koz> | Like, does this violate any laws? |
| 06:44:23 | → | Graham31415 joins (~Graham314@5.33.52.156) |
| 06:48:36 | × | vglfr quits (~vglfr@88.155.11.162) (Ping timeout: 240 seconds) |
| 06:50:12 | × | leungbk quits (~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) (Ping timeout: 240 seconds) |
| 06:50:32 | → | merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) |
| 06:52:19 | → | zer0bitz joins (~zer0bitz@dsl-hkibng32-54fbf8-224.dhcp.inet.fi) |
| 06:52:35 | <abastro[m]> | Is this Compose the Compose we all know? |
| 06:55:19 | <koz> | abastro[m]: newtype Compose f g a = Compose { getCompose :: f (g a) } |
| 06:55:23 | <koz> | At least, last I checked. |
| 06:55:28 | <abastro[m]> | Ya, I guess it is |
| 06:55:58 | <abastro[m]> | I guess you could do that, but it seems like Alternative is just.. applicative with innate monoid structure |
| 06:56:26 | <abastro[m]> | `pure empty` could work yes |
| 06:57:19 | <koz> | I get the feeling that either (Applicative f, Alternative g) or (Alternative f, Applicative g) would work. |
| 06:57:28 | <abastro[m]> | Uhm actually |
| 06:57:34 | <koz> | (they'd be _different_ Alternatives though wrt their relationship to Applicative) |
| 06:57:45 | × | y04nn quits (~y04nn@2a03:1b20:1:e011::a19e) (Ping timeout: 252 seconds) |
| 06:57:56 | <dminuoso> | abastro[m]: Alternative is slightly more than that. |
| 06:58:08 | <dminuoso> | abastro[m]: There's additional structure with respect to Applicative. |
| 06:58:08 | <abastro[m]> | I guess `liftA2 (pure empty) x` does not equal to `x` |
| 06:58:23 | <abastro[m]> | Oh. Why does the docs not reveal that |
| 06:58:30 | <dminuoso> | It does? |
| 06:58:31 | <koz> | dminuoso: Nobody quite agrees on said relationship. |
| 06:58:39 | <koz> | abastro[m]: Also check Typeclassopedia's writeup on Alternative. |
| 06:58:59 | <abastro[m]> | `A monoid on applicative functors.` |
| 06:59:01 | <dminuoso> | base at least has this to say: |
| 06:59:03 | <dminuoso> | https://hackage.haskell.org/package/base-4.16.0.0/docs/Control-Applicative.html#t:Alternative |
| 06:59:10 | <dminuoso> | If defined, some and many should be the least solutions of the equations: [...] |
| 06:59:18 | <koz> | abastro[m]: 'liftA2 (<|>) (pure empty) x' _should_ be 'x'? |
| 06:59:20 | <koz> | Ah yeah. |
| 06:59:32 | <koz> | 'some' and 'many' are something I always forget about the existence of. |
| 06:59:32 | <dminuoso> | Though those are rather constraints about `some` and `many` |
| 06:59:44 | <abastro[m]> | I mean, wouldn't the laws hold with default implementations? |
| 06:59:58 | <dminuoso> | Yeah I guess |
| 07:00:10 | <koz> | Default implementations depend on each other, so if you don't define _either_, I think you might diverge. |
| 07:00:17 | <koz> | (you won't _necessarily_, but you might) |
| 07:00:24 | <abastro[m]> | Yea, I was more about the minimal definitions |
| 07:00:31 | <abastro[m]> | I think the definition is deliberste |
| 07:00:36 | <dminuoso> | abastro[m]: You might be interested in Ap |
| 07:00:37 | <abastro[m]> | Deliberate* |
| 07:00:41 | <abastro[m]> | So it could work in most cases |
| 07:00:56 | <abastro[m]> | Isn't Ap which makes Alternative into Monoid |
| 07:00:58 | <koz> | abastro[m]: If you don't define _either_ of 'some' or 'many', since they're defined in terms of each other, _using_ one or the other could diverge potentially. |
| 07:01:08 | <dminuoso> | abastro[m]: Yup! |
| 07:01:11 | <koz> | abastro[m]: 'Ap' makes _Applicative_ into Monoid. |
| 07:01:11 | <dminuoso> | instance (Applicative f, Monoid a) => Monoid (Ap f a) |
| 07:01:22 | <abastro[m]> | Oh wait |
| 07:01:25 | <abastro[m]> | It is applicative. |
| 07:01:29 | <dminuoso> | That's essentially just Alternative but via Monoid! |
| 07:01:33 | <abastro[m]> | I somehow messed up what it is |
| 07:01:43 | <abastro[m]> | No, it is not alike alternative you know |
| 07:01:43 | <dminuoso> | Ah sorry hold on |
| 07:01:47 | <dminuoso> | miscopy and paste |
| 07:01:50 | <dminuoso> | I meant Alt |
| 07:01:51 | <koz> | dminuoso: Yes, but it's weaker. Alternative works for _any_ a. |
| 07:01:55 | <dminuoso> | https://hackage.haskell.org/package/base-4.16.0.0/docs/Data-Monoid.html#t:Alt :) |
| 07:01:58 | <koz> | Alt is the other one yes. |
| 07:02:05 | <koz> | All these similar-sounding things. |
| 07:02:20 | × | gehmehgeh_ quits (~user@user/gehmehgeh) (Remote host closed the connection) |
| 07:02:37 | → | leungbk joins (~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) |
| 07:02:48 | <koz> | Basically everything is a monoid. |
| 07:03:08 | <koz> | The entirety of Haskell is an elaborate edifice built upon monoids. |
| 07:03:12 | <koz> | It's monoids all the way down. |
| 07:03:22 | <abastro[m]> | Yea, Alt |
| 07:03:29 | <abastro[m]> | I also mixed up Alt and Ap |
| 07:03:31 | <abastro[m]> | Meh, me |
| 07:03:38 | <koz> | They're easy to mix up. |
| 07:03:39 | × | Graham31415 quits (~Graham314@5.33.52.156) (Ping timeout: 256 seconds) |
| 07:03:58 | <abastro[m]> | Ap lifts Monoids through Applicative, IIRC |
| 07:03:58 | <koz> | Not helped by the fact that 'Alt' is also a semigroupoids thing, which is 'Alternative without empty'. |
| 07:04:17 | → | winstonsmith_ joins (~winston@2a02:c98:1003:8000:6106:3ff0:197d:fcd2) |
| 07:04:23 | <abastro[m]> | Btw IIRC `some` and many` is designed to terminate for most cases without you implementing them. |
| 07:04:28 | <abastro[m]> | * `some` and `many` is |
| 07:04:42 | <koz> | A little inconsistent, since it also defined Apply as 'Applicative without pure', so shouldn't it be called 'Altern'? |
| 07:05:00 | → | gehmehgeh_ joins (~user@user/gehmehgeh) |
| 07:05:26 | <abastro[m]> | Naming is hard tbh |
| 07:05:38 | <abastro[m]> | In my math class I just heard how bad mathematicians are at naming |
| 07:05:54 | <abastro[m]> | So they often ended up with same names for numerous concepts |
| 07:06:21 | <koz> | Can confirm. Worse, they ended up with _different_ names for the _same_ concept! |
| 07:07:20 | <abastro[m]> | <strikethrough> Well concepts become different when you give it different names </> |
| 07:07:41 | <koz> | A natural transformation by any other name will compose just as well. |
| 07:09:17 | × | leungbk quits (~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) (Ping timeout: 252 seconds) |
| 07:11:55 | <abastro[m]> | ? |
| 07:12:02 | → | Neuromancer joins (~Neuromanc@user/neuromancer) |
| 07:12:03 | <abastro[m]> | Natural transformation by other name? |
| 07:12:13 | → | michalz joins (~michalz@185.246.204.57) |
| 07:12:25 | × | charukiewicz quits (~charukiew@2600:1702:a90:2750::3c) () |
| 07:12:42 | <koz> | abastro[m]: A long-running joke/justification in category theory is that so many things in other fields of mathematics are just NTs in fancy clothes. |
| 07:12:51 | <koz> | I think Awodey's book pretty much _opens_ with such a claim. |
| 07:14:23 | <dminuoso> | 08:08:04 koz | [07:03:08] The entirety of Haskell is an elaborate edifice built upon monoids. |
| 07:14:31 | <dminuoso> | Monoids are just ubiquitous. They are everywhere. |
| 07:14:35 | <dminuoso> | Not just Haskell or programming. |
| 07:14:45 | <abastro[m]> | Oh, that joke |
| 07:14:58 | <abastro[m]> | Ya the one where many other mathematicians would hate :) |
| 07:16:55 | → | vglfr joins (~vglfr@88.155.11.162) |
| 07:21:10 | → | leungbk joins (~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) |
| 07:22:07 | → | lagooned joins (~lagooned@108-208-149-42.lightspeed.hstntx.sbcglobal.net) |
| 07:22:41 | × | Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 07:24:57 | × | merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds) |
| 07:25:55 | × | leungbk quits (~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) (Ping timeout: 250 seconds) |
| 07:26:35 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 07:28:20 | → | mmhat joins (~mmh@55d49226.access.ecotel.net) |
| 07:31:24 | → | mikoto-chan joins (~mikoto-ch@213.177.151.239) |
| 07:32:32 | <tomsmeding> | dminuoso: talking about monoids -- there's this trick: newtype Thing m = Thing (m -> m) ; instance Semigroup (Thing m) where Thing f <> Thing g = Thing (f . g) ; instance Monoid (Thing m) where mempty = Thing id ; rep :: Semigroup m => m -> Thing m ; rep m = Thing (m <>) ; abs :: Monoid m => Thing m -> m ; abs (Thing f) = f mempty |
| 07:32:45 | <abastro[m]> | Hm I wonder if `liftA2 f (pure x) y == y` |
| 07:32:48 | <tomsmeding> | this is "the difference list trick", also known as ShowS |
| 07:32:55 | → | Graham31415 joins (~Graham314@5.33.52.156) |
| 07:33:13 | <tomsmeding> | I've also seen it being called a "Cayley" transform at least once, but is there a generally accepted name for this? |
| 07:33:37 | × | Graham31415 quits (~Graham314@5.33.52.156) (Client Quit) |
| 07:33:45 | <dminuoso> | tomsmeding: Mmm, what exactly is the "trick" here? |
| 07:33:54 | <abastro[m]> | Eh I should have said, `liftA2 f (pure x) y == y` if for any z, `f x z == z` |
| 07:34:01 | <dminuoso> | On its own this seems blant so far |
| 07:34:08 | <tomsmeding> | representing a monoid M as functions M -> M, which has better performance properties for some monoids and some usages |
| 07:34:17 | <dminuoso> | Ah yes. |
| 07:34:56 | <abastro[m]> | Sounds like `Endo` |
| 07:35:10 | <tomsmeding> | ah, it is Endo |
| 07:35:27 | <c_wraith> | It's not exactly Endo, as you need to associate a function in the mapping between them |
| 07:35:39 | → | alp joins (~alp@user/alp) |
| 07:35:43 | <tomsmeding> | so, like, suppose I'm writing a paper where I do this and need to call it something :p |
| 07:35:50 | <dminuoso> | c_wraith: Thing is Endo |
| 07:35:52 | <c_wraith> | To really model it, you want to put the necessary functions in the type, too. |
| 07:36:09 | <abastro[m]> | Wdym necessary functions? |
| 07:36:56 | <c_wraith> | to convert between Endo [a] and [a], for instance.. |
| 07:37:02 | × | yauhsien quits (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 07:37:07 | <hololeap> | @hackage bytebuild |
| 07:37:07 | <lambdabot> | https://hackage.haskell.org/package/bytebuild |
| 07:37:12 | <hololeap> | > Unlike builders from the bytestring package, these builders do not track their state when they run out of space. |
| 07:37:21 | <hololeap> | anyone know what they mean by "run out of space"? |
| 07:37:30 | → | leungbk joins (~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) |
| 07:37:47 | <tomsmeding> | c_wraith: the conversion is always (\x -> (x <>)) :: m -> Endo m ; (\x -> x mempty) :: Endo m -> m |
| 07:37:48 | <abastro[m]> | Well you could just define `rep` for `Endo`, then you get that. |
| 07:37:58 | <tomsmeding> | potentially with (<> x) instead of (x <>) if that works better |
| 07:38:16 | <tomsmeding> | at least in this trick that I'm trying to find a name for, it is always this way |
| 07:38:24 | <dminuoso> | hololeap: Mmm, did you read the following sentence? |
| 07:38:38 | → | yauhsien joins (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) |
| 07:38:50 | → | y04nn joins (~y04nn@2a03:1b20:1:e011::a19e) |
| 07:38:59 | <c_wraith> | hololeap: builders are a wrapper around a mutable buffer. |
| 07:39:41 | <abastro[m]> | Tbh `Endo (<> x)` sounds short enough to me |
| 07:39:41 | <tomsmeding> | abastro[m]: liftA2 f (pure x) y = f <$> pure x <*> y = pure f <*> pure x <*> y =[homomorphism] pure (f x) <*> y =[f x z == z] pure id <*> y =[identity] y |
| 07:39:57 | <tomsmeding> | abastro[m]: as a name? |
| 07:39:58 | <abastro[m]> | Oh wait |
| 07:40:05 | <tomsmeding> | (oh I forgot the Endo wrappers) |
| 07:40:07 | <abastro[m]> | Noo |
| 07:40:18 | <tomsmeding> | (just coerce that stuff :p ) |
| 07:40:45 | <abastro[m]> | <del>name it as `Endo _<>`</del> |
| 07:40:50 | <hololeap> | dminuoso: yeah I read it |
| 07:41:21 | <tomsmeding> | "Now in the next step, we will eliminate some adverse complexity issues using the Endo _<> trick, which ..." |
| 07:41:37 | <hololeap> | hm, ok... |
| 07:42:12 | × | leungbk quits (~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) (Ping timeout: 240 seconds) |
| 07:42:14 | <c_wraith> | hololeap: well. they're a wrapper around a function for manipulating such a buffer. In any case, it's saying it doesn't track the length of the buffer and space available. |
| 07:42:15 | <hololeap> | yeah I get it now. thanks c_wraith |
| 07:42:18 | <abastro[m]> | Hmm, `liftA2 f x (pure y) == pure f <*> x <*> pure y`, can I go further from here |
| 07:42:28 | <abastro[m]> | Apparently idk applicative laws. I should memorize it.. |
| 07:42:29 | <c_wraith> | hololeap: it just fails if it would try to write outside it |
| 07:42:37 | tomsmeding | looked up the laws |
| 07:42:49 | <tomsmeding> | abastro[m]: perhaps use Interchange |
| 07:42:54 | <abastro[m]> | Ohh |
| 07:42:58 | <tomsmeding> | oh no |
| 07:43:04 | <tomsmeding> | wrong association of <*> |
| 07:43:18 | <tomsmeding> | oh no of course not |
| 07:43:48 | <c_wraith> | flip f y <$> x |
| 07:44:11 | ← | jakalx parts (~jakalx@base.jakalx.net) (Error from remote client) |
| 07:44:27 | <c_wraith> | (I have a policy of never using flip in non-toy code) |
| 07:44:53 | → | jakalx joins (~jakalx@base.jakalx.net) |
| 07:45:33 | <c_wraith> | But you end up writing a lot of code that looks vaguely like that when you're writing lenses by hand. |
| 07:45:56 | <c_wraith> | and it's important that you stick with only Functor in those cases |
| 07:46:24 | <tomsmeding> | abastro[m]: (pure f <*> x) <*> pure y =[interchange] pure ($ y) <*> (pure f <*> x) =[composition] pure (.) <*> pure ($ y) <*> pure f <*> x =[homomorphism x2] pure (($ y) . f) <*> x = pure (\z -> f z y) <*> x |
| 07:46:45 | <abastro[m]> | Oh wait, that works |
| 07:46:57 | <c_wraith> | I didn't say it was wrong! |
| 07:47:01 | <tomsmeding> | had to think a little before I realised that composition does work :p |
| 07:48:43 | <abastro[m]> | I guess when f z y = z for all z, like the case with `f = (<|>)` and `y = empty`, it would boil down to `x`, |
| 07:48:52 | <abastro[m]> | So.. |
| 07:49:02 | → | machinedgod joins (~machinedg@24.105.81.50) |
| 07:49:26 | <abastro[m]> | Given `(Applicative f, Alternative g)`, we could have `Alternative (Compose f g)` |
| 07:49:54 | <abastro[m]> | by `empty = pure empty` and `(<|>) = liftA2 (<|>)` |
| 07:50:10 | <abastro[m]> | Now question is, why is it not defined? |
| 07:51:01 | <c_wraith> | Probably because there is another equally-lawful implementation with an Alternative f constraint |
| 07:51:09 | → | lortabac joins (~lortabac@2a01:e0a:541:b8f0:9be3:3a9c:fd6c:bab4) |
| 07:52:15 | <abastro[m]> | Oh. Makes sense. |
| 07:52:34 | <abastro[m]> | `(<|>) = coerce ((<|>) :: f (g a) -> f (g a) -> f (g a))` Wait how does this work |
| 07:52:57 | <abastro[m]> | Oh nvm, of course works when `f` is alternative |
| 07:53:45 | → | leungbk joins (~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) |
| 07:54:45 | <koz> | Yeah, you'd have to pick _one_, because otherwise GHC would barf at instance resolution. |
| 07:58:09 | <abastro[m]> | Sometimes deciding instance is intricate, it seems. |
| 07:58:36 | × | leungbk quits (~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) (Ping timeout: 240 seconds) |
| 07:58:45 | <c_wraith> | especially for a type with as little semantic content as Compose |
| 07:58:59 | → | zeenk joins (~zeenk@2a02:2f04:a110:7d00:2011:cfed:bad7:3c94) |
| 07:59:06 | × | notzmv quits (~zmv@user/notzmv) (Ping timeout: 245 seconds) |
| 07:59:29 | <abastro[m]> | Yep, indeed. |
| 08:01:17 | → | acidjnk joins (~acidjnk@p200300d0c7049f94990c0fcd1a5d0faa.dip0.t-ipconnect.de) |
| 08:02:17 | × | mvk quits (~mvk@2607:fea8:5cc3:7e00::7980) (Ping timeout: 240 seconds) |
| 08:03:04 | × | acidsys quits (~LSD@2a03:4000:55:d20::3) (Excess Flood) |
| 08:03:23 | → | briandaed joins (~root@109.95.142.93.r.toneticgroup.pl) |
| 08:03:25 | × | yauhsien quits (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 08:03:34 | → | acidsys joins (~LSD@2a03:4000:55:d20::3) |
| 08:03:41 | × | acidsys quits (~LSD@2a03:4000:55:d20::3) (Excess Flood) |
| 08:04:17 | → | acidsys joins (~LSD@2a03:4000:55:d20::3) |
| 08:04:20 | → | cfricke joins (~cfricke@user/cfricke) |
| 08:05:57 | × | kaph quits (~kaph@net-109-116-124-149.cust.vodafonedsl.it) (Ping timeout: 252 seconds) |
| 08:10:58 | → | leungbk joins (~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) |
| 08:15:18 | × | tzh quits (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz) |
| 08:15:25 | × | leungbk quits (~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) (Ping timeout: 240 seconds) |
| 08:16:14 | → | yauhsien joins (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) |
| 08:18:15 | → | benin joins (~benin@183.82.207.30) |
| 08:18:36 | × | vglfr quits (~vglfr@88.155.11.162) (Ping timeout: 252 seconds) |
| 08:19:15 | → | kaph joins (~kaph@net-109-116-124-149.cust.vodafonedsl.it) |
| 08:20:15 | × | y04nn quits (~y04nn@2a03:1b20:1:e011::a19e) (Remote host closed the connection) |
| 08:20:27 | → | y04nn joins (~y04nn@2a03:1b20:1:e011::a19e) |
| 08:23:04 | × | benin quits (~benin@183.82.207.30) (Client Quit) |
| 08:23:57 | × | Flow quits (~none@gentoo/developer/flow) (Ping timeout: 240 seconds) |
| 08:25:28 | → | merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) |
| 08:25:31 | → | vglfr joins (~vglfr@coupling.penchant.volia.net) |
| 08:27:18 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 08:27:29 | → | leungbk joins (~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) |
| 08:28:03 | × | lagooned quits (~lagooned@108-208-149-42.lightspeed.hstntx.sbcglobal.net) (Quit: WeeChat 3.4) |
| 08:28:20 | → | fendor joins (~fendor@178.115.72.153.wireless.dyn.drei.com) |
| 08:30:59 | → | dsrt^ joins (~dsrt@96-67-120-105-static.hfc.comcastbusiness.net) |
| 08:31:43 | → | Flow joins (~none@gentoo/developer/flow) |
| 08:31:49 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds) |
| 08:32:10 | × | leungbk quits (~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) (Ping timeout: 260 seconds) |
| 08:32:14 | × | kaph quits (~kaph@net-109-116-124-149.cust.vodafonedsl.it) (Read error: Connection reset by peer) |
| 08:32:26 | → | kaph joins (~kaph@net-109-116-124-149.cust.vodafonedsl.it) |
| 08:33:59 | × | lavaman quits (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Remote host closed the connection) |
| 08:36:25 | urtie | is now known as earthy |
| 08:38:29 | × | [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer) |
| 08:43:26 | → | ccntrq joins (~Thunderbi@2a01:c23:9016:8e00:deb2:a539:32d1:3ed2) |
| 08:43:29 | → | benin joins (~benin@183.82.207.30) |
| 08:45:10 | → | leungbk joins (~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) |
| 08:52:27 | × | gehmehgeh_ quits (~user@user/gehmehgeh) (Quit: Leaving) |
| 08:56:42 | → | Pickchea joins (~private@user/pickchea) |
| 08:57:25 | → | MajorBiscuit joins (~MajorBisc@wlan-145-94-219-172.wlan.tudelft.nl) |
| 08:59:06 | × | MajorBiscuit quits (~MajorBisc@wlan-145-94-219-172.wlan.tudelft.nl) (Client Quit) |
| 08:59:06 | × | benin quits (~benin@183.82.207.30) (Quit: The Lounge - https://thelounge.chat) |
| 09:02:23 | → | Midjak joins (~Midjak@82.66.147.146) |
| 09:07:00 | × | TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Ping timeout: 240 seconds) |
| 09:08:03 | → | benin joins (~benin@183.82.207.30) |
| 09:09:12 | × | benin quits (~benin@183.82.207.30) (Client Quit) |
| 09:09:56 | × | kaph quits (~kaph@net-109-116-124-149.cust.vodafonedsl.it) (Ping timeout: 245 seconds) |
| 09:10:15 | × | lumberjack123 quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds) |
| 09:10:18 | → | benin joins (~benin@183.82.207.30) |
| 09:10:54 | × | benin quits (~benin@183.82.207.30) (Client Quit) |
| 09:11:21 | → | kaph joins (~kaph@net-109-116-124-149.cust.vodafonedsl.it) |
| 09:13:51 | → | benin joins (~benin@183.82.207.30) |
| 09:17:02 | × | kaph quits (~kaph@net-109-116-124-149.cust.vodafonedsl.it) (Remote host closed the connection) |
| 09:17:36 | × | benin quits (~benin@183.82.207.30) (Client Quit) |
| 09:18:36 | → | benin joins (~benin@183.82.207.30) |
| 09:19:09 | → | kaph joins (~kaph@net-109-116-124-149.cust.vodafonedsl.it) |
| 09:19:33 | → | gehmehgeh joins (~user@user/gehmehgeh) |
| 09:20:17 | × | benin quits (~benin@183.82.207.30) (Client Quit) |
| 09:20:32 | × | mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 268 seconds) |
| 09:21:30 | → | benin joins (~benin@183.82.207.30) |
| 09:21:57 | → | jinsun joins (~jinsun@user/jinsun) |
| 09:23:31 | → | pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
| 09:24:50 | → | dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net) |
| 09:25:19 | × | jinsun__ quits (~jinsun@user/jinsun) (Ping timeout: 256 seconds) |
| 09:28:07 | × | benin quits (~benin@183.82.207.30) (Quit: The Lounge - https://thelounge.chat) |
| 09:28:26 | × | chenqisu1 quits (~chenqisu1@183.217.201.47) (Quit: Leaving) |
| 09:30:52 | → | benin joins (~benin@183.82.207.30) |
| 09:31:20 | → | MajorBiscuit joins (~MajorBisc@wlan-145-94-219-172.wlan.tudelft.nl) |
| 09:32:36 | → | mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475) |
| 09:33:16 | × | yauhsien quits (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 09:35:02 | → | krappix joins (~krappix@nat-eduroam-76-gw-01-lne.lille.inria.fr) |
| 09:35:25 | → | alMalsamo joins (~alMalsamo@gateway/tor-sasl/almalsamo) |
| 09:38:34 | → | lavaman joins (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) |
| 09:39:09 | → | cosimone joins (~user@93-44-187-176.ip98.fastwebnet.it) |
| 09:44:01 | × | gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving) |
| 09:44:35 | × | nsyd quits (~psy@104-62-224-96.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 256 seconds) |
| 09:44:49 | → | yauhsien joins (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) |
| 09:46:52 | <abastro[m]> | Hmm what is meta? |
| 09:47:23 | × | benin quits (~benin@183.82.207.30) (Quit: The Lounge - https://thelounge.chat) |
| 09:48:01 | × | shriekingnoise quits (~shrieking@201.231.16.156) (Quit: Quit) |
| 09:48:15 | <merijn> | E_INSUFFICIENT_CONTEXT :p |
| 09:48:29 | → | benin joins (~benin@183.82.207.30) |
| 09:48:56 | <abastro[m]> | Haskell foundation links the meta |
| 09:49:17 | × | leungbk quits (~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) (Ping timeout: 240 seconds) |
| 09:49:20 | <Franciman> | abastro[m]: isnt it the new name of facebook? |
| 09:49:36 | <merijn> | Yeah |
| 09:49:46 | <Franciman> | Meta is paying haskell to exist |
| 09:49:58 | <Franciman> | like microsofwt |
| 09:50:17 | <merijn> | Meta the company is the parent company of facebook, trying to rebrand away from facebook's...great...reputation |
| 09:50:49 | → | bahamas joins (~lucian@86.120.77.115) |
| 09:51:02 | × | Akiva quits (~Akiva@user/Akiva) (Ping timeout: 260 seconds) |
| 09:52:09 | <Franciman> | luky for us |
| 09:52:35 | × | kaph quits (~kaph@net-109-116-124-149.cust.vodafonedsl.it) (Ping timeout: 250 seconds) |
| 09:53:11 | × | mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 252 seconds) |
| 09:55:13 | → | mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475) |
| 09:56:13 | × | dextaa_ quits (~dextaa@user/dextaa) (Quit: The Lounge - https://thelounge.chat) |
| 09:56:47 | × | econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity) |
| 09:57:37 | × | mikoto-chan quits (~mikoto-ch@213.177.151.239) (Ping timeout: 240 seconds) |
| 09:57:51 | × | tinwood quits (~tinwood@canonical/tinwood) (Remote host closed the connection) |
| 09:57:54 | × | cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.4.1) |
| 09:58:05 | → | Everything joins (~Everythin@37.115.210.35) |
| 09:58:57 | → | mikoto-chan joins (~mikoto-ch@213.177.151.239) |
| 10:00:53 | → | tinwood joins (~tinwood@general.default.akavanagh.uk0.bigv.io) |
| 10:00:53 | × | tinwood quits (~tinwood@general.default.akavanagh.uk0.bigv.io) (Changing host) |
| 10:00:53 | → | tinwood joins (~tinwood@canonical/tinwood) |
| 10:01:32 | → | leungbk joins (~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) |
| 10:02:01 | <boxscape> | Hmm why does the duckduckgo search result for the haskell foundation say "Haskell Foundation - Donuts" |
| 10:02:01 | <boxscape> | not that there's anything wrong with donuts |
| 10:02:32 | <boxscape> | abastro: meta is the new name of facebook's parent company |
| 10:03:50 | <abastro[m]> | Donuts haha |
| 10:04:01 | <abastro[m]> | Uhh facebook parent has name meta? |
| 10:04:06 | <abastro[m]> | What a lousy name |
| 10:05:18 | × | xff0x quits (~xff0x@125x102x200x106.ap125.ftth.ucom.ne.jp) (Ping timeout: 252 seconds) |
| 10:06:04 | → | DNH joins (~DNH@2a02:8108:1100:16d8:4199:73fa:f378:33d) |
| 10:06:11 | × | leungbk quits (~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) (Ping timeout: 245 seconds) |
| 10:06:22 | → | TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker) |
| 10:07:54 | → | kuribas joins (~user@ip-188-118-57-242.reverse.destiny.be) |
| 10:10:15 | → | mc47 joins (~mc47@xmonad/TheMC47) |
| 10:10:44 | → | notzmv joins (~zmv@user/notzmv) |
| 10:11:09 | <abastro[m]> | Why such a huge multibillion dollar corporation would choose a name "meta"? I wonder.. |
| 10:13:27 | × | perrierjouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.4.1) |
| 10:15:00 | × | lavaman quits (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Ping timeout: 240 seconds) |
| 10:15:11 | × | TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Ping timeout: 256 seconds) |
| 10:15:17 | → | perrierjouet joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) |
| 10:16:38 | <merijn> | because "metaverse" |
| 10:17:04 | <Franciman> | and because they are so powerful they can get to pick a super short name |
| 10:17:06 | <merijn> | Which can be adequately explained as: Zuckerberg fell asleep while reading Snow Crash and didn't realise Neal Stephenson was describing a dystopia |
| 10:17:08 | → | TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker) |
| 10:17:08 | <Franciman> | just to prove they are super cool |
| 10:17:33 | → | leungbk joins (~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) |
| 10:17:44 | <merijn> | tbh, Facebook rebranding to Meta and Metaverse is really, *really* funny |
| 10:18:08 | <Franciman> | would you classify facebook as a terrorist group trying to undermine democracy? |
| 10:18:27 | <merijn> | "Hey, should we market our society destroying tech death machine after a completely dystopian cyberpunk fiction?" 'yeah, that sounds dope' |
| 10:18:52 | <merijn> | But probably more for -offtopic :) |
| 10:19:17 | × | Pickchea quits (~private@user/pickchea) (Ping timeout: 240 seconds) |
| 10:22:37 | × | leungbk quits (~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) (Ping timeout: 240 seconds) |
| 10:29:28 | × | perrierjouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.4.1) |
| 10:31:35 | → | perrierjouet joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) |
| 10:34:38 | → | leungbk joins (~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) |
| 10:39:17 | × | leungbk quits (~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) (Ping timeout: 240 seconds) |
| 10:42:23 | → | lavaman joins (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) |
| 10:44:05 | × | bahamas quits (~lucian@86.120.77.115) (Ping timeout: 256 seconds) |
| 10:45:37 | → | dyeplexer joins (~dyeplexer@user/dyeplexer) |
| 10:45:52 | × | Everything quits (~Everythin@37.115.210.35) (Quit: leaving) |
| 10:50:26 | <maerwald[m]> | boxscape: https://www.haskellfoundation.org/ |
| 10:50:39 | → | leungbk joins (~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) |
| 10:51:01 | <boxscape> | maerwald: but the donuts are mentioned in the title of the haskell.foundation search results |
| 10:51:14 | × | y04nn quits (~y04nn@2a03:1b20:1:e011::a19e) (Ping timeout: 260 seconds) |
| 10:51:19 | <boxscape> | s/results/result |
| 10:51:58 | <boxscape> | though it is funny that there are multiple foundations called "haskell foundation" |
| 10:52:19 | <maerwald[m]> | It's like googling curry |
| 10:52:51 | × | benin quits (~benin@183.82.207.30) (Quit: The Lounge - https://thelounge.chat) |
| 10:52:59 | <abastro[m]> | It is still great that HF managed to get to the second entry :) |
| 10:54:00 | <boxscape> | the first entry in my search results, even |
| 10:55:42 | <abastro[m]> | Wait, duckduckgo now detects who you are? |
| 10:55:42 | <abastro[m]> | Scary |
| 10:57:33 | × | mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 252 seconds) |
| 10:58:19 | <abastro[m]> | It is strange |
| 10:58:34 | <abastro[m]> | How company like meta could support haskell |
| 10:58:56 | <abastro[m]> | I mean, tbh I dislike FB so.. |
| 10:58:58 | <maerwald[m]> | https://github.com/haskell-foundation/foundation |
| 10:59:04 | <maerwald[m]> | Another one |
| 10:59:14 | <abastro[m]> | This is too much offtopic right |
| 10:59:51 | → | sloorush joins (~sloorush@136.233.9.99) |
| 11:00:01 | × | ft quits (~ft@shell.chaostreff-dortmund.de) (Remote host closed the connection) |
| 11:00:14 | → | ft joins (~ft@shell.chaostreff-dortmund.de) |
| 11:00:43 | × | perrierjouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.4.1) |
| 11:01:09 | <maerwald[m]> | Is there a good overview of existing preludes? |
| 11:01:26 | × | ProfSimm quits (~ProfSimm@87.227.196.109) (Remote host closed the connection) |
| 11:01:57 | × | belphegor666 quits (~satan@ip-046-223-002-003.um13.pools.vodafone-ip.de) (Ping timeout: 252 seconds) |
| 11:02:38 | → | cfricke joins (~cfricke@user/cfricke) |
| 11:03:11 | → | belphegor666 joins (~satan@ip-046-223-002-003.um13.pools.vodafone-ip.de) |
| 11:04:59 | → | perrierjouet joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) |
| 11:05:04 | <abastro[m]> | Indeed, it is funny |
| 11:05:07 | <abastro[m]> | Oh right, sorry. offtopic' |
| 11:07:19 | × | krappix quits (~krappix@nat-eduroam-76-gw-01-lne.lille.inria.fr) (Ping timeout: 256 seconds) |
| 11:07:31 | × | perrierjouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Client Quit) |
| 11:07:39 | → | boxscape_ joins (~boxscape_@p4ff0b60b.dip0.t-ipconnect.de) |
| 11:08:23 | <maerwald[m]> | Franciman: no, terrorists usually have political goals. Causing destructive effects on global society, because you don't care about it needs a different name |
| 11:08:39 | → | xff0x joins (~xff0x@i121-117-52-147.s41.a013.ap.plala.or.jp) |
| 11:09:05 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 11:10:29 | × | zer0bitz quits (~zer0bitz@dsl-hkibng32-54fbf8-224.dhcp.inet.fi) (Ping timeout: 256 seconds) |
| 11:10:41 | → | perrierjouet joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) |
| 11:10:50 | → | zer0bitz joins (~zer0bitz@dsl-hkibng32-54fbf8-224.dhcp.inet.fi) |
| 11:12:55 | × | pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.4.1) |
| 11:13:58 | → | benin joins (~benin@183.82.207.30) |
| 11:14:55 | × | lavaman quits (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Ping timeout: 260 seconds) |
| 11:18:37 | × | fendor quits (~fendor@178.115.72.153.wireless.dyn.drei.com) (Remote host closed the connection) |
| 11:20:01 | × | yauhsien quits (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 11:20:16 | → | Codaraxis__ joins (~Codaraxis@user/codaraxis) |
| 11:20:31 | × | perrierjouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.4.1) |
| 11:20:51 | → | yauhsien joins (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) |
| 11:21:33 | → | Pickchea joins (~private@user/pickchea) |
| 11:21:41 | → | chenqisu1 joins (~chenqisu1@183.217.201.47) |
| 11:22:27 | → | abab9579 joins (~abab9579@143.248.229.174) |
| 11:22:58 | abab9579 | is now known as abastro_ |
| 11:23:07 | × | MasseR46 quits (~MasseR@51.15.143.128) (Quit: The Lounge - https://thelounge.chat) |
| 11:23:43 | → | MasseR46 joins (~MasseR@51.15.143.128) |
| 11:23:54 | → | dextaa_ joins (~dextaa@user/dextaa) |
| 11:24:19 | × | Codaraxis_ quits (~Codaraxis@user/codaraxis) (Ping timeout: 256 seconds) |
| 11:24:58 | × | abastro_ quits (~abab9579@143.248.229.174) (Client Quit) |
| 11:25:39 | × | yauhsien quits (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Ping timeout: 260 seconds) |
| 11:27:24 | × | Pickchea quits (~private@user/pickchea) (Ping timeout: 240 seconds) |
| 11:28:54 | × | ix quits (~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe) (Remote host closed the connection) |
| 11:29:03 | → | ix joins (~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe) |
| 11:30:26 | × | merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 260 seconds) |
| 11:30:37 | → | merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) |
| 11:35:27 | → | perrierjouet joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) |
| 11:35:49 | × | TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Ping timeout: 240 seconds) |
| 11:37:00 | × | belphegor666 quits (~satan@ip-046-223-002-003.um13.pools.vodafone-ip.de) (Changing host) |
| 11:37:00 | → | belphegor666 joins (~satan@user/belphegor666) |
| 11:39:19 | → | TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker) |
| 11:39:42 | → | CiaoSen joins (~Jura@p200300c95735b0002a3a4dfffe84dbd5.dip0.t-ipconnect.de) |
| 11:42:21 | → | yauhsien joins (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) |
| 11:43:37 | × | perrierjouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Ping timeout: 240 seconds) |
| 11:45:46 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Quit: Leaving) |
| 11:46:57 | → | geekosaur joins (~geekosaur@xmonad/geekosaur) |
| 11:47:31 | → | perrierjouet joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) |
| 11:50:53 | × | merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 250 seconds) |
| 11:51:19 | → | kaph joins (~kaph@net-109-116-124-149.cust.vodafonedsl.it) |
| 11:52:11 | → | merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) |
| 11:52:49 | × | cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.4.1) |
| 11:52:54 | → | Digit joins (~user@user/digit) |
| 11:54:11 | Digit | gets wild idea of a haskelly terminal shell, wonders if ever been done, to use haskell ways and syntax with unix command line |
| 11:54:52 | <opqdonut> | Digit: https://hackage.haskell.org/package/turtle |
| 11:55:04 | <opqdonut> | not sure if anybody uses that any more but it was a big thing back in the day |
| 11:55:15 | × | leungbk quits (~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) (Ping timeout: 256 seconds) |
| 11:55:30 | <opqdonut> | looks like new releases keep coming out, cool |
| 11:55:37 | × | CiaoSen quits (~Jura@p200300c95735b0002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 240 seconds) |
| 11:56:26 | × | dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Quit: WeeChat 3.4.1) |
| 11:57:45 | <Digit> | oh yup. been here before. lets see if the fanciful notion sticks this time. thanks for sparing me much painful websearching. |
| 11:57:49 | <boxscape_> | there's also https://hackage.haskell.org/package/shelly |
| 11:57:51 | → | CiaoSen joins (~Jura@p200300c95735b0002a3a4dfffe84dbd5.dip0.t-ipconnect.de) |
| 11:57:55 | <boxscape_> | I don't know how they compare though |
| 12:00:01 | × | kaph quits (~kaph@net-109-116-124-149.cust.vodafonedsl.it) (Read error: Connection reset by peer) |
| 12:00:36 | → | kaph joins (~kaph@net-109-116-124-149.cust.vodafonedsl.it) |
| 12:01:28 | → | lavaman joins (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) |
| 12:02:35 | × | alMalsamo quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Remote host closed the connection) |
| 12:02:49 | → | alMalsamo joins (~alMalsamo@gateway/tor-sasl/almalsamo) |
| 12:05:31 | <geekosaur> | you can even runb it in a haskell terminal |
| 12:05:37 | <geekosaur> | @package termonad |
| 12:05:38 | <lambdabot> | https://hackage.haskell.org/package/termonad |
| 12:05:41 | × | elkcl quits (~elkcl@broadband-37-110-156-162.ip.moscow.rt.ru) (Ping timeout: 256 seconds) |
| 12:05:58 | → | leungbk joins (~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) |
| 12:06:03 | <boxscape_> | and run that in xmonad |
| 12:09:02 | × | perrierjouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Ping timeout: 252 seconds) |
| 12:09:04 | <Andrew> | Digit: I've used lisp shells before, that's a good idea |
| 12:10:10 | × | TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Read error: Connection timed out) |
| 12:10:46 | × | dyeplexer quits (~dyeplexer@user/dyeplexer) (Read error: Connection reset by peer) |
| 12:11:11 | <Digit> | :) already got termonad, but yet to make it my daily driver. i like the idea my window manager, terminal emulator, and shell, could all be haskell. :) and yi, for text editor. :) |
| 12:11:25 | × | kaph quits (~kaph@net-109-116-124-149.cust.vodafonedsl.it) (Ping timeout: 240 seconds) |
| 12:11:48 | → | perrierjouet joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) |
| 12:11:54 | → | razetime joins (~quassel@117.207.18.88) |
| 12:12:13 | <boxscape_> | just need a Haskell OS |
| 12:12:15 | × | vglfr quits (~vglfr@coupling.penchant.volia.net) (Ping timeout: 256 seconds) |
| 12:12:21 | <boxscape_> | to complete the set |
| 12:13:10 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 12:13:17 | <merijn> | boxscape_: House, HaLVM |
| 12:13:48 | <boxscape_> | I was going to say that I haven't heard of those but then I saw that the link of the search result for HaLVM was purple |
| 12:14:12 | × | alp quits (~alp@user/alp) (Ping timeout: 240 seconds) |
| 12:17:10 | → | TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker) |
| 12:26:40 | × | ix quits (~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe) (Remote host closed the connection) |
| 12:26:49 | → | ix joins (~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe) |
| 12:29:07 | → | kaph joins (~kaph@net-109-116-124-149.cust.vodafonedsl.it) |
| 12:32:54 | → | alp joins (~alp@user/alp) |
| 12:33:00 | × | TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Read error: Connection timed out) |
| 12:33:01 | × | acidjnk quits (~acidjnk@p200300d0c7049f94990c0fcd1a5d0faa.dip0.t-ipconnect.de) (Ping timeout: 240 seconds) |
| 12:38:36 | × | kaph quits (~kaph@net-109-116-124-149.cust.vodafonedsl.it) (Ping timeout: 240 seconds) |
| 12:40:01 | × | lavaman quits (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Ping timeout: 256 seconds) |
| 12:41:26 | → | y04nn joins (~y04nn@2a03:1b20:1:e011::a19e) |
| 12:41:30 | × | haritz quits (~hrtz@user/haritz) (Ping timeout: 252 seconds) |
| 12:43:37 | <abastro[m]> | Haskell shell sounds like a dream :) |
| 12:43:47 | <abastro[m]> | Wanna experience Typed shell, how can I? |
| 12:44:57 | → | TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker) |
| 12:46:07 | <[exa]> | bash isn't a typed shell? (all them nice Strings) |
| 12:50:15 | <geekosaur> | sadly there'sno good way to experience a typed shell, since any types have to be imposed on programs after the fact and that means the shell interface has to know about them to do it |
| 12:50:49 | <geekosaur> | unix is kinda fundamentally stringly typed |
| 12:50:50 | <abastro[m]> | Sad |
| 12:54:21 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "") |
| 12:54:31 | × | merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 268 seconds) |
| 12:56:35 | × | dextaa_ quits (~dextaa@user/dextaa) (Remote host closed the connection) |
| 12:57:25 | × | TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Quit: So long and thanks for all the fish) |
| 12:57:57 | <[exa]> | abastro[m]: I highly recommend to observe some systems that attempted to make inputs and outputs of general programs "typed" |
| 12:58:27 | <geekosaur> | yeh, unix was actually a reaction to those |
| 12:58:32 | <abastro[m]> | I have no experience with such systems, what are the examples? |
| 12:58:33 | <[exa]> | esp. OLE32, the favorite choice. :D |
| 12:58:47 | <abastro[m]> | Oh, so unix was intentionally untyped |
| 12:59:14 | <[exa]> | intentionally textual and string-ish, yes. |
| 12:59:24 | <geekosaur> | (pre-unix, input andoutput was typically in the form of database-like typed records) |
| 13:00:03 | <abastro[m]> | Hm. I'd prefer typed records though. I guess it is ditched for good, but.. |
| 13:00:37 | <[exa]> | some extra things to compare would be the MIME "types" that kinda settled in internets, ASN.1, and perhals XML/JSON/RDF schemas |
| 13:01:55 | <[exa]> | for shell, you'd need to _infer_ all of these very quickly |
| 13:02:06 | <geekosaur> | the problem with typed records is it sets limits on how you can combine programs |
| 13:02:38 | <geekosaur> | being able to apply grep, sort, etc. to *any* program was a major innovation |
| 13:03:36 | <geekosaur> | (I think we've slid offtopic again) |
| 13:04:31 | → | TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker) |
| 13:05:26 | <geekosaur> | VM/SP had a very complicated system sort program that could via JCL be adapted to handle many (not all) program outputs and subsequent inputs; compare unix sort |
| 13:07:43 | → | lavaman joins (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) |
| 13:10:07 | × | dhouthoo quits (~dhouthoo@178-117-36-167.access.telenet.be) (Quit: WeeChat 3.4) |
| 13:10:12 | × | leungbk quits (~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) (Ping timeout: 240 seconds) |
| 13:12:12 | <abastro[m]> | I see, I disliked how unix uses string for everything but now I see the reasoning. |
| 13:12:57 | <abastro[m]> | (My unpopular opinion: monolithic, non-composable programs are good - but that's offtopic and also a bit nonsense) |
| 13:13:58 | <[exa]> | abastro[m]: the point of unix is mostly "this is the fastest implementable, vital tradeoff of simple and universal" and it still can support big monolithic stuff if anyone really needs to, for any reason |
| 13:14:28 | <[exa]> | man, "non-composable programs are good" is highly offtopic :D :D |
| 13:14:41 | <abastro[m]> | Yep, sorry about that |
| 13:14:55 | <geekosaur> | keep in mind also that unix was a research OS that slipped int production, not unlike ghc |
| 13:15:29 | <geekosaur> | bell labs needed a cheap, compact OS for its phone switches and found unix in its own research arm |
| 13:15:51 | → | elkcl joins (~elkcl@broadband-37-110-156-162.ip.moscow.rt.ru) |
| 13:16:47 | <geekosaur> | just bell, I guess, bell labs was the research arm |
| 13:17:35 | × | chexum quits (~quassel@gateway/tor-sasl/chexum) (Ping timeout: 240 seconds) |
| 13:17:41 | × | TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Quit: So long and thanks for all the fish) |
| 13:18:22 | → | chexum joins (~quassel@gateway/tor-sasl/chexum) |
| 13:18:28 | → | TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker) |
| 13:18:52 | alMalsamo | is now known as lumberjack123 |
| 13:21:57 | → | leungbk joins (~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) |
| 13:22:04 | × | benin quits (~benin@183.82.207.30) (Quit: The Lounge - https://thelounge.chat) |
| 13:22:05 | → | cfricke joins (~cfricke@user/cfricke) |
| 13:23:16 | <[exa]> | that's one way to produce quality software, look into the room that contains the bunch of geeks and just find it. :D |
| 13:24:05 | <geekosaur> | unless you're microsoft. (sharepoint was a much better piece of software before the business side go ttheir hands on it, reportedly) |
| 13:24:52 | <abastro[m]> | Hm actually, the objection I heard was more of "lack of capability" in unix system |
| 13:25:25 | × | vysn quits (~vysn@user/vysn) (Ping timeout: 240 seconds) |
| 13:25:35 | × | y04nn quits (~y04nn@2a03:1b20:1:e011::a19e) (Ping timeout: 260 seconds) |
| 13:26:12 | → | Unicorn_Princess joins (~Unicorn_P@46-54-248-191.static.kate-wing.si) |
| 13:27:01 | × | leungbk quits (~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) (Ping timeout: 240 seconds) |
| 13:27:25 | <abastro[m]> | That and unified File system described as streams |
| 13:28:23 | × | chenqisu1 quits (~chenqisu1@183.217.201.47) (Ping timeout: 260 seconds) |
| 13:29:03 | → | abradabara joins (~abradabar@185.183.97.187) |
| 13:29:30 | <abradabara> | why does printing [5..1] does not work, but [5,4..1] work |
| 13:29:48 | → | merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) |
| 13:30:05 | ← | jakalx parts (~jakalx@base.jakalx.net) (Error from remote client) |
| 13:30:33 | <[exa]> | abradabara: the semantics of [5..1] is captured as `enumFromTo`, which assumes a default step of +1 and continues until the result is (<=1) |
| 13:30:58 | <dminuoso> | Its interesting this produces a result at all |
| 13:31:00 | → | jakalx joins (~jakalx@base.jakalx.net) |
| 13:31:08 | <dminuoso> | Id have expected it to bottom out |
| 13:31:17 | <dminuoso> | > [5..1] |
| 13:31:19 | <lambdabot> | [] |
| 13:31:26 | <abradabara> | [exa]: oh I see, but isn't enumFromTo applies to second part 4..1 |
| 13:31:35 | <abastro[m]> | Oh, it checks smaller than 1 I guess |
| 13:31:46 | <abradabara> | >[5,4..1] |
| 13:31:50 | <abradabara> | > [5,4..1] |
| 13:31:51 | <dminuoso> | [exa]: Presumably its rather it produces *while* the opposite holds. |
| 13:31:51 | <lambdabot> | [5,4,3,2,1] |
| 13:31:55 | <dminuoso> | rather than "doing until" |
| 13:32:26 | <[exa]> | abradabara: I'd explain it like that the assumption taken there is the "less surprising" of the two possibilities (the other one being [5,4,3,2,1]) because people usually don't want decreasing sentences appearing from nowhere |
| 13:32:59 | <[exa]> | uh yes and the terminating condition there is somewhat shady for sure, check this: |
| 13:33:16 | <[exa]> | > [1,1.1..2] |
| 13:33:18 | <lambdabot> | [1.0,1.1,1.2000000000000002,1.3000000000000003,1.4000000000000004,1.50000000... |
| 13:33:22 | <[exa]> | ayay |
| 13:33:38 | <[exa]> | > reverse [1,1.1..2] |
| 13:33:40 | <lambdabot> | [2.000000000000001,1.9000000000000008,1.8000000000000007,1.7000000000000006,... |
| 13:33:59 | × | TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Read error: Connection timed out) |
| 13:34:36 | <abradabara> | [exa]: I don't even know haskell much, just used xmonad for some time, and was taking a look at short learnxinyminutes haskell page, what is haskell mainly used for? I am guessing it's some type of very robust, strict, very precise language |
| 13:34:55 | × | merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 260 seconds) |
| 13:34:56 | → | waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) |
| 13:35:27 | → | TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker) |
| 13:35:36 | <abradabara> | what if i do "lambda>[1..]" here |
| 13:35:43 | <[exa]> | well, you see precision has practical limits. :D |
| 13:36:13 | <dminuoso> | abradabara: its mainly used for all kinds of things. |
| 13:36:37 | → | bahamas joins (~lucian@86.120.77.115) |
| 13:36:42 | <Unicorn_Princess> | i'm using ghcup. how do i install e.g. the random package, so that is it accessible to ghci? sticking build-depends: random into the project .cabal file seems to suffice to get the project itself to use the package |
| 13:36:55 | <Unicorn_Princess> | so that it is* |
| 13:37:08 | <abradabara> | dminuoso: could you give some mainstream examples if you don't mind? |
| 13:37:12 | <dminuoso> | Facebook uses Haskell for their entire spam classification (which evaluates every single interaction any user can does, every click). |
| 13:37:31 | <dminuoso> | We use Haskell to build a network description and compile it into hardware configuration as part of our SDN automation |
| 13:37:39 | <dminuoso> | We also use Haskell in various other places |
| 13:37:44 | → | acidjnk joins (~acidjnk@p200300d0c7049f94990c0fcd1a5d0faa.dip0.t-ipconnect.de) |
| 13:37:50 | <dminuoso> | GHC uses Haskell to compile Haskell |
| 13:37:52 | <geekosaur> | Unicorn_Princess, cabal repl --build-depends random |
| 13:38:01 | → | y04nn joins (~y04nn@2a03:1b20:1:e011::a19e) |
| 13:38:08 | <dminuoso> | abradabara: You might have come across pandoc, which is also written in Haskell by the way. :) |
| 13:38:10 | <maerwald> | Unicorn_Princess: in an empty directory do `cabal install --lib --package-env=. <pkg>`, then run `ghci` |
| 13:38:11 | <Hecate> | We use Haskell to make our various products at work, mainly web APIs, business domain modeling and database interactions |
| 13:38:28 | <dminuoso> | abradabara: the question isnt as much about what it can do, but rather what it cant do |
| 13:38:30 | → | lainon joins (~lainon@c-68-46-201-40.hsd1.al.comcast.net) |
| 13:38:36 | <dminuoso> | real time/low latency systems is where haskell is not ideal |
| 13:38:57 | <Hecate> | yup' |
| 13:39:05 | <Hecate> | or your Haskell code produces C code that does it ;-) |
| 13:39:12 | <maerwald> | Unicorn_Princess: that will create a file like `.ghc.environment.x86_64-linux-8.10.7` in that dir, which ghc/ghci will pick up |
| 13:39:20 | <dminuoso> | and anything where your domain mandates a wealth of existing libraries |
| 13:39:35 | × | lainon quits (~lainon@c-68-46-201-40.hsd1.al.comcast.net) (Remote host closed the connection) |
| 13:39:40 | <dminuoso> | like say in data science or bio informatics you usually mandate particular libraries to exist already |
| 13:40:03 | × | lavaman quits (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Ping timeout: 260 seconds) |
| 13:40:13 | → | lainon joins (~lainon@c-68-46-201-40.hsd1.al.comcast.net) |
| 13:40:23 | → | leungbk joins (~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) |
| 13:40:33 | → | haritz joins (~hrtz@62.3.70.206) |
| 13:40:33 | × | haritz quits (~hrtz@62.3.70.206) (Changing host) |
| 13:40:33 | → | haritz joins (~hrtz@user/haritz) |
| 13:40:33 | × | lainon quits (~lainon@c-68-46-201-40.hsd1.al.comcast.net) (Remote host closed the connection) |
| 13:42:05 | <Unicorn_Princess> | ah. thanks maerwald, geekosaur. looks like `cabal repl` in my project dir suffices to pick up the dependencies of that project :) |
| 13:42:14 | <geekosaur> | yes |
| 13:42:31 | → | Ren5050 joins (~Ren5050@190-199-106-227.dyn.dsl.cantv.net) |
| 13:42:38 | ← | Ren5050 parts (~Ren5050@190-199-106-227.dyn.dsl.cantv.net) () |
| 13:42:44 | → | lainon joins (~lainon@c-68-46-201-40.hsd1.al.comcast.net) |
| 13:43:11 | → | benin joins (~benin@183.82.207.30) |
| 13:43:22 | × | lainon quits (~lainon@c-68-46-201-40.hsd1.al.comcast.net) (Remote host closed the connection) |
| 13:44:17 | × | lagash quits (lagash@lagash.shelltalk.net) (Remote host closed the connection) |
| 13:45:18 | → | lagash joins (lagash@lagash.shelltalk.net) |
| 13:45:43 | <abradabara> | dminuoso: Hecate: thanks, if you don't mind also what top 5 things that makes haskell different than other popular languages for the use cases you listed? |
| 13:46:35 | <abradabara> | for example rust is better than c/c++ (?) because of memory management or something like that |
| 13:48:28 | × | Flonk quits (~Flonk@vps-zap441517-1.zap-srv.com) (Quit: Ping timeout (120 seconds)) |
| 13:48:43 | × | TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Quit: So long and thanks for all the fish) |
| 13:48:48 | <abradabara> | dminuoso: probably stupid question, gonna do some reading :) |
| 13:49:01 | <abradabara> | learnyouahaskell seems like nice resource |
| 13:49:33 | → | dextaa_ joins (~dextaa@user/dextaa) |
| 13:49:40 | × | benin quits (~benin@183.82.207.30) (Quit: The Lounge - https://thelounge.chat) |
| 13:49:49 | <lortabac> | abradabara: for me it's mostly ease of refactoring. When I work with other languages (especially dynamically-typed), code quality tends to decrease with time, whereas with Haskell this doesn't happen |
| 13:50:33 | <lortabac> | of course this only applies to medium/big projects, when you can't keep everything in your head |
| 13:50:42 | <dminuoso> | 1. Lack of parenthesis in function application, 2. Clean readable/defineable ADTs, 3. Highly reusable ADTs (You get a lot of reuse from Maybe), 4. Robust type system that improves confidence of rewrites, and 5. IO expressed at the type level improves reasoning about where side effects can happen and where not. |
| 13:51:22 | → | benin joins (~benin@183.82.207.30) |
| 13:51:32 | <Hecate> | I agree with lortabac (and especially since we're colleagues). abradabara you can also get some of my opinions from this talk https://www.youtube.com/watch?v=2JB1_e5wZmU |
| 13:51:56 | <dminuoso> | But yeah, in ease of code refactoring haskell is easily at the top |
| 13:52:03 | <dminuoso> | Especially for non-trivial code bases. |
| 13:52:08 | <Hecate> | and this joins what dminuoso at a higher-level: Your ubiquitous language, with which you speak to the machine and the business people, is really, really efficient at speaking to both parties |
| 13:52:14 | <Hecate> | and this ubiquitous language is Haskell |
| 13:52:18 | <[exa]> | abradabara: top differences (my take): writing parsers is fun, insane abstractions and custom sublanguages are easy to do right, it's pretty fast, types actually help you instead of restricting you |
| 13:53:19 | <abradabara> | lortabac: thanks sir |
| 13:53:21 | × | dextaa_ quits (~dextaa@user/dextaa) (Remote host closed the connection) |
| 13:53:30 | <dminuoso> | Be sure to also ask about the dark sides. |
| 13:54:02 | <dminuoso> | Like "What do you curse about when writing Haskell?" |
| 13:54:46 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 13:54:47 | → | ec joins (~ec@gateway/tor-sasl/ec) |
| 13:55:04 | <abradabara> | dminuoso: [exa]: thanks! what is the reason for it being read from right to left though |
| 13:55:13 | → | TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker) |
| 13:55:47 | <dminuoso> | What do you mean "read from left to right"? |
| 13:55:58 | <geekosaur> | I'm guessing function composition |
| 13:56:11 | <abradabara> | dminuoso: nice one? |
| 13:56:19 | <dminuoso> | Sorry I dont understand. |
| 13:56:38 | <boxscape_> | dminuoso you wrote "left to right", but the question was "right to left" |
| 13:56:54 | <abradabara> | dminuoso: I thought you were making a joke reading what I wrote from right to left |
| 13:57:08 | <dminuoso> | Oh no, that must have been a typo |
| 13:57:22 | → | wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com) |
| 13:57:22 | × | wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
| 13:57:22 | → | wroathe joins (~wroathe@user/wroathe) |
| 13:59:42 | <boxscape_> | abradabara if you do mean function composition, the reason `f . g` is read from right to left is ultimately because it mirrors the math notation `f ∘ g`, which is in that order so that `(f ∘ g)(x) = f(g(x))` |
| 13:59:50 | <abradabara> | for example myLayouts = avoidStruts . minimize . B.BoringWindows $ perWS, is avoidStruts applied at last here? |
| 14:00:24 | <abradabara> | boxscape_: yep that explains it thanks! |
| 14:02:45 | <abradabara> | Hecate: thanks for the video |
| 14:03:58 | <boxscape_> | abradabara there are composition operators going the other way around as well btw, but they're not as commonly used. In that case you'd have `perWS & (B.BoringWindows >>> mimimize >>> avoidStruts)` |
| 14:04:03 | × | xff0x quits (~xff0x@i121-117-52-147.s41.a013.ap.plala.or.jp) (Quit: xff0x) |
| 14:04:23 | × | TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Quit: So long and thanks for all the fish) |
| 14:05:30 | → | kaph joins (~kaph@net-109-116-124-149.cust.vodafonedsl.it) |
| 14:06:30 | <abradabara> | boxscape_: good to know, thank you |
| 14:07:31 | × | Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 14:07:42 | → | Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
| 14:08:12 | → | Orbstheorem joins (~orbstheor@2001:470:69fc:105::a56) |
| 14:08:31 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 268 seconds) |
| 14:11:11 | → | TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker) |
| 14:11:15 | × | jpds quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 240 seconds) |
| 14:13:11 | × | mrkajetanp quits (~mrkajetan@88.98.245.28) (Ping timeout: 256 seconds) |
| 14:13:18 | → | shriekingnoise joins (~shrieking@201.231.16.156) |
| 14:13:24 | → | jpds joins (~jpds@gateway/tor-sasl/jpds) |
| 14:15:55 | × | hololeap quits (~hololeap@user/hololeap) (Ping timeout: 240 seconds) |
| 14:16:48 | → | hololeap joins (~hololeap@user/hololeap) |
| 14:19:56 | × | zmt00 quits (~zmt00@user/zmt00) (Ping timeout: 252 seconds) |
| 14:20:29 | → | k8yun joins (~k8yun@user/k8yun) |
| 14:22:00 | <hololeap> | how does the hackage server calculate code coverage? |
| 14:23:27 | → | zmt00 joins (~zmt00@user/zmt00) |
| 14:23:34 | × | TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Quit: So long and thanks for all the fish) |
| 14:24:14 | → | merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) |
| 14:24:28 | → | TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker) |
| 14:24:30 | × | ccntrq quits (~Thunderbi@2a01:c23:9016:8e00:deb2:a539:32d1:3ed2) (Remote host closed the connection) |
| 14:24:31 | <hololeap> | here's an example: https://hackage.haskell.org/package/turtle |
| 14:24:40 | → | nsyd joins (~psy@104-62-224-96.lightspeed.chrlnc.sbcglobal.net) |
| 14:24:48 | → | ccntrq joins (~Thunderbi@2a01:c23:9016:8e00:deb2:a539:32d1:3ed2) |
| 14:26:33 | × | abradabara quits (~abradabar@185.183.97.187) (Ping timeout: 256 seconds) |
| 14:30:44 | <exarkun> | Does that page say something about coverage? |
| 14:32:22 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 14:32:38 | <hololeap> | there's a badge that says "Coverage | 20%" |
| 14:32:52 | <hololeap> | I'm really just curious |
| 14:35:15 | <boxscape_> | hololeap looks like hpc https://github.com/haskell/hackage-server/blob/a6e570a7ba47256267e8cdd7658163740123e7d5/exes/BuildClient.hs#L617 |
| 14:36:30 | <hololeap> | huh ok |
| 14:36:37 | → | pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
| 14:36:59 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 260 seconds) |
| 14:39:53 | <abastro[m]> | Hm actually, what does left application do good for programming |
| 14:39:56 | <abastro[m]> | Never thought about this |
| 14:40:12 | <hololeap> | that actually looks pretty thorough |
| 14:41:00 | × | TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Read error: Connection timed out) |
| 14:41:17 | <abastro[m]> | Actually I learned of a case where right multiplication is great |
| 14:41:27 | <boxscape_> | left application as in f(x)? |
| 14:41:34 | → | TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker) |
| 14:41:35 | <boxscape_> | i.e. f is to the left of x? |
| 14:41:36 | <abastro[m]> | In mathematics, so maybe left application is not that great in math as well |
| 14:41:50 | <abastro[m]> | Yes, f (x) |
| 14:42:18 | <boxscape_> | Yeah I'm not sure there's a good reason for it other than for consistency with everything else |
| 14:42:24 | <hololeap> | it's just a convention |
| 14:43:00 | <abastro[m]> | In programming, desire of reading from left to right def makes sense |
| 14:43:05 | <hololeap> | it could be top application and it would work the same |
| 14:43:18 | <geekosaur> | math has x^f too, although it's not widely used |
| 14:43:33 | <abastro[m]> | Yea, never seen that used personally |
| 14:44:46 | <abastro[m]> | Oh wait. Currying requires to left application to look pretty |
| 14:44:54 | <boxscape_> | does it though? |
| 14:45:00 | × | leungbk quits (~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) (Ping timeout: 240 seconds) |
| 14:45:58 | <abastro[m]> | Yea, with right application, you get (z (y (x f))) |
| 14:46:05 | <boxscape_> | seems fine to me |
| 14:46:19 | <abastro[m]> | ..and you have to read right to left for curried parameters |
| 14:46:41 | <hololeap> | something something arabic |
| 14:47:12 | <boxscape_> | no, just do `(x (y (z f)))` and get used to being able to partially apply the rightmost argument rather than the leftmost argument |
| 14:47:41 | <boxscape_> | or wait would that work out with the type signature... |
| 14:47:56 | <geekosaur> | you'd write the type signature in reverse as well |
| 14:47:56 | <boxscape_> | f :: z -> y -> x -> ... |
| 14:47:59 | <boxscape_> | :/ |
| 14:48:22 | <geekosaur> | f :: res <- z <- y <- x |
| 14:48:34 | <geekosaur> | might even reverse it fully |
| 14:48:39 | <boxscape_> | I don't like that you have to read that from right to left now though |
| 14:48:39 | × | bahamas quits (~lucian@86.120.77.115) (Ping timeout: 260 seconds) |
| 14:48:43 | <geekosaur> | res <- z <- y <- x :: f |
| 14:49:12 | <abastro[m]> | Hahahah |
| 14:50:24 | <abastro[m]> | Pipe operator is a good middle ground after all |
| 14:50:51 | → | leungbk joins (~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) |
| 14:51:15 | × | TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Quit: So long and thanks for all the fish) |
| 14:52:06 | × | k8yun quits (~k8yun@user/k8yun) (Read error: Connection reset by peer) |
| 14:52:30 | → | k8yun joins (~k8yun@user/k8yun) |
| 14:52:39 | → | Pickchea joins (~private@user/pickchea) |
| 14:55:07 | <boxscape_> | though if you write it in reverse, `x (y (z f))` actually corresponds to `f :: ((res <- x) <- y) <- z`, which you *can* read from left to right |
| 14:55:20 | <boxscape_> | if you accept that the result comes first |
| 14:56:01 | × | leungbk quits (~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) (Ping timeout: 256 seconds) |
| 14:56:33 | × | winstonsmith_ quits (~winston@2a02:c98:1003:8000:6106:3ff0:197d:fcd2) (Quit: Leaving) |
| 14:57:09 | × | y04nn quits (~y04nn@2a03:1b20:1:e011::a19e) (Ping timeout: 256 seconds) |
| 14:58:31 | × | merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds) |
| 15:03:15 | × | yauhsien quits (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 15:04:10 | → | yauhsien joins (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) |
| 15:04:13 | → | [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470) |
| 15:05:05 | × | acidjnk quits (~acidjnk@p200300d0c7049f94990c0fcd1a5d0faa.dip0.t-ipconnect.de) (Ping timeout: 256 seconds) |
| 15:06:13 | × | CiaoSen quits (~Jura@p200300c95735b0002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 256 seconds) |
| 15:06:29 | <abastro[m]> | Hmm if you think of it, monadic bind is left to right, right? |
| 15:06:40 | <abastro[m]> | We apply monadic function to the left |
| 15:06:46 | → | leungbk joins (~user@2603-8000-1201-2dd2-1d5f-5d86-90b5-efe4.res6.spectrum.com) |
| 15:07:05 | <boxscape_> | yep but that's why we also have =<<, to mirror the order of function application |
| 15:07:09 | <boxscape_> | though we only have >>, not << |
| 15:08:00 | <geekosaur> | these days we do have <* |
| 15:08:14 | <boxscape_> | yeah but << would be flip (>>), which is different from <* |
| 15:08:36 | × | yauhsien quits (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Ping timeout: 240 seconds) |
| 15:08:54 | <abastro[m]> | Yep, it follows the order of effect |
| 15:09:16 | <abastro[m]> | It makes me crave more for pipe operator |
| 15:10:38 | → | TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker) |
| 15:10:38 | → | acidjnk joins (~acidjnk@p200300d0c7049f94990c0fcd1a5d0faa.dip0.t-ipconnect.de) |
| 15:11:23 | → | k8yun_ joins (~k8yun@user/k8yun) |
| 15:14:04 | → | dcoutts_ joins (~duncan@host86-167-90-249.range86-167.btcentralplus.com) |
| 15:14:15 | × | lumberjack123 quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds) |
| 15:14:57 | × | k8yun quits (~k8yun@user/k8yun) (Ping timeout: 252 seconds) |
| 15:15:25 | × | cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.4.1) |
| 15:15:26 | <kuribas> | :t (<*) |
| 15:15:27 | <lambdabot> | Applicative f => f a -> f b -> f a |
| 15:15:29 | <kuribas> | :t (>>) |
| 15:15:30 | <lambdabot> | Monad m => m a -> m b -> m b |
| 15:15:49 | <kuribas> | :t (<$) |
| 15:15:50 | <lambdabot> | Functor f => a -> f b -> f a |
| 15:16:06 | <kuribas> | :t (*>) |
| 15:16:06 | <lambdabot> | Applicative f => f a -> f b -> f b |
| 15:16:17 | × | dcoutts__ quits (~duncan@host86-167-206-34.range86-167.btcentralplus.com) (Ping timeout: 240 seconds) |
| 15:19:26 | <abastro[m]> | I heard that monad was initially introduced in haskell due to user interest |
| 15:19:32 | <abastro[m]> | What kind of interest was it? |
| 15:19:50 | <c_wraith> | not having to use the previous IO system |
| 15:20:03 | × | TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Quit: So long and thanks for all the fish) |
| 15:21:30 | <abastro[m]> | Ouch |
| 15:21:45 | <c_wraith> | What's funny about the history of Haskell there is that the IO type, the Monad class, and the ability to define classes on higher-kinded types were all added to Haskell at the same time |
| 15:22:21 | <abastro[m]> | Oh, i did not know haskell used to not have HKT |
| 15:22:38 | <abastro[m]> | I guess HKT would be a tough concept even for haskell |
| 15:23:09 | <abastro[m]> | Perhaps that is why many modern languages are not following HKT then |
| 15:23:10 | <dminuoso> | Higher kinded types are not the biggest thing here. |
| 15:23:16 | <dminuoso> | But rather typeclasses over higher kinded types. |
| 15:23:39 | <c_wraith> | I don't actually know if it had parametric polymorphism over higher-kinded types before that. |
| 15:23:40 | <dminuoso> | One of the things that makes grokking `Monad` or say `Applicative` confusing, is that they are an interface on `Type -> Type` kinded things, not `Type` things. |
| 15:23:53 | <dminuoso> | And its also something very few languages support. |
| 15:23:57 | <abastro[m]> | Noo I misread :< |
| 15:24:24 | <abastro[m]> | Tbh next to no language implements bare HKT either |
| 15:24:50 | <c_wraith> | admittedly, when most languages talk about higher-kinded types, they are ignoring the fact that they already have them, they just provide no polymorphism over them |
| 15:24:59 | <dminuoso> | Well the idea is present in multiple languages, but not necessarily as first-class types. |
| 15:25:19 | <c_wraith> | which is why I usually say things like "higher-kinded polymorphism" |
| 15:25:20 | <abastro[m]> | I mean the ability to reference the HKT level thing itself |
| 15:25:37 | <c_wraith> | because that's the important part |
| 15:26:14 | <abastro[m]> | Really IIRC with generics in other langs, you'd have List represent List<Any> |
| 15:27:31 | <c_wraith> | Well, that's a bit different. |
| 15:28:19 | <c_wraith> | I think Scala is roughly the only language that's made higher-kinded polymorphism work with that kind of syntax, with Foo[_] stuff |
| 15:29:05 | <c_wraith> | It's still not ideal, but at least it makes it clear that the type argument is unnamed |
| 15:30:13 | <c_wraith> | Which means it has to be treated polymorphically |
| 15:31:17 | → | merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) |
| 15:31:23 | <dminuoso> | With a bit of twisting you can make it happen in rust |
| 15:31:28 | <dminuoso> | But its rather gross |
| 15:31:40 | <dminuoso> | And certainly doesnt look remotely similar at first glance |
| 15:32:00 | <Sqaure> | I remember reading about GHC adding substantial changes to make it more practical for emitting .js/wasm. I wonder if this is labeled something or if someone has a link to a place where that is detailed? |
| 15:32:26 | <dminuoso> | Sqaure: mpickering mentioned it on the haskell mailing lists a few weeks ago |
| 15:32:37 | <dminuoso> | Might want to poke him in #ghc |
| 15:32:45 | <dminuoso> | Think he's shepharding it |
| 15:32:58 | <Sqaure> | oh ok. Thanks. Ill follow that lead |
| 15:33:05 | <c_wraith> | dminuoso: last I heard, the methods of doing that in Rust break down when you have something like traverse, which is both polytypic and makes use of bounded polymorphism |
| 15:34:34 | → | mvk joins (~mvk@2607:fea8:5cc3:7e00::7980) |
| 15:37:35 | → | lavaman joins (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) |
| 15:37:39 | → | yauhsien joins (~Yau-Hsien@61-231-38-131.dynamic-ip.hinet.net) |
| 15:37:42 | → | vysn joins (~vysn@user/vysn) |
| 15:40:33 | × | cosimone quits (~user@93-44-187-176.ip98.fastwebnet.it) (Read error: Connection reset by peer) |
| 15:43:11 | → | cosimone joins (~user@93-44-187-176.ip98.fastwebnet.it) |
| 15:45:18 | → | bahamas joins (~lucian@84.232.140.158) |
| 15:47:45 | → | zebrag joins (~chris@user/zebrag) |
| 15:48:23 | × | acidjnk quits (~acidjnk@p200300d0c7049f94990c0fcd1a5d0faa.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
| 15:49:17 | × | waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 256 seconds) |
| 15:49:57 | → | dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net) |
| 15:51:12 | × | dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Client Quit) |
| 15:52:15 | → | TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker) |
| 15:59:11 | → | lbseale joins (~ep1ctetus@user/ep1ctetus) |
| 15:59:22 | <Zemyla> | There should be a class Profunctor p => Contraclosed p where contraclosed :: p a b -> p (b -> x) (a -> x) |
| 16:01:25 | × | TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Quit: So long and thanks for all the fish) |
| 16:04:44 | → | vglfr joins (~vglfr@88.155.109.98) |
| 16:05:41 | <geekosaur> | that looks suspiciously arrow-like… |
| 16:06:07 | <[exa]> | Zemyla: any example instances? |
| 16:06:23 | <c_wraith> | the instance for (->) follows directly from the type |
| 16:06:56 | <c_wraith> | and most Profunctor instances are for some wrapped variation on (->) |
| 16:07:24 | <Zemyla> | The only instances I can think of are (->) and Indexed i. |
| 16:10:12 | × | bahamas quits (~lucian@84.232.140.158) (Ping timeout: 240 seconds) |
| 16:10:13 | <c_wraith> | You should be able to write an instance for every Profunctor where the type variables belong to the same function. |
| 16:11:20 | <c_wraith> | which is certainly the most common shape for a Profunctor instance, though not the only one |
| 16:13:38 | → | xff0x joins (~xff0x@i121-117-52-147.s41.a013.ap.plala.or.jp) |
| 16:15:01 | × | merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds) |
| 16:17:39 | × | vysn quits (~vysn@user/vysn) (Ping timeout: 252 seconds) |
| 16:18:21 | → | merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) |
| 16:20:56 | → | napping joins (~brandon@65.128.43.198) |
| 16:21:29 | × | benin quits (~benin@183.82.207.30) (Ping timeout: 252 seconds) |
| 16:22:03 | × | lavaman quits (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Ping timeout: 252 seconds) |
| 16:22:20 | → | benin joins (~benin@183.82.207.30) |
| 16:22:23 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 16:26:40 | × | Pickchea quits (~private@user/pickchea) (Ping timeout: 260 seconds) |
| 16:29:06 | × | lortabac quits (~lortabac@2a01:e0a:541:b8f0:9be3:3a9c:fd6c:bab4) (Quit: WeeChat 2.8) |
| 16:32:43 | × | vglfr quits (~vglfr@88.155.109.98) (Ping timeout: 260 seconds) |
| 16:33:43 | × | chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection) |
| 16:33:58 | → | chexum joins (~quassel@gateway/tor-sasl/chexum) |
| 16:38:49 | × | cheater quits (~Username@user/cheater) (Ping timeout: 256 seconds) |
| 16:41:52 | → | _ht joins (~quassel@231-169-21-31.ftth.glasoperator.nl) |
| 16:43:31 | → | dextaa_ joins (~dextaa@user/dextaa) |
| 16:44:03 | × | boxscape_ quits (~boxscape_@p4ff0b60b.dip0.t-ipconnect.de) (Ping timeout: 250 seconds) |
| 16:45:14 | × | ubert quits (~Thunderbi@p200300ecdf1588c644ba34ac9ed54fc8.dip0.t-ipconnect.de) (Remote host closed the connection) |
| 16:47:25 | → | TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker) |
| 16:47:40 | → | tzh joins (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) |
| 16:50:59 | × | kuribas quits (~user@ip-188-118-57-242.reverse.destiny.be) (Remote host closed the connection) |
| 16:51:45 | → | Tuplanolla joins (~Tuplanoll@91-159-69-98.elisa-laajakaista.fi) |
| 16:52:03 | <janus> | what is a quick and dirty way to indent a default Show instance of a record? |
| 16:52:22 | <janus> | like, increase indention on '{', newlines after commas, stuff like taht |
| 16:52:57 | → | deadmarshal_ joins (~deadmarsh@95.38.114.161) |
| 16:53:06 | <janus> | i don't wanna change the code because i have many record nested in one another and i will only use this for debugging anyway |
| 16:53:56 | → | bahamas joins (~lucian@84.232.140.158) |
| 16:55:31 | <sm> | janus: use pretty-show package |
| 16:55:35 | × | merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 252 seconds) |
| 16:56:04 | → | Guest21 joins (~Guest21@2408:846a:200:2177:9ee:b4ee:80a3:4cfb) |
| 16:56:09 | <sm> | pretty-simple is another one, slightly different |
| 16:56:34 | <sm> | g'day all |
| 16:56:53 | → | jao joins (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) |
| 16:57:02 | → | deadmars- joins (~deadmarsh@95.38.230.213) |
| 16:57:17 | × | deadmarshal_ quits (~deadmarsh@95.38.114.161) (Ping timeout: 256 seconds) |
| 16:58:21 | × | bahamas quits (~lucian@84.232.140.158) (Ping timeout: 250 seconds) |
| 16:58:34 | × | Guest21 quits (~Guest21@2408:846a:200:2177:9ee:b4ee:80a3:4cfb) (Client Quit) |
| 16:59:51 | × | TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Ping timeout: 250 seconds) |
| 17:00:11 | <janus> | nice, thanks, this seems to work |
| 17:02:24 | × | cosimone quits (~user@93-44-187-176.ip98.fastwebnet.it) (Quit: ERC (IRC client for Emacs 27.1)) |
| 17:03:11 | → | TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker) |
| 17:03:26 | × | razetime quits (~quassel@117.207.18.88) (Remote host closed the connection) |
| 17:04:10 | → | gues44081 joins (~username@2408:846a:200:2177:9ee:b4ee:80a3:4cfb) |
| 17:04:46 | → | cosimone joins (~user@93-44-187-176.ip98.fastwebnet.it) |
| 17:06:16 | → | lumberjack123 joins (~alMalsamo@gateway/tor-sasl/almalsamo) |
| 17:07:07 | × | gues44081 quits (~username@2408:846a:200:2177:9ee:b4ee:80a3:4cfb) () |
| 17:08:16 | → | boxscape_ joins (~boxscape_@p4ff0b60b.dip0.t-ipconnect.de) |
| 17:08:55 | × | dextaa_ quits (~dextaa@user/dextaa) (Remote host closed the connection) |
| 17:12:33 | → | abradabara joins (~abradabar@185.183.97.187) |
| 17:14:57 | × | Kaipi quits (~Kaiepi@156.34.47.253) (Ping timeout: 240 seconds) |
| 17:15:25 | → | MaterazziSan joins (~Materazzi@139.22.44.89.dynamic.jazztel.es) |
| 17:16:05 | → | sridaran joins (~sridaran@c-68-83-24-37.hsd1.nj.comcast.net) |
| 17:18:50 | × | ccntrq quits (~Thunderbi@2a01:c23:9016:8e00:deb2:a539:32d1:3ed2) (Remote host closed the connection) |
| 17:18:57 | × | sridaran quits (~sridaran@c-68-83-24-37.hsd1.nj.comcast.net) (Client Quit) |
| 17:20:53 | × | deadmars- quits (~deadmarsh@95.38.230.213) (Ping timeout: 250 seconds) |
| 17:21:05 | → | merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) |
| 17:23:14 | → | segfaultfizzbuzz joins (~segfaultf@2602:306:cd3c:9350:4828:b9b3:658f:35bc) |
| 17:23:35 | × | sloorush quits (~sloorush@136.233.9.99) (Ping timeout: 256 seconds) |
| 17:24:03 | <segfaultfizzbuzz> | so i am trying to push myself to jump beyond what i currently understand... i saw a discussion of the yoneda lemma of category theory and i might have understood it |
| 17:24:43 | <segfaultfizzbuzz> | which is to say that if you have a bunch of functors mapping a variety of things onto X, once you have a great enough variety of those functors are you have completely determined what X is |
| 17:25:13 | <segfaultfizzbuzz> | i know that the yoneda lemma has some kind of relevance to haskell... can anyone help me bridge this? or am i way off base here |
| 17:25:51 | × | pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Ping timeout: 256 seconds) |
| 17:27:52 | → | bahamas joins (~lucian@84.232.140.158) |
| 17:28:12 | <geekosaur> | I'd say the only relevance it has is that a small subset of Haskellers who understand it make use of it |
| 17:29:11 | × | merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 260 seconds) |
| 17:29:42 | <segfaultfizzbuzz> | i see... is that "essential" usage or is it "decorative" or "sophisticated" |
| 17:30:29 | <geekosaur> | depends on who's using it, I think |
| 17:30:44 | <geekosaur> | btw I am not one of those who understands yoneda |
| 17:30:47 | × | MajorBiscuit quits (~MajorBisc@wlan-145-94-219-172.wlan.tudelft.nl) (Ping timeout: 252 seconds) |
| 17:30:59 | <geekosaur> | except insofar as I know it's related to functors in some way |
| 17:31:21 | → | econo joins (uid147250@user/econo) |
| 17:32:27 | × | bahamas quits (~lucian@84.232.140.158) (Ping timeout: 260 seconds) |
| 17:35:27 | <janus> | does anybody care about getting aeson 1.5 running on ghc 9.2 (nightly)? if so, i have sent a PR out for that, would appreciate any reviews: https://github.com/haskell/aeson/pull/935 |
| 17:36:53 | → | sloorush joins (~sloorush@136.233.9.99) |
| 17:37:49 | → | Akiva joins (~Akiva@user/Akiva) |
| 17:41:31 | → | y04nn joins (~y04nn@2a03:1b20:1:e011::a19e) |
| 17:41:57 | × | y04nn quits (~y04nn@2a03:1b20:1:e011::a19e) (Remote host closed the connection) |
| 17:50:36 | × | pavonia quits (~user@user/siracusa) (Quit: Bye!) |
| 17:59:45 | ← | MaterazziSan parts (~Materazzi@139.22.44.89.dynamic.jazztel.es) (ERC (IRC client for Emacs 27.1)) |
| 17:59:58 | → | bahamas joins (~lucian@84.232.140.158) |
| 18:00:10 | → | wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com) |
| 18:00:10 | × | wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
| 18:00:10 | → | wroathe joins (~wroathe@user/wroathe) |
| 18:04:29 | × | nf quits (~n@monade.li) (Quit: Fairfarren.) |
| 18:05:22 | → | merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) |
| 18:06:19 | → | lavaman joins (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) |
| 18:06:50 | → | mrkajetanp joins (~mrkajetan@2a01:4b00:ea36:6c00:7994:941c:3f5d:2b88) |
| 18:07:21 | × | mbuf quits (~Shakthi@223.178.96.253) (Quit: Leaving) |
| 18:09:38 | → | nf joins (~n@monade.li) |
| 18:10:15 | × | merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 268 seconds) |
| 18:13:44 | <boxscape_> | segfaultfizzbuzz IIRC one use of the Yoneda lemma in Haskell is that you can you use to transform multiple fmap invocations into a single fmap invocation, potentially improving performance |
| 18:14:20 | <dminuoso> | Well, it's not really a "usage" of the yoneda lemma. |
| 18:14:42 | <boxscape_> | I suppose maybe it's more accurate to say it's a usage of the Yoneda newtype |
| 18:16:44 | <dminuoso> | In a lot of ways I think making these connections to category theory is cute, but it scares users away. |
| 18:16:47 | <segfaultfizzbuzz> | boxscape_: so the yoneda lemma is useful in proving the equivalence between function applications? |
| 18:17:12 | <dminuoso> | segfaultfizzbuzz: So assume you have some repeated applications of fmap |
| 18:17:19 | <dminuoso> | `fmap f . fmap g . fmap h . fmap i` |
| 18:17:20 | <segfaultfizzbuzz> | i am not interested in being "scared away" or "not scared away", i am interested in "effective abstractions which are not masturbatory" |
| 18:17:37 | <dminuoso> | So by fmap laws you have: |
| 18:17:48 | <dminuoso> | fmap f . fmap g . fmap h . fmap i = fmap (f . g . h . i) |
| 18:18:01 | <dminuoso> | But GHC cant make that transformation itself |
| 18:18:10 | <segfaultfizzbuzz> | ...wow really? heh |
| 18:18:22 | <dminuoso> | It cant know functor laws are respected in the first place. |
| 18:18:43 | <segfaultfizzbuzz> | aren't f g h i declared as functors...? |
| 18:18:44 | <dminuoso> | And it would need a special cased simplifier routine to recognize this. But we have neither |
| 18:19:00 | <dminuoso> | With Yoneda you can sort of enforce this transformation itself |
| 18:19:29 | <dminuoso> | % newtype Yoneda f a = Yoneda { runYoneda :: forall b. (a -> b) -> f b } |
| 18:19:29 | <yahb> | dminuoso: |
| 18:19:34 | <dminuoso> | % :t fmap |
| 18:19:34 | <yahb> | dminuoso: Functor f => (a -> b) -> f a -> f b |
| 18:19:56 | <dminuoso> | So Yoneda will, by convention, contain fmap partially applied to something |
| 18:20:10 | <dminuoso> | % x = Yoneda (`fmap` [1,2,3]) |
| 18:20:10 | <yahb> | dminuoso: |
| 18:20:15 | <dminuoso> | Then you just write: |
| 18:20:25 | <dminuoso> | instance Functor (Yoneda f) where fmap f m = Yoneda (\k -> runYoneda m (k . f)) |
| 18:20:27 | <dminuoso> | % instance Functor (Yoneda f) where fmap f m = Yoneda (\k -> runYoneda m (k . f)) |
| 18:20:27 | <yahb> | dminuoso: |
| 18:20:42 | → | vglfr joins (~vglfr@46.96.156.93) |
| 18:20:44 | <dminuoso> | For convenience we now write |
| 18:20:47 | <dminuoso> | % liftYoneda a = Yoneda (\f -> fmap f a) |
| 18:20:47 | <yahb> | dminuoso: |
| 18:21:02 | <dminuoso> | Then you can take some arbitrary functorial value, like [1,2,3], liftYoneda (partially apply to fmap) |
| 18:21:10 | <dminuoso> | Then if you use `fmap` on the Yoneda wrapper, it will automatically do the fusion |
| 18:21:18 | <dminuoso> | And then you lowerYoneda, get your list back |
| 18:21:39 | <dminuoso> | Some people think its cute to explain this in terms of category theory, I prefer just looking at what this does. |
| 18:21:55 | <boxscape_> | (so `fmap f . fmap g . fmap h . fmap i` becomes `lowerYoneda . fmap f . fmap g . fmap h . fmap i . liftYoneda`) |
| 18:22:51 | <boxscape_> | segfaultfizzbuzz the Yoneda lemma here is reflected in the definition of the newtype, f a ~= forall b . (a -> b) -> f b |
| 18:23:14 | <dminuoso> | segfaultfizzbuzz: by the way, Codensity is the exact same story except with (>>=) :) |
| 18:24:16 | <segfaultfizzbuzz> | it's a little bit far beyond where i am but thanks for trying to help me catch a glimpse of things. something about proving equality of fmap compositions |
| 18:24:30 | → | zincy_ joins (~zincy@2a00:23c8:970c:4801:a9ba:a14e:e332:b83f) |
| 18:29:57 | <dminuoso> | segfaultfizzbuzz: By the way, its usually easier to prove `fmap id = id` |
| 18:30:03 | <boxscape_> | ugh I keep getting the wrong one of these when searching in Hoogle. I was thinking "hmm it seems really strange that Codensity doesn't have have a Monad instance", but of course that's because the first result in hoogle is for profunctors |
| 18:30:17 | <dminuoso> | due to the way our type system works, if you prove `fmap id = id`, `fmap f . fmap g = fmap (f . g)` automatically holds |
| 18:30:40 | <segfaultfizzbuzz> | dminuso: ah interesting |
| 18:31:05 | → | deadmarshal_ joins (~deadmarsh@95.38.230.213) |
| 18:32:27 | <dminuoso> | So yeah, it might be obvious how if you do `fmap f . fmap g . fmap h` on a list that this will generate intermediate lists |
| 18:32:32 | <dminuoso> | Which is a bit unfortunate |
| 18:32:42 | × | kayvank quits (~user@52-119-115-185.PUBLIC.monkeybrains.net) (Remote host closed the connection) |
| 18:33:26 | <dminuoso> | If you have a list of non-trivial size (say a few million elements), and you want to fmap a bunch of times over that, it's clearly faster and better to just compose the functions and fmap once, generating millions cons cells just once, not a bunch of times |
| 18:34:02 | <dminuoso> | Sometimes your code structure lets you just express that, but sometimes it's not as easy or as expressive |
| 18:34:39 | <dminuoso> | It's often more convenient to just wrap it with Yoneda, and then just write naive `fmap` a bunch of times, knowing that the Yoneda Functor implementation will compose (fuse) the functions together. |
| 18:35:24 | × | deadmarshal_ quits (~deadmarsh@95.38.230.213) (Ping timeout: 240 seconds) |
| 18:36:04 | ← | jakalx parts (~jakalx@base.jakalx.net) (Error from remote client) |
| 18:37:24 | × | segfaultfizzbuzz quits (~segfaultf@2602:306:cd3c:9350:4828:b9b3:658f:35bc) (Ping timeout: 240 seconds) |
| 18:38:10 | → | cheater joins (~Username@user/cheater) |
| 18:40:03 | × | k8yun_ quits (~k8yun@user/k8yun) (Quit: Leaving) |
| 18:40:57 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds) |
| 18:43:00 | → | Kaipi joins (~Kaiepi@156.34.47.253) |
| 18:43:35 | × | jpds quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 240 seconds) |
| 18:44:27 | → | jakalx joins (~jakalx@base.jakalx.net) |
| 18:44:42 | → | Benzi-Junior joins (~BenziJuni@88-149-64-179.du.xdsl.is) |
| 18:45:58 | × | vglfr quits (~vglfr@46.96.156.93) (Read error: Connection reset by peer) |
| 18:46:07 | → | vglfr joins (~vglfr@46.96.156.93) |
| 18:46:49 | → | jpds joins (~jpds@gateway/tor-sasl/jpds) |
| 18:47:00 | × | alp quits (~alp@user/alp) (Ping timeout: 240 seconds) |
| 18:49:09 | × | lavaman quits (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Ping timeout: 256 seconds) |
| 18:50:02 | × | unyu quits (~pyon@user/pyon) (Ping timeout: 240 seconds) |
| 18:50:28 | × | justOkay quits (~justache@user/justache) (Read error: Connection reset by peer) |
| 18:51:27 | → | justOkay joins (~justache@user/justache) |
| 18:52:33 | × | Akiva quits (~Akiva@user/Akiva) (Ping timeout: 256 seconds) |
| 18:56:36 | × | vglfr quits (~vglfr@46.96.156.93) (Ping timeout: 245 seconds) |
| 18:59:43 | → | yauhsien_ joins (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) |
| 19:02:03 | × | phma quits (~phma@host-67-44-208-58.hnremote.net) (Read error: Connection reset by peer) |
| 19:03:18 | → | phma joins (phma@2001:5b0:2172:dab8:f6f:c543:829a:340a) |
| 19:03:32 | ← | jakalx parts (~jakalx@base.jakalx.net) () |
| 19:05:17 | → | waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) |
| 19:08:59 | × | sloorush quits (~sloorush@136.233.9.99) (Ping timeout: 256 seconds) |
| 19:09:35 | <tomsmeding> | it seems I cannot open file descriptors other than 0,1,2 for a child process with 'process'; is it correct that this is just omitted functionality or am I missing something? |
| 19:11:39 | → | jakalx joins (~jakalx@base.jakalx.net) |
| 19:13:58 | <monochrom> | In the CreateProcess record, the field "close_fds" may help. |
| 19:14:21 | <tomsmeding> | oh wait |
| 19:14:31 | <tomsmeding> | heh |
| 19:14:37 | <tomsmeding> | monochrom++ |
| 19:14:40 | <monochrom> | But it sounds very indirectly like False is already the default. |
| 19:15:42 | → | unyu joins (~pyon@user/pyon) |
| 19:15:56 | <tomsmeding> | hm, but the workaround of writing a shell script for this is probably a better idea anyway, so I don't even need the functionality anymore :) |
| 19:16:26 | <geekosaur> | using fds other than those is highly nonstandard behavior |
| 19:16:47 | <monochrom> | Yeah, give Caeser what belongs to Caeser, give shell what belongs to shell. >:) |
| 19:17:02 | <tomsmeding> | man 1 bwrap: "--file FD DEST - Copy from the file descriptor FD to DEST." |
| 19:17:05 | <tomsmeding> | I didn't invent the API |
| 19:17:24 | <tomsmeding> | I agree it's weird |
| 19:17:25 | <geekosaur> | timeto use /proc/self/fds |
| 19:17:42 | <monochrom> | Give Caeser a shell, and he can script for a day. Show him Haskell, and he has galaxy brain for life or something. |
| 19:18:58 | <geekosaur> | oh, that might not even work |
| 19:19:03 | <geekosaur> | bubblewrap stuff |
| 19:19:59 | <geekosaur> | anyway it is nonstandard whereas process has to be as standard as possible to work on both unix and windows. you may find something more flexible in the unix package |
| 19:20:32 | <geekosaur> | (in particular at least some versions of windows use fds 3 and 4 already) |
| 19:21:10 | <tomsmeding> | ah right, good point about portability |
| 19:23:22 | → | oooottoo joins (~oooottoo@c-24-9-197-96.hsd1.co.comcast.net) |
| 19:23:25 | <geekosaur> | (and yet still runs into problems. #ghc has seen several rants about both os x and windows portability gotchas) |
| 19:26:29 | × | yauhsien_ quits (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 19:27:10 | → | yauhsien_ joins (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) |
| 19:37:18 | × | briandaed quits (~root@109.95.142.93.r.toneticgroup.pl) (Ping timeout: 252 seconds) |
| 19:38:44 | × | Guest27 quits (~Guest27@c-174-63-99-174.hsd1.ma.comcast.net) (Quit: Client closed) |
| 19:41:48 | × | yauhsien_ quits (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 19:42:08 | × | Giovanni quits (~Giovanni@176.67.166.45) (Remote host closed the connection) |
| 19:44:36 | → | yauhsien_ joins (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) |
| 19:49:17 | × | yauhsien_ quits (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Ping timeout: 240 seconds) |
| 19:51:02 | × | Codaraxis__ quits (~Codaraxis@user/codaraxis) (Quit: Leaving) |
| 19:51:29 | × | perrierjouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Ping timeout: 256 seconds) |
| 19:53:44 | → | vorpuni joins (~pvorp@2001:861:3881:c690:653f:80d3:c158:3650) |
| 19:54:35 | → | xcmw joins (~textual@dyn-72-33-0-152.uwnet.wisc.edu) |
| 20:02:32 | × | jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection) |
| 20:04:48 | × | bahamas quits (~lucian@84.232.140.158) (Ping timeout: 252 seconds) |
| 20:06:38 | → | Guest84 joins (~Guest84@2601:602:87f:4220:33a4:a2a9:5b0:4f1e) |
| 20:07:17 | → | merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) |
| 20:07:49 | → | Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915) |
| 20:07:51 | → | Pickchea joins (~private@user/pickchea) |
| 20:07:55 | <Guest84> | Hello! I was wondering how I would make a list by doing something like: [16,8..0] but rather than returning [16,8,0] it would return [16,8,4,2,0].... I want the decrement to be division |
| 20:08:51 | <geekosaur> | you can't do that automagically |
| 20:09:03 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 256 seconds) |
| 20:09:12 | <Guest84> | How would you suggest it be done? |
| 20:09:13 | <geekosaur> | the various list iteration syntaxes are all invocation of Enum methods |
| 20:09:25 | <Guest84> | Right |
| 20:09:37 | <geekosaur> | also you're not getting 0 from a division, did you mean 1? |
| 20:10:02 | <Guest84> | Yes |
| 20:10:33 | Lord_of_Life_ | is now known as Lord_of_Life |
| 20:10:54 | <geekosaur> | mmm |
| 20:11:50 | ← | jakalx parts (~jakalx@base.jakalx.net) (Error from remote client) |
| 20:12:19 | <geekosaur> | > let divs 1 = [1]; divs x = x : divs (x `div` 2) in divs 16 |
| 20:12:20 | <lambdabot> | [16,8,4,2,1] |
| 20:13:05 | <Guest84> | Awesome! |
| 20:13:15 | <Guest84> | Thank you!! |
| 20:14:08 | → | pgib joins (~textual@173.38.117.90) |
| 20:14:22 | × | Techcable quits (~Techcable@user/Techcable) (Remote host closed the connection) |
| 20:14:29 | → | Techcable joins (~Techcable@user/Techcable) |
| 20:15:41 | → | yauhsien_ joins (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) |
| 20:15:51 | <tomsmeding> | > takeWhile (> 0) (iterate (`div` 2) 16) |
| 20:15:52 | <lambdabot> | [16,8,4,2,1] |
| 20:16:45 | <abastro[m]> | > map (shiftL 2) [4..0] |
| 20:16:46 | <lambdabot> | [] |
| 20:17:00 | <tomsmeding> | > map (shiftL 2) [4,3..0] |
| 20:17:01 | <lambdabot> | [32,16,8,4,2] |
| 20:17:05 | <abastro[m]> | Duh me |
| 20:17:14 | <tomsmeding> | > map (shiftL 1) [4,3..0] |
| 20:17:15 | <lambdabot> | [16,8,4,2,1] |
| 20:17:32 | <tomsmeding> | > map bit [4,3..0] |
| 20:17:34 | <lambdabot> | [16,8,4,2,1] |
| 20:17:41 | <tomsmeding> | that may be the shortest you're going to get |
| 20:17:48 | <abastro[m]> | Oh right, shiftL 1. |
| 20:17:54 | <Guest84> | that is awesome |
| 20:18:05 | <abastro[m]> | `bit` is indeed better |
| 20:18:11 | <tomsmeding> | but only works for powers of 2, these last ones :p |
| 20:18:18 | <Guest84> | what does bit do? |
| 20:18:18 | <abastro[m]> | I hope it is also faster than division |
| 20:18:33 | <tomsmeding> | Guest84: https://hackage.haskell.org/package/base-4.16.0.0/docs/Data-Bits.html#v:bit |
| 20:18:35 | → | mohy joins (~mohy@2001:718:1e03:5128:9f94:1a5f:91e3:d539) |
| 20:18:49 | → | jakalx joins (~jakalx@base.jakalx.net) |
| 20:18:59 | <abastro[m]> | " bit i is a value with the ith bit set and all other bits clear. " |
| 20:19:10 | <geekosaur> | should be for Int, not guaranteed fr nteger which is what this will be using by default |
| 20:19:10 | <tomsmeding> | abastro[m]: meh, (`div` 2) is almost certainly optimised to >>1, at which point it is a while-loop until that reaches zero instead of a for-loop with a shiftL |
| 20:20:16 | × | zer0bitz quits (~zer0bitz@dsl-hkibng32-54fbf8-224.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 20:20:30 | <abastro[m]> | Hmmm. I see, but is while loop faster? |
| 20:20:56 | <abastro[m]> | (I did not know that ghc can perform such optimization consistently) |
| 20:20:59 | × | yauhsien_ quits (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Ping timeout: 268 seconds) |
| 20:21:41 | <tomsmeding> | a loop with known iteration bounds is usually faster than one without known iteration bounds, so from that perspective the 'map bit' one should be faster -- but this is already making quite deep assumptions on exactly what codegen is going to do |
| 20:21:44 | → | mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475) |
| 20:22:01 | <abastro[m]> | Hm, true |
| 20:22:08 | <tomsmeding> | abastro[m]: (`div` 2) to (`shiftR` 1) is a standard compiler optimisation called "strength reduction" |
| 20:22:15 | <tomsmeding> | LLVM does it even if you pass -O0 |
| 20:23:04 | → | alp joins (~alp@user/alp) |
| 20:23:18 | <abastro[m]> | TIL |
| 20:24:01 | <tomsmeding> | (I don't actually know anything about GHC in this regard, but I would assume and hope that it does do this :p ) |
| 20:24:09 | × | yauhsien quits (~Yau-Hsien@61-231-38-131.dynamic-ip.hinet.net) (Read error: Connection reset by peer) |
| 20:27:08 | <abastro[m]> | Hm after asking this on haskell discourse, I wonder how would this chat ppl wohld solve this problem:... (full message at https://libera.ems.host/_matrix/media/r0/download/libera.chat/e72d79b35c54430ff6544b9ec3fe62e87d9a16f3) |
| 20:28:12 | <abastro[m]> | (I mean exhaustively pairing the list into (n, n+k) pairs) |
| 20:28:24 | <tomsmeding> | what is the intended time complexity :p |
| 20:29:20 | <abastro[m]> | Well, O(n) |
| 20:29:39 | <abastro[m]> | Seems like O(n^2) is easier going declarative style |
| 20:30:21 | <tomsmeding> | O(n^2) is definitely easy, O(n log n) is quite easy with a Map, O(n) is possible only if k is constant, or if you're using a constant-time-access hash map |
| 20:30:23 | <tomsmeding> | i think |
| 20:30:39 | <tomsmeding> | and if the list is sorted |
| 20:30:56 | <abastro[m]> | Oh right |
| 20:31:09 | <abastro[m]> | We assume the list is sorted |
| 20:31:39 | <abastro[m]> | And isn't it possible to O(n) using IntSet |
| 20:32:43 | <tomsmeding> | hm, right, because Int has a bounded number of bits |
| 20:32:48 | <abastro[m]> | Btw we can do double iterator approach to avoid usage of Map. Tho using Map is more intuitive, I guess. |
| 20:33:06 | <tomsmeding> | if it's sorted then yes you can do a double iterator approach ;) |
| 20:33:39 | <tomsmeding> | oh right, with that approach it's actually also easy |
| 20:34:32 | <abastro[m]> | Easy?? |
| 20:34:47 | <tomsmeding> | ok "easy" :p |
| 20:35:38 | <abastro[m]> | I see, I wonder how to do double iterator approach elegantly in haskell though. |
| 20:36:42 | <tomsmeding> | hm |
| 20:40:31 | × | merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 260 seconds) |
| 20:40:34 | × | awpr quits (uid446117@id-446117.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 20:43:23 | × | Unicorn_Princess quits (~Unicorn_P@46-54-248-191.static.kate-wing.si) (Remote host closed the connection) |
| 20:43:24 | × | mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection) |
| 20:45:20 | → | Unicorn_Princess joins (~Unicorn_P@46-54-248-191.static.kate-wing.si) |
| 20:46:05 | → | lavaman joins (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) |
| 20:46:12 | × | oooottoo quits (~oooottoo@c-24-9-197-96.hsd1.co.comcast.net) (Quit: Client closed) |
| 20:46:25 | → | oooottoo joins (~oooottoo@c-24-9-197-96.hsd1.co.comcast.net) |
| 20:46:33 | × | xcmw quits (~textual@dyn-72-33-0-152.uwnet.wisc.edu) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 20:48:00 | <abastro[m]> | In general, I am curious how one would encode multiple iterator approach in haskell. |
| 20:50:05 | × | Guest84 quits (~Guest84@2601:602:87f:4220:33a4:a2a9:5b0:4f1e) (Quit: Client closed) |
| 20:52:08 | × | Pickchea quits (~private@user/pickchea) (Quit: Leaving) |
| 20:52:20 | → | Pickchea joins (~private@user/pickchea) |
| 20:52:41 | × | machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 256 seconds) |
| 20:53:57 | × | _ht quits (~quassel@231-169-21-31.ftth.glasoperator.nl) (Remote host closed the connection) |
| 20:54:29 | <tomsmeding> | I may have an interesting laziness-based approach |
| 20:55:02 | <tomsmeding> | the need to skip with the first pointer that have been taken by the second pointer makes things complicated |
| 20:55:43 | <monochrom> | IMO iterators and generators are poor people's emulations of lazy lists. In Haskell, we have real lazy lists, so why want emulations. |
| 20:56:16 | <tomsmeding> | this one is not just a lazy list, it's a lazy list where the tail depends on the head :p |
| 20:56:29 | <tomsmeding> | like the classic `fix (\l -> 0 : 1 : zipWith (+) l (tail l))` |
| 20:56:38 | <maerwald> | if laziness was enough, there would be no streaming libraries |
| 20:56:46 | <monochrom> | But we have real fixed points like that, too. |
| 20:56:49 | <maerwald> | laziness is poor people's streaming |
| 20:56:52 | <dminuoso> | monochrom: Mmm, that's not entirely correct. In other languages you often interleave them with side effectsd. |
| 20:57:01 | <dminuoso> | Then you get something closer to ListT |
| 20:57:25 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection) |
| 20:57:40 | <monochrom> | Yeah. Well, we have real ListT and it's a library rather than at the mercy of language builtins, too. |
| 20:57:51 | → | FinnElija joins (~finn_elij@user/finn-elija/x-0085643) |
| 20:59:27 | <monochrom> | And we have Cont (and it's also user-definable) so you can also do http://www.vex.net/~trebla/haskell/cont.xhtml#yield if you want to syntactically look like writing a loop that calls "yield". |
| 21:01:52 | → | pavonia joins (~user@user/siracusa) |
| 21:01:58 | → | acidjnk joins (~acidjnk@p200300d0c7049f94c956cb44f746ab1f.dip0.t-ipconnect.de) |
| 21:02:05 | × | unyu quits (~pyon@user/pyon) (Ping timeout: 250 seconds) |
| 21:02:08 | <monochrom> | I haven't extended that to ContT for interleaving yield with your choice of monadic effect. But you get the point. |
| 21:02:08 | → | ProfSimm joins (~ProfSimm@87.227.196.109) |
| 21:02:54 | × | Unicorn_Princess quits (~Unicorn_P@46-54-248-191.static.kate-wing.si) (Remote host closed the connection) |
| 21:03:10 | → | Unicorn_Princess joins (~Unicorn_P@46-54-248-191.static.kate-wing.si) |
| 21:03:25 | <monochrom> | (I hope to come back and write that in the future. But for now, learning Lean is more interesting, haha.) |
| 21:04:16 | <tomsmeding> | abastro[m]: https://paste.tomsmeding.com/NWCbieCw seems to work |
| 21:04:19 | × | mohy quits (~mohy@2001:718:1e03:5128:9f94:1a5f:91e3:d539) (Ping timeout: 260 seconds) |
| 21:06:03 | × | oooottoo quits (~oooottoo@c-24-9-197-96.hsd1.co.comcast.net) (Quit: Client closed) |
| 21:07:39 | × | remedan quits (~remedan@octo.cafe) (Remote host closed the connection) |
| 21:11:19 | × | mikoto-chan quits (~mikoto-ch@213.177.151.239) (Ping timeout: 260 seconds) |
| 21:12:16 | → | deadmarshal_ joins (~deadmarsh@95.38.112.219) |
| 21:14:23 | <abastro[m]> | Wow, that is such a brilliant solution! |
| 21:14:36 | <mon_aaraj> | Hello! I've been trying to configure GHCi, but it seems that it isn't quite working how it is meant to. If I read any documentation, it says that it can read a file from ~/.config/.ghci, but it never reads the file from there. But it does work when I put it in ~/.ghci. I might already know of the source of the issue, since I had the same problem with GHCup not handling symlinks correctly, and my |
| 21:14:38 | <abastro[m]> | I like your use of Boolean list for stack. |
| 21:14:38 | <mon_aaraj> | ~/.config directory is a symlink to ~/Git, could that be the issue? If not, then I am probably doing something wrong. Here's my ~/.config/.ghci: https://bpa.st/G5LA |
| 21:14:56 | → | remedan joins (~remedan@octo.cafe) |
| 21:16:06 | <tomsmeding> | abastro[m]: it's not really a stack, rather a queue |
| 21:16:41 | <tomsmeding> | that's why I took the self-recursive definition here; if it was a queue I could just pass it down the iteration in 'go' like a normal value |
| 21:16:59 | <abastro[m]> | Oh, I meant processing inside the go function. |
| 21:17:08 | <abastro[m]> | Wait |
| 21:17:12 | × | deadmarshal_ quits (~deadmarsh@95.38.112.219) (Ping timeout: 272 seconds) |
| 21:17:25 | <tomsmeding> | mon_aaraj: where did you read that ~/.config/.ghci should work? |
| 21:17:39 | <abastro[m]> | I guess I saw something wrong, yea it is queue |
| 21:18:40 | × | Pickchea quits (~private@user/pickchea) (Quit: Leaving) |
| 21:18:50 | → | Pickchea joins (~private@user/pickchea) |
| 21:19:10 | <tomsmeding> | abastro[m]: producing a proper Either containing the error instead of throwing is an exercise for the reader ;p |
| 21:20:30 | <abastro[m]> | 👍 |
| 21:20:59 | → | jpds joins (~jpds@gateway/tor-sasl/jpds) |
| 21:21:27 | <mon_aaraj> | tomsmeding: https://downloads.haskell.org/ghc/latest/docs/html/users_guide/ghci.html#the-ghci-files |
| 21:22:08 | <mon_aaraj> | I also think this file is in the source of GHC, so I'm not sure, maybe there's something weird going on with the documentation |
| 21:23:57 | → | yauhsien joins (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) |
| 21:24:28 | <tomsmeding> | in any case this changed in ghc 9.2, the 9.0.1 docs have "$HOME/.ghci" instead of "$XDG_CONFIG_HOME/.ghci" |
| 21:25:00 | × | nsyd quits (~psy@104-62-224-96.lightspeed.chrlnc.sbcglobal.net) (Quit: i'm still here dont worry) |
| 21:25:10 | → | karim joins (~karim@156.200.129.163) |
| 21:25:25 | <mon_aaraj> | Ah, so I am using an old version, I didn't realise. Thank you so very much! |
| 21:25:38 | <tomsmeding> | but it doesn't seem to work for me in 9.2.1 either :p |
| 21:25:59 | <tomsmeding> | mon_aaraj: not so much "old", 8.10.7 is still the "recommended" for stable production use kindof |
| 21:26:05 | <monochrom> | If you go for 9.2.*, please go for 9.2.2 :) |
| 21:26:59 | <monochrom> | In particular 9.2.2 has extra accomdation code for trying both $HOME and $XDG_whatever |
| 21:26:59 | <tomsmeding> | ah, "GHC now follows by default the XDG Base Directory Specification. If $HOME/.ghc is found it will fallback to the old paths to give you time to migrate. This fallback will be removed in three releases." |
| 21:27:24 | <maerwald> | yeah, so in order to figure out GHC behavior, you need an excel sheet |
| 21:27:35 | <mon_aaraj> | Definitely! Thank you so very much monochrom! |
| 21:27:39 | <abastro[m]> | When did GHC pick LTS scheme? |
| 21:27:49 | <monochrom> | 9.2.1 had "no more $HOME, exclusively XDG" hardcoded, thus the quarrel. |
| 21:28:10 | × | Pickchea quits (~private@user/pickchea) (Quit: Leaving) |
| 21:28:23 | × | yauhsien quits (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Ping timeout: 256 seconds) |
| 21:28:35 | <maerwald> | mon_aaraj: how does ghcup not handle symlinks correctly? |
| 21:29:17 | × | lavaman quits (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Ping timeout: 240 seconds) |
| 21:29:26 | <monochrom> | One excel sheet is not enough. Things actually get multi-dimensional. For example here is a 3D situation: http://www.vex.net/~trebla/haskell/cabal-cabal.xhtml#shared |
| 21:29:43 | <maerwald> | 3d excel? |
| 21:30:12 | <mon_aaraj> | Oh no, it does. It just reminds me of when it didn't, a really nice person helped me to fix the issue and committed a fix into ghcup a while ago, so I thought that might've been the culprit, but I was just using the wrong GHC version |
| 21:30:27 | <maerwald> | surely a nice person |
| 21:30:49 | <maerwald> | the last bug was sed replacing symlinks (because that is sed's default behavior) |
| 21:30:52 | <monochrom> | "We'll see about that" :) |
| 21:31:10 | <maerwald> | after decades of unix, I didn't even know that one |
| 21:32:21 | × | karim quits (~karim@156.200.129.163) (Ping timeout: 256 seconds) |
| 21:34:41 | → | gehmehgeh joins (~user@user/gehmehgeh) |
| 21:35:08 | → | justsomeguy joins (~justsomeg@user/justsomeguy) |
| 21:35:16 | → | slack1256 joins (~slack1256@191.125.227.76) |
| 21:37:08 | → | Pickchea joins (~private@user/pickchea) |
| 21:42:15 | × | wyrd quits (~wyrd@gateway/tor-sasl/wyrd) (Ping timeout: 240 seconds) |
| 21:43:54 | <mon_aaraj> | hmm, well after updating GHC and trying to use it, there's this warning which isn't bad, but it seems to be quite incorrect: ``[ Warn ] Possibly insufficient disk space on /tmp. At least 5000 MB are recommended, but only 3934.59 are free. Consider freeing up disk space or setting TMPDIR env variable.``, what could be causing this? there's tons of free space on my root partition, and also it seems |
| 21:43:56 | <mon_aaraj> | to work perfectly. running ``df -h /tmp`` shows that the size is 3.9 gigabytes, with only 7 megabytes being used, which I guess is the source of the error? |
| 21:44:04 | <mon_aaraj> | *GHCup |
| 21:44:41 | <maerwald> | that's not an error |
| 21:45:06 | × | cosimone quits (~user@93-44-187-176.ip98.fastwebnet.it) (Read error: Connection reset by peer) |
| 21:45:17 | <maerwald> | there's no easy way to determine exactly how much disk space you need |
| 21:45:26 | <maerwald> | 5GB should be enough for everyone |
| 21:46:00 | <tomsmeding> | mon_aaraj: /tmp is probably a tmpfs on your system (like on most), hence being a lot smaller than your root partition: it's as large as the amount of RAM, sortof |
| 21:46:49 | <mon_aaraj> | ah, i see. i have about 8 gigs of ram, so I guess is scales based on the amount of ram i have |
| 21:46:50 | <Maxdamantus> | /tmp is not usually tmpfs afaik, though it will typically be cleared on boot. |
| 21:47:05 | × | mmhat quits (~mmh@55d49226.access.ecotel.net) (Ping timeout: 256 seconds) |
| 21:47:10 | <maerwald> | It's quite annoying that some distros are advertising for /tmp to be a small partition. FHS and no other standard say this. |
| 21:47:12 | <Maxdamantus> | oh, on their system, nvm. |
| 21:47:30 | <mon_aaraj> | yeah, it is a tmpfs on my system |
| 21:47:36 | <Maxdamantus> | And yes, default tmpfs size is 50% of RAM. |
| 21:47:37 | <tomsmeding> | Maxdamantus: my arch machine has a tmpfs /shrug/ |
| 21:47:47 | <tomsmeding> | ah TIL 50% |
| 21:48:01 | <Maxdamantus> | You can probably resize it using something like `mount -o remount,size=75% /tmpfs` |
| 21:48:01 | <maerwald> | the "clean on reboot" is exactly why we like to use /tmp instead of some custom dir |
| 21:48:18 | <geekosaur> | it'sa real partition on my system but I generally force that during sinstallation |
| 21:48:43 | <dminuoso> | We're currently evaluating switching to clean-on-reboot with tmpfs on / currently :) |
| 21:48:48 | <dminuoso> | For our entire server fleet |
| 21:49:24 | → | wyrd joins (~wyrd@gateway/tor-sasl/wyrd) |
| 21:49:59 | <maerwald> | small files you can just dump in /tmp and forget about it... bigger files you try to clean up, but don't need to worry if your process crashes before that |
| 21:50:16 | <maerwald> | for anything else, you're implementing cleanup logic manually or start getting angry user reports |
| 21:50:45 | <Maxdamantus> | I think I just have the default debian behaviour, which is clean-on-reboot. I don't bother separating things into different partitions. I just have a btrfs filesystem over a few SSDs, and debian is one subvolume in that, with tmp included. |
| 21:51:01 | <dminuoso> | Because why have any implicit state at all. Of course this only works because we have nixos, so at boot the entire system is synthesized. |
| 21:51:15 | <maerwald> | yeah, but some distros advertise /tmp to be a small partition (less than a gigabyte) |
| 21:51:49 | <Maxdamantus> | Those distros seem evil. |
| 21:52:09 | → | gdown joins (~gavin@h69-11-149-231.kndrid.broadband.dynamic.tds.net) |
| 21:52:23 | <Maxdamantus> | Maybe they're just not designed for desktop use. |
| 21:52:49 | × | gnyeki quits (~gnyeki@user/gnyeki) (Remote host closed the connection) |
| 21:52:50 | <Maxdamantus> | For desktop use, I expect to be able to just chuck a 5 GiB file into /tmp, even if I've only got 8 GiB of RAM. |
| 21:53:13 | <Maxdamantus> | Don't have to put it somewhere persistent where I can forget to clean it up later. |
| 21:53:23 | <mon_aaraj> | ah, yeah, nixos seems like an interesting idea to put servers to use. it's certainly a nice concept |
| 21:53:57 | <mon_aaraj> | Maxdamantus: what distro don't do it, i wonder? i mean i also use arch and it does the tmpfs thing |
| 21:54:43 | <Maxdamantus> | mon_aaraj: afaik, debian, since I don't think I've seen that on any of my installations. |
| 21:54:46 | × | jlamothe quits (~jlamothe@198.251.61.229) (Remote host closed the connection) |
| 21:55:12 | <mon_aaraj> | ah, interestinhg |
| 21:55:51 | → | slack2414 joins (~slack1256@186.11.117.121) |
| 21:55:54 | → | yauhsien joins (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) |
| 21:56:28 | × | slack1256 quits (~slack1256@191.125.227.76) (Ping timeout: 272 seconds) |
| 21:57:34 | <yushyin> | there is also /var/tmp/ (usually cleaned up by tmpfiles.d after 30days, but `man hier' describes /var/tmp/ as a variant of /tmp, where the duration is not specified) |
| 21:58:07 | <Maxdamantus> | I sometimes put things in /dev/shm, if I actually want to put it on tmpfs. |
| 21:59:15 | <monochrom> | I don't think "desktop" implies either "large /tmp" or "small /tmp" either. Too many users with too many different prejudices. |
| 21:59:34 | slack2414 | is now known as slack1256 |
| 21:59:48 | <monochrom> | If there are n users, you can count on having 1.5n+35 rivalling opinions. |
| 21:59:54 | → | vysn joins (~vysn@user/vysn) |
| 22:00:09 | <monochrom> | That's right, because some people actually are self-inconsistent. |
| 22:00:10 | <Maxdamantus> | Historically, /tmp would very likely have not been tmpfs. |
| 22:00:29 | <Maxdamantus> | I suspect if some distros do it, that's probably a recent thing, since people sometimes have lots of RAM now. |
| 22:00:59 | <monochrom> | Plus SSD has more wear-out problems. |
| 22:01:09 | <monochrom> | Historically, SSD did not exist. |
| 22:01:20 | <dminuoso> | Wear-out problems are a myth that affect virtually nobody *shrugs* |
| 22:01:23 | <Maxdamantus> | Right, so there probably weren't even performance expectations of /tmp |
| 22:01:24 | × | alp quits (~alp@user/alp) (Remote host closed the connection) |
| 22:01:32 | × | yauhsien quits (~yauhsien@61-231-38-131.dynamic-ip.hinet.net) (Ping timeout: 272 seconds) |
| 22:01:42 | → | alp joins (~alp@user/alp) |
| 22:01:49 | <hpc> | i mean, if we're really talking history, historically /var was tape |
| 22:01:51 | <Maxdamantus> | It was just more harddrive space, which was conventionally able to be cleared from time to time. |
| 22:01:59 | <dminuoso> | We're switching to all flash storage because it turns out that spinning disks, averaged, die faster than spinning disks. |
| 22:02:08 | <monochrom> | Yeah, historically, what's "desktop"? >:) |
| 22:02:08 | <dminuoso> | *spinning disks die faster than ssds |
| 22:02:16 | → | segfaultfizzbuzz joins (~segfaultf@2602:306:cd3c:9350:d42a:6ce2:77df:38ee) |
| 22:02:29 | <segfaultfizzbuzz> | is optimization ai-hard? |
| 22:03:06 | <Maxdamantus> | dminuoso: that's also a fairly recent development (last 5 years or so). |
| 22:03:34 | <abastro[m]> | Oh I should use tmp directory more, I am sick of huge downloads |
| 22:04:09 | <Maxdamantus> | Though I guess SSDs have had more predictable failures than HDDs for a while. |
| 22:04:29 | <monochrom> | I agree that I don't worry about SSD wearing out. But there were just a couple of years when it was a valid concern. That was a historical factor of the tmpfs convention today. I mean, speaking of historical legacies. |
| 22:04:34 | <Maxdamantus> | (since even the SSDs from 5 years ago would be able to tell you when they're going to run out of TBW) |
| 22:04:46 | → | jlamothe joins (~jlamothe@198.251.61.229) |
| 22:04:46 | <abastro[m]> | SSDs are basically better now, then? |
| 22:04:56 | <Maxdamantus> | Yes. |
| 22:05:21 | <Maxdamantus> | Unless you actually want large amounts of storage, in which case HDDs are cheaper. |
| 22:05:28 | <monochrom> | There is also "when you power off, you should lose /tmp data, because better privacy". |
| 22:06:33 | <Maxdamantus> | Does /tmp actually store a lot of private data? |
| 22:06:52 | <Maxdamantus> | Presumably /home would be a bigger concern. |
| 22:06:53 | <monochrom> | I guess depends on the user? |
| 22:07:19 | <monochrom> | I don't mean to say that I agree with the paranoid concern. |
| 22:07:42 | <monochrom> | But some people think like that, and they are also more vocal. |
| 22:08:11 | <monochrom> | Now add herding effects. |
| 22:08:15 | × | mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 260 seconds) |
| 22:08:27 | <abastro[m]> | Is trying to be conscious about password choice being paranoid? |
| 22:08:45 | <abastro[m]> | Now I am worried if I am suffering paranoia |
| 22:08:51 | <monochrom> | Yes and no? |
| 22:09:18 | <hpc> | it's not paranoia if the clowns really are trying to eat you :P |
| 22:09:19 | × | zincy_ quits (~zincy@2a00:23c8:970c:4801:a9ba:a14e:e332:b83f) (Remote host closed the connection) |
| 22:09:20 | <monochrom> | Because if you use an automatic password randomizer, then you no longer need to be conscious about it >:) |
| 22:09:35 | <abastro[m]> | Oh wait |
| 22:09:36 | <maerwald> | abastro[m]: being paranoid about being paranoid is a classical sign of being paranoid xD |
| 22:09:36 | <hpc> | you do have to take care of that system though |
| 22:09:50 | → | machinedgod joins (~machinedg@mtrlpq02-1168108095.sdsl.bell.ca) |
| 22:09:59 | <abastro[m]> | Did not know about automatic pw randomizer |
| 22:10:08 | <abastro[m]> | Guess next time I am registering in a strange website, I should use that |
| 22:10:12 | <maerwald> | is it *really* random? |
| 22:10:12 | → | mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475) |
| 22:10:24 | <monochrom> | OK, they're more commonly called "password manager". |
| 22:10:30 | <maerwald> | who wrote those? |
| 22:10:31 | <hpc> | maerwald: there's a joke about urandom in there somewhere |
| 22:10:31 | <abastro[m]> | Oh no I should stop being paranoid about paranoid |
| 22:10:44 | <monochrom> | But one of its function is to generate randomized passwords. |
| 22:11:24 | <maerwald> | does Kaspersky have a pssword manager? |
| 22:11:30 | <abastro[m]> | At least many enough ppl just use single password everywhere so that hackers would not bother to break the pseudorandom |
| 22:11:38 | <segfaultfizzbuzz> | lol kapersky password manager lol |
| 22:11:41 | <monochrom> | Is a randomizer really random? Does a programmer really program? >:) |
| 22:12:02 | <segfaultfizzbuzz> | kapersky bitcoin wallet lol |
| 22:12:36 | × | segfaultfizzbuzz quits (~segfaultf@2602:306:cd3c:9350:d42a:6ce2:77df:38ee) (Quit: segfaultfizzbuzz) |
| 22:13:49 | × | mvk quits (~mvk@2607:fea8:5cc3:7e00::7980) (Ping timeout: 240 seconds) |
| 22:14:06 | <abastro[m]> | So how secure is random number generator in haskell |
| 22:14:18 | → | unyu joins (~pyon@user/pyon) |
| 22:14:29 | <monochrom> | The compiler doesn't come with one. |
| 22:14:36 | <abastro[m]> | Wait, haskell base even does not have random number generator right |
| 22:14:42 | <monochrom> | Then you go to hackage and choose one you want. |
| 22:14:54 | <abastro[m]> | I can already hear ppl complaining abt it |
| 22:15:16 | <abastro[m]> | Anyway, how about random package? |
| 22:15:21 | <abastro[m]> | Is it secure? |
| 22:15:28 | <monochrom> | It is not cryptographic. |
| 22:16:10 | <monochrom> | There are some in cryptographic packages. |
| 22:16:19 | × | vysn quits (~vysn@user/vysn) (Ping timeout: 256 seconds) |
| 22:16:27 | <maerwald> | I think there is no reasonable definition of security. There's a scientific definition of insecurity though |
| 22:16:30 | <monochrom> | But I might just read from /dev/urandom |
| 22:16:48 | <hpc> | read from /dev/random, there's no difference anymore |
| 22:16:59 | <abastro[m]> | Thanks, I should be more careful about using random package then |
| 22:17:00 | <hpc> | there never really was, imo |
| 22:17:08 | <monochrom> | Oh heh OK I guess shorter name to type. |
| 22:17:43 | <abastro[m]> | Oh If /dev/random is HW-generated random |
| 22:17:45 | <abastro[m]> | That would be great |
| 22:17:53 | <hpc> | people had these really weird hangups about needing to block for randomness for a couple more bytes, but it's somehow totally fine to have a 2048-bit key encrypting gigabytes of traffic at a timme |
| 22:18:27 | <monochrom> | I agree. Another paranoid concern. |
| 22:18:32 | <hpc> | abastro[m]: /dev/random is whatever linux has to do to get you a non-blocking stream of entropy that it safe to use |
| 22:18:38 | × | justsomeguy quits (~justsomeg@user/justsomeguy) (Quit: WeeChat 3.4) |
| 22:18:47 | <hpc> | likely a mix of hw and seeded randomness |
| 22:19:19 | <abastro[m]> | Interesting, great one |
| 22:19:32 | <abastro[m]> | Finally, I do not need to use random package |
| 22:19:58 | <monochrom> | The random package is great for Monte Carlo purposes. |
| 22:20:26 | <monochrom> | But I admit that the conversation started with privacy etc. |
| 22:22:26 | × | DNH quits (~DNH@2a02:8108:1100:16d8:4199:73fa:f378:33d) (Ping timeout: 245 seconds) |
| 22:23:22 | <maerwald> | privacy is so oldschool |
| 22:26:36 | → | Sgeo_ joins (~Sgeo@user/sgeo) |
| 22:29:01 | × | Sgeo quits (~Sgeo@user/sgeo) (Ping timeout: 256 seconds) |
| 22:31:55 | → | deadmarshal_ joins (~deadmarsh@95.38.112.219) |
| 22:33:37 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 22:35:59 | → | Akiva joins (~Akiva@user/Akiva) |
| 22:36:17 | × | mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 240 seconds) |
| 22:36:43 | × | deadmarshal_ quits (~deadmarsh@95.38.112.219) (Ping timeout: 260 seconds) |
| 22:36:46 | → | merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) |
| 22:38:35 | → | mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475) |
| 22:40:48 | × | michalz quits (~michalz@185.246.204.57) (Remote host closed the connection) |
| 22:41:05 | <koala_man> | sm[i]: shellcheck's error IDs are 1xxx emitted by the parser, 2xxx by the AST analysis, 3xxx are individual POSIX and shell support violations (also AST analysis) |
| 22:43:30 | <sm> | aha, thanks |
| 22:44:15 | <sm> | and just numbered increasingly as you add them I guess |
| 22:51:41 | → | slac45879 joins (~slack1256@191.126.227.64) |
| 22:53:31 | × | Akiva quits (~Akiva@user/Akiva) (Ping timeout: 260 seconds) |
| 22:53:33 | → | romesrf joins (~romes@44.190.189.46.rev.vodafone.pt) |
| 22:54:00 | × | slack1256 quits (~slack1256@186.11.117.121) (Ping timeout: 260 seconds) |
| 22:55:32 | kraftwerk28_ | is now known as kraftwerk28 |
| 22:57:16 | → | Codaraxis joins (~Codaraxis@user/codaraxis) |
| 23:03:48 | × | gdown quits (~gavin@h69-11-149-231.kndrid.broadband.dynamic.tds.net) (Remote host closed the connection) |
| 23:07:55 | × | jpds quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 240 seconds) |
| 23:09:11 | → | jpds joins (~jpds@gateway/tor-sasl/jpds) |
| 23:10:32 | × | Unicorn_Princess quits (~Unicorn_P@46-54-248-191.static.kate-wing.si) (Remote host closed the connection) |
| 23:11:12 | × | merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 272 seconds) |
| 23:11:52 | → | Unicorn_Princess joins (~Unicorn_P@46-54-248-191.static.kate-wing.si) |
| 23:13:01 | × | sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 240 seconds) |
| 23:14:43 | × | gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving) |
| 23:17:24 | × | leah2 quits (~leah@vuxu.org) (Ping timeout: 240 seconds) |
| 23:26:15 | × | Pickchea quits (~private@user/pickchea) (Ping timeout: 256 seconds) |
| 23:26:41 | → | cosimone joins (~user@93-44-187-176.ip98.fastwebnet.it) |
| 23:27:00 | → | lavaman joins (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) |
| 23:27:37 | × | machinedgod quits (~machinedg@mtrlpq02-1168108095.sdsl.bell.ca) (Ping timeout: 240 seconds) |
| 23:31:47 | × | vorpuni quits (~pvorp@2001:861:3881:c690:653f:80d3:c158:3650) (Ping timeout: 260 seconds) |
| 23:32:37 | → | leah2 joins (~leah@vuxu.org) |
| 23:32:59 | → | perrierjouet joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) |
| 23:33:35 | → | catch22 joins (~catch22@204.40.96.58.static.exetel.com.au) |
| 23:33:47 | × | acidjnk quits (~acidjnk@p200300d0c7049f94c956cb44f746ab1f.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
| 23:33:58 | → | Crash0verrid3 joins (~IceChat95@2601:151:4500:17b:981f:f251:77de:55e5) |
| 23:38:59 | → | sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) |
| 23:44:08 | × | mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 272 seconds) |
| 23:44:29 | × | Tuplanolla quits (~Tuplanoll@91-159-69-98.elisa-laajakaista.fi) (Quit: Leaving.) |
| 23:45:01 | × | dsrt^ quits (~dsrt@96-67-120-105-static.hfc.comcastbusiness.net) (Ping timeout: 240 seconds) |
| 23:45:23 | × | perrierjouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.4.1) |
| 23:45:57 | → | mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475) |
| 23:46:37 | → | Everything joins (~Everythin@37.115.210.35) |
| 23:48:22 | → | slack1256 joins (~slack1256@186.11.118.121) |
| 23:49:45 | <Axman6> | koala_man: how have I never connected that you are _the_ shellcheck koalaman. Love you work my friend, Shellcheck is a godsend |
| 23:49:46 | → | perrierjouet joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) |
| 23:49:56 | <koala_man> | aww, I'm happy you find it useful! |
| 23:50:55 | × | slac45879 quits (~slack1256@191.126.227.64) (Ping timeout: 260 seconds) |
| 23:53:38 | <Axman6> | I've been subscribed to the infamous zsh ticket for years and live in hope but understanding =) |
| 23:53:38 | × | mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 272 seconds) |
| 23:54:10 | <koala_man> | haha yup, zsh is quite different from the rest both syntactically and semantically |
| 23:55:18 | → | mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475) |
| 23:56:03 | <geekosaur> | zsh is nice for those of us who know both tcsh and sh/bash, but yes, the combination is … interesting |
| 23:57:03 | → | slac45998 joins (~slack1256@191.125.227.64) |
| 23:57:15 | × | jpds quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 240 seconds) |
| 23:57:28 | <Axman6> | I wish all languages had tools as nice as shellcheck, imagine having something that nice for Haskell |
| 23:58:27 | <hpc> | but what language would it be written in? :P |
| 23:59:07 | × | slack1256 quits (~slack1256@186.11.118.121) (Ping timeout: 256 seconds) |
All times are in UTC on 2022-03-23.