Home liberachat/#haskell: Logs Calendar

Logs on 2022-11-11 (liberachat/#haskell)

00:00:17 <monochrom> Especially politicians and management types who really love to make things more difficult.
00:00:32 <hpc> this is why i only use zygohistomorphic prepromorphisms
00:01:31 <EvanR> way back in the day the very first thing I read about monads was that they are difficult. I think it was on a wikipedia article. Now I know this is terrible writing, it's like buying a d&d adventure module and it tells you to tell the players how they feel about some room or character when they encounter it
00:02:05 <EvanR> for the first time
00:02:15 <EvanR> (which is a thing, and it's terrible)
00:02:35 <monochrom> D&D is easy compared to MtG :)
00:02:39 <hpc> D&D's a fun analogy there, sometimes you get things like
00:02:39 × mncheck quits (~mncheck@193.224.205.254) (Ping timeout: 260 seconds)
00:02:47 <hpc> "you enter the room, there is nothing in the left corner"
00:02:58 <hpc> "i search the left corner" *d20*
00:03:37 <dolio> Is it? They seem pretty dissimilar.
00:04:00 Inst joins (~Liam@c-73-156-203-163.hsd1.fl.comcast.net)
00:04:00 <dolio> Oh, "easy compared to," not, "easily compared to."
00:05:09 <EvanR> at the very least the writer should do their best with a technical guide and let the reader decide if it's hard, whatever that means for them
00:05:35 <EvanR> do your best to put d&d players in a RPG moment, and let them come to their own conclusions about something
00:06:21 <EvanR> d&d is probably not the most widely applicable version of this principle but that's all I got
00:08:20 ski . o O ( "Warum soll man es einfach machen, wenn man es so schän kompliziert machen kann ?" )
00:09:01 <ski> (also easy resp. hard vs. simple resp. complicated)
00:09:20 <zzz> any reason why `(!)` isn't a method of `IsList`?
00:09:40 <Axman6> with what type?
00:09:56 × motherfsck quits (~motherfsc@user/motherfsck) (Ping timeout: 248 seconds)
00:10:05 <Axman6> not all IsList instances are indexable with Ints meaningfully, Map has an IsList instance
00:10:11 <Axman6> and HashMap
00:10:41 <zzz> oh i see
00:10:46 <zzz> right ou are
00:10:49 × Kaiepi quits (~Kaiepi@108.175.84.104) (Ping timeout: 260 seconds)
00:11:01 ski idly wonders what the `fromListN' was for
00:11:26 <c_wraith> I guess for literals where the length is known at compile time
00:11:29 <dolio> Lets you allocate storage without using length.
00:11:42 <Axman6> it's for list literals, if you have OverloadedLists enabled, the compiler will replace [1,2,3] with fromListN 3 [1,2,3]
00:11:44 <ski> ah. makes sense
00:11:55 <zzz> i guess i was expecting `list ! n = toList list !! n
00:12:07 <ski> yea, but it had both `fromList' and `fromListN'
00:12:50 freeside joins (~mengwong@bb115-66-48-84.singnet.com.sg)
00:13:13 <Axman6> sometimes the length isn't known I guess
00:13:19 <zzz> ^
00:13:22 InstX1 joins (~Liam@2603:3017:1052:8000:70c9:7477:6d43:4c0d)
00:13:27 <monochrom> Right, IsList is for converting a list-syntax literal to your type, not for accessing your type.
00:14:14 <monochrom> To be sure the wording "is list" doesn't say all that.
00:14:29 <monochrom> Generally don't trust human-chosen names.
00:14:33 <geekosaur> was cribbed from IsString for OverloadedStrings
00:14:55 <geekosaur> then again the granddady of these uses Num
00:15:29 <zzz> OverloadedNumbers
00:17:13 × Inst quits (~Liam@c-73-156-203-163.hsd1.fl.comcast.net) (Ping timeout: 252 seconds)
00:17:56 <hpc> that should be an extension just so we can turn off numeric literals working sanely :D
00:18:15 <hpc> like now NPlusK became an "extension"
00:19:10 <davean> {-# LANGUAGE NoNumbers #-}
00:19:21 Feuermagier joins (~Feuermagi@user/feuermagier)
00:19:26 <davean> Just turn of numeric litterals entirely.
00:20:25 ski . o O ( s/extension/intension/ ? )
00:21:19 × werneta quits (~werneta@137.79.216.58) (Ping timeout: 260 seconds)
00:21:42 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:a09f:2a20:ea37:7e61)
00:22:18 <Axman6> {-# LANGUAGE ChurchNumeralsOnly #-}
00:23:02 <Axman6> (\f x -> f . f . f $ x) + (\f x -> f . f . f . f . f $ x)
00:23:21 <hpc> {-# LANGUAGE ChurchFloats #-}
00:23:27 <hpc> gotta build all your numbers out of epsilon
00:23:44 motherfsck joins (~motherfsc@user/motherfsck)
00:23:48 <Axman6> ... it's only just occured to me that if you have (.), then chruch numerals just become (\f -> f.f.f)
00:24:03 <Axman6> am I dumb? Perhaps
00:25:37 × Tuplanolla quits (~Tuplanoll@91-159-68-194.elisa-laajakaista.fi) (Quit: Leaving.)
00:25:52 <dolio> That's because you picked the wrong argument order.
00:26:01 × caubert quits (~caubert@user/caubert) (Read error: Software caused connection abort)
00:26:03 <dolio> You should pick the one that forces you to write eta-long numerals.
00:26:20 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:a09f:2a20:ea37:7e61) (Ping timeout: 260 seconds)
00:27:20 <dolio> So you never get confused about different normal forms.
00:28:23 caubert joins (~caubert@user/caubert)
00:30:03 × chomwitt quits (~chomwitt@2a02:587:7a0a:c00:1ac0:4dff:fedb:a3f1) (Ping timeout: 248 seconds)
00:31:42 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
00:32:37 <int-e> > let church n f x = iterate f x !! n in church 4 (church 3) (+1) 0
00:32:38 <lambdabot> 81
00:34:02 caryhartline joins (~caryhartl@2600:1700:2d0:8d30:9887:b652:159c:4200)
00:38:09 chromoblob joins (~user@37.113.164.122)
00:40:01 <zzz> i like this talk https://www.youtube.com/watch?v=jFk1qpr1ytk is this an abandoned idea?
00:43:22 × chromoblob quits (~user@37.113.164.122) (Ping timeout: 268 seconds)
00:46:10 × InstX1 quits (~Liam@2603:3017:1052:8000:70c9:7477:6d43:4c0d) (Ping timeout: 260 seconds)
00:54:44 elevenkb joins (~elevenkb@105.184.125.168)
01:00:24 × Neuromancer quits (~Neuromanc@user/neuromancer) (Ping timeout: 260 seconds)
01:10:12 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
01:12:23 jargon joins (~jargon@184.101.188.35)
01:15:20 × freeside quits (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 260 seconds)
01:15:30 werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
01:16:19 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
01:18:45 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
01:18:45 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
01:19:53 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
01:19:59 azimut joins (~azimut@gateway/tor-sasl/azimut)
01:21:46 freeside joins (~mengwong@bb115-66-48-84.singnet.com.sg)
01:22:13 catern joins (~sbaugh@2604:2000:8fc0:b:a9c7:866a:bf36:3407)
01:26:32 × freeside quits (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 268 seconds)
01:27:41 × xff0x quits (~xff0x@2405:6580:b080:900:6c11:61e0:a694:e7f1) (Ping timeout: 252 seconds)
01:28:05 × Ranhir quits (~Ranhir@157.97.53.139) (Read error: Connection reset by peer)
01:30:09 nate4 joins (~nate@98.45.169.16)
01:31:47 Ranhir joins (~Ranhir@157.97.53.139)
01:35:19 × nate4 quits (~nate@98.45.169.16) (Ping timeout: 252 seconds)
01:37:35 razetime joins (~quassel@117.193.0.120)
01:39:01 × _xor quits (~xor@74.215.182.83) (Quit: brb)
01:39:53 _xor joins (~xor@74.215.182.83)
01:40:43 × elevenkb quits (~elevenkb@105.184.125.168) (Ping timeout: 268 seconds)
01:41:03 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Read error: Connection reset by peer)
01:41:17 Inst joins (~Liam@c-98-208-218-119.hsd1.fl.comcast.net)
01:41:59 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
01:46:17 × perrierjouet quits (~perrier-j@modemcable048.127-56-74.mc.videotron.ca) (Remote host closed the connection)
01:46:52 perrierjouet joins (~perrier-j@modemcable048.127-56-74.mc.videotron.ca)
01:53:00 × perrierjouet quits (~perrier-j@modemcable048.127-56-74.mc.videotron.ca) (Quit: WeeChat 3.7.1)
01:53:21 freeside joins (~mengwong@bb115-66-48-84.singnet.com.sg)
01:53:26 perrierjouet joins (~perrier-j@modemcable048.127-56-74.mc.videotron.ca)
01:56:36 × erisco quits (~erisco@d24-141-66-165.home.cgocable.net) (Read error: Software caused connection abort)
01:57:18 causal joins (~user@50.35.83.177)
01:59:16 erisco joins (~erisco@d24-141-66-165.home.cgocable.net)
02:06:49 Kaiepi joins (~Kaiepi@108.175.84.104)
02:12:09 xff0x joins (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp)
02:12:44 × beteigeuze quits (~Thunderbi@a79-169-109-107.cpe.netcabo.pt) (Ping timeout: 260 seconds)
02:17:17 × califax quits (~califax@user/califx) (Ping timeout: 255 seconds)
02:17:33 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
02:21:39 califax joins (~califax@user/califx)
02:23:12 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:a09f:2a20:ea37:7e61)
02:27:40 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:a09f:2a20:ea37:7e61) (Ping timeout: 260 seconds)
02:49:32 × Ranhir quits (~Ranhir@157.97.53.139) (Remote host closed the connection)
02:57:04 × freeside quits (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 260 seconds)
02:57:15 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
02:58:14 Ranhir joins (~Ranhir@157.97.53.139)
02:59:10 × berberman quits (~berberman@user/berberman) (Ping timeout: 260 seconds)
02:59:21 berberman_ joins (~berberman@user/berberman)
03:01:44 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 260 seconds)
03:04:40 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
03:04:40 finn_elija joins (~finn_elij@user/finn-elija/x-0085643)
03:04:40 finn_elija is now known as FinnElija
03:06:15 zebrag joins (~chris@user/zebrag)
03:07:35 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
03:16:19 × td_ quits (~td@83.135.9.55) (Ping timeout: 260 seconds)
03:16:29 freeside joins (~mengwong@bb115-66-48-84.singnet.com.sg)
03:17:03 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
03:18:01 td_ joins (~td@83.135.9.13)
03:18:09 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
03:18:17 × waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 246 seconds)
03:20:00 × Kaiepi quits (~Kaiepi@108.175.84.104) (Ping timeout: 268 seconds)
03:23:58 × perrierjouet quits (~perrier-j@modemcable048.127-56-74.mc.videotron.ca) (Quit: WeeChat 3.7.1)
03:27:33 perrierjouet joins (~perrier-j@modemcable048.127-56-74.mc.videotron.ca)
03:30:20 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:a09f:2a20:ea37:7e61)
03:31:10 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
03:31:17 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
03:31:36 nate4 joins (~nate@98.45.169.16)
03:35:55 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 260 seconds)
03:37:27 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
03:43:49 polo joins (~polo@pool-100-11-18-203.phlapa.fios.verizon.net)
03:45:13 money is now known as Guest647
03:50:30 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 260 seconds)
03:52:49 rekahsoft joins (~rekahsoft@bras-base-wdston4533w-grc-02-142-113-160-156.dsl.bell.ca)
03:53:54 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
03:54:44 × polo quits (~polo@pool-100-11-18-203.phlapa.fios.verizon.net) (Quit: Textual IRC Client: www.textualapp.com)
04:00:39 × razetime quits (~quassel@117.193.0.120) (Ping timeout: 260 seconds)
04:02:43 × mcglk quits (~mcglk@131.191.49.120) (Ping timeout: 252 seconds)
04:11:50 mcglk joins (~mcglk@131.191.49.120)
04:13:48 × danza quits (~francesco@45.red-79-153-2.dynamicip.rima-tde.net) (Read error: Connection timed out)
04:15:41 × oo_miguel[m] quits (~oomiguelm@2001:470:69fc:105::1:5ab0) (Read error: Software caused connection abort)
04:15:53 oo_miguel[m] joins (~oomiguelm@2001:470:69fc:105::1:5ab0)
04:18:44 × vglfr quits (~vglfr@145.224.100.100) (Ping timeout: 260 seconds)
04:20:09 × TonyStone quits (~TonyStone@cpe-74-76-51-197.nycap.res.rr.com) (Remote host closed the connection)
04:21:04 × freeside quits (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 260 seconds)
04:24:15 TonyStone joins (~TonyStone@cpe-74-76-51-197.nycap.res.rr.com)
04:27:29 × nate4 quits (~nate@98.45.169.16) (Ping timeout: 260 seconds)
04:27:55 bilegeek joins (~bilegeek@2600:1008:b023:888a:c234:abac:d5ca:c1d6)
04:28:55 × TonyStone quits (~TonyStone@cpe-74-76-51-197.nycap.res.rr.com) (Remote host closed the connection)
04:31:20 TonyStone joins (~TonyStone@cpe-74-76-51-197.nycap.res.rr.com)
04:31:59 razetime joins (~quassel@117.193.0.120)
04:34:15 chromoblob joins (~user@37.113.164.122)
04:37:45 × cawfee quits (~root@2406:3003:2077:2758::babe) (Read error: Software caused connection abort)
04:38:16 nate4 joins (~nate@98.45.169.16)
04:39:30 × YoungFrog quits (~youngfrog@39.129-180-91.adsl-dyn.isp.belgacom.be) (Read error: Software caused connection abort)
04:39:51 freeside joins (~mengwong@bb115-66-48-84.singnet.com.sg)
04:41:41 cawfee joins (~root@2406:3003:2077:2758::babe)
04:42:47 YoungFrog joins (~youngfrog@39.129-180-91.adsl-dyn.isp.belgacom.be)
04:42:52 × nate4 quits (~nate@98.45.169.16) (Ping timeout: 252 seconds)
04:44:31 × zebrag quits (~chris@user/zebrag) (Quit: Konversation terminated!)
04:45:43 × freeside quits (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 268 seconds)
04:49:01 listeners joins (~sdenynine@user/mixfix41)
04:52:37 bloomndoom joins (~bloomndoo@115.240.194.54)
04:55:33 jakalx parts (~jakalx@base.jakalx.net) ()
04:57:35 freeside joins (~mengwong@bb115-66-48-84.singnet.com.sg)
04:59:27 jinsun__ joins (~jinsun@user/jinsun)
04:59:28 × jinsun quits (~jinsun@user/jinsun) (Killed (molybdenum.libera.chat (Nickname regained by services)))
04:59:28 jinsun__ is now known as jinsun
05:02:28 jakalx joins (~jakalx@base.jakalx.net)
05:05:24 <bloomndoom> im getting this error when installing haskell through ghcup `curl: (56) OpenSSL SSL_read: error:0A000126:SSL routines::unexpected eof while reading, errno 0
05:05:24 <bloomndoom> "curl -Lf https://downloads.haskell.org/~ghcup/0.1.18.0/x86_64-linux-ghcup-0.1.18.0" failed!` i'm on arch with openssl version 3.0.7
05:14:44 × bloomndoom quits (~bloomndoo@115.240.194.54) (Ping timeout: 260 seconds)
05:26:47 <Axman6> @tell bloomndoom Did you try retrying the install command? I ran that curl line on my mac and it downloaded successfully; could just be a network issue
05:26:48 <lambdabot> Consider it noted.
05:26:52 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 252 seconds)
05:27:05 nate4 joins (~nate@98.45.169.16)
05:27:34 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
05:27:49 × fluxit quits (~fluxit@2604:a880:1:20::ab:1001) (Read error: Software caused connection abort)
05:28:47 ormaaj is now known as ormaaj2
05:28:57 fluxit joins (~fluxit@2604:a880:1:20::ab:1001)
05:30:29 × chromoblob quits (~user@37.113.164.122) (Ping timeout: 260 seconds)
05:31:51 polo joins (~polo@pool-100-11-18-203.phlapa.fios.verizon.net)
05:31:57 × polo quits (~polo@pool-100-11-18-203.phlapa.fios.verizon.net) (Changing host)
05:31:57 polo joins (~polo@user/polo)
05:32:00 polo is now known as money
05:32:46 bloomndoom joins (~bloomndoo@115.240.194.54)
05:32:47 × bloomndoom quits (~bloomndoo@115.240.194.54) (Client Quit)
05:33:00 bloomndoom joins (~bloomndoo@115.240.194.54)
05:33:05 × bloomndoom quits (~bloomndoo@115.240.194.54) (Client Quit)
05:33:24 bloomndoom joins (~bloomndoo@115.240.194.54)
05:33:25 × bloomndoom quits (~bloomndoo@115.240.194.54) (Client Quit)
05:33:39 bloomndoom joins (~bloomndoo@115.240.194.54)
05:33:41 × bloomndoom quits (~bloomndoo@115.240.194.54) (Client Quit)
05:35:00 mikoto-chan joins (~mikoto-ch@85-76-19-119-nat.elisa-mobile.fi)
05:35:44 × nate4 quits (~nate@98.45.169.16) (Ping timeout: 260 seconds)
05:37:16 bloomndoom joins (~bloomndoo@115.240.194.54)
05:40:16 zaquest joins (~notzaques@5.130.79.72)
05:42:44 × bloomndoom quits (~bloomndoo@115.240.194.54) (Ping timeout: 260 seconds)
05:43:10 × money quits (~polo@user/polo) (Quit: My MacBook has gone to sleep. ZZZzzz…)
05:44:05 polo joins (~polo@pool-100-11-18-203.phlapa.fios.verizon.net)
05:54:46 chromoblob joins (~user@37.113.164.122)
05:54:55 × polo quits (~polo@pool-100-11-18-203.phlapa.fios.verizon.net) (Quit: My MacBook has gone to sleep. ZZZzzz…)
05:56:47 × ormaaj2 quits (~ormaaj@user/ormaaj) (Quit: Reconnecting)
05:57:19 ormaaj2 joins (~ormaaj@user/ormaaj)
05:59:02 ormaaj2 is now known as ormaaj
06:00:51 Kaiepi joins (~Kaiepi@108.175.84.104)
06:05:53 × freeside quits (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 268 seconds)
06:06:07 freeside joins (~mengwong@bb115-66-48-84.singnet.com.sg)
06:07:20 × phma quits (~phma@host-67-44-208-167.hnremote.net) (Read error: Connection reset by peer)
06:08:20 phma joins (phma@2001:5b0:2172:9238:1c11:6352:3843:cc13)
06:09:31 haask joins (~harry@user/haask)
06:13:54 × chromoblob quits (~user@37.113.164.122) (Ping timeout: 268 seconds)
06:19:54 vn36 joins (~vn36@123.63.203.210)
06:23:13 chromoblob joins (~user@37.113.164.122)
06:24:37 × berberman_ quits (~berberman@user/berberman) (Ping timeout: 252 seconds)
06:25:03 polo joins (~polo@pool-100-11-18-203.phlapa.fios.verizon.net)
06:31:11 × polo quits (~polo@pool-100-11-18-203.phlapa.fios.verizon.net) (Ping timeout: 276 seconds)
06:31:13 × mikoto-chan quits (~mikoto-ch@85-76-19-119-nat.elisa-mobile.fi) (Ping timeout: 252 seconds)
06:34:41 bgs joins (~bgs@212-85-160-171.dynamic.telemach.net)
06:37:02 × zaquest quits (~notzaques@5.130.79.72) (Remote host closed the connection)
06:37:55 × chromoblob quits (~user@37.113.164.122) (Ping timeout: 260 seconds)
06:38:24 zaquest joins (~notzaques@5.130.79.72)
06:42:45 × Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Quit: Leaving)
06:43:12 takuan joins (~takuan@178-116-218-225.access.telenet.be)
06:44:36 akegalj joins (~akegalj@93-138-111-227.adsl.net.t-com.hr)
06:47:33 × bilegeek quits (~bilegeek@2600:1008:b023:888a:c234:abac:d5ca:c1d6) (Remote host closed the connection)
06:47:59 bilegeek joins (~bilegeek@2600:1008:b023:888a:c234:abac:d5ca:c1d6)
06:51:17 berberman joins (~berberman@user/berberman)
06:54:29 × rekahsoft quits (~rekahsoft@bras-base-wdston4533w-grc-02-142-113-160-156.dsl.bell.ca) (Ping timeout: 260 seconds)
06:54:53 nate4 joins (~nate@98.45.169.16)
06:57:35 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
06:59:22 cytokine_storm joins (~cytokine_@user/cytokine-storm/x-1083107)
06:59:44 × nate4 quits (~nate@98.45.169.16) (Ping timeout: 260 seconds)
07:00:08 × jao quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 252 seconds)
07:00:53 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
07:02:37 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 268 seconds)
07:04:06 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
07:05:16 kenran joins (~user@user/kenran)
07:09:59 bilegeek_ joins (~bilegeek@168.sub-174-208-233.myvzw.com)
07:10:06 machinedgod joins (~machinedg@clnet-p10-126.ikbnet.co.at)
07:10:33 × caryhartline quits (~caryhartl@2600:1700:2d0:8d30:9887:b652:159c:4200) (Quit: caryhartline)
07:10:49 × troydm quits (~troydm@host-176-37-124-197.b025.la.net.ua) (Ping timeout: 260 seconds)
07:11:10 × cytokine_storm quits (~cytokine_@user/cytokine-storm/x-1083107) (Ping timeout: 260 seconds)
07:11:24 × xff0x quits (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 260 seconds)
07:11:46 cytokine_storm joins (~cytokine_@user/cytokine-storm/x-1083107)
07:12:02 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
07:12:23 × bilegeek quits (~bilegeek@2600:1008:b023:888a:c234:abac:d5ca:c1d6) (Ping timeout: 255 seconds)
07:13:06 xff0x joins (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp)
07:14:31 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
07:18:24 × shriekingnoise quits (~shrieking@186.137.167.202) (Quit: Quit)
07:23:54 MajorBiscuit joins (~MajorBisc@86-88-79-148.fixed.kpn.net)
07:25:49 berberman_ joins (~berberman@user/berberman)
07:26:10 × berberman quits (~berberman@user/berberman) (Ping timeout: 252 seconds)
07:26:36 chele joins (~chele@user/chele)
07:30:37 × berberman_ quits (~berberman@user/berberman) (Ping timeout: 252 seconds)
07:31:33 × phma quits (phma@2001:5b0:2172:9238:1c11:6352:3843:cc13) (Read error: Connection reset by peer)
07:32:26 phma joins (~phma@host-67-44-208-37.hnremote.net)
07:37:16 zeenk joins (~zeenk@2a02:2f04:a105:5d00:c862:f190:2ea:d494)
07:38:18 jakalx parts (~jakalx@base.jakalx.net) ()
07:38:40 berberman joins (~berberman@user/berberman)
07:40:19 lortabac joins (~lortabac@2a01:e0a:541:b8f0:50d2:f70b:6128:ed96)
07:42:58 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
07:44:25 jakalx joins (~jakalx@base.jakalx.net)
07:44:30 × cytokine_storm quits (~cytokine_@user/cytokine-storm/x-1083107) (Ping timeout: 252 seconds)
07:44:55 cytokine_storm joins (~cytokine_@user/cytokine-storm/x-1083107)
07:45:30 jco joins (~jco@90-228-194-139-no542.tbcn.telia.com)
07:45:34 <tomsmeding> I am most amused by there being an error but it also giving errno=0
07:45:35 titibandit joins (~titibandi@xdsl-87-78-8-6.nc.de)
07:45:39 <jco> :q
07:45:40 × jco quits (~jco@90-228-194-139-no542.tbcn.telia.com) (Client Quit)
07:46:16 <tomsmeding> reminds me of an error my friend once got from a Go application: "Error: http.client.CannotSendRequest: Request-sent"
07:46:24 × MajorBiscuit quits (~MajorBisc@86-88-79-148.fixed.kpn.net) (Ping timeout: 260 seconds)
07:46:52 mncheck joins (~mncheck@193.224.205.254)
07:48:10 MajorBiscuit joins (~MajorBisc@c-001-027-007.client.tudelft.eduvpn.nl)
07:50:06 × vn36 quits (~vn36@123.63.203.210) (Ping timeout: 268 seconds)
07:55:29 × derpadmin quits (~Anonymous@homebase.200013.net) (Quit: leaving)
07:57:37 CiaoSen joins (~Jura@p200300c9571247002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
08:00:44 × jpds2 quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
08:01:53 jpds2 joins (~jpds@gateway/tor-sasl/jpds)
08:03:56 × cytokine_storm quits (~cytokine_@user/cytokine-storm/x-1083107) (Quit: Quit)
08:04:23 vglfr joins (~vglfr@145.224.100.100)
08:05:35 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
08:10:22 bilegeek_ is now known as bilegeek
08:10:27 cfricke joins (~cfricke@user/cfricke)
08:13:17 InstX1 joins (~Liam@c-98-208-218-119.hsd1.fl.comcast.net)
08:14:22 chomwitt joins (~chomwitt@2a02:587:7a0a:c00:1ac0:4dff:fedb:a3f1)
08:14:59 × Inst quits (~Liam@c-98-208-218-119.hsd1.fl.comcast.net) (Ping timeout: 260 seconds)
08:18:55 `2jt joins (~jtomas@191.red-88-17-199.dynamicip.rima-tde.net)
08:18:58 × `2jt quits (~jtomas@191.red-88-17-199.dynamicip.rima-tde.net) (Remote host closed the connection)
08:19:06 acidjnk joins (~acidjnk@p200300d6e7137a38458dfbf66917fb17.dip0.t-ipconnect.de)
08:19:59 vn36 joins (~vn36@123.63.203.210)
08:23:23 berberman_ joins (~berberman@user/berberman)
08:24:31 × berberman quits (~berberman@user/berberman) (Ping timeout: 252 seconds)
08:31:28 Guest75 joins (~Guest75@178.141.177.81)
08:31:54 <Guest75> Hi. How do I properly add category-extras to package.yaml? After I just added it regularly, stack says to me:
08:31:56 <Guest75>     category-extras needed, but the stack configuration has no specified version (latest matching version is 1.0.2)
08:32:16 <Guest75> adding == 1.0.2 doesn't help either
08:33:36 vpan joins (~0@212.117.1.172)
08:36:07 Neuromancer joins (~Neuromanc@user/neuromancer)
08:39:33 nate4 joins (~nate@98.45.169.16)
08:40:39 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
08:42:53 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
08:42:53 × ozkutuk quits (~ozkutuk@176.240.173.153) (Read error: Connection reset by peer)
08:43:29 × ft quits (~ft@p508dbd59.dip0.t-ipconnect.de) (Quit: leaving)
08:44:44 × nate4 quits (~nate@98.45.169.16) (Ping timeout: 260 seconds)
08:54:32 × vn36 quits (~vn36@123.63.203.210) (Ping timeout: 255 seconds)
08:54:46 × berberman_ quits (~berberman@user/berberman) (Ping timeout: 252 seconds)
08:55:50 <tomsmeding> Guest75: the "resolver set" used by 'stack' doesn't include every package on hackage
08:56:05 <Guest75> aha...
08:56:09 <tomsmeding> does stack not give you some line to add to the extra-deps section in your stack.yaml?
08:58:38 <Guest75> yes. I were just scared by a list of things it asks to add after I do that:
08:58:42 berberman joins (~berberman@user/berberman)
08:58:50 <Guest75> https://paste.tomsmeding.com/w1J3XUxs
08:59:00 <tomsmeding> hah
08:59:10 <tomsmeding> apparently that depends on a whole bunch of stuff that's not on Stackage
08:59:54 <tomsmeding> what you're doing by adding those lines to extra-deps is telling stack "It's fine, you don't have a guaranteed-working version of those packages on Stackage, but just use these, it'll be fine"
09:00:37 <tomsmeding> the version ranges still have to match -- each of those packages defines version ranges of its dependencies that it works with, and those will still be checked for consistency (I think)
09:00:45 <tomsmeding> (if they aren't that's an issue)
09:00:56 <tomsmeding> so it's relatively safe
09:01:43 <Guest75> https://paste.tomsmeding.com/q6aslACB
09:01:54 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
09:02:01 <Guest75> even more stuff. but after I added I've got this
09:02:07 × alphabeta quits (~kilolympu@213.144.144.24) (Read error: Connection reset by peer)
09:02:14 <tomsmeding> Guest75: look at your list, you added those packages twice
09:02:25 <Guest75> yes I thought so :D
09:02:36 <tomsmeding> try removing one of the two
09:02:47 <tomsmeding> y'know, you can also use cabal directly and skip stack :p
09:02:56 <tomsmeding> cabal just pulls from hackage directly
09:03:23 vn36 joins (~vn36@123.63.203.210)
09:04:15 × econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity)
09:04:27 <Guest75> https://paste.tomsmeding.com/oW4n32QM
09:04:35 <Guest75> yes there's still more work to do, perhaps
09:04:57 <Guest75> I'll try later to read up these messages
09:05:38 <tomsmeding> Guest75: meh, looks like stack gave you some conflicting versions
09:05:45 <Guest75> yes
09:05:54 <tomsmeding> what's your list of direct dependencies
09:06:01 <Guest75> in the end of the day it seems that I should reconcile the conflict between deps myself
09:06:08 <tomsmeding> and what's your stackage LTS resolver
09:06:37 <Guest75> https://paste.tomsmeding.com/vO1RRHpO
09:07:01 <Guest75> not sure on the resolver
09:07:08 <tomsmeding> Guest75: that's in stack.yaml
09:07:11 <Guest75> I actually did "stack new ..." recently
09:07:19 <Guest75> https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/19/31.yaml
09:07:33 <Guest75> maybe it has updated
09:07:47 <Guest75> or the problem is that I use Stack from Ubuntu's standard packages
09:08:02 <Guest75> (as opposed to installing it manually)
09:08:11 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Remote host closed the connection)
09:08:39 × bilegeek quits (~bilegeek@168.sub-174-208-233.myvzw.com) (Quit: Leaving)
09:08:47 <tomsmeding> nah that's not the problem
09:09:09 <tomsmeding> problem is that stack doesn't properly solve versions for you, because it assumes you only need packages from Stackage, which is one set of compatible versions
09:09:10 <Guest75> seems this one: https://github.com/commercialhaskell/stackage-snapshots/blob/master/lts/19/32.yaml
09:09:13 <Guest75> is also available
09:09:16 berberman_ joins (~berberman@user/berberman)
09:09:43 <Guest75> ok, how do we fix that?
09:10:18 × berberman quits (~berberman@user/berberman) (Ping timeout: 252 seconds)
09:11:03 <tomsmeding> heh okay it's not entirely stack's fault
09:11:04 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
09:11:25 <tomsmeding> there is no set of compatible versions of your dependencies with ghc 8.10.7, 9.0.2 or 9.2.4
09:11:40 <sm> when you have a very gnarly list of deps to add, it's a sign you're using a resolver that's far from what the project was last built with, and you should probably use a different one
09:11:47 <Guest75> but I only need category-extras
09:11:59 <tomsmeding> category-extras depends on representable-functors which wants a very old 'transformers'
09:12:08 <Guest75> sm: I suspect it's old, yes
09:12:18 <Guest75> i.e. it needs old stuff
09:12:32 × tessier quits (~treed@98.171.210.130) (Ping timeout: 255 seconds)
09:13:03 <Guest75> might be an option to just copy pieces of code from category-extras to own files instead
09:13:23 <tomsmeding> sm: does stack have allow-newer
09:13:49 <sm> yes, in stack.yaml only (no cli option)
09:13:59 × tcard quits (~tcard@2400:4051:5801:7500:19ce:ed82:2ab7:90f9) (Quit: Leaving)
09:14:06 <sm> Guest75: you could show us what you're trying to build ?
09:14:18 <tomsmeding> sm: https://paste.tomsmeding.com/vO1RRHpO
09:14:29 <tomsmeding> that has no install plan under 8.8.4 or newer, didn't check older
09:14:57 <tomsmeding> and if I use cabal --allow-newer=representable-functors:'*' it doesn't build
09:15:14 <Guest75> I'm trying to find a way to play around with that "bifunctors": https://bartoszmilewski.com/2015/02/03/functoriality/bifunctor/
09:15:42 <Guest75> well that's clearly stuff from 2015
09:16:28 <tomsmeding> lol according to https://gitlab.haskell.org/ghc/ghc/-/wikis/commentary/libraries/version-history you need to go back to ghc-7.8.4 to get transformers<4
09:16:44 <tomsmeding> that's quite old
09:16:57 <Guest75> that means something
09:17:08 <Guest75> i.e. that it isn't used much
09:17:17 <tomsmeding> this particular library definitely isn't used much
09:17:46 <tomsmeding> I think you can count the number of people still using ghc-7.* on one hand
09:18:00 <Guest75> makes sense
09:18:20 <Guest75> though I really want to look into the future more than past
09:18:25 kenran` joins (~user@user/kenran)
09:18:33 <Guest75> (when it comes to code)
09:18:42 <tomsmeding> Guest75: looks like category-extraas doesn't have any code of itself though, it just depends on other stuff
09:18:53 <tomsmeding> you _may_ have some luck selecting only its dependencies that you actually need
09:18:58 <tomsmeding> though they may all be old
09:18:59 <Guest75> so better just to copy stuff
09:19:05 <Guest75> yes I understand
09:19:41 <Guest75> in the worst case scenario I'll end up maintaining it
09:20:00 tcard joins (~tcard@2400:4051:5801:7500:19ce:ed82:2ab7:90f9)
09:20:04 <Guest75> (if I will agree with importance of Bifunctors though)
09:20:12 × kenran quits (~user@user/kenran) (Ping timeout: 252 seconds)
09:20:25 <tomsmeding> I mean, Data.Bifunctor is now in base
09:20:30 <Guest75> ah
09:20:33 × phma quits (~phma@host-67-44-208-37.hnremote.net) (Read error: Connection reset by peer)
09:20:33 <tomsmeding> not sure how much you need of the other stuff
09:20:38 <Guest75> oops :-)
09:20:38 <tomsmeding> https://hackage.haskell.org/package/base-4.17.0.0/docs/Data-Bifunctor.html#t:Bifunctor
09:20:56 <tomsmeding> they were considered useful :)
09:21:15 sm used first just the other day
09:21:29 <bjourne> what does !Foo in type declarations mean?
09:21:31 tomsmeding uses first and second regularly, and bimap sometimes
09:21:31 <Guest75> okay. thanks! cool
09:21:41 <tomsmeding> but not sure I'm doing much with the full power of bifunctors
09:21:56 <tomsmeding> bjourne: in a data type declaration, like `data Foo = MkFoo !Int`?
09:22:02 <tomsmeding> that's a strict field
09:22:08 crazazy joins (~user@130.89.173.127)
09:22:10 <tomsmeding> i.e. that field cannot be `undefined`
09:22:42 × razetime quits (~quassel@117.193.0.120) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
09:22:48 phma joins (~phma@2001:5b0:215d:f2c8:303a:6068:9aac:98fb)
09:23:04 <tomsmeding> (but note that if you write e.g. `data Foo = MkFoo !(Maybe Int)`, then the Just/Nothing constructor will be evaluated, but not necessarily the contained Int)
09:23:40 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
09:25:08 ub joins (~Thunderbi@178.115.32.107.wireless.dyn.drei.com)
09:25:51 × tzh quits (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
09:26:26 × ubert quits (~Thunderbi@178.165.160.24.wireless.dyn.drei.com) (Ping timeout: 252 seconds)
09:26:26 ub is now known as ubert
09:34:44 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
09:35:58 takuan joins (~takuan@178-116-218-225.access.telenet.be)
09:36:10 × vn36 quits (~vn36@123.63.203.210) (Ping timeout: 268 seconds)
09:39:48 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
09:42:43 fserucas joins (~fserucas@2001:8a0:6d00:2500:4717:7619:c4e9:3aa2)
09:42:55 × fserucas quits (~fserucas@2001:8a0:6d00:2500:4717:7619:c4e9:3aa2) (Client Quit)
09:43:10 fserucas|eod joins (~fserucas|@2001:8a0:6d00:2500:4717:7619:c4e9:3aa2)
09:43:28 cstml joins (~cstml@user/cstml)
09:54:23 × Maeda quits (~Maeda@91-161-10-149.subs.proxad.net) (Quit: leaving)
09:59:30 Maeda joins (~Maeda@91-161-10-149.subs.proxad.net)
09:59:33 Guest|19 joins (~Guest|19@39.42.139.200)
10:00:15 <Guest|19> cabal : The term 'cabal' is not recognized as the name of a cmdlet, function, script file, or operable program. Check
10:00:16 <Guest|19> the spelling of the name, or if a path was included, verify that the path is correct and try again.
10:00:16 <Guest|19> At line:1 char:1
10:00:17 <Guest|19> + cabal repl --build-depends filepath
10:00:17 <Guest|19> + ~~~~~
10:00:18 <Guest|19>     + CategoryInfo : ObjectNotFound: (cabal:String) [], CommandNotFoundException
10:00:18 <Guest|19>     + FullyQualifiedErrorId : CommandNotFoundException
10:00:23 <Guest|19> what should i do in this case
10:02:47 × Maeda quits (~Maeda@91-161-10-149.subs.proxad.net) (Client Quit)
10:03:04 teo joins (~teo@user/teo)
10:03:22 <[exa]> Guest|19: that's from powershell?
10:03:40 Maeda joins (~Maeda@91-161-10-149.subs.proxad.net)
10:04:36 × Maeda quits (~Maeda@91-161-10-149.subs.proxad.net) (Remote host closed the connection)
10:04:46 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:a09f:2a20:ea37:7e61) (Remote host closed the connection)
10:05:29 Maeda joins (~Maeda@91-161-10-149.subs.proxad.net)
10:05:46 × xff0x quits (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 268 seconds)
10:06:36 × chronon quits (~chronon@user/chronon) (Remote host closed the connection)
10:06:50 razetime joins (~quassel@117.193.0.120)
10:07:35 <maerwald[m]> Restart powershell
10:08:05 <Guest|19> yes that is from powershell
10:08:23 <Guest|19> i tried restarting it a couple of time but I did not work
10:08:53 <Guest|19> I think it is due to environmrnt variable
10:09:24 <Guest|19> as if Environment variable is not correct
10:09:54 <[exa]> yes, I'm not really aware much about PS internals but this looks like PATH is missing focr cabal binaries
10:10:19 <[exa]> (how did you install cabal?)
10:12:13 <Guest|19> i copied the link for ghcup installation from website and it did all the rest
10:12:25 chromoblob joins (~user@37.113.164.122)
10:14:19 <maerwald[m]> [exa]: Guest|<int> is the nickname you get when you click on the help link on the ghcup website ;)
10:14:32 razetime_ joins (~quassel@117.193.0.120)
10:14:34 × razetime quits (~quassel@117.193.0.120) (Ping timeout: 260 seconds)
10:14:43 <maerwald[m]> Guest|19: can you check your PATH?
10:14:48 <maerwald[m]> Via GUI
10:15:07 <Guest|19> i think it was not installed earlier... now I have run the command ghcup install cabal
10:15:27 <Guest|19> in path in shows C: cabal
10:15:34 <Guest|19> for cabal_dir
10:15:38 <maerwald[m]> Oh, that's odd
10:15:53 <maerwald[m]> What?
10:16:21 <Guest|19> i think that error is somehow resolved :b
10:20:25 × gentauro quits (~gentauro@user/gentauro) (Read error: Connection reset by peer)
10:24:25 × zeenk quits (~zeenk@2a02:2f04:a105:5d00:c862:f190:2ea:d494) (Quit: Konversation terminated!)
10:24:59 <bjourne> what could be the reason for the "show" function to enter an infinite loop?
10:26:07 gentauro joins (~gentauro@user/gentauro)
10:26:15 <merijn> bjourne: You defined a recursive instance by accident :p
10:26:23 <merijn> bjourne: How do you know it's an infinite loop?
10:27:25 <bjourne> i dont
10:28:14 <tomsmeding> bjourne: are you sure it's `show` that's looping, and not the computation that produces the value you're trying to show?
10:28:21 <tomsmeding> % let x = x + 1 :: Int
10:28:22 <yahb2> <no output>
10:28:24 <tomsmeding> % show x
10:28:26 <yahb2> <timeout>
10:29:14 troydm joins (~troydm@host-176-37-124-197.b025.la.net.ua)
10:29:27 <tomsmeding> usually you can distinguish between those cases with seq
10:29:31 <tomsmeding> % let x = x + 1 :: Int
10:29:31 <yahb2> <no output>
10:29:35 <tomsmeding> % let y = 42 :: Int
10:29:35 <yahb2> <no output>
10:29:43 <tomsmeding> % y `seq` ()
10:29:43 <yahb2> ()
10:29:51 <tomsmeding> % x `seq` ()
10:29:53 <yahb2> <timeout>
10:30:12 <tomsmeding> here you detect that x never produces any result without getting `show` involved
10:32:11 <tomsmeding> maerwald[m]: I like that, sneaky hiding of information in an inconspicuous place
10:32:39 × chromoblob quits (~user@37.113.164.122) (Ping timeout: 260 seconds)
10:33:27 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
10:34:02 <bjourne> tomsmeding: yes
10:34:31 <tomsmeding> bjourne: what type are you showing
10:36:12 <bjourne> Node Range
10:36:59 <tomsmeding> it's a custom type? Well, `show` is just an instance method, so whoever wrote that instance wrote the `show` function for it, and you could look there
10:37:16 <tomsmeding> but I strongly suspect it's not `show` that's looping but the computation before it (remember, haskell is lazy)
10:38:31 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
10:39:12 <bjourne> then how do i force it to fully evaluate the expression?
10:40:16 × Guest|19 quits (~Guest|19@39.42.139.200) (Quit: Connection closed)
10:43:15 chromoblob joins (~user@37.113.164.122)
10:43:44 × jmd_ quits (~jmdaemon@user/jmdaemon) (Ping timeout: 260 seconds)
10:47:31 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:50d2:f70b:6128:ed96) (Ping timeout: 252 seconds)
10:47:34 <tomsmeding> bjourne: "thing `seq` ()" completes?
10:48:04 lortabac joins (~lortabac@2a01:e0a:541:b8f0:c3bb:6c84:6165:ec98)
10:48:38 <tomsmeding> you can import Control.DeepSeq (from the 'deepseq' package), derive NFData instances for the types in question, and then use 'force'
10:48:38 <bjourne> yes
10:48:54 <tomsmeding> that's full evaluation instead of only the top-most layer (called WHNF)
10:49:14 <tomsmeding> bjourne: perhaps if you post your show instance and the type we can already see if there's something wrong
10:49:36 <bjourne> it's related to the alex framework. this works: my_show (GVarDef (Range _ _) _ _ _) = "bah"
10:49:44 <bjourne> this doesn't: my_show (GVarDef (Range (AlexPn a b c) _) _ _ _) = "bah"
10:49:49 × akegalj quits (~akegalj@93-138-111-227.adsl.net.t-com.hr) (Quit: leaving)
10:50:30 <tomsmeding> what you can also do is pick out a part of your value using `case`, and then evaluate that
10:50:53 <tomsmeding> case value of GVarDef (Range x) _ _ _ -> x `seq` ()
10:51:10 <tomsmeding> case value of GVarDef (Range (AlexPn x _ _) _ _ _ -> x `seq` ()
10:52:18 <tomsmeding> also try stuff like
10:52:24 <tomsmeding> case value of GVarDef (Range (AlexPn _ _ _) _ _ _ -> ()
10:52:34 <tomsmeding> to check whether it's even that constructor (if the data type has multiple constructors)
10:53:04 <tomsmeding> (though I guess that wil be caught if you run both of the preceding ones, so not necessary here)
10:56:08 __monty__ joins (~toonn@user/toonn)
10:56:47 × chromoblob quits (~user@37.113.164.122) (Ping timeout: 246 seconds)
10:58:52 <bjourne> lazy evaluation is the stupidest idea ever
10:58:55 polo joins (~polo@pool-100-11-18-203.phlapa.fios.verizon.net)
10:59:27 <bjourne> it's something about the AlexPn type, if i don't touch it everything is fine, but if i "open" it, it loops
10:59:43 <tomsmeding> sounds like alex is doing something weird
11:00:35 tomsmeding knows nothing about alex
11:01:13 chromoblob joins (~user@37.113.164.122)
11:01:25 vn36 joins (~vn36@123.63.203.210)
11:02:37 <bjourne> i'm more or less structuring my lexer/parser like this: https://serokell.io/blog/lexing-with-alex
11:04:04 × vglfr quits (~vglfr@145.224.100.100) (Read error: Connection reset by peer)
11:05:13 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:a09f:2a20:ea37:7e61)
11:05:21 xff0x joins (~xff0x@2405:6580:b080:900:d135:3c26:3e1:534d)
11:05:30 vglfr joins (~vglfr@145.224.100.100)
11:06:27 × shinjipf quits (~shinjipf@2a01:4f8:1c1c:c1be::1) (Quit: Shinji leaves)
11:06:41 shinjipf joins (~shinjipf@2a01:4f8:1c1c:c1be::1)
11:06:47 × polo quits (~polo@pool-100-11-18-203.phlapa.fios.verizon.net) (Changing host)
11:06:47 polo joins (~polo@user/polo)
11:08:15 <[exa]> bjourne: do you have the code somewhere for checking?
11:08:37 <[exa]> bjourne: in most cases this is caused by a sneaky let recursion that you miss somewhere :]
11:09:36 crazazy[m] joins (~crazazyut@2001:470:69fc:105::2:ba2a)
11:10:25 coot joins (~coot@213.134.171.3)
11:10:53 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:a09f:2a20:ea37:7e61) (Ping timeout: 255 seconds)
11:13:18 × polo quits (~polo@user/polo) (Quit: My MacBook has gone to sleep. ZZZzzz…)
11:21:45 × phma quits (~phma@2001:5b0:215d:f2c8:303a:6068:9aac:98fb) (Read error: Connection reset by peer)
11:22:47 phma joins (~phma@host-67-44-208-197.hnremote.net)
11:23:49 × zer0bitz quits (~zer0bitz@196.244.192.61) (Read error: Connection reset by peer)
11:25:33 beteigeuze joins (~Thunderbi@a79-169-109-107.cpe.netcabo.pt)
11:25:47 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
11:27:04 × potash quits (~foghorn@user/foghorn) (Ping timeout: 252 seconds)
11:27:15 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
11:27:47 × chromoblob quits (~user@37.113.164.122) (Ping timeout: 268 seconds)
11:28:14 Guest|19 joins (~Guest|19@39.42.139.200)
11:28:45 <Guest|19> https://github.com/TheTeaCat/COM2108-Assignment-3
11:28:45 <Guest|19> i am trying to run this project... but I have no idea how can I do this Guide me please
11:30:02 <__monty__> Guest|19: How far have you gotten trying to follow the Setup instructions?
11:30:46 olivermead joins (~olivermea@cpc72329-sotn15-2-0-cust205.15-1.cable.virginm.net)
11:30:54 crazazy parts (~user@130.89.173.127) (ERC (IRC client for Emacs 28.0.50))
11:31:08 Lycurgus joins (~juan@user/Lycurgus)
11:31:19 <Guest|19> when i write./Extension +RTS -N1  the command prompt gives me error it do not recognize the command
11:31:58 Lycurgus parts (~juan@user/Lycurgus) ()
11:32:08 chromoblob joins (~user@37.113.164.122)
11:32:20 potash joins (~foghorn@user/foghorn)
11:32:56 <__monty__> Is there a file named "Extension" in your PWD?
11:34:51 Heyting joins (~Heyting@193.198.16.217)
11:36:15 <ski> bjourne : did you define `show' for your (?) type ?
11:36:39 <Guest|19> yes Extension.hs is the file
11:40:10 polo joins (~polo@pool-100-11-18-203.phlapa.fios.verizon.net)
11:42:25 zer0bitz joins (~zer0bitz@196.244.192.59)
11:46:30 × coot quits (~coot@213.134.171.3) (Quit: coot)
11:46:37 <__monty__> Guest|19: No, not Extension.hs. Running the `ghc` command should have produced a file named "Extension".
11:46:59 <Guest|19> yes it did
11:49:22 × chromoblob quits (~user@37.113.164.122) (Ping timeout: 268 seconds)
11:49:52 <__monty__> Guest|19: Ok, then the problem may be the file lacking execute permissions. So try running `chmod u+x Extension` and then the `./Extension` command again.
11:52:04 <Guest|19> ook
11:55:00 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
11:56:19 × polo quits (~polo@pool-100-11-18-203.phlapa.fios.verizon.net) (Quit: My MacBook has gone to sleep. ZZZzzz…)
11:58:06 × Heyting quits (~Heyting@193.198.16.217) (Remote host closed the connection)
11:58:52 chromoblob joins (~user@37.113.164.122)
11:59:52 jakalx joins (~jakalx@base.jakalx.net)
12:05:33 waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
12:12:14 ph88 joins (~ph88@ip5f5af71f.dynamic.kabel-deutschland.de)
12:12:48 × vn36 quits (~vn36@123.63.203.210) (Ping timeout: 268 seconds)
12:13:40 × zer0bitz quits (~zer0bitz@196.244.192.59) (Quit: No Ping reply in 180 seconds.)
12:15:05 zer0bitz joins (~zer0bitz@196.244.192.59)
12:16:09 × Xeroine quits (~Xeroine@user/xeroine) (Quit: ZNC 1.8.2+deb2+b1 - https://znc.in)
12:18:13 × Guest|19 quits (~Guest|19@39.42.139.200) (Quit: Connection closed)
12:20:00 Xeroine joins (~Xeroine@user/xeroine)
12:21:29 mvk joins (~mvk@2607:fea8:5ce3:8500::4b68)
12:22:09 nate4 joins (~nate@98.45.169.16)
12:23:11 shailangsa joins (~shailangs@host109-159-108-137.range109-159.btcentralplus.com)
12:24:09 × mvk quits (~mvk@2607:fea8:5ce3:8500::4b68) (Client Quit)
12:25:08 mvk joins (~mvk@2607:fea8:5ce3:8500::4b68)
12:26:54 × mvk quits (~mvk@2607:fea8:5ce3:8500::4b68) (Client Quit)
12:27:20 × nate4 quits (~nate@98.45.169.16) (Ping timeout: 260 seconds)
12:27:48 Lycurgus joins (~juan@user/Lycurgus)
12:40:10 mvk joins (~mvk@2607:fea8:5ce3:8500::4b68)
12:40:37 × Lycurgus quits (~juan@user/Lycurgus) (Quit: Exeunt https://tinyurl.com/4m8d4kd5)
12:41:09 <bjourne> ski: yes
12:42:29 × waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 246 seconds)
12:43:04 vn36 joins (~vn36@123.63.203.210)
12:50:32 <ski> bjourne : ok. you should note that usually people should define `showsPrec' rather than `show' (because unless you only print a syntactically atomic result, you really should be making use of the precedence to optionally bracket the output)
12:52:20 <bjourne> ski: i didn't define it directly, but the type is deriving (Show)
12:52:21 <ski> that is, if they're even manually making a `Show' instance at all. imho, if you're after some pretty printing, or syntactic sugar, `Show' is not the right place for that. it ought to generate a valid Haskell source representation of the value, as a `String', that could be copied back into a source file, or the interactor, to produce an equivalent value. (obviously should be readable by a `Read' instance back
12:52:27 <ski> into an equivalent value, as well)
12:52:30 <ski> well, ok
12:52:40 <ski> in that case, you are *not* defining `show' yourself
12:53:00 × phma quits (~phma@host-67-44-208-197.hnremote.net) (Read error: Connection reset by peer)
12:53:26 phma joins (phma@2001:5b0:210d:6148:bdc4:3c24:81d2:404a)
12:53:31 <ski> (no worry, it may not be so easy to tell apart the difference at first, as a beginner)
12:54:01 × freeside quits (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 252 seconds)
12:55:59 <ski> the usual cases where i makes sense to make your own `Show' instance are (a) when you're making an abstract data type, so you don't want to expose implementation/representation details, but rather present the value in terms of publicly exported operations to construct it (e.g. `Array' and `Map' does this); and (b) occasionally, you might want to have a type with infix constructors displayed, with a minimum
12:56:05 <ski> amount of brackets. for some reason, the `deriving Show' instance will not keep track of associativity, only precedence, to reduce brackets
12:56:08 <ski> s/i makes/it makes/
12:56:09 <bjourne> yes i am defining show, that is what deriving (Show) does
12:56:31 <ski> `deriving Show' makes it so that the *implementation* defines `showsPrec' and `show' *for* you
12:57:11 <bjourne> no, *I'm* defining it
12:57:13 <ski> if you're not writing `show ... = ...' yourself, you're not defining `show'. you're instructing the implementation to do that for you (along a standard pattern of doing that)
12:57:28 <ski> well, in that case, you are *not* doing `deriving (Show)'
12:57:33 <ski> you can't do both at the same time
12:57:52 <ski> it will complain about duplicate instances
12:58:05 <ski> you can't say both
12:58:09 <ski> data Foo = ...
12:58:13 <ski> deriving Show
12:58:15 <ski> *and*
12:58:18 <ski> instance Show Foo
12:58:19 <ski> where
12:58:27 <ski> showsPrec ... = ...
12:58:54 <ski> only the latter would count as defining `show' (or `showsPrec', in the concrete example i did)
12:59:32 <ski> do you see the difference i'm pointing out ?
12:59:34 <bjourne> "If the deriving form is present, an instance declaration is **automatically generated**"
12:59:38 <ski> yes
12:59:39 <bjourne> http://www2.informatik.uni-freiburg.de/~thiemann/haskell/haskell98-report-html/derived.html
12:59:43 <ski> exactly
12:59:52 <bjourne> so, yes, i'm *defining* it
13:00:07 <ski> so, in that case, you're not writing `show' (or `showPrec'). you're telling the implementation to automatically generating it for you
13:00:08 random-jellyfish joins (~random-je@user/random-jellyfish)
13:00:42 <ski> if you're not spelling out the defining equation(s) for `show' (or `showsPrec') yourself, *you* are not defining it. you're letting the system define it, for you
13:00:52 <ski> (and usually, this is what you want to do)
13:02:20 <ski> (perhaps more succinctly : if you're using `deriving Show', then you're *deriving* it, not *defining* it)
13:02:22 <bjourne> yes *I* am defining it, that i'm not writing the characters "show blah = bla" anywhere is immaterial
13:02:52 <ski> the effect is the same : you end up with having a `Show' instance for the type
13:03:26 <bjourne> no, i'm *defining* the value of the expression "show MyType" exactly if i had used the instance ... syntax
13:03:38 <ski> the means are different : either you define it yourself (and then you could tweak the implementation to do things differently). or you derive it (telling the system to define it for you) (and then you can't tweak the implementation)
13:03:45 <ski> the difference here (sometimes) matters
13:04:55 <ski> i agree with your last statement. if you had used `instance Show ...', then you'd be defining yourself how `show' behaved
13:05:24 <bjourne> i'm doing exactly the same thing by writing deriving Show
13:05:32 <bjourne> it's just syntatic sugar
13:05:55 razetime_ is now known as razetime
13:06:10 <ski> "that i'm not writing the characters \"show blah = bla\" anywhere is immaterial" -- the difference is that with `deriving Show', you get a pre-canned implementation (which is fine, if that one is what you want, which is the case, most of the time). while if you're not doing that, you are *able* to do things differently. this is an important distinction
13:06:41 <ski> if you were writing `deriving Show', then you could *not* have it report the value in terms of abstract data type operations
13:06:54 <ski> > listArray (0,3) [2,3,5,7]
13:06:55 <lambdabot> array (0,3) [(0,2),(1,3),(2,5),(3,7)]
13:07:13 <ski> this instance of `Show' for `Array' could *not* have been made using `deriving Show'
13:08:02 zer0bitz_ joins (~zer0bitz@196.244.192.59)
13:08:07 <ski> > foldr S.insert S.empty [3,7,5,2]
13:08:08 <lambdabot> fromList [2,3,5,7]
13:08:17 <ski> nor this example of using `Set'
13:08:43 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:3053:4575:ae1c:cfd9)
13:09:01 <bjourne> immaterial and a tangent. "deriving Show" *defines* show for the type the declaration is attached to
13:09:10 <dminuoso> For Set at least there could be a deriving generated Show, but for Array that is actually impossible.
13:09:32 × chromoblob quits (~user@37.113.164.122) (Ping timeout: 268 seconds)
13:09:45 <bjourne> the one doing the *defining* (the verb) is the one writing the code, i.e me
13:09:52 <ski> *if* you just want the standard way of showing a value, *then* it's the same to use `deriving Show', and to explicitly spell out the `show' (or more likely `showsPrec') instance .. it's just more work (and more opportunity to do a mistake) to do the latter. so it's sensible to do the former in this case
13:10:01 <dminuoso> Or well, I guess you *could* define it in terms of bang literal strings. Mmm
13:10:08 × zer0bitz quits (~zer0bitz@196.244.192.59) (Ping timeout: 246 seconds)
13:10:09 <troydm> are IORef same as pointers, if I'll pass same IORef to two different functions and change it's value in one, will the second reference the changed value?
13:10:23 <dminuoso> troydm: Yes, and correct.
13:10:25 × random-jellyfish quits (~random-je@user/random-jellyfish) (Quit: Client closed)
13:10:28 <troydm> dminuoso: thx
13:10:34 <dminuoso> An IORef really is a pointer under the hood too.
13:10:52 <ski> "\"deriving Show\" *defines* show for the type the declaration is attached to" -- i agree. the *implementation* defines it, *for* you. *you* do not define it, in this case
13:11:07 freeside joins (~mengwong@bb115-66-48-84.singnet.com.sg)
13:11:25 random-jellyfish joins (~random-je@user/random-jellyfish)
13:11:47 <bjourne> ski: no, *I* *define* *show* by picking the *default* *implementation*
13:12:05 <merijn> troydm: Slight disagree with dminuoso that IORef are pointers
13:12:07 <bjourne> the answer to your question "did you define `show' for your (?) type ?" was yes, not no
13:12:08 <ski> troydm : and the same with `IOArray',`STRef',`STArray',`MVar',`TVar'
13:12:15 <merijn> troydm: For one, IORef is atomic update
13:12:51 <troydm> merijn: ohh, so I don't need to worry about sync issues with multiple threads?
13:12:52 <merijn> So they're race free, unlike pointers
13:13:04 <troydm> k, cool
13:13:12 <dminuoso> merijn: An IORef boils down to a MutVar#
13:13:17 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:3053:4575:ae1c:cfd9) (Ping timeout: 255 seconds)
13:13:47 <merijn> dminuoso: This is gonna lead down a semantic rabit hole of "what is a pointer", but I remain with my observation that IORef is *not* like a C pointer
13:13:49 <dminuoso> Where do you get the idea that an IORef is atomic, merijn?
13:14:25 <dminuoso> Pretty sure that modifying them is not atomic, unless you explicitly use atomicModifyIORef
13:14:38 <merijn> dminuoso: reading/writing is atomic
13:14:52 <ski> bjourne : i think the source of the issue is that we're using slightly different meanings attached to what it means to define something. i'm pointing out that the distinction i'm making (sometimes) matters. iow, it matters whether *you* are able to tweak the definition or not. you can't tweak something you haven't spelled out. i fully agree that deriving causes a definition to be provided. i'm taking issue
13:14:58 <ski> with claiming you are doing the definition, since that would, in my eyes, imply that you're able to tweak it, which you can't. you're just able to say yes or no to the generated one, not tweak it
13:15:02 <merijn> read, compute, write, is (obviously) not atomic, unless you use atomicModifyIORef
13:15:40 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
13:15:46 <merijn> Although once you start introducing concurrency the issue of consistency/memory model becomes considerably more complex
13:15:46 <dminuoso> 14:12:15 merijn | troydm: For one, IORef is atomic update
13:15:51 <dminuoso> This is grossly misleading then
13:15:59 <merijn> dminuoso: "update" as in "writing to one"
13:15:59 × freeside quits (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 260 seconds)
13:16:01 × acidjnk quits (~acidjnk@p200300d6e7137a38458dfbf66917fb17.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
13:16:07 <ski> bjourne : seeing as we're using slightly different meanings attached to the word, i don't think it makes sense to argue about what it "really means". i'm coming from this from a practical standpoint, of what's relevant concerns to the programmer. sometimes it matters to be able to provide a custom `Show' instance. sometimes it doesn't. i hope at least you're able to see this point
13:16:43 <bjourne> ski: nah, you are just wrong
13:17:01 <dminuoso> Well, I think explaining them like c-pointers works well enough, at best you get additional guarantees.
13:17:01 <bjourne> but that's ok
13:17:14 <ski> we can agree to disagree, sure
13:17:16 <dminuoso> But you're not going to make bad inference from that
13:18:25 <ski> troydm : also, you can't atomically update multiple `IORef's
13:19:27 × vn36 quits (~vn36@123.63.203.210) (Quit: leaving)
13:19:43 × Guest75 quits (~Guest75@178.141.177.81) (Ping timeout: 260 seconds)
13:19:49 × bjourne quits (~bjourne@2001:6b0:1:1140:42bf:ff4:f8fa:50e5) (Quit: Konversation terminated!)
13:21:14 <troydm> ski: how so?
13:21:52 <ski> another thread could read from or write to one of them in the meantime you've updated (or read) just one of them, but not the other
13:22:53 <ski> if you find yourself needing this, you should probably look into `TVar' (using `STM') (or perhaps try to look for a different way to go about solving your problem, if available)
13:23:17 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
13:24:07 tessier joins (~treed@98.171.210.130)
13:25:39 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
13:27:11 <dminuoso> That is, the transactional scope of writeIORef or atomicModifyIORef is only a singular IORef. Sequencing two of them no longer is atomic.
13:27:37 <dminuoso> It is curious that we even mention this, in many other programming languages this goes without saying.
13:28:21 <dminuoso> But most of these languages do not have built-in STM, some have it it as external libraries.
13:29:20 <dminuoso> Heck, even the atomicity is a special feature - in some languages you either get no atomicity, or its just imbued by fact of holding some kind of global interpreter lock.
13:32:42 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
13:34:27 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
13:41:18 fr33domlover[m] parts (~fr33domlo@2001:470:69fc:105::1:3bb6) ()
13:41:36 × listeners quits (~sdenynine@user/mixfix41) (Ping timeout: 268 seconds)
13:43:46 × mncheck quits (~mncheck@193.224.205.254) (Remote host closed the connection)
13:47:22 freeside joins (~mengwong@bb115-66-48-84.singnet.com.sg)
13:48:46 <dminuoso> ski: By the way, after our last discussions about continuations, it occured to me that when we think of a continuation as a computation with a hole `\x -> ... x ...` - there was a striking resembles with lenses
13:49:34 <dminuoso> Especially in the van Laarhoven encoding
13:50:23 <ski> oh, elaborate ?
13:50:53 <ski> that would correspond to the "setter" part, no ?
13:51:12 <ski> the `b -> a' part of `a -> (b,b -> a)'
13:51:32 <merijn> pedantic sidenote that it should be Van Laarhoven :p
13:52:05 × freeside quits (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 268 seconds)
13:52:06 <dminuoso> Ah really? Good to know.
13:52:39 <tomsmeding> Sander van Laarhoven, but Van Laarhoven
13:53:01 <tomsmeding> contacts apps get this wrong always
13:53:11 <ski> oh, so capitalize the initial letter, when the surname occurs on its own
13:53:11 × kenran` quits (~user@user/kenran) (Remote host closed the connection)
13:53:22 <tomsmeding> "surname field" -- okay so should I enter the capital or not? Either will go wrong 50% of the time
13:53:31 <tomsmeding> yeah
13:53:54 <merijn> ski: In Dutch it's basically "first letter of name is capitalised trumps any other rule"
13:54:05 ski nods
13:54:20 <ski> (i imagine Flemish would be similar)
13:55:22 <merijn> ski: Flemish is different in that they *always* capitalise the "tussenvoegsel"
13:55:30 polo_ joins (~polo@pool-100-11-18-203.phlapa.fios.verizon.net)
13:55:43 <merijn> So in Flemish it'd also be Sander Van Laarhoven
13:55:45 <ski> being the "v" in "van" (in this case) ?
13:55:47 <ski> okay
13:55:59 <ski> curious
13:56:01 <Unhammer> How would I create a Storable instance for a c++ std::pair<float,std::string> ? Is it as if it were a struct?
13:56:24 <merijn> Unhammer: You cry
13:56:28 <merijn> Unhammer: And take up drinking
13:56:30 <geekosaur> I suspect you need to export "C" it as a struct
13:56:32 <tomsmeding> then you first have to decide how in the world to get something out of that std::string
13:56:38 <merijn> Unhammer: I highly recommend Laphraoig 10
13:56:43 <geekosaur> you get zero promises about how C++ objects are stored
13:56:53 <merijn> geekosaur: Yeah, pretty much
13:57:02 <merijn> Unhammer: So the short answer is "you can't"
13:57:23 <Unhammer> :((
13:57:33 <merijn> The longer answer is "if you're sufficiently stubborn you can probably pull it off, if you're willing to sacrifice your sanity, happiness, and mental well being"
13:57:41 <geekosaur> and portability
13:57:48 <merijn> oh, and also portability and any guarantees of it actually working
13:58:10 <Unhammer> first half hour of making bindings to c++ "this is really easy I'm almost done now I just need to read more than the first element of that vector of pairs" … three hours later
13:58:16 <Unhammer> :(
13:58:25 <tomsmeding> thing is, with std::string you also have the issue that implementations sometimes do this "small string optimisation" where strings of length <8 (<=8? dunno) are stored in the field where the pointer would normally live
13:58:29 <Unhammer> sooo … I should make it into a struct on the C side?
13:58:32 <merijn> Unhammer: Write a C++ wrapper that's 'export "C"' and converts
13:58:40 ski . o O ( "Scsh Reference Manual - Acknowledgements" by Olin Shivers in 1994-09-04 at <https://scsh.net/docu/html/man.html> )
13:58:57 <tomsmeding> and furthermore, converts away that std::string and makes it a pair of a size_t and a char*
13:59:04 <merijn> Unhammer: The problem is that different C++ standard libraries don't have to use the same implementation for std::string nor std::pair
13:59:08 <dminuoso> ski: So consider an example of:
13:59:20 <dminuoso> % data V3 x y z = V3 x y z
13:59:20 <yahb2> <no output>
13:59:30 <dminuoso> % f1 :: Lens' (V3 x y z) x; f1 f (V3 x y z) = f x <$> (\x' -> V3 x' y z)
13:59:30 <yahb2> <interactive>:18:7: error: ; Not in scope: type constructor or class ‘Lens'’
13:59:43 <dminuoso> % :set RankNTypes
13:59:43 <yahb2> Some flags have not been recognized: RankNTypes
13:59:46 <dminuoso> % :set -XRankNTypes
13:59:47 <yahb2> <no output>
13:59:55 <dminuoso> % type Lens s t a b = forall f. Functor f => (a -> f b) -> s -> f t
13:59:55 <yahb2> <no output>
13:59:57 <dminuoso> % f1 :: Lens' (V3 x y z) x; f1 f (V3 x y z) = f x <$> (\x' -> V3 x' y z)
13:59:57 <yahb2> <interactive>:26:7: error: ; Not in scope: type constructor or class ‘Lens'’ ; Perhaps you meant ‘Lens’ (line 24)
14:00:01 <dminuoso> Oh hold on
14:00:06 <ski> Unhammer : i guess maybe you could provide `export "C"' operations to access the innards ..
14:00:50 <dminuoso> % f1 :: Lens (V3 x y z) (V3 x' y z) x x'; f1 f (V3 x y z) = (\x' -> V3 x' y z) <$> f x
14:00:50 <yahb2> <no output>
14:00:59 <ski> ok
14:00:59 <merijn> Unhammer: You could write 'export "C" void *pack_pair(float f, char *s);' that returns a pointer to the pair
14:01:33 <tomsmeding> merijn: watch out, std::string can contain null bytes
14:01:35 <dminuoso> ski: So there is this frequent remark that a lens splits data into "the focus" and the "whole with a hole". This representation shows why that is
14:01:52 <ski> tomsmeding : it stores size separately ?
14:01:56 <tomsmeding> yes
14:02:28 <dminuoso> ski: And I keep thinking about how this "whole with a hole" as just a computational hole, much like a coroutine.
14:03:08 <dminuoso> Or a continuation, if you want
14:03:23 <ski> dminuoso : mhm .. i suppose that makes some sense. and the composing lenses, amounts (apart from the access) to nesting such contexts inside each other
14:03:28 <dminuoso> Yup
14:03:47 <ski> (not sure where/how coroutines are related / enter)
14:03:49 <Unhammer> it's a short enough array I'll just convert …
14:04:38 <tomsmeding> Unhammer: if you're sure that the std::string lives long enough, you don't need to copy the array, you just need to give Haskell a pointer to the contents (i.e. .data())
14:04:45 <tomsmeding> but be very sure that the std::string lives long enough
14:05:12 <dminuoso> ski: well it would be a kind of update coroutine halted on where it would insert the new data.
14:05:27 <ski> (perhaps you could also have a version which accepts a callback, which you pass the pair pointer to)
14:05:36 <merijn> Unhammer: One of the problems with C++ is that there's no standard ABI for interacting with C++ types/classes/etc. so FFI stuff to it is a nightmare
14:06:13 <dminuoso> *disclaimer - if lack of an ABI is a problem, then GHC Haskell has the same problem.
14:06:31 <merijn> dminuoso: Well, yes
14:06:42 <merijn> dminuoso: But we only have one GHC and no serious competition
14:07:04 <merijn> Whereas there's 4 possible C++ combo's you can encounter and you're hosed if you mix them
14:07:05 <dminuoso> Sure but its not stable either, which makes FFIing into Haskell a pain in the butt
14:07:38 <dminuoso> So even having just one compiler doesnt really make things easier
14:08:13 <merijn> to be fair, C++ isn't stable either, so strictly worse ;)
14:08:22 × polo_ quits (~polo@pool-100-11-18-203.phlapa.fios.verizon.net) (Quit: My MacBook has gone to sleep. ZZZzzz…)
14:08:23 <dminuoso> heh :)
14:08:58 polo_ joins (~polo@pool-100-11-18-203.phlapa.fios.verizon.net)
14:09:53 <merijn> ski: Apparently English wikipedia gave up trying to find a translation and is just using the Dutch word: https://en.wikipedia.org/wiki/Tussenvoegsel ;)
14:10:27 <tomsmeding> lol
14:10:41 freeside joins (~mengwong@bb115-66-48-84.singnet.com.sg)
14:11:11 <merijn> tbh, I tried to translate on the fly once, but it's...hard xD
14:11:23 <merijn> "inbetweensel"? >.>
14:11:58 <geekosaur> "inbetweener"?
14:12:22 <merijn> geekosaur: No, because it's kinda diminutive
14:12:29 <merijn> Which English is sorely lacking
14:12:47 × CiaoSen quits (~Jura@p200300c9571247002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
14:13:06 <tomsmeding> inbetweeny
14:13:41 × polo_ quits (~polo@pool-100-11-18-203.phlapa.fios.verizon.net) (Client Quit)
14:13:58 <geekosaur> inbeteeny?
14:13:59 acidjnk joins (~acidjnk@p200300d6e7137a61d962e1cf9864f38d.dip0.t-ipconnect.de)
14:14:22 <ski> dminuoso : hm. i think one way to represent a coroutine might be something like `newtype C o = MkC (Foo -> (Bar -> C o) -> o)', where `Foo' is the partial input the coroutine accepts, and `Bar' is what it produces after yielding again, and `o' is the final answer type. `C o' is the state type of the coroutine, while suspended
14:14:55 <merijn> tbh, tussenvoegsel is one of those Dutch words that just makes me more and more pleased with the language, the more I ponder it
14:15:20 <tomsmeding> juxtajoiner
14:15:31 × freeside quits (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 268 seconds)
14:16:02 <merijn> tussen already is (in)between on its own, and voegsel is (literally) grout, but that's also a woefully inadequate translation :p
14:16:43 <tomsmeding> merijn: isn't it from the verb "tussen voegen"
14:17:09 <tomsmeding> I hope the name has more to do with "invoegen" than with "een voeg" :')
14:18:05 <merijn> tomsmeding: It can be both, that's the beauty!
14:19:30 zer0bitz joins (~zer0bitz@dsl-hkibng32-54fb48-32.dhcp.inet.fi)
14:19:54 zer0bitz__ joins (~zer0bitz@196.244.192.59)
14:21:22 ft joins (~ft@p508dbd59.dip0.t-ipconnect.de)
14:22:36 × zer0bitz_ quits (~zer0bitz@196.244.192.59) (Ping timeout: 255 seconds)
14:22:52 <ski> merijn : the word reminds me slightly of "Tussmørke"/"Tussmørker"/"Tussmörker" (meaning "twilight", "crepuscule". both dawn and dusk. the time when "thursar" ("giants") could be out and about)
14:23:38 × zer0bitz quits (~zer0bitz@dsl-hkibng32-54fb48-32.dhcp.inet.fi) (Ping timeout: 246 seconds)
14:24:14 × vpan quits (~0@212.117.1.172) (Quit: Leaving.)
14:24:49 <Square> What other things, than explicit signatures / error handling, are monadic IO good for?
14:25:07 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
14:25:25 Chioque joins (~mansur@175.136.30.124)
14:25:59 azimut joins (~azimut@gateway/tor-sasl/azimut)
14:26:31 <merijn> Square: Well, ensuring purity for one? ;)
14:27:18 <merijn> Square: basically, it enforces a separation between "evaluation" (haskell expressions) and "execution" (execution of side-effects)
14:28:08 freeside joins (~mengwong@bb115-66-48-84.singnet.com.sg)
14:28:53 <maerwald> merijn: why call it side-effects?
14:28:56 <ski> one of the main points of monads (in programming) is knowing when you're *not* using some particular kind of effect. (another is ability to define custom-tailored effects)
14:29:37 <merijn> maerwald: Well, effects, I suppose
14:29:48 <merijn> maerwald: Because sloppy writing while doing other things ;)
14:30:18 <maerwald> I like to think of Haskell as side-effect free
14:30:34 <Square> merijn, right. I think i get the part that the type encodes the (side) effects. But I was just curious if it added some extra functionality of sorts.
14:30:34 <maerwald> if I want side effects, I can go back to C
14:30:40 Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542)
14:31:06 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
14:31:06 × califax quits (~califax@user/califx) (Remote host closed the connection)
14:31:06 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
14:31:06 × jpds2 quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
14:31:19 <tomsmeding> Square: the fact that an IO computation is a value that you can pass around, I guess?
14:31:24 moonsheep joins (~user@user/moonsheep)
14:31:27 azimut joins (~azimut@gateway/tor-sasl/azimut)
14:31:28 califax joins (~califax@user/califx)
14:31:36 <tomsmeding> % let action = print 42 in sequence (replicate 4 action)
14:31:36 <yahb2> 42 ; 42 ; 42 ; 42 ; [(),(),(),()]
14:31:45 <moonsheep> how can I bind a raw socket to an interface with the network package?
14:31:47 jpds2 joins (~jpds@gateway/tor-sasl/jpds)
14:31:57 <moonsheep> bind takes a SocketAddress sa, but there is only one instance of it
14:32:01 <moonsheep> (SockAddr)
14:32:07 <tomsmeding> I've sometimes used the ability to put an IO action in a data structure, though admittedly not often
14:32:09 <merijn> Square: Well, it basically means you can "store" effectful computation inside data structure and otherwise pass them as first class values
14:32:26 <merijn> Square: For example, try this in ghci: map print [1..10] !! 3
14:32:28 × freeside quits (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 252 seconds)
14:32:32 <tomsmeding> merijn: see my message above
14:32:36 <ski> @quote world's.best.imperative
14:32:37 <lambdabot> SPJ says: Haskell is the world's best imperative language.
14:33:24 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
14:33:45 <merijn> tomsmeding: Storing it in data structures not super often, but the ability to pass them around as arguments to functions all the time
14:34:20 <merijn> tomsmeding: The above example ends up executing them all, my example illustrates the separation by only doing one
14:34:41 <ski> Square : you *can* achieve the same effect with thunks (parameterless function values), in a language with side-effects. but it's very easy to screw up, and people don't tend to think of that in terms of separation of evaluation and execution
14:34:46 <Square> The explicit signature, or impossible to do IO in the dark, is pretty strong indeed.
14:35:00 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
14:35:32 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
14:37:03 <ski> (iirc, LWT in OCaml, as well as CML (Concurrent ML) in SML, which both use a `bind' operation, did deviate from how you'd expect a monadic separation to behave, when i looked into that, years ago. might've changed since, though)
14:37:58 × fserucas|eod quits (~fserucas|@2001:8a0:6d00:2500:4717:7619:c4e9:3aa2) (Ping timeout: 252 seconds)
14:38:07 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
14:38:16 zer0bitz joins (~zer0bitz@dsl-hkibng32-54fb48-32.dhcp.inet.fi)
14:38:45 <moonsheep> does no one here know how to represent the address to bind an AF_PACKET RAW_SOCKET to?
14:39:50 <moonsheep> I understand I have to instance SocketAddress, but what to?
14:40:08 <moonsheep> how do those bytes have to look like?
14:40:26 <moonsheep> are they just the MAC address and a protocol number concatted?
14:40:48 × InstX1 quits (~Liam@c-98-208-218-119.hsd1.fl.comcast.net) (Ping timeout: 268 seconds)
14:41:28 <moonsheep> actually I don't care for it to be raw, datagram AF_PACKET sockets are fine too
14:41:50 × zer0bitz__ quits (~zer0bitz@196.244.192.59) (Ping timeout: 246 seconds)
14:44:38 zer0bitz_ joins (~zer0bitz@196.244.192.61)
14:44:45 <merijn> moonsheep: What's the correct representation for C?
14:45:09 <merijn> moonsheep: You'd probably have to dig into the network source to see how things are done and work it out (and ideally make a PR for the docs when you do ;))
14:45:56 <moonsheep> does that mean that it has to have the exact memory layout the C struct is?
14:46:01 <moonsheep> *has
14:46:22 <geekosaur> you probably need to know that representation to instance it properly
14:46:24 <merijn> moonsheep: the SockAddr constructors are internally converted to the C struct (I assume)
14:46:35 <moonsheep> oh yeah didn't think to look how those are implemented
14:46:49 <merijn> moonsheep: I'm guessing there's no SockAddr constructor implemented for AF_PACKET/AF_RAW because no one has used them
14:46:57 <moonsheep> yeah
14:47:05 <moonsheep> anyway, this seems to be it https://man7.org/linux/man-pages/man7/packet.7.html (sockaddr_ll)
14:47:09 <merijn> moonsheep: I would not be surprised if those are included for "completeness" sake, but no one has actually done/used this
14:47:41 <merijn> moonsheep: In my experience it probably shouldn't be too hard to extend network to support this (well, assuming you're comforting with the C APIs and C programming)
14:47:46 shriekingnoise joins (~shrieking@186.137.167.202)
14:48:00 <merijn> Would be a nice PR, because that'd be a neat feature to have properly in network
14:48:24 <moonsheep> yeah
14:48:25 × zer0bitz quits (~zer0bitz@dsl-hkibng32-54fb48-32.dhcp.inet.fi) (Ping timeout: 252 seconds)
14:48:37 <moonsheep> I want to learn more about low level networking stuff, but C is just
14:48:38 <moonsheep> ugh
14:48:49 <moonsheep> well to be fair the issue is not as much C itself but the poorly designed interface
14:48:57 <moonsheep> and atrocious naming conventions
14:49:16 <merijn> Yes :p
14:49:18 <moonsheep> haskell just makes these things nicer by giving you more tools to abstract them away
14:49:27 <merijn> I did some stuff with AF_PACKET in C a year or so ago, it was messy
14:50:14 × acidjnk quits (~acidjnk@p200300d6e7137a61d962e1cf9864f38d.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
14:50:57 <moonsheep> btw why is Network.Socket.ByteString a thing? it just seems entirely identical to Network.Socket.Address but with unecessarily specialized SockAddr
14:51:12 <moonsheep> (I'm talking about the sendTo/recvFrom functions)
14:51:54 × razetime quits (~quassel@117.193.0.120) (Quit: No Ping reply in 180 seconds.)
14:52:12 <moonsheep> damn the implementation of pokeSockAddr looks ugly as hell
14:52:38 <moonsheep> what do all the {-# LINE xxxx "whatever" #-} mean?
14:53:18 razetime joins (~quassel@117.193.0.120)
14:53:46 <moonsheep> other than that it seems fairly straightforward
14:53:48 <moonsheep> uh
14:53:51 <moonsheep> I'm gonna give this a shot
14:54:36 <geekosaur> typically those are inserted by a preprocessor, which here implies the code is generated by hsc2hs or similar
14:55:02 <moonsheep> would that preprocessor make the job any easier?
14:55:05 <moonsheep> what is hsc?
14:55:18 × random-jellyfish quits (~random-je@user/random-jellyfish) (Quit: Client closed)
14:55:25 <moonsheep> looks interesting
14:55:29 <geekosaur> haskell with extra annotations to convert and unpack/pack C structs
14:55:40 <geekosaur> with help from the C compiler
14:55:41 × jpds2 quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
14:55:55 <moonsheep> sounds like exactly what I want
14:56:05 <geekosaur> (so it's guaranteed to get the right lengths and offsets because it gets that information from gcc)
14:56:13 <moonsheep> alright I'm going to clone network and try to patch it, instead of doing some externel ad-hoc solution
14:57:09 <merijn> moonsheep: Basically, hsc produces a C program that prints Haskell code with a bunch of inserted "sizeof"s, so the final haskell code will have all the appropriate sizes/offsets for whatever C compiler/ABI you're using
14:57:25 <moonsheep> that's perfect
14:57:33 <merijn> (and potentially inlining ifdefs, etc.)
14:59:08 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 255 seconds)
15:00:23 jpds2 joins (~jpds@gateway/tor-sasl/jpds)
15:01:13 freeside joins (~mengwong@bb115-66-48-84.singnet.com.sg)
15:01:41 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
15:04:41 <tomsmeding> haskell code that generates c code that prints haskell code?
15:04:49 <tomsmeding> what's the longest chain of consecutive \ in the hsc source
15:05:56 × freeside quits (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 248 seconds)
15:06:09 × Chioque quits (~mansur@175.136.30.124) (Quit: WeeChat 3.7.1)
15:08:33 × tessier quits (~treed@98.171.210.130) (Ping timeout: 268 seconds)
15:08:37 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
15:09:07 Sgeo joins (~Sgeo@user/sgeo)
15:09:45 Chioque joins (~mansur@175.136.30.124)
15:10:49 zeenk joins (~zeenk@2a02:2f04:a105:5d00:c862:f190:2ea:d494)
15:10:55 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:3053:4575:ae1c:cfd9)
15:11:38 fserucas|eod joins (~fserucas|@2001:818:e376:a400:fb92:70c1:dd88:c7d7)
15:11:47 <lortabac> I'm profiling the memory usage of a program to investigate a memory leak. The problem is that the leak is very slow, the growing region in the graph always appears under OTHER
15:11:53 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
15:12:41 × L29Ah quits (~L29Ah@wikipedia/L29Ah) (Ping timeout: 252 seconds)
15:13:01 <lortabac> in order to make the relevant cost center apparent I guess I'd need to run the application for multiple days, which is not feasible on my computer
15:14:24 <lortabac> is there some way to solve this problem? something like hiding the biggest non-relevant cost centers or maybe a better visualization tool
15:15:20 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:3053:4575:ae1c:cfd9) (Ping timeout: 260 seconds)
15:15:38 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
15:15:47 × motherfsck quits (~motherfsc@user/motherfsck) (Quit: quit)
15:16:09 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
15:17:58 L29Ah joins (~L29Ah@wikipedia/L29Ah)
15:18:17 <merijn> lortabac: Maybe? How much did you dig through the GHC user guide on profiling?
15:18:36 <merijn> There's a whole bunch of knobs to tweak, iirc
15:20:18 <lortabac> I haven't read 100% of the user guide section on profiling, I guess I can't avoid it
15:20:49 × Xeroine quits (~Xeroine@user/xeroine) (Ping timeout: 260 seconds)
15:20:58 <merijn> lortabac: tbh, the user guide is one of the most underrated pieces of the haskell/ghc ecosystem :p
15:21:26 <lortabac> apparently heap profiling can also be produced as event logs, let me try it
15:21:42 <merijn> lortabac: I don't recall if speedscope supported memory profiling too
15:22:02 motherfsck joins (~motherfsc@user/motherfsck)
15:22:03 moonsheep parts (~user@user/moonsheep) (ERC 5.4 (IRC client for GNU Emacs 28.2))
15:22:05 × califax quits (~califax@user/califx) (Ping timeout: 255 seconds)
15:24:00 califax joins (~califax@user/califx)
15:24:09 × chele quits (~chele@user/chele) (Remote host closed the connection)
15:24:38 × Chioque quits (~mansur@175.136.30.124) (Quit: WeeChat 3.7.1)
15:26:04 × Maeda quits (~Maeda@91-161-10-149.subs.proxad.net) (Quit: BRB)
15:26:51 <lortabac> now I only need a couple of hours to rebuild the whole ecosystem with -eventlog :)
15:27:38 Xeroine joins (~Xeroine@user/xeroine)
15:29:04 Maeda joins (~Maeda@91-161-10-149.subs.proxad.net)
15:30:34 × Maeda quits (~Maeda@91-161-10-149.subs.proxad.net) (Client Quit)
15:31:00 Maeda joins (~Maeda@91-161-10-149.subs.proxad.net)
15:33:51 freeside joins (~mengwong@bb115-66-48-84.singnet.com.sg)
15:36:49 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
15:37:52 <merijn> Hey, at least cabal can now automatically rebuild missing profiling stuff that's missing :p
15:38:01 <merijn> That wasn't the case pre-v2 :p
15:38:54 × freeside quits (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 260 seconds)
15:39:46 <schuelermine[m]> does anybody else have a problem where Cabal doesn’t build the Hackage docs for QuickCheck and leads to Hackage docs for anything depending on it not being buildable?
15:39:51 geekosaur remembers that. and the special "World" target to make it reuild everything
15:40:14 <geekosaur> docs are apparently broken in 3.8
15:40:31 <schuelermine[m]> oh
15:40:34 <schuelermine[m]> :(
15:41:36 <geekosaur> I had cabal configured to build docs and it eventually failed with an assertion error that's not supposed to happen in a release version
15:42:02 × zer0bitz_ quits (~zer0bitz@196.244.192.61) (Read error: Connection reset by peer)
15:42:02 <geekosaur> but that was with HEAD built supposedly as a release version
15:42:04 gmg joins (~user@user/gehmehgeh)
15:42:27 geekosaur submitted himself as a guinea pig for the new XDG support
15:42:48 <geekosaur> (speaking of, I need to rebuild everything again at some point with docs disabled and see if it all works)
15:53:59 freeside joins (~mengwong@bb115-66-48-84.singnet.com.sg)
15:55:05 random-jellyfish joins (~random-je@user/random-jellyfish)
15:58:46 euandreh joins (~Thunderbi@179.214.113.107)
16:00:04 × mimi1vx[m] quits (~osukupmat@2001:470:69fc:105::2:418d) (Quit: You have been kicked for being idle)
16:00:53 × Maeda quits (~Maeda@91-161-10-149.subs.proxad.net) (Quit: brb)
16:01:23 Maeda joins (~Maeda@91-161-10-149.subs.proxad.net)
16:02:11 rendar joins (~Paxman@user/rendar)
16:02:15 moonsheep joins (~user@user/moonsheep)
16:02:31 <ski> (`hsc' is a groveller)
16:02:45 <rendar> an author said that J lang (successor of APL, with "normal" symbols) is "haskell compressed", do you agree?
16:03:03 <moonsheep> how would you guys prefer AF_PACKET addresses to be implemented? as another constructor of SockAddr, or a separate type that instances SockAddress?
16:03:04 × vglfr quits (~vglfr@145.224.100.100) (Read error: Connection reset by peer)
16:03:17 vglfr joins (~vglfr@145.224.100.100)
16:04:45 <merijn> rendar: I would definitely *not* consider J "haskell compressed" :p
16:04:49 <merijn> It's a neat language, though
16:05:14 <rendar> ahaha
16:05:43 <rendar> well, that author i think referred to the fact that with J you compose symbols (functions on data) the same way you compose haskel functions (words)
16:06:09 <moonsheep> well for now I'll just add it as another constructor, it seems easier
16:10:16 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:3053:4575:ae1c:cfd9)
16:10:46 <tomsmeding> rendar: more like Husk https://github.com/barbuz/Husk/wiki/Commands
16:11:50 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:c3bb:6c84:6165:ec98) (Quit: WeeChat 2.8)
16:14:13 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 252 seconds)
16:14:25 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
16:14:32 × troydm quits (~troydm@host-176-37-124-197.b025.la.net.ua) (Ping timeout: 268 seconds)
16:15:53 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:3053:4575:ae1c:cfd9) (Remote host closed the connection)
16:19:14 × random-jellyfish quits (~random-je@user/random-jellyfish) (Quit: Client closed)
16:22:32 <moonsheep> does this look good? https://paste.tomsmeding.com/Zmo6S5cj
16:23:01 <moonsheep> apparently hardware addresses are not necessarily our beloved 6-byte address, and can be up to 8 bytes long which is really annoyin
16:23:40 nate4 joins (~nate@98.45.169.16)
16:23:56 zer0bitz joins (~zer0bitz@196.244.192.62)
16:25:05 <moonsheep> s/yin/ying/
16:26:50 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 246 seconds)
16:27:19 × ph88 quits (~ph88@ip5f5af71f.dynamic.kabel-deutschland.de) (Ping timeout: 260 seconds)
16:28:25 ph88 joins (~ph88@2a02:8109:9e00:71d0:a90d:e7d5:fe91:a32a)
16:28:43 × nate4 quits (~nate@98.45.169.16) (Ping timeout: 268 seconds)
16:29:17 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
16:30:20 × Techcable quits (~Techcable@user/Techcable) (Ping timeout: 246 seconds)
16:30:51 × chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
16:32:55 chexum joins (~quassel@gateway/tor-sasl/chexum)
16:33:11 × califax quits (~califax@user/califx) (Remote host closed the connection)
16:36:54 × ph88 quits (~ph88@2a02:8109:9e00:71d0:a90d:e7d5:fe91:a32a) (Ping timeout: 252 seconds)
16:37:52 × zeenk quits (~zeenk@2a02:2f04:a105:5d00:c862:f190:2ea:d494) (Ping timeout: 252 seconds)
16:38:30 InstX1 joins (~Liam@2601:6c4:4081:54f0:c9a9:2cf7:f581:1191)
16:39:34 × teo quits (~teo@user/teo) (Ping timeout: 260 seconds)
16:39:43 <c_wraith> moonsheep: making a list field strict is essentially useless. And the Maybe field being strict is.. only of questionable use
16:40:23 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 255 seconds)
16:40:33 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
16:40:55 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
16:41:07 <moonsheep> I have no idea about strictness business, I'm simply trying to make it look sort of similar to code that I haven't written and don't understand :p
16:41:34 × phma quits (phma@2001:5b0:210d:6148:bdc4:3c24:81d2:404a) (Read error: Connection reset by peer)
16:42:33 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
16:42:49 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
16:42:49 zeenk joins (~zeenk@188.26.82.148)
16:43:47 polo joins (~polo@pool-100-11-18-203.phlapa.fios.verizon.net)
16:44:42 phma joins (~phma@host-67-44-208-151.hnremote.net)
16:44:47 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
16:45:05 califax joins (~califax@user/califx)
16:45:51 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
16:49:53 jakalx joins (~jakalx@base.jakalx.net)
16:51:11 × phma quits (~phma@host-67-44-208-151.hnremote.net) (Read error: Connection reset by peer)
16:51:17 × polo quits (~polo@pool-100-11-18-203.phlapa.fios.verizon.net) (Ping timeout: 276 seconds)
16:54:22 Lycurgus joins (~juan@user/Lycurgus)
16:54:37 phma joins (~phma@2001:5b0:210f:1678:6fe2:e8ab:3dd5:da93)
16:54:37 × freeside quits (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 268 seconds)
17:01:08 × zeenk quits (~zeenk@188.26.82.148) (Ping timeout: 246 seconds)
17:01:09 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:3053:4575:ae1c:cfd9)
17:01:15 zeenk2 joins (~zeenk@2a02:2f04:a206:9700:de2a:390b:d890:3767)
17:01:23 <moonsheep> alright, I've gotten something to compile
17:01:27 <moonsheep> I'm gonna do some tests now
17:01:48 <moonsheep> is there some easy way to run the executable produced by `stack build` with sudo?
17:02:03 <moonsheep> obviously can't run stack with sudo, because it's going to try to install its own GHC, recompile everything ,etc.
17:02:23 <moonsheep> I need root to be able to create raw sockets
17:04:22 <monochrom> Bypass stack, find where the exe is and sudo it directly? Even copy it out to a directory you prefer?
17:04:46 <moonsheep> well yeah that's what I'm doing, but I was wondering if there's not a more convenient way
17:04:54 <monochrom> Is there also a "stack install" that does the latter?
17:04:56 freeside joins (~mengwong@bb115-66-48-84.singnet.com.sg)
17:05:01 <moonsheep> the path is very strange, and there's a directory named with what looks suspiciously like a hash
17:05:07 <moonsheep> I assume it may constnatly change?
17:05:17 <moonsheep> is there at least some way to get the executable path reliably?
17:05:20 <monochrom> (This is what's wrong with "projects" and "build tools". What about deployment?)
17:05:27 <moonsheep> true
17:05:51 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
17:06:07 <moonsheep> ah found it https://stackoverflow.com/questions/47852911/haskell-stack-locate-the-executable
17:07:08 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Client Quit)
17:08:12 nunggu joins (~q@user/nunggu)
17:08:53 × califax quits (~califax@user/califx) (Remote host closed the connection)
17:09:27 califax joins (~califax@user/califx)
17:09:37 Guest75 joins (~Guest75@178.141.177.81)
17:09:54 × freeside quits (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 260 seconds)
17:11:16 dfee joins (~dfee@162-227-164-101.lightspeed.sntcca.sbcglobal.net)
17:12:25 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:3053:4575:ae1c:cfd9) (Remote host closed the connection)
17:12:54 tzh joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net)
17:13:56 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 252 seconds)
17:14:55 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 260 seconds)
17:15:02 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
17:15:33 × razetime quits (~quassel@117.193.0.120) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
17:17:02 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
17:20:23 × MajorBiscuit quits (~MajorBisc@c-001-027-007.client.tudelft.eduvpn.nl) (Ping timeout: 246 seconds)
17:20:59 Tuplanolla joins (~Tuplanoll@91-159-68-194.elisa-laajakaista.fi)
17:25:17 × mvk quits (~mvk@2607:fea8:5ce3:8500::4b68) (Ping timeout: 255 seconds)
17:32:06 jakalx parts (~jakalx@base.jakalx.net) ()
17:32:14 jakalx joins (~jakalx@base.jakalx.net)
17:33:23 <moonsheep> success! https://imgur.com/a/CFQOutx
17:34:12 <moonsheep> no clue what LLC is
17:35:48 <moonsheep> https://paste.tomsmeding.com/Lh6d5MyE
17:36:07 <moonsheep> still need to make type families for eth_p_all = 3 and arphrd_ether = 1
17:36:20 zeenk joins (~zeenk@5.12.217.54)
17:36:30 × zeenk2 quits (~zeenk@2a02:2f04:a206:9700:de2a:390b:d890:3767) (Ping timeout: 260 seconds)
17:37:13 <moonsheep> if I manage to clean up the mess I've created in the network package, I might submit a patch
17:37:27 mvk joins (~mvk@2607:fea8:5ce3:8500::4b68)
17:39:48 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
17:40:07 freeside joins (~mengwong@bb115-66-48-84.singnet.com.sg)
17:40:42 <geekosaur> I presume it's the same as the next level of protocol decode (Logical Link Control)
17:42:25 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
17:42:28 × Guest75 quits (~Guest75@178.141.177.81) (Quit: Client closed)
17:44:54 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 260 seconds)
17:46:08 polo_ joins (~polo@pool-100-11-18-203.phlapa.fios.verizon.net)
17:46:36 <moonsheep> why does wireshark think it's LLC though?
17:46:55 <moonsheep> I don't think I have control over that 0004 word that is emitted by send
17:46:59 <moonsheep> I guess that's just something linux does?
17:47:56 × zeenk quits (~zeenk@5.12.217.54) (Quit: Konversation terminated!)
17:47:56 econo joins (uid147250@user/econo)
17:48:47 <geekosaur> might be the closest you get to raw ethernet packets according to the ethernet spec
17:49:50 <moonsheep> sounds reasonable
17:50:28 × Kaiepi quits (~Kaiepi@108.175.84.104) (Ping timeout: 252 seconds)
17:51:07 <shapr> GOOD MORNING
17:51:13 <shapr> is it time for more Haskell code?
17:51:41 <shapr> moonsheep: oh, I used to know the answer to that
17:51:45 shapr thinks hard
17:51:53 <shapr> LLC means "logical link control"
17:53:32 polo__ joins (~polo@pool-100-11-18-203.phlapa.fios.verizon.net)
17:53:35 × polo__ quits (~polo@pool-100-11-18-203.phlapa.fios.verizon.net) (Changing host)
17:53:35 polo__ joins (~polo@user/polo)
17:53:37 polo__ is now known as money
17:53:44 <shapr> I think there's a bit that gets flipped to tell you whether it's an Ethernet packet or a very old school other kind of packet
17:53:46 <[exa]> shapr: pls do more haskell code yes
17:54:05 × money quits (~polo@user/polo) (Client Quit)
17:54:07 <shapr> o hi [exa] !
17:54:10 <shapr> How you doing?
17:54:20 × polo_ quits (~polo@pool-100-11-18-203.phlapa.fios.verizon.net) (Ping timeout: 276 seconds)
17:55:28 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:3053:4575:ae1c:cfd9)
17:56:23 <shapr> I should write a blog post about the library cdsmith and I worked on
17:57:05 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
17:58:05 × cfricke quits (~cfricke@user/cfricke) (Ping timeout: 260 seconds)
17:59:04 <moonsheep> shapr: I mean, I know what it means, I just don't know why it's there/Who put it there/why
18:02:54 <Rembane> Maybe there's a RFC about it somewhere?
18:03:37 × titibandit quits (~titibandi@xdsl-87-78-8-6.nc.de) (Remote host closed the connection)
18:04:04 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
18:04:57 azimut joins (~azimut@gateway/tor-sasl/azimut)
18:08:09 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:3053:4575:ae1c:cfd9) (Remote host closed the connection)
18:08:12 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
18:09:45 MajorBiscuit joins (~MajorBisc@2a02-a461-129d-1-193d-75d8-745d-e91e.fixed6.kpn.net)
18:10:49 <geekosaur> another thing to consider is that very old ethernet cards let you output nearly anything, but modern ones are smart and do much of the framing themselves so you have to output something compatible with that
18:13:56 acidjnk joins (~acidjnk@p200300d6e7137a61a1c25cbd352f97cb.dip0.t-ipconnect.de)
18:18:02 × ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 255 seconds)
18:18:50 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
18:20:13 ec_ joins (~ec@gateway/tor-sasl/ec)
18:20:37 jao joins (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
18:21:09 detuneattune joins (~detuneatt@user/detuneattune)
18:22:47 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:3053:4575:ae1c:cfd9)
18:23:48 moonsheep parts (~user@user/moonsheep) (ERC 5.4 (IRC client for GNU Emacs 28.2))
18:24:47 × MajorBiscuit quits (~MajorBisc@2a02-a461-129d-1-193d-75d8-745d-e91e.fixed6.kpn.net) (Ping timeout: 246 seconds)
18:25:14 × nunggu quits (~q@user/nunggu) (Ping timeout: 255 seconds)
18:25:16 × beteigeuze quits (~Thunderbi@a79-169-109-107.cpe.netcabo.pt) (Ping timeout: 268 seconds)
18:26:24 nunggu joins (~q@user/nunggu)
18:33:45 Techcable joins (~Techcable@user/Techcable)
18:36:22 <shapr> aw, I missed moonsheep
18:36:31 <shapr> I was gonna ask for a link to the project so I could engage my brain
18:36:32 <shapr> dang
18:36:42 <shapr> @message moonsheep is there a link to your project? I want to know more!
18:36:42 <lambdabot> Maybe you meant: messages messages-loud messages?
18:36:47 <shapr> @tell moonsheep is there a link to your project? I want to know more!
18:36:48 <lambdabot> Consider it noted.
18:37:03 <EvanR> Set a course for brain warp 9. Engage.
18:39:28 beteigeuze joins (~Thunderbi@a79-169-109-107.cpe.netcabo.pt)
18:40:25 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
18:42:16 jakalx joins (~jakalx@base.jakalx.net)
18:44:10 × beteigeuze quits (~Thunderbi@a79-169-109-107.cpe.netcabo.pt) (Ping timeout: 260 seconds)
18:44:56 jmdaemon joins (~jmdaemon@user/jmdaemon)
18:45:09 × manwithl- quits (~manwithlu@194.177.28.176) (Remote host closed the connection)
18:46:56 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:3053:4575:ae1c:cfd9) (Remote host closed the connection)
18:47:28 × freeside quits (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 268 seconds)
18:49:31 manwithluck joins (~manwithlu@194.177.28.176)
18:51:27 bontaq joins (~user@ool-45779fe5.dyn.optonline.net)
18:55:27 × chexum quits (~quassel@gateway/tor-sasl/chexum) (Quit: No Ping reply in 180 seconds.)
18:56:42 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
18:57:17 azimut joins (~azimut@gateway/tor-sasl/azimut)
18:58:00 chexum joins (~quassel@gateway/tor-sasl/chexum)
19:01:00 × Lycurgus quits (~juan@user/Lycurgus) (Quit: Exeunt https://tinyurl.com/4m8d4kd5)
19:01:17 freeside joins (~mengwong@bb115-66-48-84.singnet.com.sg)
19:03:55 <[exa]> shapr: that looked like some decent networking finally
19:04:03 <[exa]> or maybe sploits
19:07:38 Kaiepi joins (~Kaiepi@108.175.84.104)
19:11:52 nate4 joins (~nate@98.45.169.16)
19:13:43 <EvanR> is mapM and mapM_ completely redundant, i.e. should I use traverse, for, and for_ instead in all cases where I'd use mapM. If there happens to be a monad
19:14:39 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
19:14:41 <EvanR> should mapM be excised from brain
19:16:03 <Rembane> They are shorter though, less to type.
19:17:04 × nate4 quits (~nate@98.45.169.16) (Ping timeout: 268 seconds)
19:17:33 <[exa]> EvanR: sometimes you want to scream MONAD MONAD MONAD
19:17:46 <[exa]> and mapM is precisely for that opportunity
19:17:47 <EvanR> dammit, mapM_ is in prelude and for_ is not
19:18:49 <EvanR> good point
19:19:25 × manwithluck quits (~manwithlu@194.177.28.176) (Quit: ZNC 1.8.2 - https://znc.in)
19:19:27 <[exa]> anyway afaik the consensus is to use traverse unless dire circumstances arise
19:19:38 <[exa]> (hm traverse_ isn't in prelude either :( )
19:21:15 manwithluck joins (~manwithlu@194.177.28.176)
19:30:10 troydm joins (~troydm@host-176-37-124-197.b025.la.net.ua)
19:31:07 × acidjnk quits (~acidjnk@p200300d6e7137a61a1c25cbd352f97cb.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
19:32:33 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
19:34:31 <dsal> I feel so bad every time I use for_
19:35:05 <EvanR> because you're "evaluating a bunch of stuff just for the side effects?" xD
19:35:27 <dsal> Yeah. I didn't come to Haskell to write for_ loops.
19:36:28 <[exa]> lol
19:37:47 × terrorjack quits (~terrorjac@2a01:4f8:1c1e:509a::1) (Ping timeout: 248 seconds)
19:39:44 terrorjack joins (~terrorjac@2a01:4f8:1c1e:509a::1)
19:46:52 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
19:47:26 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:3053:4575:ae1c:cfd9)
19:47:38 azimut joins (~azimut@gateway/tor-sasl/azimut)
19:48:43 wootehfoot joins (~wootehfoo@user/wootehfoot)
19:52:49 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:3053:4575:ae1c:cfd9) (Ping timeout: 252 seconds)
19:53:01 × detuneattune quits (~detuneatt@user/detuneattune) (Read error: Connection reset by peer)
19:58:56 × mvk quits (~mvk@2607:fea8:5ce3:8500::4b68) (Ping timeout: 252 seconds)
20:06:55 detuneattune joins (~detuneatt@user/detuneattune)
20:07:14 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 260 seconds)
20:08:44 × califax quits (~califax@user/califx) (Ping timeout: 255 seconds)
20:09:16 × detuneattune quits (~detuneatt@user/detuneattune) (Client Quit)
20:09:25 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
20:10:06 califax joins (~califax@user/califx)
20:10:37 detuneattune joins (~detuneatt@user/detuneattune)
20:12:47 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
20:15:39 × werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 268 seconds)
20:16:06 × motherfsck quits (~motherfsc@user/motherfsck) (Remote host closed the connection)
20:17:21 werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
20:18:07 × freeside quits (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 268 seconds)
20:19:49 freeside joins (~mengwong@bb115-66-48-84.singnet.com.sg)
20:22:11 Guest647 is now known as money
20:28:03 <tomsmeding> I mean, sometimes you have to :p
20:30:13 × jmdaemon quits (~jmdaemon@user/jmdaemon) (Quit: ZNC 1.8.2 - https://znc.in)
20:30:23 waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
20:32:01 × euandreh quits (~Thunderbi@179.214.113.107) (Quit: euandreh)
20:32:25 euandreh joins (~Thunderbi@179.214.113.107)
20:32:47 jmdaemon joins (~jmdaemon@user/jmdaemon)
20:33:29 × jmdaemon quits (~jmdaemon@user/jmdaemon) (Remote host closed the connection)
20:34:11 nate4 joins (~nate@98.45.169.16)
20:34:41 jmdaemon joins (~jmdaemon@user/jmdaemon)
20:38:22 Guest84 joins (~Guest84@23.19.117.56)
20:38:36 <dolio> What's the problem?
20:39:08 pavonia joins (~user@user/siracusa)
20:39:13 <dolio> Like, for_ is how I calculate the free variables of something.
20:39:19 × nate4 quits (~nate@98.45.169.16) (Ping timeout: 260 seconds)
20:39:44 <dolio> (Possibly not for_ literally, but something equivalent.)
20:44:53 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
20:46:26 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
20:47:08 <[Leary]> I like for_. My only complaint is that more often what I actually want is `mfor = flip foldMap` or `apfor xs f = getAp $ mfor xs (Ap . f)`.
20:48:06 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:3053:4575:ae1c:cfd9)
20:51:45 acidjnk joins (~acidjnk@p200300d6e7137a61a1c25cbd352f97cb.dip0.t-ipconnect.de)
20:52:16 zeenk joins (~zeenk@2a02:2f04:a213:900:ec6b:90ab:f67c:4c1a)
20:53:09 <dsal> The name just doesn't taste good to me. I still use it.
20:53:47 <dsal> The weirdest thing is that people use it for traversing a Maybe. If you think of Maybe as a zero-or-one container, that sort of works, I guess.
20:55:55 <dolio> Yeah, it's nice for that, too.
20:56:35 random-jellyfish joins (~random-je@user/random-jellyfish)
21:00:56 × jpds2 quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 255 seconds)
21:12:04 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:3053:4575:ae1c:cfd9) (Remote host closed the connection)
21:21:12 × dtman34 quits (~dtman34@2601:447:d080:83c8:a3db:9010:bf80:cdf5) (Quit: ZNC 1.8.2+deb2+b1 - https://znc.in)
21:21:33 dtman34 joins (~dtman34@2601:447:d080:83c8:24bc:55ba:13b9:cc55)
21:23:50 <c_wraith> before the FTP proposal went through, people used to ask for whenJust_ a lot. Including me. Not realizing it was traverse_
21:26:49 × bgs quits (~bgs@212-85-160-171.dynamic.telemach.net) (Remote host closed the connection)
21:28:13 <dsal> Yeah, I did a similar thing where I gave it a name that was a little easier to read than `traverse_` everywhere. Otherwise, my code would just be all the permutations of coerce and traverse and fmap and bind.
21:31:10 × money quits (sid532813@user/polo) (Killed (molybdenum.libera.chat (Nickname regained by services)))
21:35:05 × InstX1 quits (~Liam@2601:6c4:4081:54f0:c9a9:2cf7:f581:1191) (Ping timeout: 260 seconds)
21:35:35 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
21:37:19 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
21:38:22 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
21:40:39 InstX1_ joins (~Liam@c-98-208-218-119.hsd1.fl.comcast.net)
21:40:52 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Client Quit)
21:42:21 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
21:42:29 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
21:42:36 × shriekingnoise quits (~shrieking@186.137.167.202) (Ping timeout: 268 seconds)
21:45:55 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
21:48:36 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
21:48:40 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:3053:4575:ae1c:cfd9)
21:56:04 × Xeroine quits (~Xeroine@user/xeroine) (Read error: Connection reset by peer)
21:56:12 Guest6024 joins (sid532813@id-532813.tinside.irccloud.com)
21:56:25 sammelweis joins (~quassel@c-68-48-18-140.hsd1.mi.comcast.net)
21:57:56 Xeroine joins (~Xeroine@user/xeroine)
22:02:17 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
22:03:21 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
22:03:30 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:3053:4575:ae1c:cfd9) (Remote host closed the connection)
22:06:32 chromoblob joins (~user@37.113.164.122)
22:06:43 mvk joins (~mvk@2607:fea8:5ce3:8500::4b68)
22:09:23 × random-jellyfish quits (~random-je@user/random-jellyfish) (Ping timeout: 260 seconds)
22:12:04 × causal quits (~user@50.35.83.177) (Quit: WeeChat 3.7.1)
22:18:31 goober joins (~goober@90-231-13-185-no3430.tbcn.telia.com)
22:21:13 <iteratee_> I have a question about linear types
22:21:17 iteratee_ is now known as iteratee
22:21:50 <Rembane> iteratee: Go ahead! Someone here should be able to answer it. :)
22:22:22 <iteratee> The description says that "Passing x to a linear function" is linear, but in what I've been experimenting, that doesn't seem quite accurate.
22:22:25 <EvanR> sorry iteratee_ already referred to the question, it's gone
22:22:57 <iteratee> EvanR: I have "Many" questions about linear types.
22:23:43 <iteratee> I think it would be more accurate to say "Passing x to a linear function and using the result linearly"
22:23:53 <davean> I'm worse off, I got an answer about linear types.
22:25:04 <iteratee> Which is sometimes what you want, but it tends to infect your program because you have a value that you must consume linearly, and you do by passing it to a linear function, but now you have to track the linearity of the result, even if you don't care any more.
22:25:52 <EvanR> I vaguely remember the details of this were in the linear haskell paper
22:26:02 <EvanR> detailed caveats
22:26:05 <iteratee> Is there a way to annotate a function as: a %1 -> %Many b? So that I can consume the a linearly, but I'm allowed to use the result non-linearly?
22:26:55 <iteratee> The restriction makes sense. If I put the linear argument into a data structure or a newtype, I shouldn't be able to just break linearity.
22:28:24 × freeside quits (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 260 seconds)
22:29:20 × myme quits (~myme@40.51-175-185.customer.lyse.net) (Quit: WeeChat 3.7.1)
22:30:54 myme joins (~myme@40.51-175-185.customer.lyse.net)
22:30:59 <iteratee> But If I'm enforcing linearity of a random number generator, I'd like you to be able to compute x * x when x is random.
22:32:02 <iteratee> I guess you can use a GADT wrapper for the return type as a crutch for now.
22:32:41 <geekosaur> isn't there something for that?
22:33:12 <iteratee> data RandResult g a where RandResult :: g %1 -> a -> RandResult
22:33:26 × biberu quits (~biberu@user/biberu) (Read error: Connection reset by peer)
22:33:28 <iteratee> geekosaur: Yes, see above^
22:33:47 <geekosaur> https://hackage.haskell.org/package/linear-base-0.3.0/docs/Prelude-Linear.html#g:16
22:36:02 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
22:38:06 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 268 seconds)
22:38:30 biberu joins (~biberu@user/biberu)
22:41:34 × myme quits (~myme@40.51-175-185.customer.lyse.net) (Remote host closed the connection)
22:42:43 × zeenk quits (~zeenk@2a02:2f04:a213:900:ec6b:90ab:f67c:4c1a) (Quit: Konversation terminated!)
22:43:30 myme joins (~myme@40.51-175-185.customer.lyse.net)
22:45:10 beteigeuze joins (~Thunderbi@bl14-81-220.dsl.telepac.pt)
22:50:29 <iteratee> geekosaur: Thanks, that's interesting, and I ended up doing something like that in my code.
22:51:09 × TonyStone quits (~TonyStone@cpe-74-76-51-197.nycap.res.rr.com) (Ping timeout: 260 seconds)
22:51:26 <iteratee> But it still enforces linear discipline. I can pass a linear Int (Or any Dupable) to as many linear functions as I want, but I can't pass it to a nonlinear function.
22:53:18 <iteratee> I think what I want is Ur
22:56:20 <geekosaur> possibly `forget`?
22:57:10 freeside joins (~mengwong@bb115-66-48-84.singnet.com.sg)
23:03:09 × gmg quits (~user@user/gehmehgeh) (Quit: Leaving)
23:04:25 TonyStone joins (~TonyStone@cpe-74-76-51-197.nycap.res.rr.com)
23:04:36 <iteratee> No, I just needed to write some helper functions that return (Ur a) instead of a.
23:05:12 <iteratee> Then you can use monadic linear bind and use the linear value inside the continuation.
23:05:55 ph88 joins (~ph88@2a02:8109:9e00:71d0:a90d:e7d5:fe91:a32a)
23:10:01 × chromoblob quits (~user@37.113.164.122) (Ping timeout: 252 seconds)
23:10:06 nate4 joins (~nate@98.45.169.16)
23:11:02 libertyprime joins (~libertypr@118-92-78-165.dsl.dyn.ihug.co.nz)
23:15:04 × nate4 quits (~nate@98.45.169.16) (Ping timeout: 260 seconds)
23:18:05 × chomwitt quits (~chomwitt@2a02:587:7a0a:c00:1ac0:4dff:fedb:a3f1) (Ping timeout: 255 seconds)
23:25:42 bilegeek joins (~bilegeek@2600:1008:b022:192c:fa51:6abb:9a1d:6b9e)
23:26:41 × ph88 quits (~ph88@2a02:8109:9e00:71d0:a90d:e7d5:fe91:a32a) (Quit: Leaving)
23:27:12 × machinedgod quits (~machinedg@clnet-p10-126.ikbnet.co.at) (Ping timeout: 252 seconds)
23:28:37 × Tuplanolla quits (~Tuplanoll@91-159-68-194.elisa-laajakaista.fi) (Quit: Leaving.)
23:33:30 × urdh quits (~urdh@user/urdh) (*.net *.split)
23:33:30 × dixie quits (~dixie@real.wilbury.sk) (*.net *.split)
23:33:30 × swistak quits (~swistak@185.21.216.141) (*.net *.split)
23:33:30 × blades quits (~blades@204.48.29.163) (*.net *.split)
23:33:30 × mhatta quits (~mhatta@www21123ui.sakura.ne.jp) (*.net *.split)
23:33:30 × darkling quits (~darkling@2001-ba8-1f1-f0e6-0-0-0-2.autov6rev.bitfolk.space) (*.net *.split)
23:33:30 × leah2 quits (~leah@vuxu.org) (*.net *.split)
23:33:30 × energizer quits (~energizer@user/energizer) (*.net *.split)
23:33:30 × dumptruckman quits (~dumptruck@45-33-69-234.ip.linodeusercontent.com) (*.net *.split)
23:33:30 × pieguy128 quits (~pieguy128@bras-base-mtrlpq5031w-grc-50-65-93-192-212.dsl.bell.ca) (*.net *.split)
23:33:38 dixie joins (~dixie@real.wilbury.sk)
23:33:40 dumptruckman joins (~dumptruck@45-33-69-234.ip.linodeusercontent.com)
23:33:41 mhatta joins (~mhatta@www21123ui.sakura.ne.jp)
23:33:41 darkling joins (~darkling@2001-ba8-1f1-f0e6-0-0-0-2.autov6rev.bitfolk.space)
23:34:05 pieguy128 joins (~pieguy128@65.93.192.212)
23:34:06 leah2 joins (~leah@vuxu.org)
23:34:11 swistak joins (~swistak@185.21.216.141)
23:34:24 blades joins (~blades@204.48.29.163)
23:34:30 energizer joins (~energizer@user/energizer)
23:35:50 urdh joins (~urdh@user/urdh)
23:44:48 × Cale quits (~cale@cpef48e38ee8583-cm30b7d4b3fc20.cpe.net.cable.rogers.com) (Read error: Connection reset by peer)
23:45:13 Cale joins (~cale@cpef48e38ee8583-cm30b7d4b3fc20.cpe.net.cable.rogers.com)
23:47:18 machinedgod joins (~machinedg@clnet-b05-118.ikbnet.co.at)
23:50:38 shriekingnoise joins (~shrieking@186.137.167.202)
23:52:43 × werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 268 seconds)

All times are in UTC on 2022-11-11.