Home liberachat/#haskell: Logs Calendar

Logs on 2021-07-07 (liberachat/#haskell)

00:05:03 × sh9 quits (~sh9@softbank060116136158.bbtec.net) (Quit: WeeChat 3.0.1)
00:08:33 dajoer joins (~david@user/gvx)
00:09:25 × Axman6 quits (~Axman6@user/axman6) (Remote host closed the connection)
00:09:39 Axman6 joins (~Axman6@user/axman6)
00:15:19 mpt joins (~tom@2a02:908:1862:49e0::8)
00:17:28 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
00:17:49 geekosaur joins (~geekosaur@xmonad/geekosaur)
00:18:26 × mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection)
00:19:01 × leah2 quits (~leah@vuxu.org) (Read error: Connection reset by peer)
00:21:35 × Deide quits (~Deide@user/deide) (Quit: Seeee yaaaa)
00:22:38 × P1RATEZ quits (piratez@user/p1ratez) (Remote host closed the connection)
00:29:25 × mpt quits (~tom@2a02:908:1862:49e0::8) (Ping timeout: 246 seconds)
00:33:53 × beka quits (~beka@104.193.170-244.PUBLIC.monkeybrains.net) (Ping timeout: 252 seconds)
00:34:49 lavaman joins (~lavaman@98.38.249.169)
00:41:39 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
00:45:15 yauhsien joins (~yauhsien@61-231-39-135.dynamic-ip.hinet.net)
00:45:46 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
00:53:07 shapr` joins (~user@pool-100-36-247-68.washdc.fios.verizon.net)
00:54:54 × shapr quits (~user@pool-100-36-247-68.washdc.fios.verizon.net) (Ping timeout: 252 seconds)
01:01:21 norias joins (~jaredm@c-98-219-195-163.hsd1.pa.comcast.net)
01:06:38 falafel joins (~falafel@pool-96-255-70-50.washdc.fios.verizon.net)
01:11:20 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
01:12:27 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
01:18:11 × chris-the-slurpa quits (~chris@81.96.113.213) (Remote host closed the connection)
01:18:44 chris-the-slurpa joins (~chris@81.96.113.213)
01:23:30 × chris-the-slurpa quits (~chris@81.96.113.213) (Ping timeout: 252 seconds)
01:28:51 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 265 seconds)
01:30:53 Erutuon joins (~Erutuon@user/erutuon)
01:33:58 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 244 seconds)
01:35:29 × xff0x quits (~xff0x@2001:1a81:5361:2500:d703:4594:70ae:f456) (Ping timeout: 252 seconds)
01:35:56 ChaiTRex joins (~ChaiTRex@user/chaitrex)
01:37:35 xff0x joins (~xff0x@2001:1a81:539d:3600:fb37:d824:cc4b:5c87)
01:44:38 × hnOsmium0001 quits (uid453710@id-453710.stonehaven.irccloud.com) (Quit: Connection closed for inactivity)
01:44:43 neurocyte403 joins (~neurocyte@IP-185189140104.dynamic.medianet-world.de)
01:44:43 × neurocyte403 quits (~neurocyte@IP-185189140104.dynamic.medianet-world.de) (Changing host)
01:44:43 neurocyte403 joins (~neurocyte@user/neurocyte)
01:45:02 × norias quits (~jaredm@c-98-219-195-163.hsd1.pa.comcast.net) (Quit: Leaving)
01:45:54 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
01:48:15 × neurocyte40 quits (~neurocyte@user/neurocyte) (Ping timeout: 252 seconds)
01:48:15 neurocyte403 is now known as neurocyte40
01:48:41 × yauhsien quits (~yauhsien@61-231-39-135.dynamic-ip.hinet.net) (Ping timeout: 252 seconds)
01:52:03 chris-the-slurpa joins (~chris@81.96.113.213)
01:54:05 <qrpnxz> ah nice, haskell has case lambdas
01:54:33 <Axman6> also known as LambdaCase
01:55:10 ebn joins (~ebn@h-46-59-94-79.A463.priv.bahnhof.se)
01:55:39 <qrpnxz> wait, ApplicativeDo not on by default? why?
01:56:08 <geekosaur> becuase it massively complicates desugaring do-s
01:56:13 × chris-the-slurpa quits (~chris@81.96.113.213) (Ping timeout: 246 seconds)
01:56:57 <qrpnxz> well i'm not doing it by hand xD
01:57:11 <geekosaur> besides which almost no extensions over H2010 are on by default
01:57:24 <qrpnxz> fair enough
01:57:26 <geekosaur> unless you're talking about GHC2021 in 9.2-pre maybe
01:57:37 Mathnerd314 joins (~Mathnerd3@2601:281:d080:4533::1000)
01:57:42 beka joins (~beka@104-244-27-23.static.monkeybrains.net)
01:57:56 <qrpnxz> :O
01:58:04 <qrpnxz> didn't know that was coming
01:58:05 <qrpnxz> epic
02:00:05 <geekosaur> looks like it's not in GHC2021 either
02:01:01 × mei quits (~mei@user/mei) (Read error: Connection reset by peer)
02:01:25 <qrpnxz> hm, well i'm sure a lot of other cool stuff is, reading the prop right now
02:02:25 <geekosaur> actually it's quite conservative
02:03:21 <geekosaur> no LambdaCase I notice
02:06:18 <Mathnerd314> Is there a paper or something on defining IO as an operational monad like `data IO a = Val a | Put Str (IO a) | Get (Str -> IO a)`? As an alternative to the State# RealWorld stuff it seems worth exploring.
02:07:12 <geekosaur> I think that runs into complications once you bring in things like FFI
02:07:17 <qrpnxz> it's like two dozen, it's a lot
02:11:16 <c_wraith> Mathnerd314: edwardk wrote some articles about using that model for Ermine
02:13:00 × falafel quits (~falafel@pool-96-255-70-50.washdc.fios.verizon.net) (Ping timeout: 252 seconds)
02:13:01 justsomeguy joins (~justsomeg@user/justsomeguy)
02:13:46 × ebn quits (~ebn@h-46-59-94-79.A463.priv.bahnhof.se) (Remote host closed the connection)
02:15:27 hnOsmium0001 joins (uid453710@id-453710.stonehaven.irccloud.com)
02:17:20 × machinedgod quits (~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 258 seconds)
02:18:34 × alx741 quits (~alx741@181.196.69.147) (Quit: alx741)
02:23:14 lavaman joins (~lavaman@98.38.249.169)
02:23:15 hgolden_ joins (~hgolden2@cpe-172-114-84-61.socal.res.rr.com)
02:24:41 finn_elija joins (~finn_elij@user/finn-elija/x-0085643)
02:24:41 FinnElija is now known as Guest1139
02:24:41 finn_elija is now known as FinnElija
02:24:42 <qrpnxz> this page shows there an indeed very clever ways to get primes as fast as the C code https://wiki.haskell.org/Prime_numbers namely this one `primes = 2 : 3 : minus [5,7..] (unionAll [[p*p, p*p+2*p..] | p <- tail primes])` using some *really* neat-o, yet straight-forward, stuff from the data-ordlist package. Now sure, this different algorithm could also be translated into C, but even if you had the source f
02:24:42 <qrpnxz> or all the library functions used here, reimplementing it and getting it to have the correct lazy behaviour to stream would be total hell and super coupled. Haskell powerful!
02:24:59 × td_ quits (~td@94.134.91.135) (Ping timeout: 252 seconds)
02:26:35 td_ joins (~td@94.134.91.101)
02:27:19 <qrpnxz> on the other hand, idk if i woulda ever come up with that, but hey, it's there lol
02:27:24 <Mathnerd314> c_wraith: ah, the blog post "Free monads for less" mentions http://www.cs.ru.nl/~W.Swierstra/Publications/DataTypesALaCarte.pdf, which uses a free monad with I/O at the end. I guess that's as close as I'll get
02:27:43 × Guest1139 quits (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 246 seconds)
02:30:43 <qrpnxz> that solution is way to cool, easily understood and so fast
02:32:07 × lemmih quits (~lemmih@2406:3003:2072:44:5d:3e69:de9c:e320) (Quit: Leaving)
02:32:57 <monochrom> Haskell2010, Ubuntu 21.04, GHC2021, and T-1000
02:41:56 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
02:42:10 yauhsien joins (~yauhsien@61-231-39-135.dynamic-ip.hinet.net)
02:43:04 × biberu quits (~biberu@user/biberu) (Read error: Connection reset by peer)
02:45:50 charukiewicz_ is now known as charukiewicz
02:46:10 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
02:47:06 × yauhsien quits (~yauhsien@61-231-39-135.dynamic-ip.hinet.net) (Ping timeout: 252 seconds)
02:48:45 × shapr` quits (~user@pool-100-36-247-68.washdc.fios.verizon.net) (Ping timeout: 252 seconds)
02:49:55 warnz joins (~warnz@2600:1700:77c0:5610:a5ca:de51:28ba:edf0)
02:50:17 × waleee quits (~waleee@h-98-128-228-119.NA.cust.bahnhof.se) (Ping timeout: 252 seconds)
02:50:35 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
02:52:21 geekosaur joins (~geekosaur@xmonad/geekosaur)
02:54:15 × warnz quits (~warnz@2600:1700:77c0:5610:a5ca:de51:28ba:edf0) (Ping timeout: 252 seconds)
02:55:14 <qrpnxz> even with really simple implementations for minus and unionAll, it performs rather well
02:58:15 <monochrom> Yeah pretty nice.
02:58:40 <monochrom> I also just ran into a case of: my student's solution is both simpler and faster than mine. :)
03:00:32 <qrpnxz> lol, the essence of bittersweat
03:00:35 <qrpnxz> *sweet
03:00:43 <qrpnxz> bittersweat ew!
03:06:32 × Reyu[M] quits (~reyureyuz@matrix.reyuzenfold.com) (Remote host closed the connection)
03:07:09 Reyu[M] joins (~reyureyuz@matrix.reyuzenfold.com)
03:09:56 chris-the-slurpa joins (~chris@81.96.113.213)
03:10:20 <Mathnerd314> aha, the paper I was looking for: https://www.cs.nott.ac.uk/~psztxa/publ/beast.pdf
03:10:57 × zebrag quits (~chris@user/zebrag) (Remote host closed the connection)
03:11:56 <Mathnerd314> although, it's a model, not directly compiling with the types
03:14:03 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
03:18:28 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 246 seconds)
03:20:08 × finsternis quits (~X@23.226.237.192) (Remote host closed the connection)
03:22:58 <qrpnxz> what's this about?
03:23:00 khumba joins (~khumba@user/khumba)
03:24:10 × jao quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 240 seconds)
03:25:06 <Mathnerd314> I'm looking for papers about defining IO as an operational monad like `data IO a = Val a | Put Str (IO a) | Get (Str -> IO a)`. So far: Ermine uses a Codensity monad with an FFI datatype. A few papers on modeling IO with free monads.
03:28:14 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
03:28:28 anandprabhu joins (~anandprab@94.202.243.198)
03:29:29 <Mathnerd314> or rather, not Codensity, but the "indexed store comonad". http://comonad.com/reader/2011/free-monads-for-less-3/
03:32:28 wei2912 joins (~wei2912@112.199.250.21)
03:32:34 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 240 seconds)
03:42:51 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
03:42:53 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
03:43:33 keutoi joins (~keutoi@157.47.77.5)
03:46:42 <keutoi> I came across this in Semigroup instance of NonEmpty a.
03:46:44 <keutoi> (a :| as) <> ~(b :| bs) = a :| (as ++ b : bs)
03:46:53 <keutoi> Why is the lazy pattern used?
03:47:36 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 252 seconds)
03:53:15 <monochrom> To be as lazy as the [a] case: (a:as) ++ ys = a : (as ++ ys).
03:53:43 <monochrom> No one wants (a:as) ++ (b:bs) = a : (as ++ (b:bs))
03:54:31 <monochrom> In both cases people would like head ((1:undefined) <> undefined) = 1
04:02:22 dunkeln joins (~dunkeln@188.70.10.207)
04:02:57 <qrpnxz> oh my lord that page has some crazier even faster algos, all fitting on a postcard, all using lists!
04:05:43 <keutoi> monochrom: thank you
04:12:48 oxide joins (~lambda@user/oxide)
04:16:56 hewxle joins (~hewxle@S010600fc8d321b13.vn.shawcable.net)
04:24:20 × hewxle quits (~hewxle@S010600fc8d321b13.vn.shawcable.net) (Ping timeout: 252 seconds)
04:25:41 jakalx parts (~jakalx@base.jakalx.net) ()
04:26:20 gambpang joins (~ian@207.181.230.156)
04:34:04 × Mathnerd314 quits (~Mathnerd3@2601:281:d080:4533::1000) (Quit: Client closed)
04:36:41 hewxle joins (~hewxle@S010600fc8d321b13.vn.shawcable.net)
04:39:01 × AgentM quits (~agentm@pool-162-83-130-212.nycmny.fios.verizon.net) (Quit: Leaving.)
04:39:53 m7zs3gzw joins (~m7zs3gzw@188.170.172.108)
04:41:37 × m7zs3gzw quits (~m7zs3gzw@188.170.172.108) (Remote host closed the connection)
04:43:24 yauhsien joins (~yauhsien@61-231-39-135.dynamic-ip.hinet.net)
04:47:46 × yauhsien quits (~yauhsien@61-231-39-135.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
04:52:10 × dunkeln quits (~dunkeln@188.70.10.207) (Ping timeout: 240 seconds)
04:55:47 jakalx joins (~jakalx@base.jakalx.net)
04:57:16 fengctor joins (~fengctor@bras-base-ngflon0508w-grc-11-76-68-2-143.dsl.bell.ca)
04:59:58 hewxle parts (~hewxle@S010600fc8d321b13.vn.shawcable.net) ()
05:01:00 × gambpang quits (~ian@207.181.230.156) (Remote host closed the connection)
05:05:11 × spatchkaa quits (~spatchkaa@S010600fc8da47b63.gv.shawcable.net) (Quit: Leaving)
05:06:14 ptr_frac7al joins (~longlong@user/ptr-frac7al/x-0038398)
05:11:22 hewxle joins (~hewxle@user/hewxle)
05:13:05 × anandprabhu quits (~anandprab@94.202.243.198) (Quit: Leaving)
05:13:05 dunkeln_ joins (~dunkeln@188.70.10.207)
05:14:14 <Axman6> qrpnxz: which page?
05:14:33 <qrpnxz> this https://wiki.haskell.org/Prime_numbers
05:14:56 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 252 seconds)
05:15:23 <Axman6> there was a talk on this recently actually, I'll see if I can find it
05:16:55 mei joins (~mei@user/mei)
05:18:13 <Axman6> I don't think this is the one I was after but it looks like you might enjoy it: https://www.youtube.com/watch?v=UPy7TXgrK1A
05:19:36 <qrpnxz> :o thanks
05:20:33 × dunkeln_ quits (~dunkeln@188.70.10.207) (Ping timeout: 252 seconds)
05:21:18 dunkeln joins (~dunkeln@188.70.10.207)
05:24:24 jneira joins (~jneira@212.8.115.226)
05:29:43 × xff0x quits (~xff0x@2001:1a81:539d:3600:fb37:d824:cc4b:5c87) (Ping timeout: 246 seconds)
05:29:51 <Axman6> I think this is the thing I was looking for: https://patternsinfp.wordpress.com/2021/05/10/the-genuine-sieve-of-eratosthenes/
05:30:52 xff0x joins (~xff0x@2001:1a81:539d:3600:7f6d:8918:f53:97d7)
05:31:35 <qrpnxz> huh, will look at that
05:31:37 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
05:35:40 × canta quits (~canta@cvm0.d5k.one) (Quit: WeeChat 2.8)
05:35:46 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds)
05:35:50 × peterhil quits (~peterhil@dsl-hkibng32-54f849-252.dhcp.inet.fi) (Ping timeout: 265 seconds)
05:44:43 yauhsien joins (~yauhsien@61-231-39-135.dynamic-ip.hinet.net)
05:45:30 × hewxle quits (~hewxle@user/hewxle) (Ping timeout: 272 seconds)
05:47:59 canta joins (~canta@user/canta)
05:49:09 × yauhsien quits (~yauhsien@61-231-39-135.dynamic-ip.hinet.net) (Ping timeout: 252 seconds)
05:49:38 × jonatan quits (~nate@h77-53-70-163.cust.a3fiber.se) (Remote host closed the connection)
05:52:49 × hiruji quits (~hiruji@user/hiruji) (Read error: Connection reset by peer)
05:53:29 hiruji joins (~hiruji@user/hiruji)
05:58:44 × fengctor quits (~fengctor@bras-base-ngflon0508w-grc-11-76-68-2-143.dsl.bell.ca) (Read error: Connection reset by peer)
06:05:20 × haskl[error] quits (~haskl@98.37.78.63) (Changing host)
06:05:20 haskl[error] joins (~haskl@user/haskl)
06:06:21 peterhil joins (~peterhil@dsl-hkibng32-54f849-252.dhcp.inet.fi)
06:08:00 × slowButPresent quits (~slowButPr@user/slowbutpresent) (Quit: leaving)
06:08:27 <haskl[error]> I'm going to make a website that has a graphical representation of chat rooms. Which libraries should I look at? Miso? `websockets`? Any suggestions?
06:09:23 haskl[error] is now known as haskl
06:12:46 × khumba quits (~khumba@user/khumba) ()
06:14:04 <dminuoso> qrpnxz: Re aggressive optimizations in GCC/clang. All of these optimizations are either in accordance with the semantic model of the underlying language, or they are not observable.
06:14:10 × beka quits (~beka@104-244-27-23.static.monkeybrains.net) (Ping timeout: 240 seconds)
06:14:58 × dunkeln quits (~dunkeln@188.70.10.207) (Ping timeout: 240 seconds)
06:16:39 × cheater quits (~Username@user/cheater) (Ping timeout: 252 seconds)
06:16:43 Kirat joins (~Gill@103.217.122.15)
06:16:50 cheater joins (~Username@user/cheater)
06:17:16 kammka joins (~kammka@188.27.129.10)
06:18:11 × Kirat quits (~Gill@103.217.122.15) (Client Quit)
06:19:13 × jespada quits (~jespada@90.254.247.46) (Ping timeout: 258 seconds)
06:20:33 <kammka> Hello! Could you guys point out why is my intuition wrong on this? According to this : -- foldl :: (b -> a -> b) -> b -> [a] -> b
06:20:33 <kammka> -- foldl f b [] = b
06:20:34 <kammka> -- foldl f b (x:xs) = foldl f (f b x) xs
06:21:06 jespada joins (~jespada@90.254.247.46)
06:22:10 × kammka quits (~kammka@188.27.129.10) (Quit: Client closed)
06:22:21 kammka joins (~kammka@188.27.129.10)
06:23:13 <dminuoso> kammka: Your client was closed. The last line we received was: 08:20:34 kammka | -- foldl f b (x:xs) = foldl f (f b x) xs
06:24:14 <dminuoso> qrpnxz: In part the reason why Haskell gets away with pretty good performance, is because our evaluation model makes larger scale transformations easy. We have relatively little rules with regards to evaluation.
06:24:14 <kammka> dminuoso : Oh, dang. I pasted the code here : https://paste.tomsmeding.com/AT3fU529
06:24:27 <dminuoso> kammka: Alright! What does your intuition tell you?
06:25:22 <kammka> That foldl (+) ((+) ((+) 0 2) 3) []
06:25:23 <kammka> should pattern match to foldl f b [] and return that 0 that I put at the end
06:25:26 <kammka> But surely that is wrong
06:25:55 <dminuoso> kammka: Do you know how lists in Haskell are constructed with (:) and []?
06:26:31 <kammka> Yes? I thought [3] is 3 : []
06:27:19 <dminuoso> Yes, good. Just making sure that your basis is covered
06:27:50 <shachaf> kammka: I think the question here is where the second 0 comes from on the last line.
06:29:37 <kammka> I suppose I was thinking that the 0 comes from f b [] = b. Maybe I shouldnt have put it there..
06:30:07 <kammka> I did this for foldr : https://paste.tomsmeding.com/TUcmHsST
06:30:17 <kammka> And that seems ok, right?
06:30:42 <dminuoso> Looks good
06:31:59 <dminuoso> Well, you did expansoin both times right. So the way I think of foldr/foldl on lists, is that it replaces (:) with a function.
06:32:01 <kammka> so I thought this : foldl (+) ((+) ((+) 0 2) 3) [] is equivalent to this: f b [] = b. Therefore I put that second 0 in the last line that probably should not be there
06:32:16 takuan joins (~takuan@178-116-218-225.access.telenet.be)
06:32:22 Gurkenglas joins (~Gurkengla@dslb-002-203-144-156.002.203.pools.vodafone-ip.de)
06:32:40 <dminuoso> So for instance: foldr f z (1:2:3:[]) gives me: 1 `f` (2 `f` (3 `f` z))
06:32:49 <dminuoso> Note how foldr replaces the (:) with f, and the final last element with z.
06:33:09 <kammka> That is really helpful actually
06:33:11 <dminuoso> The key difference between foldr and foldl is just how the `f` is associated here:
06:33:40 <dminuoso> If we assumed foldl behaved like you assumed, foldl would give you:
06:34:40 <dminuoso> ((1 `f` 2) `f` 3) `f` z -- but what happens instead, is that the `z` wanders to the left side
06:34:41 <dminuoso> so you get:
06:35:13 <dminuoso> foldl f z (1:2:3:[]) = (((z `f` 1) `f` 2) `f` 3)
06:35:38 dhouthoo joins (~dhouthoo@178-117-36-167.access.telenet.be)
06:35:53 <dminuoso> But also see how, conceptually we can think of foldl replacing (:) with f. And this might also give you a hint how both foldr and foldl go from left-to-right. It's just that what (:) is replaced with associates differently
06:37:07 <kammka> It makes sense now. Mainly because of ' replace the (:) with f' ; And it just becomes a matter of association regarding the difference between foldl and foldr
06:37:11 <kammka> Thanks a lot!!
06:37:49 <dminuoso> kammka: By the way, this intuition holds for *all* foldables, if we implicitly go through toListOf first.
06:38:26 ahdyt joins (~ahdyt@103.105.28.181)
06:39:46 aman joins (~aman@user/aman)
06:40:51 kammka45 joins (~kammka@188.27.129.10)
06:41:43 kammka55 joins (~kammka@188.27.129.10)
06:42:39 <kammka55> dminuoso: doesn't it behave differently for tuples , for example? foldr (+) 1 (2,3) seems to disregard the first element of the pair
06:42:52 <dminuoso> Let's entertain this train of thought:
06:42:55 <dminuoso> % :t foldr
06:42:56 <yahb> dminuoso: forall {t :: * -> *} {a} {b}. Foldable t => (a -> b -> b) -> b -> t a -> b
06:43:25 <dminuoso> kammka55: Stare at this type signature, and tell me what you'd set for `t` in the above.
06:43:28 × kammka quits (~kammka@188.27.129.10) (Ping timeout: 246 seconds)
06:44:08 <dminuoso> Or
06:44:13 <dminuoso> No, let's actually go with my claim.
06:44:16 <dminuoso> 08:37:49 dminuoso | kammka: By the way, this intuition holds for *all* foldables, if we implicitly go through toListOf first.
06:44:22 <dminuoso> % toListOf (1,2)
06:44:22 <yahb> dminuoso: ; <interactive>:131:10: error:; * Couldn't match type: (a0, b0); with: (a -> Const (Endo [a]) a) -> s -> Const (Endo [a]) s; Expected: Getting (Endo [a]) s a; Actual: (a0, b0); * In the first argument of `toListOf', namely `(1, 2)'; In the expression: toListOf (1, 2); In an equation for `it': it = toListOf (1, 2); * Relevant bindings include it ::
06:44:34 <dminuoso> % toList (1,2)
06:44:35 <yahb> dminuoso: [2]
06:44:41 <dminuoso> kammka55: Yeah I know, this is unexpected.
06:45:13 × kammka45 quits (~kammka@188.27.129.10) (Ping timeout: 246 seconds)
06:45:19 yauhsien joins (~yauhsien@61-231-39-135.dynamic-ip.hinet.net)
06:46:30 <kammka55> dminuoso: I need to look up that function first- unfortunately I don't know the type of that? Or it should take the tuple and convert it to a list?
06:46:38 <dminuoso> % :t toList
06:46:38 <yahb> dminuoso: forall {t :: * -> *} {a}. Foldable t => t a -> [a]
06:47:14 dunkeln_ joins (~dunkeln@188.70.10.207)
06:47:20 <dminuoso> Let's assume that (1,2) :: (Int, Int) - in prefix notation that is: (1,2) :: (,) Int Int
06:47:33 <dminuoso> % :t foldr
06:47:33 <yahb> dminuoso: forall {t :: * -> *} {a} {b}. Foldable t => (a -> b -> b) -> b -> t a -> b
06:47:52 <dminuoso> The only way this will work out, is if we set `t ~ (,) Int` and `a ~ Int`
06:48:20 <dminuoso> Informally you can already see here, that the first element type is not considered part of the "content" here.
06:48:40 <dminuoso> We could also use (Char, Int) here.
06:49:01 <dminuoso> Informally 2-tuples are treated as singleton lists of the second element (and the first element is just some sort of tag)
06:49:29 <dminuoso> Its debatable whether this instance is useful or perhaps even misleading, but it's the only possible implementation...
06:49:46 × sayola1 quits (~vekto@dslb-088-078-152-192.088.078.pools.vodafone-ip.de) (Quit: Leaving.)
06:50:03 sayola joins (~vekto@dslb-088-078-152-192.088.078.pools.vodafone-ip.de)
06:50:06 × yauhsien quits (~yauhsien@61-231-39-135.dynamic-ip.hinet.net) (Ping timeout: 272 seconds)
06:52:43 kammka joins (~kammka@188.27.129.10)
06:52:50 <kammka> dminuoso: I always replaced t a with [a] in my mind. So in reality t stand for the data constructor? [] for lists and , for tuples?
06:53:05 <dibblego> [] and (a,)
06:53:14 <kammka> Oh I see it now
06:53:16 × ahdyt quits (~ahdyt@103.105.28.181) (Ping timeout: 246 seconds)
06:53:19 <dibblego> @kind Foldable
06:53:20 <lambdabot> (* -> *) -> Constraint
06:53:29 <dminuoso> kammka: a type constructor! :)
06:54:35 <dminuoso> kammka: [T] can also be written as `[] T`, so if you then line it up with `t a`, it should be obvious what happens.
06:55:07 <dminuoso> So here `[]` (not at the value-level, but at the type-level) is a proper type constructor.
06:55:25 <dminuoso> We can think of `[T]` as just fancy syntax for what could have been `List T` instead
06:55:52 <kammka> Mhm, I see
06:56:19 × welterde quits (welterde@thinkbase.srv.welterde.de) (Quit: WeeChat 3.0.1)
06:56:25 × kammka55 quits (~kammka@188.27.129.10) (Ping timeout: 246 seconds)
06:56:27 welterde joins (welterde@thinkbase.srv.welterde.de)
06:57:04 fendor joins (~fendor@178.165.171.166.wireless.dyn.drei.com)
06:57:17 <shachaf> dminuoso: But foldl *doesn't* replace (:) and [] with functions.
06:57:19 <dminuoso> kammka: Similarly for the type (again, not value level!) (S, T), which can also be written as `(,) S T`, and because type-level application like value level application is left-associative, you get:
06:57:49 <shachaf> It does all sorts of computation. That's why you gotta know about foldl' and all these things if you use it.
06:58:48 <dibblego> foldr does, foldl does other things
06:59:19 <shachaf> foldr is special in that it does the thing you said (some people would say it's initial). Other "folds" on lists don't.
06:59:36 kammka38 joins (~kammka@188.27.129.10)
06:59:51 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
07:00:15 <dminuoso> shachaf: I think it's still a good first approximation to get acquainted with foldr/foldl. But you're right that due to strictness there should be a note that Im telling a simplified lie.
07:00:27 hatz_ is now known as Hatz_
07:00:56 <dibblego> I do not believe it is a helpful lie.
07:01:30 × ptr_frac7al quits (~longlong@user/ptr-frac7al/x-0038398) (Ping timeout: 272 seconds)
07:02:45 <dminuoso> dibblego: Given that I provided concrete examples of what foldl does to a list, I disagree. *shrugs*
07:03:00 <shachaf> It's a good thing to know about foldr, and you can certainly point out that foldl f z [a,b,c] = ((z `f` a) `f` b) `f` c
07:03:04 × kammka quits (~kammka@188.27.129.10) (Ping timeout: 246 seconds)
07:03:35 <dibblego> here is a good measure of a helpful lie: the benefits of what can now be done because of the lie, outweight the effort to require to not lie
07:03:40 <dminuoso> But I'll take your hint and re-think whether I can find a better formulation of it.
07:03:59 <dibblego> in this case, the benefits are at least small — possibly none (I cannot think of any), and the effort required to not lie is less than lying anyway
07:04:43 <dibblego> foldl f z list does a loop; this one: { var r = z; foreach (el in list) { r = f r el }; return r }
07:05:02 <dibblego> that was a lie; but it is helpful, because the analogy is dead accurate
07:05:16 × dunkeln_ quits (~dunkeln@188.70.10.207) (Ping timeout: 246 seconds)
07:05:31 <dibblego> "foldl replaces constructors" is a lie, and now you cannot do anything useful because of it (since it's not accurate, even as an analogy)
07:06:57 <dibblego> I've left off "the effort required to now correct the lie", but: it is pretty big ime
07:09:13 cfricke joins (~cfricke@user/cfricke)
07:10:00 Obo joins (~roberto@70.pool90-171-81.dynamic.orange.es)
07:10:26 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 252 seconds)
07:12:33 Schrostfutz joins (~Schrostfu@schettlerdck.tkn.tu-berlin.de)
07:18:34 × tzh quits (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
07:18:56 × adanwan quits (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection)
07:19:10 adanwan joins (~adanwan@gateway/tor-sasl/adanwan)
07:24:18 × juhp quits (~juhp@128.106.188.66) (Ping timeout: 252 seconds)
07:25:23 ptr_frac7al joins (~longlong@user/ptr-frac7al/x-0038398)
07:25:30 nschoe joins (~quassel@178.251.84.79)
07:26:44 <DigitalKiwi> .glirclogs/#mostlyabsurd/2019-06-27.log:[12:10:24] <DigitalKiwi> is this a bad mnemonic: foldLeft/foldl => FL => For Loop; foldRight/foldr => fR => constructor Replacement
07:27:04 andreabedini joins (~andreabed@8s8kj6nms09jvtyb2xjc.ip6.superloop.com)
07:27:17 biberu joins (~biberu@user/biberu)
07:28:17 mikoto-chan joins (~mikoto-ch@ip-213-49-189-31.dsl.scarlet.be)
07:30:49 Guest8466 joins (~Guest84@188.27.129.10)
07:32:32 chele joins (~chele@user/chele)
07:32:46 Hatz_ is now known as hatz_
07:36:49 mpt joins (~tom@2a02:908:1862:49e0::8)
07:36:57 × ptr_frac7al quits (~longlong@user/ptr-frac7al/x-0038398) (Ping timeout: 252 seconds)
07:38:56 <tomsmeding> dibblego: foldr replaces constructors, not foldl; but I assume that was a typo :)
07:39:09 × Nyeogmi quits (~Nyeogmi@2601:645:8700:bea0:4d5e:7bf4:e290:5648) (Ping timeout: 252 seconds)
07:39:54 <dibblego> I said that rite
07:40:16 <tomsmeding> your second-to-last message
07:40:35 <dibblego> "foldl replaces constructors" is a lie
07:40:36 <tomsmeding> well, your message is strictly speaking correct; "foldl replaces constructors" is a lie, and a big one :p
07:40:48 <dibblego> yes, that was the discussion
07:40:52 <tomsmeding> was it?
07:40:55 <dibblego> as well as: not a helpful lie
07:41:21 <tomsmeding> ah I see I read the conversation wrong
07:41:55 ubert joins (~Thunderbi@p2e5a50e5.dip0.t-ipconnect.de)
07:42:37 <Axman6> English needs more types
07:42:51 <tomsmeding> then it would be inconvenient to speak :p
07:43:01 <tomsmeding> we need more domain specific languages
07:43:11 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
07:43:15 <Hecate> I reckon these are called Jargons
07:43:16 <Hecate> :P
07:43:20 <tomsmeding> yes
07:44:11 <tomsmeding> Axman6: related: lojban
07:44:39 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
07:45:45 trcc joins (~trcc@users-1190.st.net.au.dk)
07:46:57 × Schrostfutz quits (~Schrostfu@schettlerdck.tkn.tu-berlin.de) (Quit: Leaving)
07:47:51 × trcc quits (~trcc@users-1190.st.net.au.dk) (Client Quit)
07:48:52 <DigitalKiwi> but nobody would want to talk to you then
07:49:14 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 265 seconds)
07:49:30 <DigitalKiwi> https://xkcd.com/191/
07:49:38 <tomsmeding> just means that the conversations you do have are very efficient ;)
07:50:06 acidjnk_new joins (~acidjnk@p200300d0c72b9519e1b6d7c282fb2b66.dip0.t-ipconnect.de)
07:54:58 × mpt quits (~tom@2a02:908:1862:49e0::8) (Ping timeout: 246 seconds)
07:57:35 <sshine> tomsmeding, I've found that Chinese is a framework designed for having domain-specific sub-languages.
07:58:21 <sshine> tomsmeding, the number of times I've heard one Chinese person say "You can't say that." and the thing was something another Chinese person suggested, are plentiful.
07:58:36 <nshepperd> jargons are good because they avoid false friends
07:59:03 × kammka38 quits (~kammka@188.27.129.10) (Quit: Client closed)
08:00:26 <nshepperd> (another bit of jargon: 'false friend' - a foreign word that looks like a word you already know but means something different and confuses students)
08:02:17 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
08:03:50 <DigitalKiwi> Some thirty people gathered to celebrate the birthday of the host. After a few bottles of vodka were imbibed, the tongues got loose, and the guests started telling political jokes. Through laughter, a voice sounded, "Comrades, please, it's too noisy. In such a noise, I can't hear the jokes. I am writing it down, you know."
08:03:51 <DigitalKiwi> A man sitting next to the one who's writing down, says admiringly, "How do you manage to write down that fast?"
08:03:53 <DigitalKiwi> "Oh, I'm writing down only the initials."
08:04:17 × ubert quits (~Thunderbi@p2e5a50e5.dip0.t-ipconnect.de) (Remote host closed the connection)
08:06:56 Taren joins (~Taren@port-92-196-211-46.dynamic.as20676.net)
08:07:22 ptr_frac7al joins (~longlong@user/ptr-frac7al/x-0038398)
08:07:38 <[exa]> DigitalKiwi: I'm adding you to the list. :]
08:08:25 <Hecate> hahahaha
08:08:33 <Hecate> I love that in itself it's a political joke
08:08:42 × hendursa1 quits (~weechat@user/hendursaga) (Ping timeout: 244 seconds)
08:09:35 zeenk joins (~zeenk@2a02:2f04:a106:9600:82fb:aed9:ca9:38d3)
08:10:47 dunkeln joins (~dunkeln@188.70.10.207)
08:11:17 <DigitalKiwi> DigitalKiwi Identified Mail
08:13:46 × ptr_frac7al quits (~longlong@user/ptr-frac7al/x-0038398) (Ping timeout: 240 seconds)
08:14:39 Tuplanolla joins (~Tuplanoll@91-159-68-239.elisa-laajakaista.fi)
08:17:11 × andreabedini quits (~andreabed@8s8kj6nms09jvtyb2xjc.ip6.superloop.com) (Quit: WeeChat 2.8)
08:19:11 neceve joins (~quassel@2a02:c7f:607e:d600:f762:20dd:304e:4b1f)
08:19:28 × peterhil quits (~peterhil@dsl-hkibng32-54f849-252.dhcp.inet.fi) (Ping timeout: 246 seconds)
08:19:55 Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
08:21:58 <zincy__> Is this correct thinking...
08:22:09 ahdyt joins (~ahdyt@103.105.35.88)
08:22:22 <zincy__> Haskell has side effects but they are modelled differently from mainstream languages
08:22:37 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 246 seconds)
08:22:37 Lord_of_Life_ is now known as Lord_of_Life
08:23:40 <veverak> seems ok
08:23:43 <Hecate> zincy__: https://www.goodreads.com/quotes/14638-cyberspace-a-consensual-hallucination-experienced-daily-by-billions-of-legitimate
08:24:10 <[exa]> zincy__: "haskell provides a way to describe impure computation"
08:24:13 <ahdyt> how's the haskell cafe?
08:24:33 jumper149 joins (~jumper149@80.240.31.34)
08:24:39 × hnOsmium0001 quits (uid453710@id-453710.stonehaven.irccloud.com) (Quit: Connection closed for inactivity)
08:24:59 <zincy__> [exa]: I like that
08:25:05 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
08:25:05 <[exa]> zincy__: (I'm feeling literally `unsafe` saying that haskell has side effects)
08:25:12 <Hecate> "Side-effects" in Haskell are a consensual hallucination because while every operation produces side effects at one level or another, we have decided that interactions with IO devices (network, filesystem, rng) are impure
08:25:47 ptr_frac7al joins (~longlong@user/ptr-frac7al/x-0038398)
08:25:51 <zincy__> Yeah I read somewhere it wasn't that impurity was forbidden from Haskell it just wasn't added in the first place
08:26:01 × econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity)
08:26:20 <Hecate> zincy__: by lack of a nice way to do things (Monads) at first, but it was research in progress, not just an after-thought
08:26:25 <[exa]> Hecate: seems they somehow don't accept thinking in a model
08:26:36 <Hecate> [exa]: who's 'they'?
08:27:05 dunj3 joins (~dunj3@2001:16b8:3020:e900:566b:618c:a738:2a84)
08:27:05 <DigitalKiwi> primary side-effect of haskell is making me miserable using other languages ;(
08:27:06 <sshine> I suppose another view of IO is that it's a garbage bin of non-categorised effects. so side-effects vs. effects are when we have no way of quantifying what effect was made, and what its imprint on our model of the state was. no?
08:27:37 <Hecate> hmm
08:27:45 <sshine> IO = all the effects we can't account for (i.e. side-effects)
08:27:47 <ahdyt> Hecate I want a Monad m please?
08:27:48 <[exa]> Hecate: the non-hallucinating people (sorry I was a bit under-specific :D )
08:27:53 <zincy__> I feel as though "getting" side effects in Haskell by being able to think in models serves as a great filter between theory allergic and theory loving coders
08:28:03 Hecate gives ahdyt a Monad m
08:28:11 <Hecate> [exa]: eh :)
08:28:58 <ahdyt> I think side effect isn't observable effect, hence called side effect? it's just unexpected?
08:29:54 leah2 joins (~leah@vuxu.org)
08:30:09 × cjb quits (~cjb@user/cjb) (Quit: rcirc on GNU Emacs 28.0.50)
08:30:21 <zincy__> Depends what you mean by *observable*
08:30:36 <Hecate> observability is *something else*
08:30:44 × ptr_frac7al quits (~longlong@user/ptr-frac7al/x-0038398) (Ping timeout: 252 seconds)
08:31:17 <zincy__> maybe change the word observable for external
08:31:48 <Hecate> Let's all read this stackoverflow answer before venturing further:; https://cstheory.stackexchange.com/a/21265
08:32:00 <sshine> ahdyt, at least not predictably. 'setDate :: UTCDate -> IO ()' could be measured with 'getDate :: IO UTCDate', but you'd never know if that was the full extent from the type.
08:32:28 <sshine> Hecate, thanks :)
08:34:41 <zincy__> Wow this is an amazing answer
08:34:52 <Hecate> isn't it?
08:34:55 <zincy__> So a side effect can be all of the above
08:35:11 <zincy__> internal/external observable/non-observable
08:35:28 <zincy__> I feel like my thinking on the subject just entered a new level of clarity
08:36:13 <Hecate> yeah, when I said that's a collective, consensual hallucination, it's because we took all of Haskell's execution semantics, separated it from what we don't care about (in the context of those semantics), and labeled those things "side effects"
08:36:16 <zincy__> So is purity relative according to the semantics of the program?
08:36:32 <zincy__> impurity means outside the model of the program?
08:36:54 <Hecate> rather the model of the language
08:36:59 <zincy__> yeah
08:37:11 <zincy__> Thanks so much for this insight
08:37:35 <Hecate> zincy__: there are ways to annotate your functions with labels such as "This functions is doing DB operations, this function is sending missiles"
08:37:53 <Hecate> and their callers have to provide facilities for those "constraints" to be validated
08:37:57 <merijn> Hecate: Where can I get that function? >.>
08:38:09 <Hecate> merijn: work for Lockheed-Martin
08:38:13 <Hecate> (plz don't)
08:38:24 michalz joins (~michalz@185.246.204.126)
08:39:01 <merijn> Hecate: Could be SpaceX too :p
08:39:06 <sshine> Hecate, but modern, granular effect systems break this illusion because the programmer gets to specify what's a first-class effect and what isn't, right?
08:40:25 <Hecate> hmm
08:40:34 <Hecate> I don't feel that way when using an effect system
08:40:51 <Hecate> sshine: do you know MTL and typeclasses?
08:40:55 <sshine> yes
08:41:12 <ahdyt> and know how to use it to solve problems?
08:41:13 Lycurgus joins (~juan@cpe-45-46-140-49.buffalo.res.rr.com)
08:41:21 <sshine> but I haven't used an effect system in Haskell, only used mtl and toyed around with effect systems in Scala briefly.
08:41:27 <merijn> Let's all repeat our mantra: mtl is not an effect system, unless you like torturing yourself >.>
08:41:39 <ahdyt> ah haha
08:41:44 <Hecate> okay so, when we use MTL at work, it's usually not "MonadFileSystem" or "MonadDB", but higher-level significations for business logic
08:41:47 <Hecate> like "MonadStorage"
08:41:59 <ahdyt> ah, okay.
08:42:04 <merijn> Hecate: That's not even using mtl, though?
08:42:06 <Hecate> "MonadTracing" instead of "MonadNetwork" + "MonadMetrics"
08:42:39 <Hecate> merijn: (MonadStorage m, MonadTracing m) => arg1 -> m returnType
08:42:42 <ahdyt> is that storage used for building distributed file system?
08:43:05 <merijn> Hecate: That's just using tagless final, no?
08:43:22 <Hecate> ahdyt: it only matters if your business logic deals with the intrisics of distributed file systems :P
08:43:24 <merijn> Which is also what mtl uses, but to pointless effect >.>
08:43:29 <Hecate> merijn: no?
08:43:42 <Hecate> I mean, when you say tagless final I think of Oleg's paper
08:43:56 <Hecate> and from what I recall of it, no it's not "just using tagless final"
08:44:32 <merijn> Hecate: I mean, MonadStorage/MonadTracing in no way use mtl (except, maybe, as incidental implementation detail)
08:45:00 <Hecate> merijn: uuuh yes?
08:45:01 <sshine> Hecate, so defining that hierarchy of Monad* classes is sort of extending the semantics of your effects. I suppose there's an entire design space I haven't yet explored. I understand how picking one class of effects makes for one set of abstractions instead of another.
08:45:23 <Hecate> merijn: they are typeclass constraints that we use in mtl style
08:45:39 <merijn> Hecate: https://serokell.io/blog/tagless-final seems to support my understanding that mtl is just tagless final encoding too
08:45:52 <merijn> Hecate: The "mtl style" *is* tagless final encoding :p
08:46:12 <sshine> is "mtl-style" and "has-style" the same except for wording? or does "has-style" also say something about a specific taxonomy of effects?
08:46:18 <merijn> I like tagless final encoding, I just dislike mtl :p
08:46:23 <Hecate> sshine: the nice stuff is that you need MonadIO for a buch of those operation, but if you don't put it explicitly in your type signature, you can't really use liftIO
08:46:32 yauhsien joins (~yauhsien@61-231-39-135.dynamic-ip.hinet.net)
08:46:56 <Hecate> sshine: has-style is just sugar
08:47:06 <Hecate> don't worry too much about this, it's just a typeclass
08:47:19 <sshine> Hecate, ah, so the full implementation of a MonadFoo might really need MonadIO, but as the library user, you neither need to know nor get to abuse this fact?
08:48:21 <Hecate> sshine: if you have (MonadStorage m) in your constraints (which obviously requires doing some IO access, whether on the network of FS), you get to access the methods provided by this typeclass
08:48:30 <Hecate> an opaque "store" and an opaque "get", for example
08:48:37 <merijn> sshine: The advantage is that you can entirely rewrite your Foo/Storage implementation without 90% of your code needing to be refactored
08:48:54 <Hecate> now, if in your function you want to do `liftIO getCurrentTime", GHC will complain to you that you need MonadIO in your constraints
08:49:21 <merijn> sshine: If all code *using* Storage only knows about a tiny number of primitives implemented in the typeclass, then any code *using* Storage is only affected if that interface changes, but not when any of its internals change
08:49:21 <Hecate> merijn: can I ask your opinion on https://github.com/arybczak/effectful ?
08:49:37 <Hecate> merijn: I wrote a time handler for it https://github.com/Kleidukos/effectful-time/
08:50:08 <merijn> Hecate: My opinion is: I am a busy, busy man, who can't be arsed to look at 10 million effects systems that seem to have dubious/marginal improvements for the code I write :p
08:50:58 × yauhsien quits (~yauhsien@61-231-39-135.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
08:51:08 ubert joins (~Thunderbi@2a02:8109:9880:303c:ca5b:76ff:fe29:f233)
08:51:11 <Hecate> merijn: very well :P
08:51:44 <merijn> Most I've seen of all these effects libraries is pointless navelgazing with little to no ecosystem support :p
08:52:09 <merijn> Maybe if the language was designed from the ground up to accommodate it I'd be more interested
08:52:18 × mnrmnaugh quits (~mnrmnaugh@pool-96-252-87-182.bstnma.fios.verizon.net) (Ping timeout: 252 seconds)
08:52:27 <zincy__> I haven't bothered to learn a single effects library yet apart from monad transformers hehe
08:52:40 <merijn> But right now it's just "some wrappers around base and you gotta hope they keep up"
08:52:52 <Hecate> zincy__: don't bother yet
08:52:54 <merijn> zincy__: I would argue transformers aren't really effects systems at all
08:53:12 <Hecate> effect systems like effectful are most useful in big applications where MTL style shows its limits
08:53:20 <zincy__> Is that because of the fact monad transformers are static?
08:53:21 <merijn> Hecate: You know what would get my interest? An effect system designed around/playing nice with something like OpenBSD's pledge()
08:53:27 × ikex quits (~ash@user/ikex) (Quit: ZNC - https://znc.in)
08:53:35 <Hecate> merijn: never heard about this syscall
08:53:36 <merijn> Also, I wish every other OS would port pledge >.<
08:53:40 ikex joins (ash@user/ikex)
08:53:41 <zincy__> merijn: Would you say using something like free monads would be an effects system?
08:53:46 <merijn> Hecate: pledge is amazing
08:53:59 <Hecate> merijn: ok let me read about it
08:54:01 × ahdyt quits (~ahdyt@103.105.35.88) (Ping timeout: 246 seconds)
08:54:27 <merijn> Hecate: It's basically granular privilege drop
08:54:28 × dunkeln quits (~dunkeln@188.70.10.207) (Ping timeout: 258 seconds)
08:54:50 <Hecate> merijn: I can see this, it's most interesting
08:55:28 <merijn> But they spend a lot of effort to make it easy to integrate in existing codebases. As opposed to all these capability networks that basically require full rewrites of your code
08:56:24 <merijn> If you could design and match your effect system to that and have the language auto-pledge away everything your types say you won't use. *That* would be cool
08:58:28 <tomsmeding> then would be a really cool use of the type system guarantees
09:03:14 <fendor> can I make an uninhabitable type synonym?
09:03:30 <sshine> type LikeThis = Void ?
09:04:34 ptr_frac7al joins (~longlong@user/ptr-frac7al/x-0038398)
09:05:14 × Lycurgus quits (~juan@cpe-45-46-140-49.buffalo.res.rr.com) (Quit: Exeunt)
09:05:19 <fendor> I want `pattern T n <- <Impossible pattern>`
09:05:40 <sshine> oh, you mean pattern synonym
09:06:36 <tomsmeding> (1 -> 2) with ViewPatterns?
09:07:34 <fendor> yeah, pattern synonym
09:07:44 <fendor> that wont typecheck, right?
09:08:30 <tomsmeding> hm yeah, maybe (const True -> False) -- switching to booleans to not have to default to some integral type
09:09:51 <fendor> huh... yeah, seems like a good idea
09:09:54 × ptr_frac7al quits (~longlong@user/ptr-frac7al/x-0038398) (Ping timeout: 268 seconds)
09:09:57 <haskl> What are people's thoughts on Options.Applicative?
09:10:04 <tomsmeding> fendor: pattern T x <- ((\x -> (True, x)) -> (False, x))
09:10:11 <tomsmeding> seems to type check?
09:12:52 tomsmeding wonders about why one would need such a pattern synonym
09:14:13 <sshine> haskl, do you mean thoughts on the optparse-applicative library, or its submodule in particular?
09:14:51 <fendor> since I had to change the type, pattern T y <- ((\x -> (True, undefined) -> (False, y)) typechecks
09:14:56 <haskl> sshine, sorry, yes, optparse-applicative library
09:15:07 __monty__ joins (~toonn@user/toonn)
09:15:08 <sshine> haskl, sorry for not making that assumption :P it's an awesome library.
09:15:14 <fendor> tomsmeding, ghc Avail constructor changed from Name to a union of Name and FieldLabel
09:15:23 <sshine> haskl, did you see optparse-generic, though? (you can't always use this, but when you can, it saves time.)
09:16:01 <fendor> trying to be backwards compatible, I thought introducing a pattern synonym for the union Name and Fieldlabel, e.g. introduce AvailName and AvailFieldLabel, would be a good idea
09:16:09 <haskl> I feel like I've gone from complete beginner to intermediate/okayish/mediocre in Haskell programming but every time I use that library I feel a little confused and often like I'm twisting it to do what I want.
09:16:20 <fendor> but to achieve that, AvailFieldLabel must never be a valid pattern synonym for ghc < 9.2
09:16:30 <haskl> I feel relatively comfortable with applicative functors, too
09:16:50 <haskl> no I didn't see optparse-generic
09:17:33 <sshine> haskl, I haven't had to model a CLI argument set that was so complicated the library gave me trouble.
09:17:43 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:cdb:cabc:a7c7:75c9) (Remote host closed the connection)
09:19:43 <haskl> This is what I did. https://github.com/hyperrealgopher/burrow/blob/master/app/Main.hs
09:20:26 <haskl> (planning to add many more subcommands soon)
09:21:29 <sshine> cool
09:21:37 darklambda joins (~whateverg@111.65.56.40)
09:21:50 <darklambda> oooh... lot's of people here now
09:22:18 <sshine> yeah, but we were active from day one. :)
09:22:39 <haskl> I'm trying out Miso. It's really cool.
09:22:48 <darklambda> i just came to know about the freenode debacle yesterday :-P
09:22:56 <darklambda> been away from irc for months
09:23:08 <darklambda> i like Miso
09:23:09 toms joins (~foobar@pogostick.net)
09:23:29 <darklambda> usually i get that when visiting japanese restaurant
09:23:42 <haskl> good one
09:23:46 <darklambda> :-)
09:23:48 <haskl> I have to learn about Nix more before I use Miso properly
09:24:03 <sshine> haskl, I did these: https://github.com/sshine/lira/blob/master/src/Main.hs - https://github.com/sshine/hello/blob/master/src/Hello.hs - the latter is optparse-generic. you'll see that the actual parser is auto-generated from a data type. :)
09:24:13 <haskl> thanks for sharing that sshine
09:24:44 <darklambda> i came to know it first from last year's munich haskell conf... i forgot why i end up not trying it... not sure if it's because of nix requirement (running win10 here)
09:25:54 <darklambda> anyway, one of the good things about new network is that a bunch of nicks became available...
09:25:58 <darklambda> check this out...
09:26:01 darklambda is now known as pointfree
09:26:03 <pointfree> :-)
09:28:04 haskl is now known as linustorvalds
09:28:15 linustorvalds is now known as haskl
09:28:24 <haskl> i should've made a less lazy username, but that's ok
09:29:38 <pointfree> i wanted lambda.. but it was already taken
09:30:29 pointfree is now known as darklambda
09:31:44 × zaquest quits (~notzaques@5.128.210.178) (Remote host closed the connection)
09:31:45 <sshine> haskl, and the --help is also auto-generated with the content of the <?> annotations.
09:33:44 <sshine> haskl, optparse-generic is mostly smart when you can get away with having record fields that match exactly the argument names. otherwise you're not implicitly deriving things anyway.
09:34:27 <haskl> Thanks.
09:35:41 <darklambda> when's the next haskell conf?
09:36:04 <haskl> Next thing I want to look into is error handling in optparse-applicative.
09:36:59 zaquest joins (~notzaques@5.128.210.178)
09:37:21 <sshine> haskl, what's insufficient with the default error handling?
09:37:53 <Profpatsch> I wonder how hard it is to switch from Validation to These
09:38:06 <Profpatsch> where you go from “accumulate errors” to “just collect warnings”
09:38:22 <haskl> sshine, well, for example, if I don't specify a subcommand or flag, it just tells me "missing COMMAND" without telling me the options for the commands which can be used or the like. maybe even just displaying the help page would be ideal.
09:40:45 <merijn> haskl: There's an option for that with optarse-applicative
09:40:57 <merijn> Dunno if optparse-generic supports that, though
09:41:39 kamy joins (~kamy@83-245-253-38-nat-p.elisa-mobile.fi)
09:41:42 <sshine> I do 'customExecParser (prefs showHelpOnError) argsParserInfo' in one case.
09:41:47 <merijn> haskl: https://hackage.haskell.org/package/optparse-applicative-0.16.1.0/docs/Options-Applicative.html#t:ParserPrefs
09:41:55 <haskl> amazing
09:41:59 <merijn> haskl: see prefShowHelpOnError and prefShowHelpOnEmpty
09:42:00 × azeem quits (~azeem@dynamic-adsl-84-220-226-129.clienti.tiscali.it) (Ping timeout: 258 seconds)
09:42:15 <haskl> thanks i figured
09:42:50 jushur joins (~human@user/jushur)
09:43:02 <sshine> the --help of some programs can get pretty huge, though. so I wouldn't print the whole --help if it grows beyond a few lines :) much rather have the somewhat uninformative "these are your options, go guess what they mean."
09:43:10 <haskl> i'll get back to that after fiddling around with Miso, i promised someone i'd at least write one line with Miso
09:43:22 × stefan-_ quits (~cri@42dots.de) (Ping timeout: 240 seconds)
09:43:50 <haskl> oh i don't think i have to worry about that, i divide things up nicely with hsubcommands or whatever it's called
09:44:13 <haskl> the app in question is a gopherhole builder. like a static site builder, but for gopher protocol.
09:44:30 azeem joins (~azeem@176.201.33.66)
09:44:57 <sshine> cool
09:45:07 <haskl> ty
09:45:09 <sshine> I'm trying to quit the WWW, so I appreciate alternatives.
09:45:17 <haskl> are you in #gopher?
09:45:23 <sshine> I was too young.
09:45:35 <sshine> I only really went online in 1997. :)
09:45:48 <haskl> i made a gopher client, a gopher builder, and i'm working on a gopher server docker image that will help you with serving using burrow
09:46:06 <sshine> nice.
09:46:15 <darklambda> nice
09:46:26 <darklambda> what language you use for those? haskell?
09:46:40 <haskl> darklambda, yes
09:46:45 <darklambda> wow
09:46:53 <haskl> https://github.com/hyperrealgopher/burrow
09:47:06 <haskl> https://github.com/hyperrealgopher/waffle
09:47:21 <haskl> i started doing projects in haskell about a year ago
09:47:50 stefan-_ joins (~cri@42dots.de)
09:47:51 yauhsien joins (~yauhsien@61-231-39-135.dynamic-ip.hinet.net)
09:47:57 <darklambda> nice
09:48:09 <haskl> i started waffle about a year ago to learn haskell
09:48:25 <haskl> so its code sucks comparatively to burrow
09:49:22 <sshine> surely waffles aren't staple gopher diet.
09:49:52 <sshine> do you really want to risk introducing diabetes into such a small community?
09:49:55 <haskl> i would hope not! very sugary
09:50:05 <haskl> "The origin of the word 'gopher' is uncertain; French gaufre, meaning 'waffle', has been suggested, on account of the gopher tunnels resembling the honeycomb-like pattern of holes in a waffle…"
09:50:05 <darklambda> at first, i thought it's a utility for golang.. hehe
09:50:19 <sshine> ahh :)
09:50:47 <darklambda> gophers are golang's mascots
09:50:53 <darklambda> like minions... so cute
09:50:57 <haskl> nah it's just a nerdy retro protocol project i did because of how I needed to detox from the direction the web has taken
09:51:38 dunkeln joins (~dunkeln@188.70.10.207)
09:51:39 <haskl> i have mixed feelings about the modern web. it's not all bad.
09:52:03 <darklambda> i have high hopes for modern web
09:52:10 <darklambda> especially for web assembly
09:52:40 <sshine> haskl, since adblockers seem to be winning, I'm only struggling with the addictiveness of the availability of resources.
09:52:41 × yauhsien quits (~yauhsien@61-231-39-135.dynamic-ip.hinet.net) (Ping timeout: 252 seconds)
09:52:50 <haskl> lots of cool stuff on the bend. yes i was just going to say wasm/wasi. i actually have been trying to write a forth itnerpreter to learn forth because forth is being used in webasm and it has lots of other interesteing properties which make it high level with low level speeds
09:52:58 × oxide quits (~lambda@user/oxide) (Ping timeout: 240 seconds)
09:53:45 ptr_frac7al joins (~longlong@user/ptr-frac7al/x-0038398)
09:53:47 <sshine> also, not discouraging this conversation, but #haskell-offtopic :)
09:54:26 <sshine> haskl, writing a Forth interpreter in Haskell is a rewarding exercise. :)
09:54:55 kuribas joins (~user@ip-188-118-57-242.reverse.destiny.be)
09:54:59 <sshine> haskl, https://github.com/exercism/haskell/tree/main/exercises/practice/forth
09:55:00 <darklambda> interesting.. i haven't tried forth yet
09:55:02 oxide joins (~lambda@user/oxide)
09:55:21 <darklambda> oooh.. there's forth in exercism?
09:55:50 <haskl> it's also just a wildly different way of thinking about programming. i decided i wanted to do it after haskell really opened me up to the different ways of thinking about code. but i also have to checkout all these cool proof-driven languages people keep talking about in haskell circles
09:55:54 <sshine> haskl, the example solution doesn't use MonadState, so you could extend it that way, too.
09:56:07 <haskl> darklambda, oh i definitely have to try that
09:56:16 <darklambda> so far i've only tried rust, c++, c#(blazor), f#(bolero) for web assembly
09:56:17 <sshine> darklambda, there's a generic forth interpreter exercise that the Haskell track also specifies, yes.
09:56:38 <darklambda> let me check the exercism for forth :-)
09:56:54 <haskl> oh yeah i was thinking about using monadstate for the forth interpreter
09:57:13 <haskl> then i learned abou tdefining forth words and i had to take a break
09:57:37 <darklambda> ooh.. the forth exercise is classified as hard
09:57:52 <darklambda> it's still locked in my list.. :-)
09:58:21 <sshine> haskl, as in, the interpreter extends its own list of what words are available to use?
09:58:39 <sshine> darklambda, they're all available in GitHub. ;)
09:58:50 × ptr_frac7al quits (~longlong@user/ptr-frac7al/x-0038398) (Ping timeout: 272 seconds)
09:58:57 <haskl> sshine, yep defined between : and ;
09:59:31 <darklambda> ah https://github.com/exercism/haskell/blob/main/exercises/practice/forth/src/Forth.hs
10:00:15 <sshine> darklambda, the unlocking mechanism works better if you assume that there are enough mentors to give timely feedback; I don't know how populated the Haskell feedback mentor staff is right now, since I quit the project around when they started language policing.
10:00:45 <Rembane> sshine: What language policing did they do?
10:01:07 <sshine> Rembane, censoring Slack messages that used "guys" as a gender-neutral plural.
10:01:32 <Rembane> sshine: Oh. That kind of languages. I thought they threw out C# or something.
10:02:06 <darklambda> ah... i just checked my haskell exercism... i noticed that i'm not in mentor mode... lol... i think i used haskel previously to practice problems.. then apply the same solution in the elm track (which i have in mentored mode)
10:03:17 <darklambda> Rembrane, there's also a C# track...
10:03:22 <darklambda> :-)
10:03:58 <sshine> Rembane, hehe :) I don't think they threw out any languages. but they do run Exercism v3 quite differently than v1/v2. it used to be run as a federation, but now it's more centralised, e.g. most of the git history in the haskell repo was wiped due to carelessly moving files, whereas that repo in particular had a style of deeply linking issues and PRs to retain a history of documenting every single choice
10:04:04 <sshine> point.
10:04:52 ptr_frac7al joins (~longlong@user/ptr-frac7al/x-0038398)
10:05:16 <sshine> I preferred to work on it when I had the freedom to practice a high standard of documentation. :-D I learned a lot doing that.
10:05:27 × derelict quits (~derelict@user/derelict) (Ping timeout: 252 seconds)
10:05:45 <Rembane> sshine: Got it. I suppose they can run it any way they want but regardless of what style they choose it will attract some people and repel others.
10:05:49 <darklambda> documentation as in code comments or markdown?
10:06:55 <sshine> darklambda, as in git commit messages and interlinking with GitHub issues/PRs that carry discussion.
10:07:04 <darklambda> ah
10:07:24 <sshine> Rembane, yup, it's just a different style of organisation now.
10:08:25 × Vajb quits (~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi) (Read error: Connection reset by peer)
10:08:45 kayprish joins (~kayprish@cable-188-2-229-172.dynamic.sbb.rs)
10:09:15 Vajb joins (~Vajb@n2hz3gq4auh6ltn9l-2.v6.elisa-mobile.fi)
10:09:22 × ptr_frac7al quits (~longlong@user/ptr-frac7al/x-0038398) (Ping timeout: 240 seconds)
10:11:00 ptr_frac7al joins (~longlong@user/ptr-frac7al/x-0038398)
10:12:25 <kamy> if I haven't defined some function f yet, but I have a call to 'f (length xs)' somewhere in my code, is there a way to get GHC to tell me about the inferred type 'f :: Int -> t1' but still let me load the other stuff in the file into ghci? if I don't define f at all, I get the inferred type in the error message but obviously the file won't compile
10:12:26 <kamy> at all, but if I do 'f n = undefined' and compile with -ddump-tc I just get 'f :: forall p a. p -> a'... wondering if there's a way to sort this out with typed holes or something
10:13:23 <sshine> kamy, f = _
10:13:34 <sshine> kamy, https://downloads.haskell.org/~ghc/7.10.1/docs/html/users_guide/typed-holes.html
10:13:56 <sshine> oops, old compiler
10:14:15 <sshine> kamy, https://wiki.haskell.org/GHC/Typed_holes
10:15:49 coldmountain joins (sid484352@id-484352.brockwell.irccloud.com)
10:15:53 × ptr_frac7al quits (~longlong@user/ptr-frac7al/x-0038398) (Ping timeout: 268 seconds)
10:18:19 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:cdb:cabc:a7c7:75c9)
10:21:17 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
10:22:00 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
10:22:40 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:cdb:cabc:a7c7:75c9) (Ping timeout: 246 seconds)
10:25:55 peterhil joins (~peterhil@dsl-hkibng32-54f849-252.dhcp.inet.fi)
10:26:44 jippiedoe joins (~david@2a02-a44c-e14e-1-bdc0-a007-878c-4e7a.fixed6.kpn.net)
10:27:27 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
10:28:04 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
10:29:33 <kamy> sshine, thanks for the link :) unfortunately the info about taking an Int still seems to be lost somewhere along the way: f = _ gives an inferred type f :: t, and f n = _ gives an inferred type f :: p -> t
10:32:58 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
10:33:50 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
10:34:54 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
10:38:53 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
10:39:52 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
10:40:02 juhp joins (~juhp@128.106.188.66)
10:45:03 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
10:45:43 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
10:48:36 yauhsien joins (~yauhsien@61-231-39-135.dynamic-ip.hinet.net)
10:49:44 derelict joins (~derelict@user/derelict)
10:52:32 × Obo quits (~roberto@70.pool90-171-81.dynamic.orange.es) (Ping timeout: 258 seconds)
10:53:30 × yauhsien quits (~yauhsien@61-231-39-135.dynamic-ip.hinet.net) (Ping timeout: 268 seconds)
10:55:58 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
10:56:49 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
11:02:27 lavaman joins (~lavaman@98.38.249.169)
11:05:01 × derelict quits (~derelict@user/derelict) (Ping timeout: 246 seconds)
11:05:38 <tomsmeding> kamy: presumably the other way round?
11:05:53 <tomsmeding> oh wait, yes the inferred type of f would be that
11:06:34 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 240 seconds)
11:06:35 <tomsmeding> I think GHC typechecks global definitions independently, so the usage of f with an Int argument doesn't propagate to the type checking of te global f
11:06:50 AlexNoo_ joins (~AlexNoo@178.34.162.146)
11:07:01 <tomsmeding> hm, it does seem to
11:08:41 <kamy> ah, that makes sense
11:08:41 × Vajb quits (~Vajb@n2hz3gq4auh6ltn9l-2.v6.elisa-mobile.fi) (Read error: Connection reset by peer)
11:08:50 <tomsmeding> kamy: perhaps passing -fdefer-type-errors to GHC can be some substitute for what you want?
11:09:16 yauhsien joins (~yauhsien@61-231-39-135.dynamic-ip.hinet.net)
11:10:00 <tomsmeding> the information seems to propagate "late"; GHC does notice if there's a type error, but if the definition of 'f' is generic enough, at instantiation of that right-hand side of 'f' the specific information isn't there yet
11:10:10 × AlexZenon quits (~alzenon@178.34.162.171) (Ping timeout: 258 seconds)
11:10:10 × Alex_test quits (~al_test@178.34.162.171) (Ping timeout: 258 seconds)
11:10:46 × AlexNoo quits (~AlexNoo@178.34.162.171) (Ping timeout: 268 seconds)
11:11:15 Vajb joins (~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi)
11:15:11 Alex_test joins (~al_test@178.34.162.146)
11:15:30 AlexZenon joins (~alzenon@178.34.162.146)
11:16:10 × jippiedoe quits (~david@2a02-a44c-e14e-1-bdc0-a007-878c-4e7a.fixed6.kpn.net) (Ping timeout: 240 seconds)
11:16:37 <kamy> tomsmeding: looks like -fdefer-type-errors does what I wanted, thank you!
11:21:08 × azeem quits (~azeem@176.201.33.66) (Ping timeout: 252 seconds)
11:21:40 azeem joins (~azeem@176.201.33.66)
11:21:58 ahdyt joins (~ahdyt@103.105.35.90)
11:24:32 machinedgod joins (~machinedg@135-23-192-217.cpe.pppoe.ca)
11:26:39 × kamy quits (~kamy@83-245-253-38-nat-p.elisa-mobile.fi) (Quit: Client closed)
11:28:42 hendursa1 joins (~weechat@user/hendursaga)
11:29:03 brown121407 is now known as smarton
11:29:10 × dunkeln quits (~dunkeln@188.70.10.207) (Ping timeout: 246 seconds)
11:31:37 gehmehgeh joins (~user@user/gehmehgeh)
11:33:08 × kayprish quits (~kayprish@cable-188-2-229-172.dynamic.sbb.rs) (Remote host closed the connection)
11:35:35 <merijn> What was the usecase?
11:38:48 AlexNoo_ is now known as AlexNoo
11:39:11 absence_ is now known as absence
11:40:14 × ahdyt quits (~ahdyt@103.105.35.90) (Quit: Client closed)
11:41:42 frobnicator joins (~frobnicat@185-227-75-147.dsl.cambrium.nl)
11:42:32 <frobnicator> in templatehaskell, if I have a Name and want to convert this to for example a lowercase variant. How would I do this properly? For example, Name is "Main.T" and I want to make a new Name that has the value "t"
11:43:15 chomwitt joins (~Pitsikoko@2a02:587:dc0b:0:d8f7:cdfe:4658:bec4)
11:44:28 y04nn joins (~y04nn@91.193.4.106)
11:45:23 notzmv joins (~zmv@user/notzmv)
11:45:58 × notzmv quits (~zmv@user/notzmv) (Remote host closed the connection)
11:46:09 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
11:47:02 notzmv joins (~zmv@user/notzmv)
11:48:38 Obo joins (~roberto@70.pool90-171-81.dynamic.orange.es)
11:49:43 TheRAt is now known as TheRAt_AWAY
11:49:46 TheRAt_AWAY is now known as TheRAt
11:50:34 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 240 seconds)
11:51:57 <absence> in ghc 9, template haskell was changed so liftTyped returns Quote m => Code m a instead of Q (TExp a). this breaks the code "either fail liftTyped something" because Code doesn't have a MonadFail instance. what's the recommended way to deal with this? manually wrap the result of fail in Code, i.e. "either (Code . fail) liftTyped something", or does that have other consequences?
11:53:05 × wei2912 quits (~wei2912@112.199.250.21) (Quit: Lost terminal)
11:53:09 epolanski joins (uid312403@id-312403.brockwell.irccloud.com)
11:53:42 × chris-the-slurpa quits (~chris@81.96.113.213) (Remote host closed the connection)
11:56:43 dunkeln joins (~dunkeln@188.70.10.207)
11:58:05 lortabac joins (~lortabac@95.138.56.124)
11:59:37 × azeem quits (~azeem@176.201.33.66) (Ping timeout: 246 seconds)
12:00:35 azeem joins (~azeem@176.200.218.50)
12:02:42 mikail joins (~mikail@2a02:c7f:bd83:fd00:55cf:122f:957a:f66f)
12:04:01 fef joins (~thedawn@user/thedawn)
12:04:34 comerijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
12:04:45 chris-the-slurpa joins (~chris@81.96.113.213)
12:05:12 merijn is now known as Guest5099
12:05:34 comerijn is now known as merijn
12:06:01 alcume joins (~alcume@35.16.60.213.dynamic.reverse-mundo-r.com)
12:07:13 × jneira_ quits (~jneira_@217.red-81-39-172.dynamicip.rima-tde.net) (Quit: Connection closed)
12:07:49 × Guest5099 quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
12:09:10 × chris-the-slurpa quits (~chris@81.96.113.213) (Ping timeout: 252 seconds)
12:15:15 × dunkeln quits (~dunkeln@188.70.10.207) (Ping timeout: 252 seconds)
12:18:24 AgentM joins (~agentm@pool-162-83-130-212.nycmny.fios.verizon.net)
12:19:44 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:cdb:cabc:a7c7:75c9)
12:24:58 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:cdb:cabc:a7c7:75c9) (Ping timeout: 240 seconds)
12:29:01 ptr_frac7al joins (~longlong@user/ptr-frac7al/x-0038398)
12:30:25 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 246 seconds)
12:30:31 dunkeln joins (~dunkeln@188.70.10.207)
12:33:57 × ptr_frac7al quits (~longlong@user/ptr-frac7al/x-0038398) (Ping timeout: 252 seconds)
12:34:19 unyu joins (~pyon@user/pyon)
12:35:27 unyu parts (~pyon@user/pyon) ()
12:43:30 × azeem quits (~azeem@176.200.218.50) (Ping timeout: 272 seconds)
12:43:44 × acidjnk_new quits (~acidjnk@p200300d0c72b9519e1b6d7c282fb2b66.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
12:43:51 × dunkeln quits (~dunkeln@188.70.10.207) (Ping timeout: 252 seconds)
12:44:36 dunkeln joins (~dunkeln@188.70.10.207)
12:45:12 azeem joins (~azeem@176.200.218.50)
12:48:21 slowButPresent joins (~slowButPr@user/slowbutpresent)
12:51:29 × jneira quits (~jneira@212.8.115.226) (Quit: Client closed)
12:54:33 pbrisbin joins (~patrick@pool-173-49-147-28.phlapa.fios.verizon.net)
12:57:55 × fef quits (~thedawn@user/thedawn) (Remote host closed the connection)
12:58:13 waleee joins (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
12:58:52 habib joins (~habib@89.38.69.210)
13:00:47 × hiruji quits (~hiruji@user/hiruji) (Ping timeout: 252 seconds)
13:01:08 alx741 joins (~alx741@181.196.69.147)
13:01:25 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
13:03:57 hiruji joins (~hiruji@user/hiruji)
13:07:50 × hiruji quits (~hiruji@user/hiruji) (Read error: Connection reset by peer)
13:08:32 hiruji joins (~hiruji@user/hiruji)
13:10:05 bontaq joins (~user@ool-18e47f8d.dyn.optonline.net)
13:12:32 ptr_frac7al joins (~longlong@user/ptr-frac7al/x-0038398)
13:15:27 jao joins (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
13:17:00 × ptr_frac7al quits (~longlong@user/ptr-frac7al/x-0038398) (Ping timeout: 252 seconds)
13:20:12 chris-the-slurpa joins (~chris@81.96.113.213)
13:20:37 re101-bombay-7 joins (~re101-bom@2601:203:c200:d6f0:2d33:506:5f01:fb2c)
13:22:26 andreabedini joins (~andreabed@8s8kj6n700qk9hqmfk36.ip6.superloop.com)
13:27:21 bwe_ is now known as bwe
13:28:52 × re101-bombay-7 quits (~re101-bom@2601:203:c200:d6f0:2d33:506:5f01:fb2c) (Quit: Client closed)
13:30:10 × chomwitt quits (~Pitsikoko@2a02:587:dc0b:0:d8f7:cdfe:4658:bec4) (Ping timeout: 240 seconds)
13:32:58 × benin0369 quits (~benin@183.82.204.181) (Ping timeout: 240 seconds)
13:38:12 × azeem quits (~azeem@176.200.218.50) (Ping timeout: 265 seconds)
13:38:31 azeem joins (~azeem@176.200.218.50)
13:39:27 warnz joins (~warnz@2600:1700:77c0:5610:edd9:472d:4b89:9ab8)
13:43:06 × yauhsien quits (~yauhsien@61-231-39-135.dynamic-ip.hinet.net) (Remote host closed the connection)
13:43:39 yauhsien joins (~yauhsien@61-231-39-135.dynamic-ip.hinet.net)
13:47:46 × yauhsien quits (~yauhsien@61-231-39-135.dynamic-ip.hinet.net) (Ping timeout: 246 seconds)
13:48:44 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds)
13:49:04 × Taren quits (~Taren@port-92-196-211-46.dynamic.as20676.net) (Ping timeout: 246 seconds)
13:49:12 isekaijin joins (~pyon@user/pyon)
13:50:22 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
13:50:59 × chris-the-slurpa quits (~chris@81.96.113.213) (Remote host closed the connection)
13:51:37 chris-the-slurpa joins (~chris@81.96.113.213)
13:53:32 Sgeo joins (~Sgeo@user/sgeo)
13:53:54 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
13:54:46 <tromp> in ghci, how do I see a value rather than the result of function show?
13:55:19 <Clint> what?
13:56:06 <tromp> i have a record that is instance of Show
13:56:20 × chris-the-slurpa quits (~chris@81.96.113.213) (Ping timeout: 272 seconds)
13:56:22 <tromp> but i want to see record fields
13:57:04 <turlando> tromp maybe `:i Thing'?
13:57:18 <nshepperd> this is the regret one faces the morning after having the clever idea to write a custom Show instance
13:57:44 <geekosaur> there's a way to have ghci use something other than show, but it will then use it for everything
13:57:50 <tromp> no, :i doesn't show record value
13:59:05 <tromp> ok, will try remove my instance...
13:59:09 ptr_frac7al joins (~longlong@user/ptr-frac7al/x-0038398)
13:59:14 <geekosaur> you will probably have to write your own function to format the record. as nshepperd said, this is why you shouldn't get clever with Show instances
13:59:35 <polux> tromp: if the record has a Generic instance then there must be some library that implements a generic show
14:00:19 <polux> but +1 to what everyone just said above: Show should probably not be used for custom formatting
14:00:33 <polux> instance write a Pretty instance or something like that
14:00:42 <polux> s/instance/instead/
14:03:01 <tromp> thx for all suggestions
14:03:46 × ptr_frac7al quits (~longlong@user/ptr-frac7al/x-0038398) (Ping timeout: 240 seconds)
14:04:02 × cheater quits (~Username@user/cheater) (Ping timeout: 252 seconds)
14:04:10 × y04nn quits (~y04nn@91.193.4.106) (Ping timeout: 240 seconds)
14:04:17 <polux> tromp: I just tried https://hackage.haskell.org/package/generic-deriving-1.14/docs/Generics-Deriving-Show.html, it works as intended for records
14:04:18 cheater joins (~Username@user/cheater)
14:04:24 <polux> Prelude Generics.Deriving.Show GHC.Generics> data Record = R { a :: Int, b :: Bool } deriving (Generic)
14:04:24 <polux> Prelude Generics.Deriving.Show GHC.Generics> instance GShow Record
14:04:24 <polux> Prelude Generics.Deriving.Show GHC.Generics> gshow (R 1 True)
14:04:24 <polux> "R {a = 1, b = True}"
14:04:49 <polux> so if getting rid of your custom Show instance is impractical, that is a valid workaround
14:04:55 <tromp> i now use derive (Show) on the record and added a custom formatting function
14:04:57 y04nn joins (~y04nn@91.193.4.106)
14:05:43 <merijn> \o/
14:05:49 <merijn> Another person converted back to sanity
14:06:29 × Danishman quits (~Allan@2-104-144-110-cable.dk.customer.tdc.net) (Quit: Leaving)
14:07:27 × Vajb quits (~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi) (Ping timeout: 252 seconds)
14:07:44 Vajb joins (~Vajb@n2hz3gq4auh6ltn9l-2.v6.elisa-mobile.fi)
14:12:16 × azeem quits (~azeem@176.200.218.50) (Ping timeout: 246 seconds)
14:13:55 norias joins (~jaredm@c-98-219-195-163.hsd1.pa.comcast.net)
14:13:58 × dunkeln quits (~dunkeln@188.70.10.207) (Ping timeout: 265 seconds)
14:14:26 yauhsien joins (~yauhsien@61-231-39-135.dynamic-ip.hinet.net)
14:15:20 × dunj3 quits (~dunj3@2001:16b8:3020:e900:566b:618c:a738:2a84) (Remote host closed the connection)
14:16:45 azeem joins (~azeem@176.200.218.50)
14:16:59 vpan joins (~vilius@212.117.1.172)
14:20:05 × yauhsien quits (~yauhsien@61-231-39-135.dynamic-ip.hinet.net) (Ping timeout: 268 seconds)
14:22:14 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:cdb:cabc:a7c7:75c9)
14:23:20 notzmv joins (~zmv@user/notzmv)
14:23:20 × alcume quits (~alcume@35.16.60.213.dynamic.reverse-mundo-r.com) (Read error: Connection reset by peer)
14:25:58 × keutoi quits (~keutoi@157.47.77.5) (Remote host closed the connection)
14:26:03 argento joins (~argent0@168-227-97-34.ptr.westnet.com.ar)
14:26:34 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:cdb:cabc:a7c7:75c9) (Ping timeout: 240 seconds)
14:28:14 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 252 seconds)
14:28:43 × waleee quits (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 246 seconds)
14:29:16 × azeem quits (~azeem@176.200.218.50) (Ping timeout: 272 seconds)
14:30:46 dunkeln joins (~dunkeln@188.70.10.207)
14:32:56 azeem joins (~azeem@176.201.11.138)
14:34:04 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
14:35:18 nova parts (novasenco@user/nova) (♥☺)
14:36:36 × statusbot1 quits (~statusbot@ec2-34-198-122-184.compute-1.amazonaws.com) (Remote host closed the connection)
14:36:49 statusbot joins (~statusbot@ec2-34-198-122-184.compute-1.amazonaws.com)
14:39:13 amahl joins (~amahl@dsl-jklbng12-54fbca-64.dhcp.inet.fi)
14:40:18 chomwitt joins (~Pitsikoko@athedsl-16082.home.otenet.gr)
14:42:55 rostero joins (uid236576@id-236576.tooting.irccloud.com)
14:44:07 × cheater quits (~Username@user/cheater) (Ping timeout: 246 seconds)
14:44:32 cheater joins (~Username@user/cheater)
14:48:16 × dunkeln quits (~dunkeln@188.70.10.207) (Ping timeout: 272 seconds)
14:49:40 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
14:49:44 × azeem quits (~azeem@176.201.11.138) (Ping timeout: 265 seconds)
14:49:54 azeem joins (~azeem@176.201.11.138)
14:50:18 yauhsien joins (~yauhsien@61-231-39-135.dynamic-ip.hinet.net)
14:54:37 × yauhsien quits (~yauhsien@61-231-39-135.dynamic-ip.hinet.net) (Ping timeout: 246 seconds)
14:55:27 chris-the-slurpa joins (~chris@94.119.64.0)
14:56:55 × korayal quits (~Koray_Al@user/korayal) (Quit: WeeChat 3.3-dev)
14:57:08 × azeem quits (~azeem@176.201.11.138) (Ping timeout: 272 seconds)
14:57:43 azeem joins (~azeem@176.201.11.138)
15:00:18 × habib quits (~habib@89.38.69.210) (Ping timeout: 272 seconds)
15:01:52 × argento quits (~argent0@168-227-97-34.ptr.westnet.com.ar) (Ping timeout: 252 seconds)
15:04:03 lavaman joins (~lavaman@98.38.249.169)
15:05:03 Kirat joins (~Gill@103.217.122.15)
15:05:29 × Kirat quits (~Gill@103.217.122.15) (Client Quit)
15:06:34 habib joins (~habib@188.241.156.95)
15:07:38 hewxle joins (~hewxle@user/hewxle)
15:09:10 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 272 seconds)
15:10:48 dunkeln_ joins (~dunkeln@188.70.10.207)
15:12:57 Lycurgus joins (~juan@cpe-45-46-140-49.buffalo.res.rr.com)
15:14:56 × Vajb quits (~Vajb@n2hz3gq4auh6ltn9l-2.v6.elisa-mobile.fi) (Read error: Connection reset by peer)
15:15:07 Vajb joins (~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi)
15:18:53 yauhsien joins (~yauhsien@61-231-39-135.dynamic-ip.hinet.net)
15:19:57 × habib quits (~habib@188.241.156.95) (Read error: Connection reset by peer)
15:20:17 × cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.2)
15:21:15 × Vajb quits (~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi) (Read error: Connection reset by peer)
15:21:46 × andreabedini quits (~andreabed@8s8kj6n700qk9hqmfk36.ip6.superloop.com) (Quit: Textual IRC Client: www.textualapp.com)
15:22:24 Vajb joins (~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi)
15:23:33 × yauhsien quits (~yauhsien@61-231-39-135.dynamic-ip.hinet.net) (Ping timeout: 258 seconds)
15:23:49 mnrmnaugh joins (~mnrmnaugh@pool-96-252-87-182.bstnma.fios.verizon.net)
15:28:10 × azeem quits (~azeem@176.201.11.138) (Ping timeout: 240 seconds)
15:28:22 drd joins (~drd@2001:b07:a70:9f1f:1562:34de:f50f:77d4)
15:28:40 × chris-the-slurpa quits (~chris@94.119.64.0) (Remote host closed the connection)
15:29:12 chris-the-slurpa joins (~chris@94.119.64.3)
15:32:35 × neceve quits (~quassel@2a02:c7f:607e:d600:f762:20dd:304e:4b1f) (Ping timeout: 252 seconds)
15:32:40 azeem joins (~azeem@176.201.11.138)
15:33:17 × Lycurgus quits (~juan@cpe-45-46-140-49.buffalo.res.rr.com) (Quit: Exeunt)
15:33:22 × chris-the-slurpa quits (~chris@94.119.64.3) (Ping timeout: 240 seconds)
15:38:04 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
15:38:49 habib joins (~habib@109.70.150.189)
15:39:06 habib parts (~habib@109.70.150.189) ()
15:41:05 yauhsien joins (~yauhsien@61-231-39-135.dynamic-ip.hinet.net)
15:44:24 <monochrom> Wouldn't it be more fun to convert to the insane way? >:)
15:45:06 <monochrom> Handwrite your own non-standard Show instance. For the standard one, derive Generic and use GShow. >:)
15:47:53 × dajoer quits (~david@user/gvx) (Quit: leaving)
15:50:33 × lortabac quits (~lortabac@95.138.56.124) (Quit: WeeChat 2.8)
15:53:04 × azeem quits (~azeem@176.201.11.138) (Ping timeout: 258 seconds)
15:54:32 tzh joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net)
15:55:37 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:cdb:cabc:a7c7:75c9)
15:57:18 azeem joins (~azeem@176.201.11.138)
15:57:57 re101-bombay-4 joins (~re101-bom@2601:203:c200:d6f0:2d33:506:5f01:fb2c)
15:58:17 × jumper149 quits (~jumper149@80.240.31.34) (Quit: WeeChat 3.1)
16:00:01 ptr_frac7al joins (~longlong@user/ptr-frac7al/x-0038398)
16:03:07 MiguelNegrao joins (~MiguelNeg@2001:818:dc71:d100:9e5a:44ff:fe17:1240)
16:04:34 × ptr_frac7al quits (~longlong@user/ptr-frac7al/x-0038398) (Ping timeout: 252 seconds)
16:04:46 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
16:05:15 fengctor joins (~fengctor@bras-base-ngflon0508w-grc-11-76-68-2-143.dsl.bell.ca)
16:05:27 <MiguelNegrao> Hi. I'd like to define a function (Arrow a, Traversable f, more constraints here...) => t (a b c) -> a (t b) (t c) Are there constraints I can add to make this possible ?
16:05:49 × michalz quits (~michalz@185.246.204.126) (Remote host closed the connection)
16:05:59 <MiguelNegrao> I've already implemeted it for lists (requiring ArrowChoice)
16:06:35 <MiguelNegrao> and for vector-sized Vector (not requiring ArrrowChoice)
16:06:57 <MiguelNegrao> https://github.com/miguel-negrao/arrow-utils/blob/main/src/Control/Arrow/Utils.hs
16:09:00 × dunkeln_ quits (~dunkeln@188.70.10.207) (Ping timeout: 265 seconds)
16:09:26 <MiguelNegrao> it also looks similar to traverse' :: Traversable f => p a b -> p (f a) (f b) from profunctors
16:09:50 derelict joins (~derelict@user/derelict)
16:10:36 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds)
16:10:57 <amesgen[m]> Is there a "standard" `StateT`-ish transformer for `Quote` from recent template-haskell?
16:10:59 <jle`> MiguelNegrao: what do you want it to do?
16:11:21 _ht joins (~quassel@82-169-194-8.biz.kpn.net)
16:11:47 <MiguelNegrao> If I have a container of arrows, I want to create a new arrow that takes a container of inputs, applies each arrow to each input generating a container of outputs
16:12:16 <MiguelNegrao> It's useful for FRP stuff with arrows
16:13:33 <MiguelNegrao> On that link you can see it implemented for lists
16:13:58 <MiguelNegrao> It's called sequenceArrList
16:14:10 fef joins (~thedawn@user/thedawn)
16:16:32 × ubert quits (~Thunderbi@2a02:8109:9880:303c:ca5b:76ff:fe29:f233) (Remote host closed the connection)
16:17:09 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
16:17:53 × re101-bombay-4 quits (~re101-bom@2601:203:c200:d6f0:2d33:506:5f01:fb2c) (Quit: Client closed)
16:18:50 × isekaijin quits (~pyon@user/pyon) (Quit: WeeChat 3.2)
16:19:04 Deide joins (~Deide@217.155.19.23)
16:19:04 × Deide quits (~Deide@217.155.19.23) (Changing host)
16:19:04 Deide joins (~Deide@user/deide)
16:22:41 × fef quits (~thedawn@user/thedawn) (Remote host closed the connection)
16:23:26 fef joins (~thedawn@user/thedawn)
16:26:02 notzmv joins (~zmv@user/notzmv)
16:27:19 × Guest8466 quits (~Guest84@188.27.129.10) (Quit: Client closed)
16:27:37 hnOsmium0001 joins (uid453710@id-453710.stonehaven.irccloud.com)
16:28:55 × radw quits (~radw@user/radw) (Ping timeout: 246 seconds)
16:29:02 × azeem quits (~azeem@176.201.11.138) (Read error: Connection reset by peer)
16:30:04 radw joins (~radw@user/radw)
16:30:23 azeem joins (~azeem@dynamic-adsl-84-220-226-129.clienti.tiscali.it)
16:34:49 × kuribas quits (~user@ip-188-118-57-242.reverse.destiny.be) (Remote host closed the connection)
16:35:29 pfurla_ joins (~pfurla@216.151.180.130)
16:36:27 dunkeln joins (~dunkeln@188.70.10.207)
16:37:47 waleee joins (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
16:38:13 × pfurla quits (~pfurla@ool-182ed2e2.dyn.optonline.net) (Ping timeout: 246 seconds)
16:38:58 × nschoe quits (~quassel@178.251.84.79) (Ping timeout: 240 seconds)
16:40:07 × fendor quits (~fendor@178.165.171.166.wireless.dyn.drei.com) (Remote host closed the connection)
16:40:08 × chele quits (~chele@user/chele) (Remote host closed the connection)
16:41:36 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Remote host closed the connection)
16:43:35 × notzmv quits (~zmv@user/notzmv) (Remote host closed the connection)
16:47:47 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
16:48:43 × fengctor quits (~fengctor@bras-base-ngflon0508w-grc-11-76-68-2-143.dsl.bell.ca) (Read error: Connection reset by peer)
16:49:52 × yauhsien quits (~yauhsien@61-231-39-135.dynamic-ip.hinet.net) (Remote host closed the connection)
16:50:26 yauhsien joins (~yauhsien@61-231-39-135.dynamic-ip.hinet.net)
16:51:05 <exarkun> Anyone know how to get a non-Haskell dependency into the latest Haskell.nix-generated Nix expressions?
16:51:21 <exarkun> non-Haskell, non-nixpkgs
16:51:42 <exarkun> I have an overlay defining it that worked fine with older Haskell.nix but the new recommended default.nix doesn't have an obvious place for overlays
16:52:01 <exarkun> And jamming it in the non-obvious place leaves me with the failure "Setup: The pkg-config package 'libchallenge_bypass_ristretto_ffi' is required"
16:52:10 <exarkun> "but it could not be found"
16:53:36 chris-the-slurpa joins (~chris@cpc68332-cdif16-2-0-cust330.5-1.cable.virginm.net)
16:54:19 × radw quits (~radw@user/radw) (Ping timeout: 246 seconds)
16:54:37 <glguy> Using GHC-8.10.5 I seem to be getting messages like "Currently only 10 to 12 is supported. System LLVM version: 9.0.1" but I was under the impression LLVM-9 was the only one supported
16:55:05 × yauhsien quits (~yauhsien@61-231-39-135.dynamic-ip.hinet.net) (Ping timeout: 252 seconds)
16:55:42 radw joins (~radw@user/radw)
16:55:44 <glguy> I don't think these details matter, but: armv7l, running `cabal install cabal-install`, raspberry pi
17:00:02 beka joins (~beka@104.193.170-244.PUBLIC.monkeybrains.net)
17:00:19 × chris-the-slurpa quits (~chris@cpc68332-cdif16-2-0-cust330.5-1.cable.virginm.net) (Remote host closed the connection)
17:00:51 chris-the-slurpa joins (~chris@cpc68332-cdif16-2-0-cust330.5-1.cable.virginm.net)
17:01:04 <maerwald> it's just a GHC bug afair... the message is incorrect
17:02:02 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
17:03:48 × chris-the-slurpa quits (~chris@cpc68332-cdif16-2-0-cust330.5-1.cable.virginm.net) (Remote host closed the connection)
17:04:00 chris-the-slurpa joins (~chris@cpc68332-cdif16-2-0-cust330.5-1.cable.virginm.net)
17:04:53 × chris-the-slurpa quits (~chris@cpc68332-cdif16-2-0-cust330.5-1.cable.virginm.net) (Remote host closed the connection)
17:05:07 <glguy> maerwald: so I should stick with 9?
17:05:23 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Quit: WeeChat 3.2)
17:05:24 lavaman joins (~lavaman@98.38.249.169)
17:05:35 chris-the-slurpa joins (~chris@cpc68332-cdif16-2-0-cust330.5-1.cable.virginm.net)
17:05:52 <maerwald> glguy: https://gitlab.haskell.org/ghc/ghc/-/issues/19959
17:06:16 × chris-the-slurpa quits (~chris@cpc68332-cdif16-2-0-cust330.5-1.cable.virginm.net) (Remote host closed the connection)
17:06:22 <glguy> maerwald: thank you
17:06:29 chris-the-slurpa joins (~chris@cpc68332-cdif16-2-0-cust330.5-1.cable.virginm.net)
17:07:44 <monochrom> Nice, there will be a 8.10.6
17:09:11 × chris-the-slurpa quits (~chris@cpc68332-cdif16-2-0-cust330.5-1.cable.virginm.net) (Remote host closed the connection)
17:09:26 argento joins (~argent0@168-227-97-29.ptr.westnet.com.ar)
17:09:43 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 246 seconds)
17:10:29 × dunkeln quits (~dunkeln@188.70.10.207) (Ping timeout: 252 seconds)
17:10:30 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
17:10:30 × azeem quits (~azeem@dynamic-adsl-84-220-226-129.clienti.tiscali.it) (Ping timeout: 258 seconds)
17:10:36 × mikail quits (~mikail@2a02:c7f:bd83:fd00:55cf:122f:957a:f66f) (Ping timeout: 252 seconds)
17:11:05 × norias quits (~jaredm@c-98-219-195-163.hsd1.pa.comcast.net) (Quit: Leaving)
17:11:20 azeem joins (~azeem@176.201.13.131)
17:12:43 × rostero quits (uid236576@id-236576.tooting.irccloud.com) (Quit: Connection closed for inactivity)
17:13:22 × azeem quits (~azeem@176.201.13.131) (Read error: Connection reset by peer)
17:13:36 azeem joins (~azeem@dynamic-adsl-84-220-226-129.clienti.tiscali.it)
17:15:26 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
17:16:04 Atum_ joins (~IRC@user/atum/x-2392232)
17:18:19 norias joins (~jaredm@c-98-219-195-163.hsd1.pa.comcast.net)
17:18:26 × Obo quits (~roberto@70.pool90-171-81.dynamic.orange.es) (Quit: WeeChat 2.8)
17:19:36 Lycurgus joins (~juan@cpe-45-46-140-49.buffalo.res.rr.com)
17:21:01 yauhsien joins (~yauhsien@61-231-39-135.dynamic-ip.hinet.net)
17:21:11 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
17:22:28 rostero joins (uid236576@id-236576.tooting.irccloud.com)
17:23:15 × chomwitt quits (~Pitsikoko@athedsl-16082.home.otenet.gr) (Ping timeout: 252 seconds)
17:24:15 jneira[m] joins (~jneira@174.red-37-10-141.dynamicip.rima-tde.net)
17:25:21 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:cdb:cabc:a7c7:75c9) (Remote host closed the connection)
17:25:26 adanwan_ joins (~adanwan@gateway/tor-sasl/adanwan)
17:25:50 × yauhsien quits (~yauhsien@61-231-39-135.dynamic-ip.hinet.net) (Ping timeout: 258 seconds)
17:26:12 × adanwan quits (~adanwan@gateway/tor-sasl/adanwan) (Ping timeout: 244 seconds)
17:27:45 × fef quits (~thedawn@user/thedawn) (Quit: Leaving)
17:27:55 <maerwald> yeah, 8.10.5 was a bit of a rush
17:28:58 × argento quits (~argent0@168-227-97-29.ptr.westnet.com.ar) (Ping timeout: 240 seconds)
17:29:46 × xff0x quits (~xff0x@2001:1a81:539d:3600:7f6d:8918:f53:97d7) (Ping timeout: 240 seconds)
17:30:44 xff0x joins (~xff0x@2001:1a81:539d:3600:1c1d:c169:6e6:5e55)
17:31:07 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
17:31:46 × drd quits (~drd@2001:b07:a70:9f1f:1562:34de:f50f:77d4) (Ping timeout: 240 seconds)
17:33:47 nschoe joins (~quassel@2a01:e0a:8e:a190:180:9002:34a9:8370)
17:36:32 econo joins (uid147250@user/econo)
17:37:04 yauhsien joins (~yauhsien@61-231-39-135.dynamic-ip.hinet.net)
17:37:06 × jneira[m] quits (~jneira@174.red-37-10-141.dynamicip.rima-tde.net) (Remote host closed the connection)
17:40:11 <AWizzArd> If you want to do Single Sign-On with Microsoft Azure and Auth0 – which Haskell lib would you use? Something with OAuth 2 perhaps?
17:41:27 chris-the-slurpa joins (~chris@cpc68332-cdif16-2-0-cust330.5-1.cable.virginm.net)
17:41:57 × yauhsien quits (~yauhsien@61-231-39-135.dynamic-ip.hinet.net) (Ping timeout: 252 seconds)
17:42:37 dunkeln_ joins (~dunkeln@188.70.10.207)
17:42:37 × azeem quits (~azeem@dynamic-adsl-84-220-226-129.clienti.tiscali.it) (Ping timeout: 246 seconds)
17:44:40 azeem joins (~azeem@176.201.13.131)
17:46:45 × Kaiepi quits (~Kaiepi@nwcsnbsc03w-47-54-173-93.dhcp-dynamic.fibreop.nb.bellaliant.net) (Remote host closed the connection)
17:46:54 × nschoe quits (~quassel@2a01:e0a:8e:a190:180:9002:34a9:8370) (Ping timeout: 252 seconds)
17:46:54 Kaiepi joins (~Kaiepi@nwcsnbsc03w-47-54-173-93.dhcp-dynamic.fibreop.nb.bellaliant.net)
17:47:55 ahdyt joins (~ahdyt@103.105.35.90)
17:48:26 × ahdyt quits (~ahdyt@103.105.35.90) (Client Quit)
17:48:40 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:cdb:cabc:a7c7:75c9)
17:51:10 chomwitt joins (~Pitsikoko@athedsl-16082.home.otenet.gr)
17:52:04 sheepduck joins (~sheepduck@user/sheepduck)
17:52:58 × epolanski quits (uid312403@id-312403.brockwell.irccloud.com) (Quit: Connection closed for inactivity)
17:53:16 yauhsien joins (~yauhsien@61-231-39-135.dynamic-ip.hinet.net)
17:53:58 × chris-the-slurpa quits (~chris@cpc68332-cdif16-2-0-cust330.5-1.cable.virginm.net) (Remote host closed the connection)
17:55:03 × Kaiepi quits (~Kaiepi@nwcsnbsc03w-47-54-173-93.dhcp-dynamic.fibreop.nb.bellaliant.net) (Read error: Connection reset by peer)
17:55:16 Kaiepi joins (~Kaiepi@nwcsnbsc03w-47-54-173-93.dhcp-dynamic.fibreop.nb.bellaliant.net)
17:56:05 × hrnz quits (~ulli@irc.plumbing) (Quit: das ist mir zu bld hier; bb)
17:56:25 hrnz joins (~ulli@irc.plumbing)
17:57:30 × jolly quits (~jolly@208.180.97.158) (Quit: Connection closed)
17:58:14 × yauhsien quits (~yauhsien@61-231-39-135.dynamic-ip.hinet.net) (Ping timeout: 265 seconds)
17:59:26 × MiguelNegrao quits (~MiguelNeg@2001:818:dc71:d100:9e5a:44ff:fe17:1240) (Quit: Client closed)
18:00:08 × aman quits (~aman@user/aman) (Quit: aman)
18:00:53 ptr_frac7al joins (~longlong@user/ptr-frac7al/x-0038398)
18:05:22 × ptr_frac7al quits (~longlong@user/ptr-frac7al/x-0038398) (Ping timeout: 240 seconds)
18:05:29 shapr joins (~user@pool-100-36-247-68.washdc.fios.verizon.net)
18:06:02 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
18:07:05 pavonia joins (~user@user/siracusa)
18:09:15 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:cdb:cabc:a7c7:75c9) (Remote host closed the connection)
18:09:50 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:cdb:cabc:a7c7:75c9)
18:10:06 × y04nn quits (~y04nn@91.193.4.106) (Ping timeout: 268 seconds)
18:10:11 mikail joins (~mikail@2a02:c7f:bd83:fd00:55cf:122f:957a:f66f)
18:12:15 lortabac joins (~lortabac@95.138.56.124)
18:13:55 × azeem quits (~azeem@176.201.13.131) (Read error: Connection reset by peer)
18:14:07 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:cdb:cabc:a7c7:75c9) (Ping timeout: 246 seconds)
18:14:42 azeem joins (~azeem@dynamic-adsl-84-220-226-129.clienti.tiscali.it)
18:15:57 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
18:22:22 × Lycurgus quits (~juan@cpe-45-46-140-49.buffalo.res.rr.com) (Quit: Exeunt)
18:22:43 y04nn joins (~y04nn@91.193.4.106)
18:26:13 chris-the-slurpa joins (~chris@cpc68332-cdif16-2-0-cust330.5-1.cable.virginm.net)
18:27:01 × chris-the-slurpa quits (~chris@cpc68332-cdif16-2-0-cust330.5-1.cable.virginm.net) (Remote host closed the connection)
18:29:43 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
18:35:41 <Atum_> Hey, total newbie here, I'm trying to import a function from a second file (lib.hs) into my main, but I'm getting a variable not in scope error, whenever I try to call the function.. the paste is: https://paste.tomsmeding.com/EFLYwZDH
18:36:10 <Atum_> I'm using the vscode extension, and a stack default project
18:37:12 <sm[m]> hi Atum_ . double != doubleNum
18:37:22 <sm[m]> double != doubleFunc, rather
18:37:31 <AWizzArd> Yeah, try to call `doubleFunc` instead of `double`.
18:37:42 <Atum_> oh lol, yea
18:37:45 <Atum_> thanks
18:37:47 <AWizzArd> Atum_: line 7 in Main.hs looks problematic.
18:37:51 <sm[m]> 🦆
18:37:56 <Atum_> thanks duck
18:38:11 <AWizzArd> And: calling it may not do too many interesting things.
18:38:23 <Atum_> yea, I'm literally 15 mins into my haskell adventure
18:38:31 <AWizzArd> Excellent :)
18:38:33 <Atum_> I don't know how long it will last, lol
18:38:42 <sm[m]> a grand adventure begins!
18:38:47 <AWizzArd> At least you are trying it at all.
18:39:10 <AWizzArd> Perhaps you will get an error message. In that case try something like: let x = doubleFunc 2
18:39:46 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
18:40:03 <Atum_> Ok! thanks :)
18:40:26 <AWizzArd> Atum_: your adventure may lead you deep into that rabbit hole, and who knows, at the end you might be playing with injective type families and contravariant bifunctors.
18:43:10 <Atum_> AWizzArd: If I get this far it will be nice, haha
18:43:33 × y04nn quits (~y04nn@91.193.4.106) (Ping timeout: 252 seconds)
18:47:22 × mikail quits (~mikail@2a02:c7f:bd83:fd00:55cf:122f:957a:f66f) (Remote host closed the connection)
18:47:28 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
18:47:33 × lortabac quits (~lortabac@95.138.56.124) (Quit: WeeChat 2.8)
18:47:53 × norias quits (~jaredm@c-98-219-195-163.hsd1.pa.comcast.net) (Quit: Leaving)
18:48:08 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:cdb:cabc:a7c7:75c9)
18:48:16 y04nn joins (~y04nn@91.193.4.106)
18:48:30 × justsomeguy quits (~justsomeg@user/justsomeguy) (Quit: WeeChat 3.0.1)
18:49:30 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Read error: Connection reset by peer)
18:51:40 pjb joins (~pjb@user/pjb)
18:52:01 mikail joins (~mikail@90.212.77.3)
18:54:10 yauhsien joins (~yauhsien@61-231-39-135.dynamic-ip.hinet.net)
18:55:11 nschoe joins (~quassel@2a01:e0a:8e:a190:cd08:592:d0aa:def9)
18:57:18 Ariakenom joins (~Ariakenom@c83-255-154-140.bredband.tele2.se)
18:58:50 × yauhsien quits (~yauhsien@61-231-39-135.dynamic-ip.hinet.net) (Ping timeout: 252 seconds)
18:59:25 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:cdb:cabc:a7c7:75c9) (Remote host closed the connection)
18:59:56 × dunkeln_ quits (~dunkeln@188.70.10.207) (Read error: Connection reset by peer)
19:03:04 pfurla joins (~pfurla@ool-182ed2e2.dyn.optonline.net)
19:03:05 fengctor joins (~fengctor@bras-base-ngflon0508w-grc-11-76-68-2-143.dsl.bell.ca)
19:05:55 × pfurla_ quits (~pfurla@216.151.180.130) (Ping timeout: 246 seconds)
19:08:06 × vpan quits (~vilius@212.117.1.172) (Quit: Leaving.)
19:08:18 Kaipi joins (~Kaiepi@nwcsnbsc03w-47-54-173-93.dhcp-dynamic.fibreop.nb.bellaliant.net)
19:08:26 × Kaiepi quits (~Kaiepi@nwcsnbsc03w-47-54-173-93.dhcp-dynamic.fibreop.nb.bellaliant.net) (Read error: Connection reset by peer)
19:10:13 neceve joins (~quassel@2a02:c7f:607e:d600:f762:20dd:304e:4b1f)
19:11:40 <Boarders> is there a standard library function that returns from a list of lists all the longests lists?
19:11:53 <Boarders> I can do it with groupOn but wondering if there is something else
19:13:43 <adamse> Boarders: perhaps maximumBy
19:15:17 <adamse> nvm
19:18:28 × hewxle quits (~hewxle@user/hewxle) (Ping timeout: 265 seconds)
19:20:32 yauhsien joins (~yauhsien@61-231-39-135.dynamic-ip.hinet.net)
19:21:51 chris-the-slurpa joins (~chris@cpc68332-cdif16-2-0-cust330.5-1.cable.virginm.net)
19:24:58 MidAutumnMoon9 joins (~MidAutumn@user/midautumnmoon)
19:25:17 × chris-the-slurpa quits (~chris@cpc68332-cdif16-2-0-cust330.5-1.cable.virginm.net) (Remote host closed the connection)
19:25:34 ptr_frac7al joins (~longlong@user/ptr-frac7al/x-0038398)
19:25:40 × yauhsien quits (~yauhsien@61-231-39-135.dynamic-ip.hinet.net) (Ping timeout: 272 seconds)
19:25:57 argento joins (~argent0@168-227-97-29.ptr.westnet.com.ar)
19:27:56 × MidAutumnMoon quits (~MidAutumn@user/midautumnmoon) (Ping timeout: 256 seconds)
19:27:56 MidAutumnMoon9 is now known as MidAutumnMoon
19:29:30 MidAutumnMoon9 joins (~MidAutumn@user/midautumnmoon)
19:30:44 × ptr_frac7al quits (~longlong@user/ptr-frac7al/x-0038398) (Ping timeout: 272 seconds)
19:32:58 × MidAutumnMoon quits (~MidAutumn@user/midautumnmoon) (Ping timeout: 265 seconds)
19:36:29 lavaman joins (~lavaman@98.38.249.169)
19:37:57 × oxide quits (~lambda@user/oxide) (Quit: oxide)
19:37:58 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:cdb:cabc:a7c7:75c9)
19:41:42 <monochrom> Do you mind: first find the maximum length, then filter (\x -> length x == maxlength)?
19:42:41 <exarkun> Anyone know about Haskell.nix native dependencies? https://github.com/input-output-hk/haskell.nix/issues/1163
19:44:00 <Boarders> monochrom: probably the cleanest suggestion without simply writing the recursion by hand :)
19:47:52 ec joins (~ec@gateway/tor-sasl/ec)
19:50:57 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:cdb:cabc:a7c7:75c9) (Remote host closed the connection)
19:52:27 × fengctor quits (~fengctor@bras-base-ngflon0508w-grc-11-76-68-2-143.dsl.bell.ca) (Read error: Connection reset by peer)
19:52:39 × cheater quits (~Username@user/cheater) (Ping timeout: 258 seconds)
19:53:08 cheater joins (~Username@user/cheater)
19:54:53 epolanski joins (uid312403@id-312403.brockwell.irccloud.com)
19:57:55 × warnz quits (~warnz@2600:1700:77c0:5610:edd9:472d:4b89:9ab8) (Remote host closed the connection)
19:58:14 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:cdb:cabc:a7c7:75c9)
20:00:00 × xff0x quits (~xff0x@2001:1a81:539d:3600:1c1d:c169:6e6:5e55) (Ping timeout: 252 seconds)
20:00:15 jneira_ joins (~jneira_@217.red-81-39-172.dynamicip.rima-tde.net)
20:00:56 xff0x joins (~xff0x@2001:1a81:539d:3600:dd23:6975:e62a:a95)
20:06:02 × juhp quits (~juhp@128.106.188.66) (Ping timeout: 268 seconds)
20:07:03 juhp joins (~juhp@128.106.188.66)
20:08:01 × _ht quits (~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection)
20:08:44 × ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
20:09:09 ec joins (~ec@gateway/tor-sasl/ec)
20:11:40 × pbrisbin quits (~patrick@pool-173-49-147-28.phlapa.fios.verizon.net) (Quit: WeeChat 3.1)
20:20:28 autogenerated joins (~autogener@24.133.69.243)
20:24:08 autogenerated parts (~autogener@24.133.69.243) ()
20:30:30 add_alias-LUA joins (~add_alias@2601:203:c200:d6f0:2d33:506:5f01:fb2c)
20:30:34 <boxscape> Is the run time of a case expression roughly linear in the number of alternatives?
20:31:45 <sm[m]> the run time for selecting an alternative ?
20:32:22 <boxscape> yeah
20:33:26 × nschoe quits (~quassel@2a01:e0a:8e:a190:cd08:592:d0aa:def9) (Ping timeout: 252 seconds)
20:35:01 × beka quits (~beka@104.193.170-244.PUBLIC.monkeybrains.net) (Ping timeout: 268 seconds)
20:36:39 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
20:39:49 manually_generat joins (~manually_@24.133.69.243)
20:40:11 × manually_generat quits (~manually_@24.133.69.243) (Client Quit)
20:40:46 manually_generat joins (~manually_@24.133.69.243)
20:41:02 × manually_generat quits (~manually_@24.133.69.243) (Client Quit)
20:41:48 manually_generat joins (~manually_@24.133.69.243)
20:44:27 × chexum quits (~chexum@gateway/tor-sasl/chexum) (Quit: -)
20:46:01 × cheater quits (~Username@user/cheater) (Ping timeout: 246 seconds)
20:46:35 <veverak> hmm how to easily convert UTCTime into a epoch time? preferably as Float
20:46:38 cheater joins (~Username@user/cheater)
20:47:55 acidjnk_new joins (~acidjnk@p200300d0c72b9526e1b6d7c282fb2b66.dip0.t-ipconnect.de)
20:48:40 chexum joins (~chexum@gateway/tor-sasl/chexum)
20:49:00 × add_alias-LUA quits (~add_alias@2601:203:c200:d6f0:2d33:506:5f01:fb2c) (Quit: Client closed)
20:52:43 × rostero quits (uid236576@id-236576.tooting.irccloud.com) (Quit: Connection closed for inactivity)
20:54:11 manually_generat is now known as sonat_suer
20:55:00 hatz_ parts (~user@2a05:f480:1400:f44:5400:3ff:fe6d:f349) ()
20:55:48 × Ariakenom quits (~Ariakenom@c83-255-154-140.bredband.tele2.se) (Remote host closed the connection)
20:56:06 Ariakenom joins (~Ariakenom@c83-255-154-140.bredband.tele2.se)
20:56:15 Sgeo_ joins (~Sgeo@user/sgeo)
20:56:18 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
20:56:40 <sonat_suer> /msg NickServ VERIFY REGISTER sonat_suer MiYQCEEiJNiDSYo6
20:56:47 × dhouthoo quits (~dhouthoo@178-117-36-167.access.telenet.be) (Quit: WeeChat 3.1)
20:57:58 × stianhj quits (~stianhj@128.199.58.13) (Quit: The Lounge - https://thelounge.chat)
20:58:38 hewxle joins (~hewxle@user/hewxle)
20:59:32 × mikoto-chan quits (~mikoto-ch@ip-213-49-189-31.dsl.scarlet.be) (Quit: mikoto-chan)
20:59:49 mikoto-chan joins (~mikoto-ch@ip-213-49-189-31.dsl.scarlet.be)
21:00:49 <glguy> sonat_suer: You'll need to send that one-time use verification code without the leading space
21:01:18 <veverak> hmm, float is meh
21:01:24 <boxscape> @hoogle Either a1 b -> Either a2 b -> Either a1 b
21:01:25 <lambdabot> No results found
21:01:30 <boxscape> :(
21:01:34 <veverak> so the question is actually simple, how to get milliseconds epoch time from UTCTime?
21:01:57 <Rembane> veverak: Do you use any package for your time?
21:02:11 <veverak> I am getting data as Data.Time.Clock.UTCTime
21:02:13 <veverak> that's all
21:02:25 <glguy> You'd use utcTimeToPOSIXSeconds first
21:02:49 × hewxle quits (~hewxle@user/hewxle) (Ping timeout: 246 seconds)
21:02:54 <glguy> realToFrac :: NominalDiffTime -> Float
21:03:03 <glguy> and then you could convert to seconds like that
21:03:08 × Ariakenom quits (~Ariakenom@c83-255-154-140.bredband.tele2.se) (Ping timeout: 252 seconds)
21:03:30 <veverak> oh
21:03:45 <veverak> the fact that nominalDiffTimeToSeconds returns `Pico` is hella confusing
21:03:58 <boxscape> is there a better way to write this? either (const $ r str) Right (l str)
21:04:32 <glguy> A Float is probably too imprecise to be all that useful, though
21:05:25 <veverak> yeah
21:08:59 gioyik joins (~gioyik@gateway/tor-sasl/gioyik)
21:10:47 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
21:13:42 × neceve quits (~quassel@2a02:c7f:607e:d600:f762:20dd:304e:4b1f) (Ping timeout: 252 seconds)
21:13:58 × maf654321 quits (~maf654321@user/maf654321) (Ping timeout: 272 seconds)
21:16:00 re101-bombay-30 joins (~re101-bom@2601:203:c200:d6f0:2d33:506:5f01:fb2c)
21:18:02 <AWizzArd> About Channels (i.e. Control.Concurrent.Chan): I can do a blocking `readChan` to wait until some data becomes available. But: can I also wait for multiple channels at the same time, and unblock as soon as one of them has data?
21:20:15 <hpc> if you don't mind the seemingly frivolous use of threads, you can have a thread for each Chan feeding into a combined Chan that your main thread waits on
21:20:28 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Remote host closed the connection)
21:21:59 <AWizzArd> I wonder if one could add an Alternative implementation that in a way monoidically combines all chans into a single one.
21:22:00 yauhsien joins (~yauhsien@61-231-39-135.dynamic-ip.hinet.net)
21:22:28 jolly joins (~jolly@208.180.97.158)
21:22:29 <AWizzArd> (value, chanThatReadData) <- readChan c1 <|> readChan c2 <|> readChan c3
21:23:53 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:cdb:cabc:a7c7:75c9) (Remote host closed the connection)
21:24:25 <monochrom> IO's <|> doesn't do that.
21:24:32 <monochrom> But STM's <|> does.
21:24:48 <monochrom> A good reason to switch to TChan.
21:26:24 ptr_frac7al joins (~longlong@user/ptr-frac7al/x-0038398)
21:26:34 × yauhsien quits (~yauhsien@61-231-39-135.dynamic-ip.hinet.net) (Ping timeout: 258 seconds)
21:28:04 drd joins (~drd@93-39-151-19.ip76.fastwebnet.it)
21:28:10 Erutuon joins (~Erutuon@user/erutuon)
21:28:11 <monochrom> BTW most of the complaints against Haskell's time package are only because people mistake "used to the C unix way" for "the C unix way is right".
21:28:25 <monochrom> No, Haskell's time package is the one that does it right.
21:28:52 <maerwald> I don't even know what time is... and computers can freely navigate into future and past. It's all over.
21:30:29 spruit11_ joins (~quassel@2a02:a467:ccd6:1:f403:cf1e:97b5:1c9b)
21:31:23 × ptr_frac7al quits (~longlong@user/ptr-frac7al/x-0038398) (Ping timeout: 265 seconds)
21:32:42 × drd quits (~drd@93-39-151-19.ip76.fastwebnet.it) (Ping timeout: 258 seconds)
21:33:04 re101-bombay-30 parts (~re101-bom@2601:203:c200:d6f0:2d33:506:5f01:fb2c) ()
21:33:44 × spruit11 quits (~quassel@2a02:a467:ccd6:1:d8ed:8d81:7c94:d830) (Ping timeout: 256 seconds)
21:34:01 <boxscape> Am I missing some indentation rule here? I'm pretty confused about the first one not working https://paste.tomsmeding.com/ptyYkVPO
21:34:13 <boxscape> err, the second one not working
21:34:21 <AWizzArd> maerwald: 12 minutes that help you to see more into time and understand why currently you move with speed of light: https://www.youtube.com/watch?v=au0QJYISe4c
21:34:30 <monochrom> Yes, there were famous DOS shareware programs that had expiry dates unless you pay up. People who didn't want to pay pulled the simple trick of setting the computer clock to the past.
21:34:56 <maerwald> that's an actual HACK
21:36:37 <boxscape> oh actually
21:36:51 <boxscape> I had indented the second one one space more than in the paste
21:36:58 <boxscape> s/second/first
21:37:09 <boxscape> and the second one also works if I indent it one space further
21:37:19 <boxscape> though that still seems strange...
21:37:40 <boxscape> err, hold on
21:37:52 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
21:37:56 <boxscape> I think I'm just getting confused by how my font's italics look like they're one space further to the right than they are
21:38:17 <monochrom> fancy
21:38:41 <boxscape> I should probably turn off italics for syntax highlighting...
21:40:42 hewxle joins (~hewxle@user/hewxle)
21:40:52 × spruit11_ quits (~quassel@2a02:a467:ccd6:1:f403:cf1e:97b5:1c9b) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
21:41:14 spruit11 joins (~quassel@2a02:a467:ccd6:1:f403:cf1e:97b5:1c9b)
21:41:19 × hiruji quits (~hiruji@user/hiruji) (Ping timeout: 246 seconds)
21:42:05 × tcard quits (~tcard@p2307053-ipngn17101hodogaya.kanagawa.ocn.ne.jp) (Quit: Leaving)
21:42:30 hiruji joins (~hiruji@user/hiruji)
21:45:45 tcard joins (~tcard@p2307053-ipngn17101hodogaya.kanagawa.ocn.ne.jp)
21:46:34 × amahl quits (~amahl@dsl-jklbng12-54fbca-64.dhcp.inet.fi) (Remote host closed the connection)
21:48:17 justsomeguy joins (~justsomeg@user/justsomeguy)
21:49:53 <lechner> Hi, is cabal really preferred over stack again? (Sorry, no flame intended; this channel is civilized, anyway.) Thanks!
21:50:53 <monochrom> I prefer cabal. I can't speak for others.
21:50:54 <geekosaur> cabal's problems were solved with cabal 2; we're on cabal 3.4 now
21:51:27 <lechner> okay, i am totally behind the times
21:51:37 <monochrom> In fact, it can get down to the point you really have to ask yourself what you want, not what other people want.
21:52:16 <monochrom> I prefer cabal because it doesn't install ghc. Other people prefer stack because it does install ghc. There is no way you can win.
21:52:43 × Vajb quits (~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi) (Remote host closed the connection)
21:52:48 notzmv joins (~zmv@user/notzmv)
21:53:04 maf654321 joins (~maf654321@user/maf654321)
21:53:13 <monochrom> And why doesn't someone bring nix to the debate...
21:53:34 <Rembane> nix will solve all problems! <- there, is fix
21:53:41 <justsomeguy> Which one is preferred is subjective, but I think it's safe to say that cabal has implemented many features that used to be exclusive to stack. A few features that I have in mind when saying that are project local builds and caching of libraries shared between projects.
21:53:42 <monochrom> Just to celebrate diversity and free will.
21:53:43 Vajb joins (~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi)
21:54:18 <monochrom> I meta-prefer a free country.
21:54:37 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 246 seconds)
21:56:56 <Rembane> IIRC weeder needs stack and weeder is useful, so that's a + for stack.
21:57:46 × argento quits (~argent0@168-227-97-29.ptr.westnet.com.ar) (Ping timeout: 246 seconds)
21:58:24 warnz joins (~warnz@2600:1700:77c0:5610:edd9:472d:4b89:9ab8)
21:59:29 × gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving)
22:01:50 zebrag joins (~chris@user/zebrag)
22:02:32 × warnz quits (~warnz@2600:1700:77c0:5610:edd9:472d:4b89:9ab8) (Ping timeout: 252 seconds)
22:02:34 <maerwald> Rembane: huh? weeder uses .hie files afaik
22:02:58 <maerwald> https://github.com/ocharles/weeder#cabal
22:03:44 fengctor joins (~fengctor@2605:b100:312:5480:61be:31c7:ea04:6c10)
22:03:54 × mikoto-chan quits (~mikoto-ch@ip-213-49-189-31.dsl.scarlet.be) (Ping timeout: 252 seconds)
22:04:03 falafel joins (~falafel@pool-96-255-70-50.washdc.fios.verizon.net)
22:04:35 <jle`> i kind of like stackage
22:04:58 Lycurgus joins (~juan@cpe-45-46-140-49.buffalo.res.rr.com)
22:05:00 <jle`> but not necessarily stack
22:05:24 <jle`> er, not that i don't like it, just that i'm not too sold on the value prop over cabal. but the idea of a consistent package set is nice to me
22:05:27 × fengctor quits (~fengctor@2605:b100:312:5480:61be:31c7:ea04:6c10) (Read error: Connection reset by peer)
22:05:45 <maerwald> stackage breaks down if you manage to pull in two versions of one package, no?
22:06:05 <Rembane> maerwald: That's good. Then I'm misinformed. Remove that plus from stack. :)
22:06:07 <jle`> i think it's supposed to guard against that sort of thing?
22:06:10 × cheater quits (~Username@user/cheater) (Ping timeout: 246 seconds)
22:06:20 <maerwald> I think they just disable all sorts of tests to avoid it?
22:06:47 cheater joins (~Username@user/cheater)
22:06:57 <geekosaur> I thought that described nix, not stack
22:07:23 <jle`> yeah, stack+stackage etc. resolves all the deps before any building
22:07:24 <maerwald> I'm not sure if a static package set is the answer... what about stable hackage vs unstable hackage? It's doable
22:08:03 <jle`> is that the idea of stackage LTS?
22:08:04 <AWizzArd> Single Sign-On: what Haskell Lib would you use to do this? Did you implement it in your web app?
22:08:05 <monochrom> hackage is really too large.
22:08:36 <maerwald> jle`: no, it's basically how gentoo manages arch vs ~arch since 2 decades
22:08:38 <jle`> in any case i stopped putting my packages onto stackage a while ago so maybe i can't really vouch for it anymore anyway
22:08:58 <maerwald> gentoo is larger than hackage :p
22:09:33 <AWizzArd> Aren’t people complaining all the time that Haskell has too few libs, i.e. implicitly that Hackage is too small?
22:09:51 <maerwald> I don't think it's an engineering problem. It's a social and a manpower one
22:09:58 <maerwald> workflow as well
22:09:59 <geekosaur> that's really saying "it doesn't have this one lib I think I want"
22:10:10 <monochrom> Aren't people complaining about everything.
22:10:22 × Lycurgus quits (~juan@cpe-45-46-140-49.buffalo.res.rr.com) (Quit: Exeunt)
22:10:23 <AWizzArd> monochrom: are you complaining about this? ;)
22:10:31 <monochrom> Yes!
22:10:44 <maerwald> AWizzArd: are you complaining about monochrom complaining?
22:10:48 <monochrom> And also programmer hypocricy, yes.
22:11:03 <jle`> imagine being so self-aware
22:11:10 <jle`> couldnt be me
22:11:16 <AWizzArd> maerwald: what question is this... do I smell a complaint here?
22:11:31 <maerwald> just hard facts!
22:11:46 <AWizzArd> maerwald: have you done SSO yet?
22:12:00 <maerwald> wut?
22:12:04 <monochrom> For example Haskell devs on Windows complaining "GHC WIndows version not ready for prime time, this is why low real-world adoption" yada yada
22:12:05 <AWizzArd> Single Sign-On.
22:12:47 <monochrom> That's a disguised way of saying "you should work for free so that I can use your GHC for profit"
22:13:03 <maerwald> AWizzArd: no. That sounds complicated. I usually avoid those things.
22:14:56 <maerwald> monochrom: I've experienced windows users as very helpful. At least in #powershell
22:15:12 <monochrom> I don't know of single-sign-on either. Can't help you there.
22:15:18 <AWizzArd> k
22:15:44 <maerwald> They are also less cocky than linux users :>
22:15:51 Ariakenom joins (~Ariakenom@c83-255-154-140.bredband.tele2.se)
22:16:16 <lechner> or maybe just older?
22:16:26 <maerwald> But I have no idea how any of that relates to "real-world adoption"
22:17:00 <monochrom> "real-world adoption" is just a facade for "I can make money", as explained.
22:17:23 <monochrom> likewise "too few libraries" just mean "doesn't have the one I want".
22:17:28 × stefan-_ quits (~cri@42dots.de) (Ping timeout: 252 seconds)
22:17:48 <monochrom> People ought to hide their hidden agendas, right? Must talk big and grand and selfless.
22:17:59 <maerwald> haskell is used either by ppl who have very strong opinions, or by people who have so much money that they don't care what their engineering team does... so yeah
22:21:56 stefan-_ joins (~cri@42dots.de)
22:22:01 argento joins (~argent0@168-227-97-29.ptr.westnet.com.ar)
22:22:52 yauhsien joins (~yauhsien@61-231-39-135.dynamic-ip.hinet.net)
22:23:10 × Vajb quits (~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi) (Remote host closed the connection)
22:23:46 Vajb joins (~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi)
22:24:22 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:cdb:cabc:a7c7:75c9)
22:24:54 × forell quits (~forell@user/forell) (Ping timeout: 272 seconds)
22:24:55 × argento quits (~argent0@168-227-97-29.ptr.westnet.com.ar) (Client Quit)
22:26:22 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
22:27:24 × yauhsien quits (~yauhsien@61-231-39-135.dynamic-ip.hinet.net) (Ping timeout: 252 seconds)
22:28:34 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:cdb:cabc:a7c7:75c9) (Ping timeout: 246 seconds)
22:29:24 forell joins (~forell@user/forell)
22:29:56 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:cdb:cabc:a7c7:75c9)
22:30:16 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
22:30:21 Guest65 joins (~Guest65@50.47.115.102)
22:31:18 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Remote host closed the connection)
22:31:28 <Guest65> What's the most readable way to format if-then-else blocks?
22:31:47 <Guest65> e.g.
22:31:59 <Guest65> "if c
22:32:08 <Guest65> then 1
22:32:08 <monochrom> Very often guards are much more formattable than if-then-else.
22:32:41 <Rembane> Each of the keywords on a line each, with "then" and "else" indented some spaces.
22:32:54 × justsomeguy quits (~justsomeg@user/justsomeguy) (Ping timeout: 252 seconds)
22:32:58 warnz joins (~warnz@2600:1700:77c0:5610:edd9:472d:4b89:9ab8)
22:33:03 <dibblego> bool f t p
22:33:49 × acidjnk_new quits (~acidjnk@p200300d0c72b9526e1b6d7c282fb2b66.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
22:33:54 <Guest65> if cond
22:33:55 <Guest65> then foo
22:33:55 <Guest65> else bar
22:33:57 <Guest65> like this?
22:33:57 <monochrom> In simple cases if-then-else is still pretty formattable. In that case, really anything that both looks nice to you and accepted by the parser is good. You don't need perfection, so don't ask.
22:34:09 <Rembane> Guest65: yup or what monochrom said
22:34:21 <Rembane> Guest65: I usually use a code formatter and don't think more about it
22:34:39 × Guest65 quits (~Guest65@50.47.115.102) (Client Quit)
22:34:51 <monochrom> And even for perfectionists there are much more pressing concerns than mere syntax.
22:34:52 justsomeguy joins (~justsomeg@user/justsomeguy)
22:35:00 Guest65 joins (~Guest65@50.47.115.102)
22:35:17 <Guest65> ok
22:35:29 × Guest65 quits (~Guest65@50.47.115.102) (Client Quit)
22:35:33 × motte_ quits (~weechat@82.131.107.112.cable.starman.ee) (Quit: WeeChat 1.9.1)
22:37:18 × warnz quits (~warnz@2600:1700:77c0:5610:edd9:472d:4b89:9ab8) (Ping timeout: 252 seconds)
22:39:58 beka joins (~beka@104.193.170-244.PUBLIC.monkeybrains.net)
22:42:05 × y04nn quits (~y04nn@91.193.4.106) (Ping timeout: 258 seconds)
22:43:42 × chexum quits (~chexum@gateway/tor-sasl/chexum) (Quit: No Ping reply in 180 seconds.)
22:45:39 y04nn joins (~y04nn@91.193.4.106)
22:45:51 chexum joins (~chexum@gateway/tor-sasl/chexum)
22:46:29 nighmi joins (~felix@port-92-196-116-190.dynamic.as20676.net)
22:51:07 warnz joins (~warnz@2600:1700:77c0:5610:edd9:472d:4b89:9ab8)
22:52:58 × epolanski quits (uid312403@id-312403.brockwell.irccloud.com) (Quit: Connection closed for inactivity)
22:53:02 × Kaipi quits (~Kaiepi@nwcsnbsc03w-47-54-173-93.dhcp-dynamic.fibreop.nb.bellaliant.net) (Remote host closed the connection)
22:53:21 Kaipi joins (~Kaiepi@nwcsnbsc03w-47-54-173-93.dhcp-dynamic.fibreop.nb.bellaliant.net)
22:53:23 × turlando quits (~turlando@user/turlando) (Remote host closed the connection)
22:53:54 Sgeo joins (~Sgeo@user/sgeo)
22:53:58 × Sgeo_ quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
22:54:16 × Ariakenom quits (~Ariakenom@c83-255-154-140.bredband.tele2.se) (Read error: Connection reset by peer)
22:55:22 × warnz quits (~warnz@2600:1700:77c0:5610:edd9:472d:4b89:9ab8) (Ping timeout: 240 seconds)
22:56:21 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
23:00:34 × hewxle quits (~hewxle@user/hewxle) (Read error: Connection reset by peer)
23:00:56 Ariakenom joins (~Ariakenom@c83-255-154-140.bredband.tele2.se)
23:01:12 <maerwald> I recently started to use more let bindings in guards
23:01:31 × y04nn quits (~y04nn@91.193.4.106) (Remote host closed the connection)
23:02:55 <maerwald> xs | let h = head xs
23:02:57 <maerwald> , (Just _) <- foo -> f h
23:03:10 × Vajb quits (~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi) (Remote host closed the connection)
23:03:37 × sayola quits (~vekto@dslb-088-078-152-192.088.078.pools.vodafone-ip.de) (Read error: Connection reset by peer)
23:03:57 <maerwald> this scopes the `h` for both the pattern match and the result side
23:03:58 <mniip> xs | h <- head xs, Just _ <- foo -> f h
23:04:29 <maerwald> right, also can
23:04:33 × sonat_suer quits (~manually_@24.133.69.243) (Quit: Client closed)
23:05:10 <maerwald> let's bikeshed which one is more readable
23:05:25 <mniip> flip f x (f -> g) | (g -> r) <- x = r
23:05:30 vish joins (~igloo@24.130.32.174)
23:07:16 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
23:07:35 Vajb joins (~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi)
23:08:26 × vish quits (~igloo@24.130.32.174) (Remote host closed the connection)
23:11:58 ptr_frac7al joins (~longlong@user/ptr-frac7al/x-0038398)
23:12:53 Atum__ joins (~IRC@user/atum/x-2392232)
23:13:01 × Atum_ quits (~IRC@user/atum/x-2392232) (Ping timeout: 246 seconds)
23:16:54 × mud quits (~mud@user/kadoban) (Ping timeout: 252 seconds)
23:19:41 × Ariakenom quits (~Ariakenom@c83-255-154-140.bredband.tele2.se) (Quit: Leaving)
23:21:52 × nighmi quits (~felix@port-92-196-116-190.dynamic.as20676.net) (Quit: WeeChat 3.0.1)
23:23:41 yauhsien joins (~yauhsien@61-231-39-135.dynamic-ip.hinet.net)
23:23:57 × adanwan_ quits (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection)
23:24:12 adanwan joins (~adanwan@gateway/tor-sasl/adanwan)
23:25:09 × Gurkenglas quits (~Gurkengla@dslb-002-203-144-156.002.203.pools.vodafone-ip.de) (Ping timeout: 252 seconds)
23:28:21 × yauhsien quits (~yauhsien@61-231-39-135.dynamic-ip.hinet.net) (Ping timeout: 265 seconds)
23:29:01 sonat_suer joins (~sonat_sue@24.133.69.243)
23:29:37 × sonat_suer quits (~sonat_sue@24.133.69.243) (Client Quit)
23:29:59 thelounge923068 joins (~thelounge@69.234.40.90)
23:31:09 × thelounge92306 quits (~thelounge@cpe-75-85-161-60.san.res.rr.com) (Ping timeout: 258 seconds)
23:31:52 dajoer joins (~david@user/gvx)
23:32:11 × ptr_frac7al quits (~longlong@user/ptr-frac7al/x-0038398) (Ping timeout: 252 seconds)
23:36:03 ptr_frac7al joins (~longlong@user/ptr-frac7al/x-0038398)
23:38:01 × chomwitt quits (~Pitsikoko@athedsl-16082.home.otenet.gr) (Ping timeout: 265 seconds)
23:41:52 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
23:43:48 × mikail quits (~mikail@90.212.77.3) (Ping timeout: 258 seconds)
23:43:51 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 252 seconds)
23:44:37 thelounge9230681 joins (~thelounge@cpe-75-85-161-60.san.res.rr.com)
23:45:12 × Tuplanolla quits (~Tuplanoll@91-159-68-239.elisa-laajakaista.fi) (Quit: Leaving.)
23:46:37 × thelounge923068 quits (~thelounge@69.234.40.90) (Ping timeout: 246 seconds)
23:47:53 <lechner> Hi, I am trying to follow "Structure of a simple project" here, and have 'cabal-install version 3.4.0.0', but i get 'cabal: unrecognised command: sandbox (try --help)'. Any pointers would be appreciated. Thanks! https://wiki.haskell.org/How_to_write_a_Haskell_program
23:49:03 <geekosaur> sandboxes were removed in 3.4, they were a temporary workaround until cabal got proper project support. (evidently someone needs to update the wiki)
23:49:12 <Axman6> I think the sandbox stuff is basically what the cabal new-* commands do be default
23:49:18 <monochrom> sandbox is not a v2 thing. cabal-install 3.4 is a step towards removing v1 features, this is the first one to go.
23:49:38 <lechner> bummer, i just upgraded from 3.0 because that did not have it either
23:50:04 <monochrom> I am too disilluioned to help keep the haskell wiki up to date.
23:50:31 <lechner> no need. i just need some quick help here please
23:50:58 <monochrom> Just ignore sandboxing commands?
23:51:54 <monochrom> To a large extent, you need know only two commands.
23:52:18 <monochrom> For playing with a package in a REPL: cabal repl
23:52:28 <monochrom> For installing an executable: cabal install
23:52:46 <monochrom> "configure" and "build" are already implied.
23:53:28 <lechner> why does Haq.hs from the wiki speficy base < 4.8 please
23:53:36 <lechner> specify
23:54:04 <monochrom> conservativeness and not knowing the future? (who does?)
23:54:24 <monochrom> I mean since it is now very clear that the article is at least like 10 years old.
23:55:00 <geekosaur> not going to be clear to a newcomer who has no idea what base versions map to what
23:55:09 <geekosaur> or cabal's history
23:55:42 <monochrom> But semantic versioning is widely known.
23:56:54 <lechner> it works without

All times are in UTC on 2021-07-07.