Home liberachat/#haskell: Logs Calendar

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.