Home liberachat/#haskell: Logs Calendar

Logs on 2022-12-05 (liberachat/#haskell)

00:09:49 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:dc47:5d05:725b:66f2)
00:11:02 × emmanuelux quits (~emmanuelu@user/emmanuelux) (Quit: au revoir)
00:11:10 guest` joins (~user@host-140-28.ilcub310.champaign.il.us.clients.pavlovmedia.net)
00:17:15 wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com)
00:17:15 × wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
00:17:15 wroathe joins (~wroathe@user/wroathe)
00:18:00 guest` parts (~user@host-140-28.ilcub310.champaign.il.us.clients.pavlovmedia.net) (ERC (IRC client for Emacs 27.1))
00:18:20 × Chai-T-Rex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
00:18:48 merijn joins (~merijn@c-001-001-017.client.esciencecenter.eduvpn.nl)
00:19:29 Chai-T-Rex joins (~ChaiTRex@user/chaitrex)
00:19:53 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
00:20:13 × Guest|43 quits (~Guest|43@c-73-182-192-142.hsd1.ma.comcast.net) (Quit: Connection closed)
00:22:12 × zant quits (~zant@62.214.20.26) (Ping timeout: 248 seconds)
00:23:29 × freeside quits (~mengwong@103.252.202.193) (Ping timeout: 268 seconds)
00:23:58 × crazazy`` quits (~user@130.89.171.62) (Ping timeout: 256 seconds)
00:25:14 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 255 seconds)
00:25:14 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 255 seconds)
00:25:49 stiell joins (~stiell@gateway/tor-sasl/stiell)
00:28:24 chexum_ joins (~quassel@gateway/tor-sasl/chexum)
00:28:29 × chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
00:29:17 × califax quits (~califax@user/califx) (Ping timeout: 255 seconds)
00:29:52 jero98772 joins (~jero98772@2800:484:1d80:d8ce:efcc:cbb3:7f2a:6dff)
00:31:13 califax joins (~califax@user/califx)
00:32:48 bilegeek_ joins (~bilegeek@33.sub-174-208-225.myvzw.com)
00:33:03 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
00:34:02 × perrierjouet quits (~perrier-j@modemcable048.127-56-74.mc.videotron.ca) (Quit: WeeChat 3.7.1)
00:35:23 perrierjouet joins (~perrier-j@modemcable048.127-56-74.mc.videotron.ca)
00:35:29 × bilegeek quits (~bilegeek@2600:1008:b020:f89e:4697:1f09:bb25:aea6) (Ping timeout: 255 seconds)
00:35:30 freeside joins (~mengwong@103.252.202.193)
00:37:03 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 268 seconds)
00:37:34 × waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 256 seconds)
00:39:11 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 255 seconds)
00:40:08 × freeside quits (~mengwong@103.252.202.193) (Ping timeout: 268 seconds)
00:40:35 zant joins (~zant@62.214.20.26)
00:43:45 ballast joins (~ballast@rrcs-24-43-123-92.west.biz.rr.com)
00:45:17 <ballast> How come there isn't an instance (Ord k, Monoid m) => Monoid (Map k (m a))
00:45:30 <ballast> does this conflict with the other instance definition?
00:45:56 <jackdk> yes
00:46:08 <jackdk> https://hackage.haskell.org/package/monoidal-containers
00:46:47 <ballast> Was there a reason why they didn't just make a newtype in containers?
00:47:18 <jackdk> (caveats: foldMap-ing a bunch of singleton maps can be slow, foldMap-ing a bunch of singleton HashMaps can be O(n^2), it depends on `lens` because it wants to provide `At` and `AsEmpty` instances, etc.)
00:47:36 <jackdk> probably because "go write a library" is easier than "go change a core library"
00:48:00 <EvanR> Data.TotalMap has that Monoid instance
00:48:19 <EvanR> among many other instances
00:48:42 <ballast> Ah I didn't realize that it might have perf implications. Guess I'll just rewrite as a fold
00:48:53 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
00:49:17 <ballast> i like foldMap because it means i don't have to remember the difference between left and right
00:49:26 <EvanR> you could also do unionWith (<>)
00:49:57 <ballast> yeah i think i'll just do insertWith (<>)
00:50:27 <c_wraith> that instance looks like a kind error to me...
00:50:53 <ballast> wouldn't be surprised, i always get confused with how you're supposed to write monoid
00:51:06 × opticblast quits (~Thunderbi@secure-165.caltech.edu) (Quit: opticblast)
00:51:07 <c_wraith> did you mean (Map k m) ?
00:51:24 <jackdk> I literally only looked as far as `(Ord k, Monoid
00:51:28 <ballast> probably, seems the intent got through though :)
00:51:37 <jackdk> m) => Map` and guessed the rest
00:51:54 <EvanR> communication prevailed in spite of language
00:52:05 <c_wraith> Anyway, it seems like it would need intersection semantics. That would surprise a lot of people, I think
00:52:23 <ballast> intersection semantics?
00:52:28 <EvanR> unionWith results in intersection semantics? xD
00:52:28 <c_wraith> Which would explain why a total-map data structure would have an instance - it could actually have union semantics in that case.
00:52:52 mvk joins (~mvk@2607:fea8:5ce3:8500::efb)
00:53:24 <EvanR> fine I'll check the details
00:53:36 <c_wraith> Hmm. I think I got myself circled around backwards on that one.
00:53:42 × merijn quits (~merijn@c-001-001-017.client.esciencecenter.eduvpn.nl) (Ping timeout: 268 seconds)
00:53:45 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
00:54:00 × zant quits (~zant@62.214.20.26) (Ping timeout: 256 seconds)
00:54:28 <EvanR> doing a unionWith seems to satisfy the monoid law
00:54:30 <c_wraith> right. union with the empty set is a monoid, right.
00:55:07 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
00:58:33 <EvanR> 1. I can't seem to use class as a field name, so I tried NoFieldSelectors
00:58:54 <EvanR> 2. NoFieldSelectors doesn't seem to be a thing in ghc 8.10
00:59:18 <c_wraith> I think it was added in 9.2
00:59:23 waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
00:59:33 <EvanR> think it'll let me use class as a field name? xD
00:59:42 <c_wraith> no
01:00:00 <c_wraith> I could be wrong, though!
01:00:15 × califax quits (~califax@user/califx) (Remote host closed the connection)
01:01:38 califax joins (~califax@user/califx)
01:01:56 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 256 seconds)
01:02:14 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
01:05:53 × thyriaen quits (~thyriaen@2a01:aea0:dd4:470d:6245:cbff:fe9f:48b1) (Quit: Leaving)
01:06:39 slntsa joins (~slntsa@2001:999:488:5cc:3116:f149:10de:6194)
01:07:05 × califax quits (~califax@user/califx) (Ping timeout: 255 seconds)
01:07:18 freeside joins (~mengwong@103.252.202.193)
01:08:04 × ballast quits (~ballast@rrcs-24-43-123-92.west.biz.rr.com) (Quit: Client closed)
01:10:14 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
01:11:25 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 260 seconds)
01:11:34 × gurkenglas quits (~gurkengla@p548ac72e.dip0.t-ipconnect.de) (Ping timeout: 256 seconds)
01:14:17 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
01:14:39 califax joins (~califax@user/califx)
01:15:16 <EvanR> if think about singleton or empty maps, the default Monoid instance that uses union is a bit weird
01:15:50 <EvanR> the implied base Monoid there always takes the left argument unless it's empty
01:16:20 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
01:18:01 razetime joins (~quassel@49.207.211.219)
01:24:36 × xff0x quits (~xff0x@ai071162.d.east.v6connect.net) (Ping timeout: 248 seconds)
01:26:10 <dsal> The default monoid of maps has caused me bugs several times.
01:26:14 dsal isn't good at learning
01:34:45 opticblast joins (~Thunderbi@secure-165.caltech.edu)
01:35:20 × waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 255 seconds)
01:38:29 × dibblego quits (~dibblego@haskell/developer/dibblego) (Ping timeout: 255 seconds)
01:38:43 dibblego joins (~dibblego@122-199-1-30.ip4.superloop.com)
01:38:43 × dibblego quits (~dibblego@122-199-1-30.ip4.superloop.com) (Changing host)
01:38:43 dibblego joins (~dibblego@haskell/developer/dibblego)
01:39:30 × mvk quits (~mvk@2607:fea8:5ce3:8500::efb) (Quit: Going elsewhere)
01:52:15 × slntsa quits (~slntsa@2001:999:488:5cc:3116:f149:10de:6194) (Quit: Client closed)
01:55:12 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
01:57:51 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
02:07:38 xff0x joins (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp)
02:10:43 accord joins (uid568320@id-568320.hampstead.irccloud.com)
02:12:11 × freeside quits (~mengwong@103.252.202.193) (Ping timeout: 264 seconds)
02:14:39 × jao quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 260 seconds)
02:24:25 freeside joins (~mengwong@103.252.202.193)
02:26:01 × Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection)
02:29:14 × freeside quits (~mengwong@103.252.202.193) (Ping timeout: 260 seconds)
02:32:05 Erutuon joins (~Erutuon@user/erutuon)
02:41:44 freeside joins (~mengwong@103.252.202.193)
02:41:48 × brettgilio quits (~brettgili@x-irc.gq) (Quit: The Lounge - https://thelounge.chat)
02:42:15 brettgilio joins (~brettgili@x-irc.gq)
02:46:12 × freeside quits (~mengwong@103.252.202.193) (Ping timeout: 248 seconds)
02:47:20 × beteigeuze quits (~Thunderbi@bl14-81-220.dsl.telepac.pt) (Ping timeout: 256 seconds)
02:49:26 merijn joins (~merijn@c-001-001-017.client.esciencecenter.eduvpn.nl)
02:51:01 freeside joins (~mengwong@103.252.202.193)
02:52:07 ddb1 is now known as ddb
02:56:51 <probie> I'd go so far as to say the monoid instance for Map is wrong. It should be (Ord k, Semigroup v) => Monoid (Map k v) and have `(<>) = M.unionWith (<>)`. You can still emulate the current behaviour by just coercing to `Map k (Data.Semigroup.First v)`
02:58:18 <dsal> There's more than one valid way to do it, so having anything is kind of wrong.
02:59:02 <albet70> tomsmeding, I found a way to put raw html code inside textarea with js, reading html text file with Hasekll and put it into textarea with js is a wrong way, lots of escape characters, the right way is using js to fetch the content of that text file as plain text and put it into textarea
03:03:11 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
03:04:28 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
03:04:36 <probie> dsal: Maybe? I'd still rather the wrong one which encompasses all the other "sane
03:04:45 <probie> " implementations
03:05:37 <dsal> Yeah. It's what I expected at least twice anyway.
03:07:52 iqubic joins (~avi@2601:602:9502:c70:5424:6247:46f4:3180)
03:14:51 × segfaultfizzbuzz quits (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 265 seconds)
03:18:41 <monochrom> Unpopular opinion: All of them are right. :)
03:18:59 img joins (~img@user/img)
03:20:14 <EvanR> is there a Monoid instance for Map which can't be implemented as a Monoid instance on the value type, plus unionWith (<>)
03:23:55 <jackdk> intersection?
03:24:03 <jackdk> Might only be a semigroup though
03:24:10 × merijn quits (~merijn@c-001-001-017.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
03:26:56 <EvanR> yeah there's no mempty
03:28:21 × jero98772 quits (~jero98772@2800:484:1d80:d8ce:efcc:cbb3:7f2a:6dff) (Remote host closed the connection)
03:28:34 waleee joins (~waleee@h-176-10-137-138.NA.cust.bahnhof.se)
03:30:19 <maerwald[m]> Combine it with Default and pick a random value
03:30:32 money_ joins (~money@user/polo)
03:31:32 × money_ quits (~money@user/polo) (Client Quit)
03:34:54 finn_elija joins (~finn_elij@user/finn-elija/x-0085643)
03:34:54 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
03:34:54 finn_elija is now known as FinnElija
03:38:00 × img quits (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in)
03:39:01 × gentauro quits (~gentauro@user/gentauro) (Read error: Connection reset by peer)
03:40:16 <jackdk> instance (Universe k, Universe v, Ord k) => Monoid (Intersection (Map k v))
03:43:19 × terrorjack quits (~terrorjac@2a01:4f8:1c1e:509a::1) (Quit: The Lounge - https://thelounge.chat)
03:44:34 × machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 256 seconds)
03:44:40 terrorjack joins (~terrorjac@2a01:4f8:1c1e:509a::1)
03:44:53 gentauro joins (~gentauro@user/gentauro)
03:45:01 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
03:45:25 × waleee quits (~waleee@h-176-10-137-138.NA.cust.bahnhof.se) (Ping timeout: 260 seconds)
03:46:07 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
03:46:22 × Xeroine quits (~Xeroine@user/xeroine) (Ping timeout: 268 seconds)
03:47:24 × td_ quits (~td@83.135.9.35) (Ping timeout: 256 seconds)
03:47:51 Xeroine joins (~Xeroine@user/xeroine)
03:48:55 Kaipei joins (~Kaiepi@108.175.84.104)
03:49:14 td_ joins (~td@83.135.9.25)
03:50:55 <EvanR> or instance (UnMonoidable v, Ord k) => Monoid (Map k v) with the usual union behavior xD
03:54:16 × freeside quits (~mengwong@103.252.202.193) (Ping timeout: 252 seconds)
03:57:14 × rburkholder quits (~blurb@96.45.2.121) (Remote host closed the connection)
03:57:32 freeside joins (~mengwong@103.252.202.193)
04:00:02 wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com)
04:00:02 × wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
04:00:02 wroathe joins (~wroathe@user/wroathe)
04:06:06 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 256 seconds)
04:09:18 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
04:17:51 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
04:18:58 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
04:19:04 <probie> I don't think you want `Universe v`, but rather `Default v` (and hopefully `Semigroup v`)
04:20:54 <probie> A Map is equivalent to a pair of a Set of keys, and a function from elements in that set to values. That function is happy being `const def`
04:22:02 <jackdk> I see what you're saying, but I consider `Default` to be an evil class. May as well go `Monoid v` and then your map can use `intersectionWith (<>)`
04:23:49 <jackdk> https://www.haskellforall.com/2022/06/defaultable-map-applicative-wrapper-for.html if you want a "default" then carry it around with a type like this
04:24:42 <probie> Default bothers me too, because the only time I want a default (or alternatively, a "zero" or "identity"), it depends on another typeclass and as such, makes no sense on its own
04:26:01 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
04:27:15 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
04:28:29 mbuf joins (~Shakthi@49.204.138.176)
04:30:17 <jackdk> One of these days I will write up my "did you mean monoid?" rant
04:30:33 <jackdk> Until then, I will plug https://hackage.haskell.org/package/acme-default
04:31:58 jmdaemon joins (~jmdaemon@user/jmdaemon)
04:35:45 rburkholder joins (~blurb@96.45.2.121)
04:40:09 img joins (~img@user/img)
04:44:34 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 260 seconds)
04:46:14 aeroplane joins (~user@user/aeroplane)
04:50:50 <EvanR> class Inhabited a where something :: a -- xD
04:52:11 stevenxl joins (uid133530@id-133530.uxbridge.irccloud.com)
04:54:01 <probie> I'd be mostly ok with that. It doesn't imply any property about the inhabitant. But I don't see a "real" use for it in Haskell though
04:54:11 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
04:55:27 <probie> In Coq, Lean or Agda I could see it being useful
04:56:11 fizbin joins (~fizbin@user/fizbin)
04:56:17 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
05:13:06 × img quits (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in)
05:17:59 img joins (~img@user/img)
05:20:20 merijn joins (~merijn@c-001-001-017.client.esciencecenter.eduvpn.nl)
05:42:12 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 252 seconds)
05:44:27 bobbingbob joins (~dfadsva@2604:3d09:207f:f650::7b3a)
05:44:41 titibandit joins (~titibandi@xdsl-78-35-173-119.nc.de)
05:46:24 × fizbin quits (~fizbin@user/fizbin) (Ping timeout: 256 seconds)
05:49:14 × bobbingbob quits (~dfadsva@2604:3d09:207f:f650::7b3a) (Ping timeout: 246 seconds)
05:49:37 × nibelungen quits (~asturias@2001:19f0:7001:638:5400:3ff:fef3:8725) (Ping timeout: 256 seconds)
05:53:34 × merijn quits (~merijn@c-001-001-017.client.esciencecenter.eduvpn.nl) (Ping timeout: 252 seconds)
06:00:48 roboguy_ joins (~roboguy_@cpe-69-76-235-109.kc.res.rr.com)
06:02:23 lisbeths joins (uid135845@id-135845.lymington.irccloud.com)
06:10:16 Lycurgus joins (~juan@user/Lycurgus)
06:11:11 × img quits (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in)
06:12:04 × freeside quits (~mengwong@103.252.202.193) (Ping timeout: 260 seconds)
06:13:08 × bontaq quits (~user@ool-45779fe5.dyn.optonline.net) (Ping timeout: 248 seconds)
06:14:07 img joins (~img@user/img)
06:14:49 × Kaipei quits (~Kaiepi@108.175.84.104) (Read error: Connection reset by peer)
06:15:14 Kaipei joins (~Kaiepi@108.175.84.104)
06:24:12 takuan joins (~takuan@178-116-218-225.access.telenet.be)
06:26:28 × opticblast quits (~Thunderbi@secure-165.caltech.edu) (Ping timeout: 248 seconds)
06:28:24 × tomokojun quits (~tomokojun@37.19.210.31) (Quit: じゃあね〜。)
06:38:58 freeside joins (~mengwong@129.126.10.7)
06:43:39 × freeside quits (~mengwong@129.126.10.7) (Ping timeout: 265 seconds)
06:43:59 freeside joins (~mengwong@122.11.214.68)
06:47:09 chexum_ is now known as chexum
06:50:48 mncheckm joins (~mncheck@193.224.205.254)
06:51:32 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 248 seconds)
07:04:08 × roboguy_ quits (~roboguy_@cpe-69-76-235-109.kc.res.rr.com) (Quit: Leaving...)
07:08:23 × freeside quits (~mengwong@122.11.214.68) (Read error: Connection reset by peer)
07:08:40 Scraeling joins (~Scraeling@user/scraeling)
07:11:16 freeside joins (~mengwong@122.11.214.68)
07:12:49 × pyrex_ quits (~pyrex@2601:645:8781:1c90:a460:e23d:4864:da00) (Ping timeout: 252 seconds)
07:14:05 <xilo> hi, concept check: foldr const 'a' [1..5] this evaluates to const 1 (foldr const 'a' [2,..]) I assume foldr will not be evaluated due to const, so it must be legal expression, but it is not, why?
07:15:44 <int-e> :t foldr const
07:15:45 <lambdabot> Foldable t => b -> t b -> b
07:16:37 <int-e> xilo: it doesn't type-check because 'a' and the list elements do not have the same type
07:17:47 <xilo> I have to start typecheking before I ask, thank you, very much!
07:17:53 <int-e> And even your value-level reasoning in some untyped Haskell would reveal that: foldr const 'a' [] = 'a' can't have a different type from foldr const 'a' [1..5] = 1.
07:17:53 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 255 seconds)
07:18:36 <int-e> (That doesn't always work.)
07:19:04 ec joins (~ec@gateway/tor-sasl/ec)
07:23:27 kenran joins (~user@user/kenran)
07:23:38 × bilegeek_ quits (~bilegeek@33.sub-174-208-225.myvzw.com) (Quit: Leaving)
07:29:40 × ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
07:30:06 × kenran quits (~user@user/kenran) (Remote host closed the connection)
07:35:43 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
07:38:04 Guest|20 joins (~Guest|20@n220246254153.netvigator.com)
07:38:35 × Guest|20 quits (~Guest|20@n220246254153.netvigator.com) (Client Quit)
07:38:49 × bgs quits (~bgs@212-85-160-171.dynamic.telemach.net) (Remote host closed the connection)
07:43:48 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
07:45:22 × shriekingnoise quits (~shrieking@186.137.167.202) (Quit: Quit)
07:48:10 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
07:48:25 zant joins (~zant@62.214.20.26)
07:50:25 merijn joins (~merijn@c-001-001-017.client.esciencecenter.eduvpn.nl)
07:52:24 × Vajb quits (~Vajb@2001:999:504:3ad6:52a4:a3b5:32d8:e74d) (Read error: Connection reset by peer)
07:52:51 Vajb joins (~Vajb@hag-jnsbng11-58c3a5-27.dhcp.inet.fi)
07:55:55 acidjnk joins (~acidjnk@p200300d6e7137a4188c21b5678eecc17.dip0.t-ipconnect.de)
08:09:16 × accord quits (uid568320@id-568320.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
08:12:17 zeenk joins (~zeenk@2a02:2f04:a30d:4300::7fe)
08:17:45 lortabac joins (~lortabac@2a01:e0a:541:b8f0:12d6:dac:7863:eaa5)
08:18:48 mjs22 joins (~user@76.115.19.239)
08:18:58 mmhat joins (~mmh@p200300f1c73b5145ee086bfffe095315.dip0.t-ipconnect.de)
08:22:05 × lisbeths quits (uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity)
08:22:06 × freeside quits (~mengwong@122.11.214.68) (Read error: Connection reset by peer)
08:23:08 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
08:24:07 jakalx joins (~jakalx@base.jakalx.net)
08:24:16 <dminuoso> xilo: Additionally it might be helpful to think of `foldr f z` as replacing `:` with `f` and `[]` with `z` in a list.
08:25:17 <dminuoso> The type error would become apparent through that lens as well.
08:25:40 <dminuoso> https://upload.wikimedia.org/wikipedia/commons/3/3e/Right-fold-transformation.png
08:27:34 <mauke> not really, if you're not already thinking in terms of types
08:27:57 <mauke> (or is that in types of terms?)
08:28:17 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:12d6:dac:7863:eaa5) (Ping timeout: 256 seconds)
08:28:28 × xff0x quits (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 256 seconds)
08:34:03 <dminuoso> Well I guess it is with the understanding that `f` is not instantiated at multiple types, but all occurences must have the same type.\
08:36:24 × acidjnk quits (~acidjnk@p200300d6e7137a4188c21b5678eecc17.dip0.t-ipconnect.de) (Ping timeout: 256 seconds)
08:40:59 fserucas joins (~fserucas@212.157.222.2)
08:43:26 lortabac joins (~lortabac@2a01:e0a:541:b8f0:f94e:37fa:6c10:51fa)
08:44:40 xff0x joins (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp)
08:47:03 × Lycurgus quits (~juan@user/Lycurgus) (Quit: Exeunt https://tinyurl.com/4m8d4kd5)
08:48:36 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:dc47:5d05:725b:66f2) (Remote host closed the connection)
08:52:29 machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net)
08:52:40 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
08:53:37 cfricke joins (~cfricke@user/cfricke)
08:54:13 acidjnk joins (~acidjnk@p200300d6e7137a4179c4b3a1e8b4bdac.dip0.t-ipconnect.de)
09:00:03 × JonathanWatson[m quits (~jjwmatrix@2001:470:69fc:105::2:a544) (Quit: You have been kicked for being idle)
09:00:53 freeside joins (~mengwong@122.11.214.68)
09:03:56 <albet70> why take and drop don't use start with 0?
09:04:23 <albet70> take 0 "abc" == "a", use position as paramter not number
09:05:20 <albet70> in other language there is slice, like slice (3,5) "abcdef" == "de"
09:05:58 <albet70> "abcdef"[3:5] == 'de'
09:06:17 <mauke> > take (5 - 3) (drop 3 "abcdef")
09:06:19 <lambdabot> "de"
09:07:07 <mauke> > let slice a b = take (b - a) . drop a in slice 3 5 "abcdef
09:07:09 <lambdabot> <hint>:1:59: error:
09:07:09 <lambdabot> lexical error in string/character literal at end of input
09:07:12 <mauke> > let slice a b = take (b - a) . drop a in slice 3 5 "abcdef"
09:07:14 <lambdabot> "de"
09:08:18 <dminuoso> albet70: Because the words `take` and `drop` fit nicely with the number of elements, rather than index.
09:08:37 <dminuoso> I for one take the stance that all this 0-based indexing nonsense is one of the biggest mistakes done in computing. :(
09:10:07 <mauke> 1 based indexing is weird and confusing
09:10:16 <mauke> like American elevators
09:10:56 Heyting joins (~Heyting@193.198.16.217)
09:11:09 <dminuoso> The sheer amount of off-by-one errors induced because we have 0 based indexing has probably created damages in the billions in the history of mankind.
09:11:14 MajorBiscuit joins (~MajorBisc@c-001-009-004.client.tudelft.eduvpn.nl)
09:12:36 <dminuoso> One-based indexing conforms to how humans communicate and think. Given that code ideally communicates thought and intent to humans, that's an impedance mismatch.
09:12:47 <dminuoso> *zero based indexing is an impedance mismatch
09:13:07 × Heyting quits (~Heyting@193.198.16.217) (Remote host closed the connection)
09:13:23 <mauke> the sheer amount of obesity caused by food is a clear sign that eating food is a mistake
09:13:59 × freeside quits (~mengwong@122.11.214.68) (Ping timeout: 264 seconds)
09:14:41 × Vajb quits (~Vajb@hag-jnsbng11-58c3a5-27.dhcp.inet.fi) (Read error: Connection reset by peer)
09:15:10 Vajb joins (~Vajb@2001:999:504:3ad6:52a4:a3b5:32d8:e74d)
09:15:17 <mauke> you're comparing 0-indexing against a hypothetical world without any indexing, not against 1-indexing
09:15:45 <mauke> that is, you're not counting errors induced by 1-based indexing
09:15:49 <dminuoso> Not sure where you inferred that from.
09:16:50 <mauke> <dminuoso> I for one take the stance that all this 0-based indexing nonsense is one of the biggest mistakes done in computing. :( <dminuoso> The sheer amount of off-by-one errors induced because we have 0 based indexing has probably created damages in the billions in the history of mankind.
09:17:15 <int-e> It's not like the off-by-one errors disappear with 1-based indexing. The fenceposts are still there.
09:17:29 <mauke> by the same logic you could argue that eating food is one of humanity's biggest mistakes because it causes obesity
09:17:37 <dminuoso> int-e: That's fair I suppose.
09:17:54 <mauke> but you're not counting starvation, i.e. issues caused by not eating
09:18:28 × kmein quits (~weechat@user/kmein) (Quit: ciao kakao)
09:19:55 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
09:20:20 kmein joins (~weechat@user/kmein)
09:34:33 × cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.7.1)
09:36:28 ec joins (~ec@gateway/tor-sasl/ec)
09:39:08 jargon_ joins (~jargon@174-22-207-8.phnx.qwest.net)
09:40:57 × jargon quits (~jargon@174-22-207-8.phnx.qwest.net) (Ping timeout: 268 seconds)
09:43:18 <albet70> fmap f (a,b) == (a, f b), is there a function work on a?
09:43:33 cfricke joins (~cfricke@user/cfricke)
09:43:37 <albet70> f' f(a,b) == (f a, b)
09:43:41 × mjs22 quits (~user@76.115.19.239) (Remote host closed the connection)
09:43:56 <dminuoso> You can use `first` and `second` respectively
09:44:27 michalz joins (~michalz@185.246.204.75)
09:44:50 <albet70> f [0,0,3,5,7] == [(0,0),(1,3),(4,5),(6,7)] I need this f function, but with that fmap would be very ugly
09:45:11 <albet70> I need an elegant way
09:46:16 <dminuoso> I would just handwrite that function.
09:47:59 <xerox> > first (^10) (10,3)
09:48:01 <lambdabot> (10000000000,3)
09:48:25 <dminuoso> albet70: Also Im not sure what the behavior is supposed to be.
09:49:04 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:111a:339b:4372:c307)
09:49:43 <albet70> findElementInList element alist = fmap fst $ filter ((== element) . snd) $ zip [0..(le ngth alist)] alist
09:49:56 <albet70> findElementInList '/' "/ab/c/d" == [0,3,5]
09:50:13 <albet70> slice (start, end) alist = drop start $ take end alist
09:50:42 <albet70> [0,3,5] is '/' index of "/ab/c/d"
09:50:50 kuribas joins (~user@ptr-17d51en2loyitf0zupv.18120a2.ip6.access.telenet.be)
09:51:06 × tzh quits (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
09:51:08 <albet70> I tried to write splitOn with that index
09:51:47 <albet70> let position = findElementInList '/' "/ab/c/d" in fmap (\x -> slice x url) $ zip <*> tail $ [0] <> position <> [length url] == ["","/ab","/c","/d"]
09:52:10 <albet70> url is "/ab/c/d"
09:52:37 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
09:52:45 chele joins (~chele@user/chele)
09:52:53 <albet70> so I need this f, f [0,0,3,5,7] == [(0,0),(1,3),(4,5),(6,7)] , then slice on it
09:53:10 <dminuoso> Where do the first elements of each tuple come from?
09:54:03 <albet70> the '/' index's next position
09:54:40 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:111a:339b:4372:c307) (Ping timeout: 260 seconds)
09:54:48 <chymera> hi guys, any idea how I can filter a list of data objects? I'm basically readin in a yaml, and I want to find whichever object matches a code.. I'm basically coming from python where that would be a simple list comprehension [a for a in mylist if a["code"]=="smth"]
09:55:04 <albet70> so [0,3,5] is '/' position, [(0,0), (1,3), (4,5), (5,7)]
09:55:46 <albet70> the tuple's second element is from the next position, and the first is from the previous position plus 1
09:56:10 <albet70> It's ugly I know, I have no idea now
09:56:36 <albet70> (6,7)
09:57:05 <mauke> albet70: https://hackage.haskell.org/package/base-4.17.0.0/docs/Data-Bifunctor.html#v:first
09:57:25 <dminuoso> albet70: `zip [1..]` gets you most of the way.
09:58:01 <dminuoso> Ah no hold on, you want something else
09:59:49 <mauke> chymera: [a | a <- mylist, code a == "smth"]
10:00:17 <dminuoso> % take 10 $ scanl (+) 0 [0..]
10:00:18 <yahb2> [0,0,1,3,6,10,15,21,28,36]
10:01:04 <dminuoso> % take 10 $ zip (scanl (+) 0 [0..]) ['a'..'z']
10:01:04 <yahb2> [(0,'a'),(0,'b'),(1,'c'),(3,'d'),(6,'e'),(10,'f'),(15,'g'),(21,'h'),(28,'i'),(36,'j')]
10:01:16 <dminuoso> albet70: This uses the description you gave, but produces different results.
10:01:34 <dminuoso> % take 10 $ scanl (+) 0 [1..]
10:01:34 <yahb2> [0,1,3,6,10,15,21,28,36,45]
10:01:46 <dminuoso> In particular your `4` looks wronng.
10:02:17 <dminuoso> albet70: Anyway, this has a large XY smell to it.
10:03:42 <chymera> mauke: thank you 💛
10:03:53 <mauke> why are we indexing into lists anyway? what's the overall goal?
10:04:11 <chymera> to find the item in the list I want to operate on
10:04:22 <mauke> heh, not you
10:04:29 <chymera> ?
10:04:31 <mauke> you're not using indices :-)
10:04:49 <dminuoso> chymera: `filter (== "smth) mylist`
10:04:52 <dminuoso> err
10:05:08 <dminuoso> % filter (> 0) mylist [-1, 0, 1, 2]
10:05:08 <yahb2> <interactive>:56:14: error: Variable not in scope: mylist :: [a1]
10:05:12 <dminuoso> % filter (> 0) [-1, 0, 1, 2]
10:05:12 <yahb2> [1,2]
10:05:17 <mauke> more like: filter (\a -> code a == "smth") mylist
10:05:58 <dminuoso> let p a = code a == "smth" in filter p mylist
10:06:31 <chymera> well ok, I don't want to operate on it in the sense of changing it, it's fine if it's immutable. I just need to reference the other items from the object to pass them on to other functions.
10:07:13 <mauke> chymera: my other comment was about albet70's code involving string slices
10:07:30 <chymera> it was just my idea of a toy project, it's the sort of thing that would work very easy with dictionaries. Maybe I came up with an example that's easy in python but hard in haskell :DD
10:07:31 <mauke> @undo [a | a <- mylist, code a == "smth"]
10:07:31 <lambdabot> concatMap (\ a -> if code a == "smth" then [a] else []) mylist
10:07:37 <mauke> @. pl undo [a | a <- mylist, code a == "smth"]
10:07:37 <lambdabot> flip (ap (if' . ("smth" ==) . code) return) [] =<< mylist
10:08:10 <mauke> @. unpl . pl undo [a | a <- mylist, code a == "smth"]
10:08:10 <lambdabot> (mylist >>= \ y -> (return >>= \ x2 -> return (if' ("smth" == code y) x2)) y [])
10:08:15 <mauke> perfect
10:08:52 sh1n joins (~sh1n@186.152.126.118)
10:10:31 <albet70> mauke , need a split function for Data.List
10:10:48 <albet70> tired of convert between Data.Text and Data.List
10:10:54 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
10:11:25 <albet70> now find the index function is ok, slice is ok, need the last step for split
10:11:46 <albet70> the index range
10:12:12 genjitsu41 is now known as mixfix41
10:12:15 <albet70> generate the index range from index list
10:12:33 freeside joins (~mengwong@103.252.202.193)
10:13:33 <mauke> albet70: no, what problem are you actually trying to solve?
10:13:34 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 260 seconds)
10:14:11 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
10:14:27 <albet70> "/ab/c/d".split("/") get ['', 'ab', 'c', 'd']
10:14:38 <mauke> in terms of the XY problem, splitting and slicing and Data.Text and Data.List are all in X
10:14:50 <mauke> why do you want to get that list? what is Y?
10:14:52 × xff0x quits (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 252 seconds)
10:15:26 <albet70> how you split a String in Haskell with specific character?
10:15:39 <mauke> some function in Data.List.Split, probably
10:15:47 <mauke> but why do you want to split a string on a character?
10:16:03 <albet70> did Data.List.Split come with std?
10:16:34 × perrierjouet quits (~perrier-j@modemcable048.127-56-74.mc.videotron.ca) (Quit: WeeChat 3.7.1)
10:16:38 <albet70> standard libraries
10:16:49 <mauke> depends on what you mean by standard libraries
10:16:56 <mauke> it's in the split package
10:17:05 <albet70> ok
10:17:43 <chymera> what's the difference betwen = and <- ?
10:17:51 <mauke> > splitOn "/" "/ab/c/d"
10:17:52 <lambdabot> ["","ab","c","d"]
10:18:00 perrierjouet joins (~perrier-j@modemcable048.127-56-74.mc.videotron.ca)
10:19:05 <mauke> chymera: depends on context, but generally = is for binding (like size = 42) and <- is for extracting values from something
10:20:00 <chymera> so I would be assigning the output of `concatMap (\ a -> if code a == "smth" then [a] else []) mylist` to a new variable via `=` and not via `let varname <-` right?
10:20:37 <int-e> yes, let bindings use '='.
10:20:38 <mauke> (except for pattern guards, which are weird)
10:21:04 × ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
10:21:10 <mauke> 'let x <-' is a syntax error
10:21:17 <int-e> But it's nice to have a non-recursive "let". :P
10:21:23 lisbeths joins (uid135845@id-135845.lymington.irccloud.com)
10:22:02 ec joins (~ec@gateway/tor-sasl/ec)
10:23:28 <mauke> chymera: technically, you never have "=" or "<-" by themselves. they are always part of the syntax of some surrounding construct
10:24:20 <chymera> hmmm... I keep getting `Couldn't match type ‘[MyFlag]’ with ‘MyFlag’` (I tried to remove most of the other things I'm doing at the same time https://bpa.st/VJNA ). As I understand it my flags variable is a list of objects, but the filtering function excpect it to just be an object? 🤔
10:25:00 <mauke> why concatMap?
10:25:09 <mauke> if you want to filter, then just use filter
10:25:42 <mauke> flags is not a list there, it's a Maybe
10:26:04 <chymera> ah, I thought a Maybe is just a modifiler, like it's a Maybe list :P
10:26:32 <mauke> Maybe is a modifier like [] is a modifier
10:26:53 <mauke> in fact, you can think of Maybe as a list of at most 1 element
10:27:09 <chymera> hm, ok, that makes sense.
10:28:25 <mauke> I would try something like: flags <- Data.Yaml.decodeThrow ymlData
10:29:30 <chymera> can't I add something like an assert statement? so have it just fail at some point and not have me continue to operate on Maybe for the rest of the code? Or it could just fail on the decodeThrow line? I actually thought tha's what decodeThrow would be doing, just throw an exception if it can't decode
10:29:50 <chymera> I only put the maybe in because otherwise it kept not running
10:30:05 Guest94 joins (~Guest94@4.red-83-36-45.dynamicip.rima-tde.net)
10:30:22 <mauke> with my code, that's what it should be doing (throw an exception)
10:31:18 <mauke> also, I suspect the use of 'error' in line 21 should be 'fail' instead, but I haven't used FromJSON before
10:33:20 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
10:33:34 <chymera> mauke: I think the code you proposed was what I was using initially, though I might have used let = instead of <- ... in any case it still fails: https://bpa.st/4ILA
10:34:13 <mauke> ah, that's because you commented out the fflags line
10:34:25 <mauke> now the compiler has no type information to deduce what flags should be
10:34:37 <chymera> so I can't print the flags list after I decode it?
10:34:46 <mauke> print (flags :: [MyFlag])
10:34:54 <chymera> oh..
10:35:02 <mauke> you just need some place in the code that nails down the type of flags
10:35:10 <chymera> so print won't work unles I tell it the type?
10:35:29 <mauke> either an explicit annotation like this, or (with the fflags line) the use of 'code' to access the elements
10:35:37 <merijn> print needs to know the type, generally that can be inferred, but not always
10:36:59 <chymera> ok, so print works the way you described, thanks :) though the code doesn't work after uncommenting the line for extracting the element I actually care about. LEt me check again for typos
10:37:21 <chymera> ah no it works, but I still need the typed print line
10:37:54 <mauke> :t concatMap
10:37:55 <lambdabot> Foldable t => (a -> [b]) -> t a -> [b]
10:38:10 <mauke> oh, it's grown polymorphic behind my back
10:38:20 gurkenglas joins (~gurkengla@p548ac72e.dip0.t-ipconnect.de)
10:38:27 <chymera> it doesn't work with just the normal print statement, but that's ok now that I know hwo to print :D https://bpa.st/CDDQ
10:38:43 <mauke> :t filter
10:38:44 <lambdabot> (a -> Bool) -> [a] -> [a]
10:39:04 <mauke> chymera: let fflags = filter (\a -> code a == "fr_1794") flags
10:39:09 <mauke> that should work without type annotations
10:40:10 <chymera> nice
10:41:01 <mauke> the issue is that the compiler needs to be able to figure out what type 'flags' actually is
10:41:22 <mauke> decodeThrow can return pretty much anything, as long as it is an instance of FromJSON
10:41:33 <mauke> and print can take pretty much anything, as long as it is an instance of Show
10:41:44 <mauke> that's the original ambiguity
10:42:06 × cheater quits (~Username@user/cheater) (Quit: BitchX: do not expose to open flame or fire)
10:42:09 <mauke> with the concatMap version, you can see (FromJSON (t0 MyFlag)) in the error message
10:42:40 <mauke> it has figured out that MyFlag is involved because you used 'code' to access the elements, but the container type t0 is unresolved
10:42:48 <mauke> because concatMap is generic over containers
10:42:53 cheater joins (~Username@user/cheater)
10:43:23 <mauke> but filter only works on lists, so from filter it gets [] and from code it gets MyFlag
10:44:54 <mauke> let fflags = concatMap (\ a -> if code a == "fr_1794" then [a] else []) (flags :: [MyFlag]) ... print fflags
10:44:58 <mauke> ^ that also would've worked
10:45:06 <chymera> mauke: It seems I can't prepend head to filter to make sure I just get the actual item and not a 1-length list. It also says it^s a typing error for some reason
10:45:17 <mauke> the type annotation isn't directly related to 'print'; it just has to be *somewhere*
10:45:35 <mauke> chymera: show me the code and error message
10:46:44 levinlevinlevin joins (~levin@213.206.188.232)
10:47:01 × son0p quits (~ff@2604:3d08:5b7f:5540::37af) (Ping timeout: 252 seconds)
10:47:19 <chymera> mauke: the next 2 lines after the print actually work, i.e. if I do the head part in the print call https://bpa.st/XOYQ
10:47:39 <mauke> oh, missing parentheses
10:47:46 <mauke> you're trying to call head with filter as an argument
10:47:58 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
10:47:59 <mauke> head (filter (\a -> code a == "fr_1794") flags)
10:48:04 <chymera> ok, yep, that works
10:49:03 <mauke> alternatively, you could use find
10:49:25 <mauke> case find (\a -> code a == "fr_1794") flags of { Nothing -> ...; Just fflag -> ... }
10:49:46 <chymera> does that have any advantages?
10:49:57 <mauke> it lets you handle the case when it finds nothing
10:50:10 <mauke> head on an empty list simply aborts your program
10:50:15 beteigeuze joins (~Thunderbi@bl14-81-220.dsl.telepac.pt)
10:50:26 <mauke> > head []
10:50:27 <lambdabot> *Exception: Prelude.head: empty list
10:51:32 <int-e> <head explodes>
10:52:34 <chymera> mauke: yeah, I think I'm happy with it just termination if it gets improper input.
10:52:41 <chymera> *terminating
10:52:49 <mauke> @src head
10:52:49 <lambdabot> head (x:_) = x
10:52:49 <lambdabot> head [] = error "Prelude.head: empty list"
10:52:59 <mauke> @src find
10:52:59 <lambdabot> find p = listToMaybe . filter p
10:55:20 <levinlevinlevin> Does lambdabot just evaluate Haskell expressions?
10:55:31 <merijn> levinlevinlevin: Define "just" :p
10:55:36 <mauke> no
10:55:40 <merijn> It does a bunch of other stuff too
10:55:43 <mauke> it can also show source code
10:55:53 <merijn> I mean, debatable :p
10:56:09 <mauke> and perform pointless code transformations
10:56:24 <levinlevinlevin> head [1,2,3]
10:56:26 <merijn> @src isn't actually showing the real source, just doing a database lookup of keywords to stored source snippets which may or may not be the actual source :p
10:56:26 <lambdabot> Source not found. My pet ferret can type better than you!
10:56:50 <levinlevinlevin> > head [1,2,3]
10:56:51 <int-e> @help src
10:56:51 <lambdabot> src <id>. Display the implementation of a standard function
10:56:51 <lambdabot> 1
10:57:02 <int-e> ...ah. yeah, it doesn't.
10:57:08 <chymera> ok, thanks for all your help, I can finally get to the attributes now :3
10:57:10 <levinlevinlevin> That's cool
10:57:14 <mauke> > last [0 ..]
10:57:20 <lambdabot> mueval-core: Time limit exceeded
10:57:27 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
10:57:47 <int-e> Though I think the definitions of the standard Prelude functions are from the Haskell report at least? Well, some older version, probably -98.
10:58:39 stiell joins (~stiell@gateway/tor-sasl/stiell)
10:58:57 <mauke> @quote
10:58:57 <lambdabot> skew says: feels slightly silly using crazy GADTs to build a mostly-statically correct type checker for a partially dynamic type system
10:59:39 <int-e> @src unsafePerformIO
10:59:39 <lambdabot> Source not found. Sorry.
10:59:57 <int-e> Phew. (I should do that in private chat.)
11:00:44 <mauke> @quote mauke
11:00:44 <lambdabot> mauke says: the first and foremost task of a haskell compiler is to break haskell programs
11:01:31 <mauke> I don't remember saying it, but it's good wisdom :-)
11:01:31 wqpc3 joins (~wqpc3@213.206.188.232)
11:02:08 <merijn> Man...today's AoC input is a PITA to parse
11:02:33 mauke laughs in unpack '(@1a@4)*'
11:02:57 <chymera> hm, ok no, actually not. So the filtering works fine on its own, but when I put the solution back together with the other stuff I was trying to figure out (argument parsing, which works on its onw), I now get a new error. It's not a namespace collision I think, I only use code in that one place ...https://bpa.st/VNIA
11:03:04 <merijn> mauke: Sure, doing it ghetto is fairly easy
11:03:08 <chymera> why is `code` a function now? or was it always a function?
11:03:14 <merijn> mauke: Trying to write a "proper" one is not
11:03:23 <chymera> sry
11:03:25 <chymera> wrong code
11:03:32 <mauke> chymera: record accessors are (mostly) functions
11:03:48 <chymera> there we go https://bpa.st/NQCA
11:04:29 <mauke> merijn: https://paste.tomsmeding.com/PyuxFW1C does that count?
11:04:41 <dminuoso> Is there a deepseq TH helper package?
11:05:16 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
11:05:16 × Chai-T-Rex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
11:05:16 × califax quits (~califax@user/califx) (Write error: Connection reset by peer)
11:05:43 <chymera> ah
11:05:46 <chymera> I think I have it
11:05:52 <chymera> it's in the function parameters
11:06:06 <chymera> yep
11:06:08 <chymera> that was it
11:06:10 stiell joins (~stiell@gateway/tor-sasl/stiell)
11:06:27 <chymera> wow, I can find simple errors on my own now. This is cool :D
11:06:41 Chai-T-Rex joins (~ChaiTRex@user/chaitrex)
11:06:55 <mauke> heh
11:07:00 califax joins (~califax@user/califx)
11:07:27 × wqpc3 quits (~wqpc3@213.206.188.232) (Quit: leaving)
11:09:07 wqpc3 joins (~wqpc3@213.206.188.232)
11:09:14 levinlevinlevin parts (~levin@213.206.188.232) ()
11:09:37 <chymera> what's the difference between print and PutStrLn?
11:10:03 <chymera> also, why does haskell sometimes use camelcase and sometimes normalcase? do these things mean different things?
11:10:40 <mauke> @src print
11:10:40 <lambdabot> print x = putStrLn (show x)
11:10:56 <mauke> chymera: define "normal"
11:10:56 <merijn> chymera: When does it use "normalcase"?
11:11:09 <chymera> print says print, and not Print
11:11:15 <mauke> ah
11:11:25 <chymera> I think in camelcase you capitalize the first letter if it's just a word, no?
11:11:26 <mauke> names that start with an uppercase letter are constants, not variables
11:11:33 <wqpc3> I know my question is not haskell related but does anyone know why i can see the ip of @levinlevinlevin
11:11:39 <chymera> and print is a variable? 0.o
11:11:43 <mauke> for sufficiently convoluted definitions of "constants" and "variables"
11:12:35 <mauke> wqpc3: no cloak (=> hostname not hidden), no reverse dns (=> can't show a name)
11:13:22 <mauke> chymera: consider 'foo = 42'. here foo is a "variable" and 42 is a "constant"
11:13:39 <mauke> I call it a variable because it's an arbitrary identifier bound to an expression
11:14:00 <mauke> similarly, "print" is just some name bound to a function
11:14:09 <mauke> and the function is the "real" constant
11:14:22 × califax quits (~califax@user/califx) (Quit: ZNC 1.8.2 - https://znc.in)
11:14:50 <chymera> hm, ok, I guess that can make sense.
11:15:01 califax joins (~califax@user/califx)
11:15:06 <mauke> you'll have to squint a bit
11:15:09 mauke handwaves wildly
11:15:32 <mauke> other example: data Bool = False | True
11:15:57 <mauke> this definition introduces three new "constants": the type Bool, and the values False and True
11:16:07 <chymera> also, if you look in the code above, apparently taking a variable, capitalizing the first letter and then prepending it with `maybe` does stuff to it? o.0 I never define `maybeAddon` but that already means something?
11:16:27 <chymera> *prefixing
11:16:33 <mauke> note that False is not an identifier you can rebind or anything (you can't say 'let False = ...')
11:17:03 <chymera> so whenever I do let ... = whatever I name it should be all lowercase?
11:17:07 <mauke> chymera: no magic here; maybeAddon is defined in line 36 of the paste
11:17:08 <dminuoso> chymera: Whether or not camelcase capitalizes the first letter is not standardized.
11:17:40 <mauke> chymera: it just has to start with a lowercase letter
11:17:54 <mauke> > let tRUE = 42 in tRUE -- OK
11:17:56 <lambdabot> 42
11:18:08 <mauke> > let TRUE = 42 in TRUE -- OK
11:18:10 <lambdabot> error: Not in scope: data constructor ‘TRUE’
11:18:55 xff0x joins (~xff0x@2405:6580:b080:900:3610:c321:ec1f:485b)
11:19:02 <mauke> this is what defines maybeAddon: interpretArgs (MyArgs code flip maybeAddon) =
11:19:13 <int-e> > let True = False in True
11:19:15 <lambdabot> True
11:19:26 <chymera> mauke: ah, ok
11:19:34 <chymera> yeah, I can just rename it to addon
11:19:39 <mauke> it's a local variable in the interpretArgs function, bound to the third value in MyArgs
11:19:44 <dminuoso> chymera: At the term level the first letter carries special meaning in that it differentiates between whats called data constructors and variables. For alpha-numeric, if it starts with an alpha upper character, it is a data constructor by rules of scoping, and if it starts with a lower character it is a variable by rules of scoping.
11:19:59 × wqpc3 quits (~wqpc3@213.206.188.232) (Ping timeout: 256 seconds)
11:20:13 <dminuoso> With operators if it starts ith a colon `:` it is a constructor, otherwise it is a variable too.
11:20:52 <dminuoso> The first sentence holds true on the type level too (that is if a type starts with an upper character, it is a type constructor, otherwise it is a type variable)
11:21:45 <mauke> :t filter
11:21:46 <lambdabot> (a -> Bool) -> [a] -> [a]
11:21:49 <mauke> ^ example of the latter
11:22:01 pflanze joins (~pflanze@159.100.249.232)
11:22:12 <mauke> the list elements can be any type 'a', but the predicate has to return a concrete type (namely Bool)
11:22:33 <dminuoso> The second sentence used to be true in GHC Haskell as well (with some exceptions like `[]`), nowadays if it starts with a special character in the type level, it is always a type constructor (equivalently you cant use symbols as type variables anymore)
11:22:41 mikoto-chan joins (~mikoto-ch@85-76-167-161-nat.elisa-mobile.fi)
11:22:46 <dminuoso> With -XTypeOperators enabled, of cours.e
11:22:54 <mauke> hmm ...
11:22:58 <dminuoso> Oh and I guess -> was a special exception too.
11:23:12 <mauke> :t filter :: (bool -> Bool) -> [bool] -> [bool]
11:23:12 <lambdabot> (bool -> Bool) -> [bool] -> [bool]
11:23:17 dextaa9 joins (~DV@user/dextaa)
11:23:17 <mauke> confusing, but technically legal
11:23:37 <mauke> "bool" is a type variable here (unrelated to "Bool")
11:23:50 <dminuoso> deepMerge :: IsIPRange ip => [ip] -> [ip]
11:23:59 <dminuoso> I sometimes like type variables with more than one character. :)
11:25:05 × dextaa quits (~DV@user/dextaa) (Ping timeout: 256 seconds)
11:25:05 dextaa9 is now known as dextaa
11:25:56 <dminuoso> chymera: So convention says we always use camel case, but whether the first character is capitalized denotes whether it is data/type constructor or not.
11:26:18 dminuoso sometimes uses snake_case for internal bindings not exported in a module
11:26:28 <dminuoso> Especially if they reside at the top level
11:27:31 <chymera> so I should be using camelcase for my variables? :(
11:27:53 <dminuoso> Up to you.
11:28:36 <mauke> I've been doing the advent-of-code problems in snake_case to see how much it irritates me
11:28:40 <dminuoso> If you adhere to camelcase you will have a lot more consistency if you start using pretty much anything outside your own code, be it from `base` or any other hackage library.
11:28:55 <mauke> (so far: not very much, but the standard library uses camelCaseEverywhere)
11:29:05 <dminuoso> But if you prefer your own style, it's up to you.
11:29:18 <chymera> in any case, thanks for your help. I think I finally got this do do something and prob need a break from big brain haskell now XD If you're looking for a script which takes a string and returns a string, here you go https://github.com/TheChymera/hflagcreate
11:29:42 <mauke> if you're hardcore, you can even go for names'like'this
11:29:48 <mauke> (like Oleg)
11:29:59 <dminuoso> chymera: I have a nice extension for you. RecordWildCards allows you to write that FromJSON instance much more safely.
11:30:02 <chymera> I really like snek case. it's nice and legible
11:30:33 <chymera> do you have an example?
11:30:35 <mauke> sadly kebap-case is not supported
11:31:14 × TonyStone quits (~TonyStone@cpe-74-76-57-186.nycap.res.rr.com) (Ping timeout: 265 seconds)
11:31:46 <chymera> kebab case?
11:31:54 <dminuoso> chymera: https://gist.github.com/dminuoso/fa1d35ce709c98749b6bc82b75a9d05a
11:31:54 <mauke> names-like-this-on-a-skewer
11:32:11 <dminuoso> chymera: The advantage of using ApplicativeDo + RecordWildCards, is that it directly and visibly ties each parser to the correct field.
11:32:13 Heyting joins (~Heyting@193.198.16.217)
11:32:27 <chymera> ah, never used that `-` is a character representing an operator
11:32:33 <chymera> also in haskell, I hope
11:32:41 <chymera> but now I am afraid XD
11:32:44 <dminuoso> Otherwise if you reordered the fields in MyFlag (say name comes before code), your FromJSON instance would silently type check, do the wrong thing, and it would be very hard to spot why.
11:32:46 <mauke> > a-b
11:32:48 <lambdabot> a - b
11:32:50 <mauke> (it's subtraction)
11:32:58 <dminuoso> chymera: similarly for `sample`
11:32:59 <chymera> phew, that was a close one
11:33:17 <chymera> the - I mean. I'm also confused why I need ++ instead of +
11:33:19 <dminuoso> And whether `-` denotes an operator is a more tricky question.
11:33:21 <dminuoso> IT depends.
11:33:23 <mauke> chymera: btw, isJust and fromJust are a code smell. they shouldn't be used
11:33:34 <dminuoso> % a = -1
11:33:34 <yahb2> <no output>
11:33:43 <dminuoso> It can also be a modifier for literals.
11:33:45 <chymera> a code smell?
11:34:26 <mauke> in particular, 'if isJust addon then fromJust addon else "test.yml"' can be rewritten as 'case addon of Just x -> x; Nothing -> "test.yml"'
11:34:45 <mauke> which is already predefined in a library: fromMaybe "test.yml" addon
11:35:19 <mauke> https://en.wikipedia.org/wiki/Code_smell
11:36:11 × jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 264 seconds)
11:36:46 <chymera> yeah, that thing actually broke my brain a bit, because I looked up “how to condidionally assign a variable in haskell” and I found some post telling me that I'm a pleb and conditionally assigning variables is a pleb thing to do. That was my attempt at writing something that makes sense to me and also runs :P
11:36:56 <mauke> the problem is that isJust/fromJust split the time-of-check from the time-of-use
11:37:28 <mauke> which doesn't introduce a race condition in this context, but it means the programmer has to manually ensure to only call fromJust on values that have been verified by isJust before
11:37:50 <mauke> which is a bit fragile (especially since fromJust just crashes the program if you do it wrong)
11:38:11 <mauke> pattern matching (in the form of case/of) makes sure you handle all the cases
11:38:22 <mauke> well, assuming you enable compiler warnings with ghc -Wall or similar
11:39:26 <chymera> where od I import frommaybe from?
11:39:33 Barfolomew joins (~Barfolome@2a0a-a546-54f2-1-2967-2ba9-e385-b22f.ipv6dyn.netcologne.de)
11:39:53 <chymera> *fromMaybe?
11:40:53 <chymera> ah
11:40:55 <chymera> from data.maybe
11:40:57 jao joins (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
11:43:17 TonyStone joins (~TonyStone@cpe-74-76-57-186.nycap.res.rr.com)
11:44:20 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 260 seconds)
11:48:04 <Barfolomew> Hi. Is there a official / semi-official way to set up building for Android (anything that gets me a SDL2 renderer and some touch input) with just cabal, without a huge hassle or using some containerized thing?
11:48:04 akegalj joins (~akegalj@93-137-174-226.adsl.net.t-com.hr)
11:50:20 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
11:50:27 × razetime quits (~quassel@49.207.211.219) (Ping timeout: 268 seconds)
11:51:43 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:111a:339b:4372:c307)
11:51:44 <Barfolomew> Hello, … I’m stuck… while building sdl2 with cabal, I get » cannot locate symbol "stg_ap_pp_info" referenced by "…/.cabal/…/base-orphans-0.8.7-…/libHSbase-orphans-0.8.7-…-ghc8.10.7.so «, even though cabal just successfully compiled base-orphans. I don’t even know how that’s possible… How do I proceed?
11:52:02 <Barfolomew> (This was in a Termux enviornment running on Android btw. It compiled about two dozen other packages just fine right before that, so the build chain looks fine.)
11:56:26 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:111a:339b:4372:c307) (Ping timeout: 256 seconds)
12:01:19 <dminuoso> Barfolomew: So Im just guessing that compiling the individual packages works, but linking them together does not.
12:01:32 <dminuoso> So perhaps you shouldnt infer too much from "base-orphan compiling successfully"
12:01:32 × califax quits (~califax@user/califx) (Remote host closed the connection)
12:02:36 <ncf> [advent of code spoilers] can anyone think of a more lensy way to write this function? https://github.com/ncfavier/aoc/blob/7df7012/src/2022/Day05.hs#L34-L36
12:03:11 <ncf> basically i have a vector of lists and i want to uncons n elements from the list at index i
12:03:12 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
12:03:30 <int-e> stg_ap_pp_info comes from the RTS... which shouldn't be linked until you actually build an executable?
12:04:29 califax joins (~califax@user/califx)
12:04:44 <int-e> Barfolomew: Can that ghc build executables?
12:07:18 jakalx joins (~jakalx@base.jakalx.net)
12:07:34 <Barfolomew> int-e: I’ll try, hold on.
12:08:30 × titibandit quits (~titibandi@xdsl-78-35-173-119.nc.de) (Quit: Leaving.)
12:12:00 <Barfolomew> int-e: Yes, it can.
12:14:48 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
12:15:33 coot joins (~coot@213.134.171.3)
12:17:54 <Barfolomew> int-e: Hello World builds and runs fine.
12:18:26 <akegalj> yesterday friend and I tried to ask chatgpt to review and give comments about some solutions we got from assignments we gave to the students (we are teaching haskell introduction course in local university). It gave interesting interpretations and it was fun to interact with it. So I wonder if adding such bot to this irc channel could be usefull or interesting/fun
12:18:37 <Barfolomew> int-e: A simple Cabal project, importing Data.Orphans and using one of its functions, builds and runs fine too… Weird…
12:18:44 <int-e> Hmm. Maybe there's hope then.
12:19:45 <int-e> Barfolomew: But yeah, also weird. I guess I'd identify the offending package, unpack it (so it can be built in place with `cabal build`) and try to get to the actual failing command (`cabal build` has a verbosity option; I forgot whether you need -v2 or whether plain -v is enough)
12:20:32 <int-e> That is, if I felt like digging in an attempt to figure out why this fails. Which doesn't guarantee a solution.
12:21:16 Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542)
12:21:42 <int-e> (Also, I've never used ghc on anything but Linux on x86 and x86_64, so I'm hopeless for actual platform-specific ideas.)
12:21:43 <Barfolomew> int-e: The thing with that sdl2 is, that it’s pulled in as a sub-project via “packages:\n*\naltered/sdl2-2.5.4.1", because I had to patch it to add texture scaling mode support, and I didn’t know a better way to do it. So I’ll see if regular sdl2 builds and try to go from there?
12:22:41 <Barfolomew> int-e: And there’s a little shim in LLVM’s `opt`, to make it work with the cabal I have available in Termux.
12:22:43 × Guest94 quits (~Guest94@4.red-83-36-45.dynamicip.rima-tde.net) (Ping timeout: 260 seconds)
12:22:47 <int-e> Barfolomew: I suppose you could try building the altered version in place, too; it's already there, no need to unpack it
12:23:26 × califax quits (~califax@user/califx) (Ping timeout: 255 seconds)
12:25:06 <int-e> Barfolomew: the thing to look for is linking (or lack thereof) with libHSrts[_thr|possibly some other suffix depending on flags].a ...that's where stg_ap_pp_info should come from
12:25:34 <Barfolomew> int-e: I just remembered that building sdl2 took literally over four hours on that phone, simply because for every line in two large .hsc files, it generated a C file, built it with LLVM and then used that. With 2% CPU load. There were over 16000 of those. I want to avoid building it on a whim unless I can make that go quicker. ;)
12:26:40 <int-e> Barfolomew: If you build it in place, it *should* keep the build artifacts, I believe.
12:27:01 <Barfolomew> int-e: Yes, I wish I could just step through the cabal build process, run the commands manually, and alter their parameters to see what’s going on.
12:27:29 califax joins (~califax@user/califx)
12:28:26 <Barfolomew> int-e: My main project contains a dist-newstyle/ and the altered/sdl2… which also has its own dist-newstyle/, and apparently, when I build the main project, it puts the stuff of sdl2 in the main project’s dist-newstyle/ too. But I probably could copy it over, yeah.
12:28:53 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
12:31:07 × lisbeths quits (uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity)
12:35:35 × jargon_ quits (~jargon@174-22-207-8.phnx.qwest.net) (Read error: Connection reset by peer)
12:38:11 jargon joins (~jargon@184.101.177.18)
12:40:20 × mikoto-chan quits (~mikoto-ch@85-76-167-161-nat.elisa-mobile.fi) (Ping timeout: 248 seconds)
12:42:17 mikoto-chan joins (~mikoto-ch@2001:999:680:9f4:6a82:d55c:feff:5f4)
12:43:49 × mmhat quits (~mmh@p200300f1c73b5145ee086bfffe095315.dip0.t-ipconnect.de) (Quit: WeeChat 3.7.1)
12:47:18 × akegalj quits (~akegalj@93-137-174-226.adsl.net.t-com.hr) (Quit: leaving)
12:51:57 jakalx parts (~jakalx@base.jakalx.net) ()
12:55:22 son0p joins (~ff@2604:3d08:5b7f:5540::37af)
13:00:01 jakalx joins (~jakalx@base.jakalx.net)
13:00:22 fizbin joins (~fizbin@user/fizbin)
13:04:23 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 255 seconds)
13:05:41 × fizbin quits (~fizbin@user/fizbin) (Ping timeout: 268 seconds)
13:06:19 ec joins (~ec@gateway/tor-sasl/ec)
13:07:42 razetime joins (~quassel@49.207.203.213)
13:08:03 <Barfolomew> OK, inside `cd altered/sdl2-*; cabal exec bash` I can’t get it to build unless I use the exact ghc command that cabal uses too, and then it gets me the exact same error. I’ve given up. … Maybe another day…
13:09:47 × zant quits (~zant@62.214.20.26) (Ping timeout: 264 seconds)
13:14:50 <int-e> Barfolomew: ghc has a -v flag too so you can see the linker command. But as said, even if that explains what goes wrong somehow, it'll probably not indicate an immediate solution.
13:15:54 shriekingnoise joins (~shrieking@186.137.167.202)
13:18:01 × acidjnk quits (~acidjnk@p200300d6e7137a4179c4b3a1e8b4bdac.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
13:18:10 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
13:23:52 acidjnk joins (~acidjnk@p200300d6e7137a1979c4b3a1e8b4bdac.dip0.t-ipconnect.de)
13:24:40 × mikoto-chan quits (~mikoto-ch@2001:999:680:9f4:6a82:d55c:feff:5f4) (Ping timeout: 260 seconds)
13:25:42 <Barfolomew> int-e: Too late now. I deleted everything on the phone, including that 4h+-build stuff. To make sure I would not lose another day on nothing but that. ;)
13:29:54 mtmm joins (~mtmm@89-166-7-216.bb.dnainternet.fi)
13:33:24 heinz9 joins (~trace@user/trace)
13:33:26 <heinz9> what does a network consists of else than graph things, as states and connections, and the option that data can be transfered throug the connections, changing the states, and maybe protocols who manage all this
13:34:26 <mauke> a fire that destroys part of your nodes halfway through
13:35:47 <heinz9> ^^
13:36:10 <heinz9> maybe the states can be container datastructures or any else math object idk
13:36:24 <heinz9> and the connections could be streams
13:37:10 <mauke> oh, also (temporary) network partitions where half of your nodes suddenly can't talk to the other half
13:37:43 <heinz9> having partitions of parts of the network is an interesting point
13:38:33 <Barfolomew> heinz9: Literally everything can be represented as a graph. At least if you allow fuzzy edge weights. At least everything that we humans are able to think. :)
13:39:12 <Barfolomew> heinz9: Aka IRC netsplit.
13:40:24 wootehfoot joins (~wootehfoo@user/wootehfoot)
13:40:45 <int-e> Barfolomew: a sane choice
13:40:50 <heinz9> Barfolomew, is there a theory behind, that everything can represented by that
13:41:02 <heinz9> because I cannot imagine
13:41:19 <heinz9> maybe there is a general approach, that I am not aware of, how to do so
13:42:29 <Barfolomew> I always supported that instead of banning users, they could simply be separated to a different instance. And others could then opt which instance they want to be in. That way there could be no abuse of power, because the one banning somebody could just end up being left alone (just like open source projects that fork sometimes end up like that.),
13:42:29 <Barfolomew> *and* nobody would be able to disrupt communities. The only problem is that it would lead to more filter bubbles / medevial small towns. ;)
13:42:40 <Barfolomew> heinz9: Probably category theory? ;)
13:43:34 × troydm quits (~troydm@host-176-37-124-197.b025.la.net.ua) (Ping timeout: 260 seconds)
13:43:56 <Barfolomew> heinz9: Probably one of my all-time favorite bits of education on the net: Category theory by Bartosz Milewski: https://www.youtube.com/watch?v=I8LbkfSSR58&list=PLbgaMIhjbmEnaH_LTkxLI7FMa2HsnawM_
13:44:16 <Barfolomew> He gets quite philosophical in the first two videos, which is fun.
13:44:47 <darkling> RDF gives you quite a lot of modelling power in a labelled-graph structure.
13:44:57 <Barfolomew> heinz9: I am quite experienced in turning things into graphs. Maybe you give me examples, and I will tell you how that would look as a graph.
13:45:01 <darkling> Doesn't give you an easy way to do weights on the edges, though.
13:45:13 Lycurgus joins (~juan@user/Lycurgus)
13:45:27 <Barfolomew> darkling: Yes, but I know too little about category theory yet. (No time.)
13:45:45 <Barfolomew> darkling: if you have something countable, you can do weights though.
13:46:39 <heinz9> Barfolomew, from where have you gotten those information, that everything can be represented as a network
13:46:47 <heinz9> this is really important for me to know
13:46:56 <Barfolomew> darkling: E.g. you could present the edge between two nodes as *itself* being a node. Then that node can have edges to *itself*, and the number of edges to itself is the weight.
13:46:59 <darkling> You either have an explosion of predicates, or you increase the complexity by using some form of reification. Might be a bit easier with RDF*, but I haven't looked into that too much yet.
13:47:12 <darkling> Exactly. :)
13:47:17 × coot quits (~coot@213.134.171.3) (Quit: coot)
13:47:22 <Barfolomew> darkling: Or course behind the scenes of an implementation, that would be optimized to a simple number.
13:47:31 <int-e> heinz9: from the internet? (a network; scnr)
13:47:32 <darkling> I've been doing RDF for about 20 years now... it's part of $day_job :)
13:48:33 <heinz9> int-e, certainly this answer is not gonna help me
13:49:32 <int-e> heinz9: It's all about making connections. I'll show myself out.
13:49:53 <heinz9> certainly the abstraction syntax tree of any source code is a tree, and so a graph and so a network
13:50:20 <heinz9> and you could connect things, so it becomes also a graph or network, but without beeing a tree, if someone wants so
13:50:23 <Barfolomew> darkling: Resource Description Framework? Or Real Degree of Fermentation (for alcoholic beverages). Maybe Reichsbund Deutsche Familie (a organization of the nono-Germans ;).
13:51:08 × wootehfoot quits (~wootehfoo@user/wootehfoot) (Ping timeout: 246 seconds)
13:51:27 <Lycurgus> RDF is anti AI in the sense in which the latter is currently defined/hyped
13:51:42 <Lycurgus> e.g. GPTwhosists
13:52:02 <darkling> Barfolomew: The first of those.
13:52:52 <Lycurgus> some ol thing musk et al aren't interested in
13:53:09 <darkling> Lycurgus: Yes, it's an odd mash-up. You get the neats: mathematicians interested in logic and proofs and consistency; and the scruffies: web people who know how horrible the world out there is for accurate, consistent, structured data.
13:53:13 <Lycurgus> or am I wrong?
13:53:50 <Lycurgus> neats and scruffies is also outside the OpenAIs of the world
13:53:54 <darkling> You're not wrong. There's definitely a strong thread of logic, proof & repeatability running through it.
13:54:18 <Lycurgus> collides with hardcore
13:54:27 <Lycurgus> hardcore for a boss that is
13:55:07 <darkling> That said, there's also a lot of very precise fuzziness and carefully-controlled handwaving involved. :)
13:55:14 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 255 seconds)
13:55:15 <Lycurgus> the AI of today is a prime example of sartrean anti-labour
13:56:00 jero98772 joins (~jero98772@2800:484:1d80:d8ce:efcc:cbb3:7f2a:6dff)
13:58:01 <Barfolomew> heinz9: A list is just a tree with no children. A table/matrix/tensor is just a list of lists (…). A map is just a table. A tree is just a graph with no circular paths. … A string/stream is just a list. A value is just a list of ()… A tuple is just a list with additional rules in the rules/schema/type. … XML and directories are just trees.
13:58:02 <Barfolomew> databases are just lists of tables. … Basically, it’s just graphs with certain rules to limit them, presumably so they become useful for real-world things.: )) … Where it gets complicated is of course functions and the like (e.g. monads). But you can also just represent them as maps, even if inefficient. Ideally, you would compile the
13:58:02 <Barfolomew> function's code itself into a graph. Aka a parse tree. That becomes serializable again.
14:01:05 <Barfolomew> Lycurgus: I’m anti-“AI” too. … Actually, neural networks are fine, but “AI” nowadays just means “I was too lazy/stupid to actually put into words what precisely I want, and just threw a bunch of examples at an universal function based on tensor multiplication that has as much to do with a real neural net as a perfectly spherical *cow*
14:01:05 <Barfolomew> on a sinusoidal trajectory has with a horse race” 😆
14:01:06 <Barfolomew> So RDF is more on the “I actually know what I want” side. Its problem to me is that it’s too cumbersome.
14:01:37 zant joins (~zant@62.96.232.178)
14:01:52 <Lycurgus> somehow i'd forgotten what rdf* was, troubling
14:02:41 <Barfolomew> Lycurgus: Think basically (from,via,to) maps between things. where via can be seen as a property or type or whatever, I guess.
14:02:50 <Lycurgus> no i remembered
14:02:53 <Barfolomew> ok
14:03:46 <Lycurgus> i purposely didn follow up on a occluding redirect of GOFAI at enwiki
14:04:34 × razetime quits (~quassel@49.207.203.213) (Ping timeout: 260 seconds)
14:04:39 <Lycurgus> it's amazing how stuff gets distorted after the fact when you have forced attrition, the perpetual juvenalization of the workforce
14:05:00 × dsrt^ quits (~dsrt@76.145.185.103) (Remote host closed the connection)
14:05:23 bgs joins (~bgs@212-85-160-171.dynamic.telemach.net)
14:05:45 <Lycurgus> the other day I as trying to remember a big db package of the 80s which was involved in the same work experience where I first used smalltalk
14:05:51 <Lycurgus> FOCUS
14:06:14 mmhat joins (~mmh@p200300f1c73b5145ee086bfffe095315.dip0.t-ipconnect.de)
14:06:17 <Barfolomew> Is anyone here currently generally in the loop about current software development business practices? Since I’m out I seem to have seen everybody move to containers and “cloud”s and putting literally all the things on top of HTTP and into browsers, and I don’t see why. It looks just like a severe case of the inner-platform effect. Case in
14:06:18 <Barfolomew> point: Text editors that run inside a separate Chromium instance, take >1GB of RAM, and still aren’t as much of an OS as Emacs. ;)
14:06:22 <Lycurgus> not only couldn't I find it by search, i did find a really distorted historical view of databases
14:06:31 <heinz9> what are the advantages of having a graph, when you store in its states and connections: classes, objects and functions?
14:06:36 <Lycurgus> as if dbase and the like were the origins
14:06:47 <heinz9> one certain advantage would be, having all of it in a better order
14:07:52 <heinz9> another is to see all the states better
14:08:16 <heinz9> and a third would be to can evaluate the whole thing better
14:08:28 <Barfolomew> Lycurgus: You can say that again. It’s cargo culting all the way. I figure in 20 years, kids will run things inside of containers inside VMs inside  wasmLinux, and think we’re weird and low-level for building our own web pages.
14:08:34 × lbseale quits (~quassel@user/ep1ctetus) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
14:09:34 <Lycurgus> Barfolomew, kids, lawns, oh my!
14:09:36 <mauke> networking is IP which is TCP/UDP which is HTTP
14:09:41 lbseale joins (~quassel@user/ep1ctetus)
14:10:46 <heinz9> mauke, haha
14:11:02 × lbseale quits (~quassel@user/ep1ctetus) (Client Quit)
14:11:03 <mauke> if you're not that, you're an exotic edge case and might not even be supported by some devices
14:11:08 <mauke> and so the stack fossilizes
14:11:50 <Barfolomew> heinz9: I guess the advantage is that you have one universal interface, and don’t have to re-learn everything anew for each new thing. E.g. everything supports reflection by default. Everything supports serialization and parsing. All software can use all file formats and all protocols, and only needs simple mappings to support working with
14:11:50 <Barfolomew> different interfaces that are structurally the same thing. (E.g. a file manager could be used to edit an XML file or a SQLite table)
14:12:08 lbseale joins (~quassel@user/ep1ctetus)
14:12:43 <Barfolomew> mauke: lol, you forgot “… which is webSockets, which is webIP, which is webTCP, which in webHTTP, which is webwebSockets” XD
14:13:25 <mauke> isn't HTTP/3 something like IP on top of UDP?
14:14:21 <heinz9> Barfolomew, why does such a network based programming approach imply all those programs you named, file manager, and so on?
14:15:06 <heinz9> and why is this a universal interface storing your program source in a network sourcecode structure
14:15:09 × Lycurgus quits (~juan@user/Lycurgus) (Quit: Exeunt https://tinyurl.com/4m8d4kd5)
14:15:19 trev joins (~trev@user/trev)
14:15:34 fockerize joins (~finn@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
14:16:16 <Barfolomew> mauke: I watched a video by a Google engineer, explaining it, recently. it used to be a special HTTP on top of UDP on top of IP. But now they merged HTTP and UDP into one, on top of IP, because it brings them an optimization. And the call it QUIC. Apparently they throw everything under the bus to get a stateful connection with even fewer back and
14:16:17 <Barfolomew> forths of packets.
14:17:14 <Barfolomew> mauke: HTTP/3 is, if I remember correctly, hence a very light layer on top of that, if anything at all. (I forgot.)
14:18:59 <Barfolomew> heinz9: I don’t know what you refer to by “network-based programming” Maybe I missed the start of the discussion, but I never heard of that, nor think of graphs as that. … And hence I don’t know what you mean by “storing” here. …
14:19:33 <merijn> If I want to update the value at a key in a map and return info of that modification I gotta use alterF, no?
14:24:40 fizbin joins (~fizbin@user/fizbin)
14:27:59 <heinz9> Barfolomew, you invented it, by what you was saying
14:28:46 mastarija joins (~mastarija@2a05:4f46:e03:6000:2a89:666a:1e9:351e)
14:34:03 elevenkb joins (~elevenkb@105.184.125.168)
14:34:36 Sgeo joins (~Sgeo@user/sgeo)
14:35:26 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
14:35:33 stiell joins (~stiell@gateway/tor-sasl/stiell)
14:36:21 slntsa joins (~slntsa@2001:999:488:5cc:3116:f149:10de:6194)
14:39:06 <slntsa> Is there any style guide on when to use String over [Char] in type declarations?
14:39:27 king_gs joins (~Thunderbi@2806:103e:29:94a4:81e0:429b:22ec:cf13)
14:40:05 <merijn> Not really
14:40:18 <merijn> Mostly "do you plan to use this as a list?"
14:43:32 × fizbin quits (~fizbin@user/fizbin) (Ping timeout: 248 seconds)
14:43:39 Erutuon joins (~Erutuon@user/erutuon)
14:50:45 bontaq joins (~user@ool-45779fe5.dyn.optonline.net)
14:54:36 <kuribas> Barfolomew: it's because JSON in REST is the lowest common denominator. It is also compatible with the object model for most dynamic languages (javascript, python, clojure, etc...)
14:55:38 <kuribas> Barfolomew: the cloud is just jumping on the bandwagon, it's great if you have the need for instant scalability, most software projects don't have it.
14:57:55 <kuribas> same with docker, it's great if you need to deploy projects with different dependencies quickly, but if you don't, it's just added complexity.
14:58:04 <kuribas> You could just upload a jar file.
14:58:16 <kuribas> or in haskell a static compiled binary.
15:00:10 wonko joins (~wjc@user/wonko)
15:02:06 wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com)
15:02:07 × wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
15:02:07 wroathe joins (~wroathe@user/wroathe)
15:05:29 <Barfolomew> kuribas: Hey, thanks for the reply! I actually did not know that. Nor would I ever have come up with the idea of calling JSON/REST anything with the word “low (level)” in in. ;)   … I would just have used binary markup to implement RPC interfaces over any socket (Unix or TCP/IP or whatever).
15:07:13 <Barfolomew> kuribas: The cloud pricing models scare me though. They seem to be per CPU usage and bandwith. Meaning if your service suddenly becomes popular and you’re not making as much money off of it, it’s an insta-debt trap from hell.
15:08:55 <merijn> Barfolomew: Correct
15:09:06 <merijn> Even more fun, most of them don't let you hard limit spending :p
15:09:07 <Barfolomew> kuribas: Yeah, I never thought about that: Why use shared libraries if you’re just putting them in a container anyway? … Btw,now I’m interested in putting other resources (like text, translations, pictures) into the static binary aswell… I wonder if GHC supports linking in blob sections in the binary. :D
15:09:30 <merijn> Barfolomew: I think there was recent work to make linking blobs easier
15:09:54 <merijn> Barfolomew: Although you could just manually create a blob object file using ld and ask GHC to link that object file
15:10:12 <merijn> Barfolomew: As far as GHC's linker stage are concerned "symbols are symbols"
15:10:57 <Barfolomew> merijn: Also, in the EU, there’s always the GDPR problem. Just putting stuff on an Amazon cloud might end one up in legal trouble. (E.g. my gf recently wanted a new web site for her job, where she has patients that are mostly children, and there are extremely private medical pictures that have to be shared.)
15:11:52 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
15:12:28 × slntsa quits (~slntsa@2001:999:488:5cc:3116:f149:10de:6194) (Ping timeout: 260 seconds)
15:13:03 merijn updates the "It has been X days since I had to run 'filter even [1..5]' to remember which way filter works"-sign back to 0 days
15:13:06 <Barfolomew> merijn: So they would be symbols that you could use right away? Not requiring one to read the file and extract the binary data?
15:13:29 <merijn> Barfolomew: how comfortable are you with linking and stuff in C?
15:14:28 <Barfolomew> merijn: filter in nothing compared to “Which way around do foldr/foldl work? … Yeah, right and left, but *which* way right and left? … Yeah, from the left, and from the right, but *which* way from the left and from the right? …” ;)
15:14:53 <mauke> foldr (\x z -> ...
15:14:56 <mauke> the rest follows :-)
15:15:21 <merijn> with foldr I just gotta look at the type :p
15:15:57 <mauke> I know what internal linkage is, but I don't think C does much with linkers
15:16:02 <Barfolomew> merijn: I think I would be comfortable, given that I have read about ELF file structures and loaded dynamic libraries *manually* in Haskell before. (As in: Plug-ins). Also, I used to use Gentoo (Stage 1) as my main OS. But I have never actually manually used `ld`.
15:16:05 × wonko quits (~wjc@user/wonko) (Read error: Connection reset by peer)
15:17:10 <Barfolomew> merijn: Yeah, but that’s the thing: I always have to look at the type again, when really I want to use it as naturally as I use a for or while loop in other languages. (So I just end up using recursion almost each time. ;)
15:17:22 <merijn> mauke: C the spec, no. But in the real world of "using and linking stuff with C compilers" you either are familiar with the ABI and how pieces fit together or not
15:17:38 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 246 seconds)
15:17:45 <mauke> oh, the real world stuff is easy, you just do gcc *.o
15:18:14 <merijn> Barfolomew: ld (at least the one on linux) has a flag to just take binary files and create an object file with symbols for the location and size of that file/data
15:18:37 <merijn> Barfolomew: And GHC's FFI just expects "C ABI symbols" when it comes to linking
15:18:47 × king_gs quits (~Thunderbi@2806:103e:29:94a4:81e0:429b:22ec:cf13) (Ping timeout: 264 seconds)
15:19:15 <merijn> Barfolomew: So using ld to create an object file with arbitrary payload is fairly easy and you can trivially access that via the FFI
15:19:19 razetime joins (~quassel@49.207.203.213)
15:19:42 <mauke> this would be better if gnu.org weren't down
15:20:01 <merijn> It's all gonna be "Ptr Word8"/"Ptr CChar", so you need some FFI boilerplate to get the data from that blob, but it's not particularly hard
15:20:44 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 255 seconds)
15:20:44 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 255 seconds)
15:20:55 <Barfolomew> merijn: So `ld` is basically a special kind of `tar`… :)
15:21:41 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
15:22:01 <mauke> I'm pretty sure static libraries are literally archive files
15:22:10 <Barfolomew> merijn: How do I turn a .jpg into a .o file with a symbol for the .jpg data though.
15:22:47 <Barfolomew> mauke: one day, I’m gonna write elffs and objfs in FUSE. :)
15:23:18 <Barfolomew> mauke: With auto-mount, so I can `cd libsomething.so/` :D
15:23:28 <merijn> Barfolomew: I don't remember of the top of my head, but I recall there was a ld flag/config to do that after some googling
15:24:20 nattiestnate joins (~nate@202.138.250.17)
15:24:49 <geekosaur> Barfolomew, special kind of `ar` actually. which is why static archives use `ar`
15:26:06 × tcard quits (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) (Ping timeout: 256 seconds)
15:26:14 <geekosaur> that said, back in the a.out days it was less so
15:27:29 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 255 seconds)
15:33:15 <Barfolomew> geekosaur: Aah, `ar`, presumably the precursor for `tar`!
15:33:20 <mauke> Barfolomew: found https://csl.name/post/embedding-binary-data/
15:33:34 <mauke> ar is the archiver. tar is the tape archiver (as in magnetic tapes)
15:34:09 <Barfolomew> geekosaur: `ar q blah.ar wallpaper.jpg` just works. :) It is no .o though
15:35:23 <Barfolomew> mauke: Nice! that worked!
15:35:33 <geekosaur> true. .o got a lot more complex since the early days when we didn';t need to care about things like global constructors or shared object loading
15:36:23 × Barfolomew quits (~Barfolome@2a0a-a546-54f2-1-2967-2ba9-e385-b22f.ipv6dyn.netcologne.de) (Quit: Client closed)
15:37:16 ec joins (~ec@gateway/tor-sasl/ec)
15:37:21 <mauke> turns out this stuff is documented, just not very well
15:37:29 <mauke> https://sourceware.org/binutils/docs-2.39/binutils/objcopy.html (scroll down to "-B")
15:37:53 <mauke> (no direct link because GNU hasn't heard of embedded hyperlinks/anchors yet)
15:42:20 Barfolomew joins (~Barfolome@2a0a-a546-54f2-1-df2a-5756-e14a-c797.ipv6dyn.netcologne.de)
15:42:48 <geekosaur> you just missed mauke finding how to do what you asked
15:43:17 <kuribas> Barfolomew: you must make sure you charge your customer more than what they use :)
15:43:28 <geekosaur> https://ircbrowse.tomsmeding.com/browse/lchaskell?id=800803#trid800803
15:44:54 <Barfolomew> geekosaur: no I found it.
15:44:57 × cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.7.1)
15:45:07 <Barfolomew> geekosaur: I meant: No I saw it.
15:45:24 × fockerize quits (~finn@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 268 seconds)
15:46:10 <kuribas> Barfolomew: by limiting resource usage.
15:46:27 <Barfolomew> Probably a sign in a battery factory: Batteries are like customers. If you charge them too much, they explode!
15:47:20 × Barfolomew quits (~Barfolome@2a0a-a546-54f2-1-df2a-5756-e14a-c797.ipv6dyn.netcologne.de) (Quit: Damn, gotta gooo! Thanks everyone for the insightful chat!)
15:48:54 <mastarija> Is there a way to use traceShowId in case where I have something like `Maybe n` down deep in the function hierarchy, and I don't really want to go back up multiple levels and add `Show n` contraint to all the functions that depend on one I'm interested in?
15:49:24 <mastarija> Something dirty, like "yes, just try to print this somehow"
15:50:46 <mauke> the problem is that the "somehow" is encoded in the Show n constraint
15:51:07 <mauke> without it, the low-level code doesn't actually know what data it is dealing with
15:51:52 <mauke> if you know what the actual type is, I guess you could unsafeCoerce it ...?
15:52:34 × acidjnk quits (~acidjnk@p200300d6e7137a1979c4b3a1e8b4bdac.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
15:55:04 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:111a:339b:4372:c307)
15:55:17 stiell joins (~stiell@gateway/tor-sasl/stiell)
15:55:23 <mastarija> mauke: hm... yes, unsafe coerce sounds good :)
15:56:35 <geekosaur> there's something on hackage that can do it iirc
15:58:44 <geekosaur> (uses TH I think, which means it cheats)
15:59:48 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:111a:339b:4372:c307) (Ping timeout: 255 seconds)
16:04:17 azimut joins (~azimut@gateway/tor-sasl/azimut)
16:04:19 <lortabac> @hackage ifcxt
16:04:19 <lambdabot> https://hackage.haskell.org/package/ifcxt
16:04:33 <lortabac> @hackage if-instance
16:04:33 <lambdabot> https://hackage.haskell.org/package/if-instance
16:04:38 <merijn> kuribas: You try and limit resource usage in AWS ;)
16:04:58 <lortabac> there are other packages as well, but I don't remember their names
16:06:14 <lortabac> @hackage constraints-emerge
16:06:14 <lambdabot> https://hackage.haskell.org/package/constraints-emerge
16:06:47 <lortabac> @hackage union-constraints
16:06:47 <lambdabot> https://hackage.haskell.org/package/union-constraints
16:07:28 <kuribas> merijn: you can use nginx to limit bandwith?
16:07:29 <lortabac> I'm not sure I want to use this stuff for real though :D
16:07:47 freeside_ joins (~mengwong@103.252.202.193)
16:08:49 × fserucas quits (~fserucas@212.157.222.2) (Ping timeout: 260 seconds)
16:13:49 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
16:14:16 fizbin joins (~fizbin@user/fizbin)
16:16:18 × elevenkb quits (~elevenkb@105.184.125.168) (Quit: Client closed)
16:17:43 elevenkb joins (~elevenkb@105.184.125.168)
16:18:03 × ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
16:18:37 × Xeroine quits (~Xeroine@user/xeroine) (Read error: Connection reset by peer)
16:18:47 Xeroine_ joins (~Xeroine@user/xeroine)
16:18:50 king_gs joins (~Thunderbi@187.201.204.122)
16:19:01 waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
16:19:17 ec joins (~ec@gateway/tor-sasl/ec)
16:26:08 × waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Quit: WeeChat 3.7.1)
16:31:46 crazazy joins (~user@130.89.173.127)
16:33:22 use-value joins (~Thunderbi@2a00:23c6:8a03:2f01:6956:303f:1676:5fd5)
16:38:36 × king_gs quits (~Thunderbi@187.201.204.122) (Read error: Connection reset by peer)
16:38:44 king_gs1 joins (~Thunderbi@2806:103e:29:94a4:81e0:429b:22ec:cf13)
16:40:54 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 256 seconds)
16:43:18 × king_gs1 quits (~Thunderbi@2806:103e:29:94a4:81e0:429b:22ec:cf13) (Ping timeout: 252 seconds)
16:44:36 nullptrexcptn joins (~xenon44@2a01:c22:c8e8:f400:4818:f4f9:f33e:569c)
16:45:20 troydm joins (~troydm@host-176-37-124-197.b025.la.net.ua)
16:46:16 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:111a:339b:4372:c307)
16:47:32 econo joins (uid147250@user/econo)
16:49:28 festive_kurbus joins (~festive_k@user/kurbus)
16:54:42 <trev> just curious, does haskell have holes now like idris? i thought i saw something about holes in hls, but not sure what it means in this context
16:54:43 × notzmv quits (~zmv@user/notzmv) (Read error: Connection reset by peer)
16:55:58 <geekosaur> what do you mean by holes? I can think of a couple of candidates
16:57:21 <merijn> trev: "a bit"
16:57:27 <merijn> You can use _ for one
16:57:46 <merijn> > map _ [True] :: [Int] -- not sure if lambdabot accepts it
16:57:50 <lambdabot> error:
16:57:51 <lambdabot> • Found hole: _ :: Bool -> Int
16:57:51 <lambdabot> • In the first argument of ‘map’, namely ‘_’
16:58:05 <trev> ah ha...thanks
16:59:00 <geekosaur> there are also type level holes, where you can put _ in a type and ghc will tell you what type is required there
17:00:46 <trev> yeah, i meant typed holes, i think
17:01:01 × bontaq quits (~user@ool-45779fe5.dyn.optonline.net) (Remote host closed the connection)
17:02:40 <trev> one more question: within the context of do notation, what is the most idiomatic way to match on an Either? i.e when i have `either <- returnsEither`
17:02:45 × kuribas quits (~user@ptr-17d51en2loyitf0zupv.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 27.1))
17:05:09 <geekosaur> that sounds confused
17:06:00 CiaoSen joins (~Jura@p200300c95747e0002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
17:06:05 <geekosaur> if you have used `<-` with a `returnsEither` then the monad is `Either e` and either `either` is the `Right` or the monad has terminated with the `Left`
17:07:26 × festive_kurbus quits (~festive_k@user/kurbus) (Quit: Client closed)
17:10:20 festive_kurbus joins (~festive_k@user/kurbus)
17:10:29 <trev> geekosaur the monad is just `IO ()` (in main) and i want to just print Left (error) and return or get the Right result and continue
17:11:05 titibandit joins (~titibandi@xdsl-78-35-173-119.nc.de)
17:12:11 <geekosaur[m]> Then you can't use <-
17:15:32 × merijn quits (~merijn@c-001-001-017.client.esciencecenter.eduvpn.nl) (Ping timeout: 246 seconds)
17:15:40 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 260 seconds)
17:16:00 × nullptrexcptn quits (~xenon44@2a01:c22:c8e8:f400:4818:f4f9:f33e:569c) (Quit: Leaving)
17:16:17 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
17:16:36 × Heyting quits (~Heyting@193.198.16.217) (Remote host closed the connection)
17:17:18 × elevenkb quits (~elevenkb@105.184.125.168) (Ping timeout: 260 seconds)
17:20:30 <geekosaur> If `returnsEither` has a result type of `IO (Either …)` then you use `<-`. If it's just `Either …` then you use `let` instead of `<-`
17:20:32 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
17:21:23 <geekosaur> At that point you can either use a `case` expression or the `either` function, and which depends on how complex your handling is (if it's pure and short then `either` is idiomatic, otherwise you want `case`)
17:22:11 × mbuf quits (~Shakthi@49.204.138.176) (Quit: Leaving)
17:23:49 <[Leary]> trev: I would write: `returnsEither >>= either print \result -> do ...`
17:25:06 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
17:26:29 jakalx joins (~jakalx@base.jakalx.net)
17:27:35 elevenkb joins (~elevenkb@105.184.125.168)
17:28:43 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:111a:339b:4372:c307) (Remote host closed the connection)
17:28:59 × fizbin quits (~fizbin@user/fizbin) (Ping timeout: 264 seconds)
17:29:49 segfaultfizzbuzz joins (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net)
17:31:06 × elevenkb quits (~elevenkb@105.184.125.168) (Client Quit)
17:31:20 × Inst_ quits (~Inst@2601:6c4:4081:54f0:e862:ffc4:e60e:d92f) (Ping timeout: 256 seconds)
17:31:26 <trev> geekosaur yes, found `either` on the haskell. i am trying it out now
17:32:38 AlexNoo_ joins (~AlexNoo@178.34.151.8)
17:33:26 × razetime quits (~quassel@49.207.203.213) (Remote host closed the connection)
17:34:12 × Alex_test quits (~al_test@178.34.150.202) (Ping timeout: 248 seconds)
17:34:36 tzh joins (~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
17:34:37 ec_ joins (~ec@gateway/tor-sasl/ec)
17:35:10 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:f94e:37fa:6c10:51fa) (Quit: WeeChat 2.8)
17:35:48 × AlexZenon quits (~alzenon@178.34.150.202) (Ping timeout: 248 seconds)
17:36:06 × AlexNoo quits (~AlexNoo@178.34.150.202) (Ping timeout: 252 seconds)
17:37:05 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 255 seconds)
17:37:23 × festive_kurbus quits (~festive_k@user/kurbus) (Quit: Client closed)
17:37:29 × nattiestnate quits (~nate@202.138.250.17) (Ping timeout: 260 seconds)
17:37:54 festive_kurbus joins (~festive_k@user/kurbus)
17:38:05 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:111a:339b:4372:c307)
17:38:38 nattiestnate joins (~nate@202.138.250.37)
17:38:51 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
17:39:58 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
17:40:28 AlexZenon joins (~alzenon@178.34.151.8)
17:40:43 Tuplanolla joins (~Tuplanoll@91-159-68-152.elisa-laajakaista.fi)
17:41:18 Alex_test joins (~al_test@178.34.151.8)
17:42:47 × MajorBiscuit quits (~MajorBisc@c-001-009-004.client.tudelft.eduvpn.nl) (Ping timeout: 264 seconds)
17:45:31 × chele quits (~chele@user/chele) (Remote host closed the connection)
17:45:32 merijn joins (~merijn@c-001-001-017.client.esciencecenter.eduvpn.nl)
17:48:21 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:111a:339b:4372:c307) (Remote host closed the connection)
17:51:44 × titibandit quits (~titibandi@xdsl-78-35-173-119.nc.de) (Ping timeout: 256 seconds)
17:53:37 × causal quits (~user@50.35.85.7) (Quit: WeeChat 3.7.1)
17:59:00 wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com)
17:59:00 × wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
17:59:00 wroathe joins (~wroathe@user/wroathe)
18:02:19 × festive_kurbus quits (~festive_k@user/kurbus) (Quit: Client closed)
18:02:32 festive_kurbus joins (~festive_k@user/kurbus)
18:04:21 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
18:04:30 shailangsa joins (~shailangs@host217-39-45-196.range217-39.btcentralplus.com)
18:05:30 × use-value quits (~Thunderbi@2a00:23c6:8a03:2f01:6956:303f:1676:5fd5) (Remote host closed the connection)
18:05:38 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
18:06:07 titibandit joins (~titibandi@xdsl-78-35-173-119.nc.de)
18:07:51 eggplantade joins (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net)
18:08:11 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
18:11:57 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
18:13:40 × gurkenglas quits (~gurkengla@p548ac72e.dip0.t-ipconnect.de) (Ping timeout: 248 seconds)
18:16:03 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
18:16:23 × merijn quits (~merijn@c-001-001-017.client.esciencecenter.eduvpn.nl) (Ping timeout: 264 seconds)
18:23:54 use-value joins (~Thunderbi@2a00:23c6:8a03:2f01:6956:303f:1676:5fd5)
18:24:28 gurkenglas joins (~gurkengla@p548ac72e.dip0.t-ipconnect.de)
18:24:32 pyrex joins (~pyrex@user/pyrex)
18:28:44 acidjnk joins (~acidjnk@p200300d6e7137a1979c4b3a1e8b4bdac.dip0.t-ipconnect.de)
18:30:40 × beteigeuze quits (~Thunderbi@bl14-81-220.dsl.telepac.pt) (Ping timeout: 268 seconds)
18:35:49 AlexNoo_ is now known as AlexNoo
18:38:31 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
18:40:47 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
18:41:47 <dsal> whatever <- either fail pure eitherStringWhatever
18:48:51 beteigeuze joins (~Thunderbi@bl14-81-220.dsl.telepac.pt)
18:49:04 tomokojun joins (~tomokojun@37.19.210.31)
18:51:38 × freeside quits (~mengwong@103.252.202.193) (Ping timeout: 268 seconds)
18:52:08 <EvanR> I "hate to say it" but Data.Array cleanup up my code and make the program run super much faster
18:52:19 <EvanR> without having to cabal script in vector
18:52:50 <EvanR> indexes 1 to N for the win?
18:53:11 × beteigeuze quits (~Thunderbi@bl14-81-220.dsl.telepac.pt) (Ping timeout: 246 seconds)
18:53:19 × sh1n quits (~sh1n@186.152.126.118) (Quit: Lost terminal)
18:53:56 <Rembane> Good stuff!
18:53:58 <monochrom> Someone should still make a Data.Array-like interface over vector, so that you don't have to choose.
18:53:59 king_gs joins (~Thunderbi@187.201.204.122)
18:54:23 <monochrom> Although, download-wise it would mean one more package to download haha
18:54:51 <monochrom> or one more package to tie yourself to cabal script
18:55:04 <dsal> EvanR: For all values of 1 even!
18:55:11 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
18:55:23 <monochrom> But I have doubts that Data.Array is faster than vector.
18:56:38 ksu parts (~ksu@user/prtr) (End of Transmission Block)
18:57:14 freeside joins (~mengwong@103.252.202.193)
18:57:38 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 255 seconds)
18:57:43 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
18:58:25 × king_gs quits (~Thunderbi@187.201.204.122) (Ping timeout: 268 seconds)
18:59:20 × ezzieyguywuf quits (~Unknown@user/ezzieyguywuf) (Ping timeout: 252 seconds)
18:59:36 thyriaen joins (~thyriaen@2a01:aea0:dd4:470d:6245:cbff:fe9f:48b1)
18:59:44 <EvanR> if you don't want to set up a cabal project or figure out a cabal script, I'm surprised how much faster Array was... to type xD
19:00:10 <EvanR> it was a performance win over list of list at least
19:01:50 × freeside_ quits (~mengwong@103.252.202.193) (Ping timeout: 260 seconds)
19:02:00 × freeside quits (~mengwong@103.252.202.193) (Ping timeout: 256 seconds)
19:02:21 freeside joins (~mengwong@103.252.202.193)
19:03:05 <monochrom> OK right, you meant that.
19:03:35 <monochrom> This is why sometimes I miss cabal-v1.
19:03:47 <monochrom> alternatively Haskell Platform
19:04:26 <monochrom> alternatively why sometimes I use "cabal install --lib" though it's getting rarer.
19:05:44 <EvanR> what does --lib do
19:06:37 <monochrom> So I think the reason why a lot of people do not mind the setup hassle of "everything is a project" is that they have an IDE that automates the setup hassle so they don't even know. Whereas those of us who're still with basic editors and direct contact with the file system are painfully aware.
19:07:06 × zant quits (~zant@62.96.232.178) (Ping timeout: 260 seconds)
19:07:06 × freeside quits (~mengwong@103.252.202.193) (Ping timeout: 256 seconds)
19:07:13 stiell joins (~stiell@gateway/tor-sasl/stiell)
19:07:20 <dsal> I don't mind adding a line to package.yaml
19:07:29 freeside joins (~mengwong@103.252.202.193)
19:07:49 <monochrom> It registers packages in $HOME/.ghc/<something>/environment , and GHC honours it be default.
19:07:53 × aeroplane quits (~user@user/aeroplane) (Ping timeout: 255 seconds)
19:08:12 <EvanR> package.yaml?
19:08:13 <monochrom> So it gives back something close to cabal-v1
19:08:37 × eggplantade quits (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
19:08:46 <monochrom> Well, sometimes I mind creating foo.cabal or package.yaml at all.
19:09:05 <EvanR> is package.yaml a stack thing
19:09:10 <monochrom> Yes.
19:09:27 <dsal> package.yaml is hpack thing. We don't use stack at work, but we use package.yaml
19:09:43 × chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
19:09:56 <dsal> It saves me from ever having to write a .cabal file.
19:10:29 <EvanR> how does hpack enter into the workflow, is there a command
19:10:34 zant joins (~zant@62.96.232.178)
19:10:36 chexum joins (~quassel@gateway/tor-sasl/chexum)
19:10:45 <monochrom> hpack is a program. The command is "hpack" :)
19:10:57 <EvanR> hpack run MyScript.hs? xD
19:11:03 <monochrom> It converts package.yaml to foo.cabal. Then you can use cabal.
19:11:09 <EvanR> is this a third contender for build system
19:11:30 <EvanR> oh that's not bad
19:11:32 <monochrom> The point being package.yaml is usually fewer things to write than foo.cabal
19:11:43 freeside_ joins (~mengwong@103.252.202.193)
19:12:01 <monochrom> Although, not very good at adding version bounds.
19:12:22 <monochrom> Although, that doesn't matter much until you publish your stuff.
19:12:25 <dsal> You can still do stuff like `- base >= 4.7 && < 5`
19:13:03 <monochrom> OK that's good to know.
19:13:39 <EvanR> that's a flag to the hpack command?
19:13:44 <dsal> What I type: https://github.com/dustin/gopro-plus/blob/master/package.yaml -- what cabal sees: https://github.com/dustin/gopro-plus/blob/master/gopro-plus.cabal
19:13:46 <monochrom> I got biased data points from stackage lovers who never add version bounds so their hpack-generated foo.cabals lack version bounds too and then they pollute hackage.
19:13:59 <geekosaur> EvanR, it's an entry in the yaml file
19:14:32 <dsal> I have mixed feelings about version bounds. I like them when they help, but I don't like them when they make things worse.
19:15:07 × zant quits (~zant@62.96.232.178) (Ping timeout: 260 seconds)
19:15:26 <monochrom> Me too. I just write "base < 5" or even "base < 10". At least until I know of an issue. :)
19:15:37 monochrom learned "base < 10" from some dons packages!
19:16:04 × freeside_ quits (~mengwong@103.252.202.193) (Ping timeout: 248 seconds)
19:16:04 × freeside quits (~mengwong@103.252.202.193) (Ping timeout: 260 seconds)
19:16:09 <EvanR> if you're really lazy, base < 15
19:16:10 <dsal> I've got `- amazonka-lambda >= 2.0` to prevent it from accidentally trying to build on the released amazonka.
19:16:22 <monochrom> --allow-newer can be a temporarily relief though.
19:16:24 <darkling> I'll put a minimum version of the one that I used initially to work with, and add a maximum once I find an incompatible version. :)
19:16:47 <dsal> I read that as --allow-never and now I want that flag.
19:17:13 zant joins (~zant@62.96.232.178)
19:17:45 <monochrom> And I depend on the specific package too. base I'm very lax as said, somehow in practice I only use the super stable part of base anyway. But other packages, e.g., random, I add pretty narrow bounds even for toy examples.
19:18:38 <monochrom> haha --allow-never would be a great flag, yes.
19:18:40 <dsal> I also have stack.yaml (which I believe is stack specific). I have both `- gopro-plus-0.6.6.3` and `- iconv-0.4.1.3@sha256:4f0b2f09bb8c33199e3c3fdfcd35e576d17cbf5188b18f404ffdfa68a8ccc40e,1192`
19:19:53 <EvanR> --allow-everything-ever
19:20:16 <darkling> --no--just-no--srsly
19:20:51 <dsal> --nomeansno
19:21:10 <monochrom> You can just use --dry-run, you know. :)
19:21:20 <dsal> That just negates the --meansno flag.
19:21:24 × zant quits (~zant@62.96.232.178) (Ping timeout: 248 seconds)
19:21:25 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
19:21:31 bobbingbob joins (~dfadsva@2604:3d09:207f:f650::7b3a)
19:21:36 moonsheep joins (~user@user/moonsheep)
19:22:33 <moonsheep> how do I integrate ginger with scotty?
19:22:43 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
19:22:55 <moonsheep> according to the docs, "the resolver would typically load a file from a template directory, but other monads might have access to some sort of cache, or expose template compiled into a program"
19:23:04 <dsal> They seem kind of orthogonal.
19:23:06 <moonsheep> is scotty one such example?
19:23:17 <moonsheep> well my question is basically how do I load files with scotty
19:23:27 <moonsheep> do I just do readFile directly?
19:23:58 <dsal> ScottyT might be the answer in general. You can preload the templates or you can dynamically load them from a lift.
19:24:12 <dsal> Though Scotty runs over IO in general, doesn't it?
19:24:28 <moonsheep> yeah
19:24:33 <moonsheep> how do you mean "preload the templates"?
19:24:39 <moonsheep> so I still have to do it manually?
19:24:43 <dsal> Load them all up before you launch scotty.
19:24:48 <moonsheep> ah right
19:24:50 <dsal> I've never seen ginger before you mentioned it here.
19:25:19 <dsal> I use ScottyT in a slightly complex application (does stuff like basic access to my data and providing a websocket stream of my info log)
19:25:58 <moonsheep> well scotty does have `file`, but it sends the file straight to warp, I can't intercept the data
19:26:11 <moonsheep> I was wondering if maybe I could use that mechanism to do the heavy lifting of caching or whatever for me
19:26:40 <dsal> Yeah, file is just file serving.
19:26:52 <moonsheep> right, so I can't pass it to ginger
19:26:54 <dsal> There may be a caching middleware, but caching is kind of hard.
19:27:09 <moonsheep> so is there any way at all I could use that middleware with ginger?
19:29:10 <dsal> I'd just do the simplest thing that works until I liked where my application was going.
19:29:35 × CiaoSen quits (~Jura@p200300c95747e0002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 264 seconds)
19:31:37 <moonsheep> hmm
19:31:49 <moonsheep> I thought there was a "right way" to do things like this by default
19:32:02 <moonsheep> if you end up hacking things together, why use a web framework in the first place?
19:32:35 <EvanR> web frameworks vary in size, at least in haskell
19:32:44 <EvanR> many don't do everything
19:35:30 <monochrom> I don't think of scotty as a framework.
19:35:46 king_gs joins (~Thunderbi@187.201.204.122)
19:36:08 <dsal> scotty is a pretty small framework.
19:36:44 <dsal> There may be a right way to do things, but I like doing things the wrong way (whichever thing is obvious and easy at the time) to make progress when I get stuck.
19:36:56 <dsal> Often the most right thing doesn't even make sense to me when I'm learning something new.
19:37:25 <moonsheep> I mean, sure, but honestly, having an easy way to load files without having to worry about paths, caching, all that good stuff, is one of the most basic things a web framework should do
19:37:38 <moonsheep> monochrom: it does market itself as one
19:37:40 freeside joins (~mengwong@103.252.202.193)
19:37:41 freeside_ joins (~mengwong@103.252.202.193)
19:38:46 <moonsheep> hmm, ginger seems to give this example function in its docs
19:38:54 <dsal> I've never used scotty that way, but there probably is an easy way that will be obvious when you find it. I'm just suggesting not getting stuck before you even get started.
19:38:56 <moonsheep> yet htmlSource doesn't seem to exist
19:39:01 waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
19:39:01 <monochrom> What does ginger do?
19:39:12 <moonsheep> it's a templating engine
19:39:17 <moonsheep> a reimplementation of jinja2
19:39:22 <moonsheep> I really like jinja
19:39:43 <dsal> I just don't bother generating html on the server side at all anymore.
19:39:52 <moonsheep> how do I do dynamic stuff then?
19:39:58 × king_gs quits (~Thunderbi@187.201.204.122) (Ping timeout: 256 seconds)
19:40:40 <dsal> I do all the dynamic stuff on the client side that has all the dynamic bits.
19:40:57 <moonsheep> surely you jest
19:41:09 <EvanR> could work!
19:41:11 <dsal> Have you used a web site lately?
19:41:18 <moonsheep> dsal: unfortunately, yes
19:41:39 <dsal> I write the application for the web browser that makes API calls to the backend application in scotty.
19:41:50 <dsal> Occasionally scotty will also do stuff like generate a kmz for me or something.
19:42:10 <moonsheep> plain javascript?
19:42:37 <dsal> Never touch the stuff when I can avoid it.
19:42:39 <mauke> I strongly dislike having web page generation outsourced to me
19:42:47 × freeside_ quits (~mengwong@103.252.202.193) (Ping timeout: 264 seconds)
19:42:47 × freeside quits (~mengwong@103.252.202.193) (Ping timeout: 264 seconds)
19:42:49 <dsal> For the thing I'm looking at, I wrote it in elm.
19:42:53 × trev quits (~trev@user/trev) (Remote host closed the connection)
19:42:54 <moonsheep> ah alright
19:43:17 <EvanR> just a web page, vs a fully blown web application, vs some vaguely uncategorizable hybrid...
19:43:26 <dsal> I'm managing all my video assets. It's silly fast to do all the filtering and stuff.
19:43:32 <moonsheep> I'd still take server-side generation over client-side tomfuckery any day now
19:43:39 <darkling> Elm is about the first thing for me that made writing client-side web stuff not actively painful.
19:43:43 <moonsheep> what if I want to access the site in lynx?
19:44:16 <EvanR> see we're talking about two different applications of web tech, just pages vs "this is in a browser instead of GTK"
19:44:17 <moonsheep> (something I often do while booted from live linux images for example)
19:44:21 monochrom prefers elinks to lynx :)
19:44:26 <moonsheep> that was an example
19:44:29 <moonsheep> but yeah
19:44:44 <mauke> about 99% of the latter should be just pages
19:45:26 <EvanR> well continually pulling in full pages (that have to be fixed up client side anyway) is getting kind of silly
19:46:04 <moonsheep> EvanR: that's the secret, you don't pull them continually
19:46:12 <moonsheep> if you want live updates, web is the wrong way to go about it imho
19:46:20 <moonsheep> of course I'm not gonna change the mind of an entire industry
19:46:22 <moonsheep> oh well
19:46:48 <moonsheep> I should've just stuck with gemini...
19:47:08 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 255 seconds)
19:47:09 <EvanR> well that's not what I was getting at, but all roads lead to the woods like this xD
19:47:23 <EvanR> eventually
19:47:29 × titibandit quits (~titibandi@xdsl-78-35-173-119.nc.de) (Ping timeout: 246 seconds)
19:47:38 <moonsheep> anyway, why are the ginger docs telling me to use a function that doesn't exist?
19:48:16 <moonsheep> oh sorry didn't post the page
19:48:17 <moonsheep> https://hackage.haskell.org/package/ginger-0.10.4.0/docs/Text-Ginger-Run.html
19:48:36 <moonsheep> I can't for the live of me find where htmlSource is supposed to be
19:48:49 merijn joins (~merijn@c-001-001-017.client.esciencecenter.eduvpn.nl)
19:48:57 <EvanR> I found it over here https://hackage.haskell.org/package/ginger-0.10.4.0/docs/Text-Ginger-Html.html
19:49:22 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:111a:339b:4372:c307)
19:49:29 <moonsheep> oh nevermind I found it just when you posted it
19:49:34 <moonsheep> wait why doesn't it show up in hoogle?
19:49:44 × bgs quits (~bgs@212-85-160-171.dynamic.telemach.net) (Remote host closed the connection)
19:49:48 <moonsheep> (local hoogle)
19:50:11 <moonsheep> ???
19:50:23 <moonsheep> after restarting hoogle it now finds it jut fine
19:50:27 <moonsheep> s/jut/just
19:50:44 <moonsheep> what the hell
19:51:17 opticblast joins (~Thunderbi@secure-165.caltech.edu)
19:51:50 lortabac joins (~lortabac@2a01:e0a:541:b8f0:a0ae:ac9b:c278:adb2)
19:52:08 Lycurgus joins (~juan@user/Lycurgus)
19:54:36 freeside joins (~mengwong@103.252.202.193)
19:55:50 × opticblast quits (~Thunderbi@secure-165.caltech.edu) (Ping timeout: 256 seconds)
19:55:56 <EvanR> what the hell, it's working! where did my problems go?!
19:56:12 CiaoSen joins (~Jura@p200300c95747e0002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
19:56:20 <EvanR> if some tech in this room doesn't break in the next 5 minutes I swear to god
19:56:24 × rburkholder quits (~blurb@96.45.2.121) (Ping timeout: 256 seconds)
19:57:01 <monochrom> IRC itself is unlikely to break in the next 5 minutes. :)
19:57:55 <monochrom> "pure ()" is also extremely unlikely to break, although maybe you argue "that's not tech, that's math".
19:58:03 <darkling> * EvanR has quit (timed out: 240s)
19:58:13 <monochrom> heh
19:58:17 stiell joins (~stiell@gateway/tor-sasl/stiell)
19:59:14 × freeside quits (~mengwong@103.252.202.193) (Ping timeout: 256 seconds)
20:00:18 freeside joins (~mengwong@103.252.202.193)
20:01:25 <EvanR> yeah math doesn't break, people break. Or something
20:02:20 <darkling> People's implementations of the maths in the real world, on the other hand...
20:02:31 titibandit joins (~titibandi@xdsl-78-35-173-119.nc.de)
20:02:47 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
20:02:56 <darkling> Spot of ignorance, spot of entropy, and pretty soon you're looking at some *real* failure.
20:04:23 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
20:04:50 zant joins (~zant@62.214.20.26)
20:05:17 × freeside quits (~mengwong@103.252.202.193) (Ping timeout: 256 seconds)
20:05:20 <Lycurgus> well it does sorta break, or shows feets of clay as in sabine hossenfelders book
20:05:47 opticblast joins (~Thunderbi@secure-165.caltech.edu)
20:06:18 <Lycurgus> or you need to ask ur dr if it's right for u or smth
20:07:26 <EvanR> try mathrivia today, may cause death disease general horror and despair
20:08:55 <darkling> I've been on matinib since I got my PhD in 2002. :)
20:10:23 × opticblast quits (~Thunderbi@secure-165.caltech.edu) (Ping timeout: 256 seconds)
20:11:18 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 265 seconds)
20:12:27 <darkling> (It's at this point I discover that matinib is a real medication for impotence or furry toenails something)
20:14:06 zq joins (~zq@xorshift.org)
20:14:39 <zq> do where-bindings desugar to let?
20:15:12 <geekosaur> yes
20:15:12 <c_wraith> I'm not sure "desugar" is quite the right term, but they are compiled to core's let construct
20:15:20 <geekosaur> well, that
20:15:38 <monochrom> where and let both desugared to a common form.
20:15:57 <monochrom> or rather, s/desugared/compiled/
20:15:58 <geekosaur> it's somewhat complicated though as where scopes over guards, but guards desugar to cases
20:16:45 <monochrom> And yeah where and let have differences, desugaring is an inadequate mental model.
20:16:55 <zq> geekosaur: thanks
20:17:15 <zq> i was curious to know evaluation order of where-clauses under -XStrict
20:17:26 <geekosaur> you probably want to play with various small test programs and -ddump-ds to see what's going on
20:17:37 <monochrom> You could have asked directly that.
20:17:42 freeside joins (~mengwong@103.252.202.193)
20:19:04 opticblast joins (~Thunderbi@secure-165.caltech.edu)
20:20:47 <EvanR> -XStrict acts like ! is in front each variable by default, in the pattern bindings
20:21:03 × haveo quits (~haveo@sl35.iuwt.fr) (Remote host closed the connection)
20:21:04 <dsal> If it's just going to bang all the things, they should've called it -XXX
20:21:11 <EvanR> lol
20:21:31 <c_wraith> Well. It doesn't put a ! in front of nested pattern matches
20:21:59 <c_wraith> just for extra fun
20:22:21 <EvanR> what's an example of that
20:22:37 × titibandit quits (~titibandi@xdsl-78-35-173-119.nc.de) (Ping timeout: 252 seconds)
20:22:47 <c_wraith> something like let (x, y) = foo in bar x y
20:22:49 <monochrom> -ddump-ds is helpful in this case.
20:23:06 <c_wraith> it won't force evaluation of x or y
20:23:09 × merijn quits (~merijn@c-001-001-017.client.esciencecenter.eduvpn.nl) (Ping timeout: 260 seconds)
20:23:15 <EvanR> rather let !(x,y) = foo just wouldn't have any effect?
20:23:31 × freeside quits (~mengwong@103.252.202.193) (Ping timeout: 268 seconds)
20:23:32 <c_wraith> it would evaluate the result of foo
20:23:36 <c_wraith> but not x or y
20:23:49 king_gs joins (~Thunderbi@187.201.204.122)
20:23:56 <EvanR> ok... but the ! is there right
20:24:00 <monochrom> Evaluate foo until you see the (,) data constructor but that's still one step away from evaluating the two fields.
20:24:16 <EvanR> it sounds like you said because it's nested, it just won't put ! anywhere xD
20:24:22 <monochrom> So, difference between "foo = undefined" and "foo = (undefined, undefined)".
20:26:50 × king_gs quits (~Thunderbi@187.201.204.122) (Client Quit)
20:27:06 king_gs joins (~Thunderbi@187.201.204.122)
20:27:38 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
20:30:18 merijn joins (~merijn@c-001-001-017.client.esciencecenter.eduvpn.nl)
20:31:51 × Scraeling quits (~Scraeling@user/scraeling) (Quit: Scraeling)
20:33:23 × Lycurgus quits (~juan@user/Lycurgus) (Quit: Exeunt https://tinyurl.com/4m8d4kd5)
20:34:36 <monochrom> g ~(_, _) = (); main = print (g undefined)
20:34:55 <zq> i was hoping for an answer more formal than checking the simpl output but unfortunately the wiki doesn't say much about where desugaring
20:35:14 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:a0ae:ac9b:c278:adb2) (Quit: WeeChat 2.8)
20:35:15 <monochrom> Also print (g (undefined, undefined))
20:35:31 <monochrom> Those will show what Strict does and doesn't.
20:35:54 × festive_kurbus quits (~festive_k@user/kurbus) (Quit: Client closed)
20:36:05 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:111a:339b:4372:c307) (Remote host closed the connection)
20:36:10 freeside joins (~mengwong@103.252.202.193)
20:36:32 <EvanR> zq, the key is understanding what bangs in patterns do
20:36:36 <c_wraith> Strict is so weirdly narrow that I can't imagine wanting to use it in any case except the exact one it was designed for: a large module full of numeric algorithms on concrete types
20:37:02 freeside_ joins (~mengwong@103.252.202.193)
20:37:25 <monochrom> Well that still has the "where is the formal spec" question.
20:37:25 <EvanR> a minor second thing is where Strict puts the bangs but, there will be a lot of them
20:37:34 <dolio> Is that what it was designed for?
20:37:58 <monochrom> GHC user's gude has a formal spec that's incomplete because the rest is in the Haskell Report.
20:38:29 titibandit joins (~titibandi@xdsl-78-35-173-119.nc.de)
20:40:49 <monochrom> At which point the question and the answer are orthogonal to desugaring. Unless you just define "desugar = compile".
20:41:05 <monochrom> Gives a whole new meaning to "XY problem".
20:41:26 <monochrom> "You have a question along the X axis. You ask a question along the Y axis."
20:42:41 <monochrom> As said, in reality, where and let are not desugared into each other, they are compiled to a common intermediate form. Corollary: There will not be a wiki on desugaring where to anyway, because it is simply not done.
20:42:49 <monochrom> s/anyway/anything/
20:42:53 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
20:42:54 × califax quits (~califax@user/califx) (Remote host closed the connection)
20:43:45 califax joins (~califax@user/califx)
20:46:35 × troydm quits (~troydm@host-176-37-124-197.b025.la.net.ua) (Ping timeout: 260 seconds)
20:46:55 chomwitt joins (~chomwitt@2a02:587:7a0c:6a00:1ac0:4dff:fedb:a3f1)
20:50:21 × tomokojun quits (~tomokojun@37.19.210.31) (Remote host closed the connection)
20:50:41 tomokojun joins (~tomokojun@37.19.210.31)
20:51:39 × opticblast quits (~Thunderbi@secure-165.caltech.edu) (Read error: Connection reset by peer)
20:51:59 opticblast joins (~Thunderbi@secure-165.caltech.edu)
20:53:32 wootehfoot joins (~wootehfoo@user/wootehfoot)
20:57:03 bjourne2 joins (~bjorn@94.191.136.138.mobile.tre.se)
20:59:14 × waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 252 seconds)
20:59:30 pavonia joins (~user@user/siracusa)
20:59:36 gmg joins (~user@user/gehmehgeh)
20:59:52 waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
21:01:12 fserucas joins (~fserucas@laubervilliers-657-1-66-228.w90-63.abo.wanadoo.fr)
21:03:59 × merijn quits (~merijn@c-001-001-017.client.esciencecenter.eduvpn.nl) (Ping timeout: 260 seconds)
21:04:21 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
21:06:41 × opticblast quits (~Thunderbi@secure-165.caltech.edu) (Ping timeout: 268 seconds)
21:06:41 × king_gs quits (~Thunderbi@187.201.204.122) (Read error: Connection reset by peer)
21:07:29 king_gs joins (~Thunderbi@2806:103e:29:94a4:81e0:429b:22ec:cf13)
21:19:23 × chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
21:20:07 chexum joins (~quassel@gateway/tor-sasl/chexum)
21:22:28 haveo joins (~haveo@sl35.iuwt.fr)
21:25:23 × mmhat quits (~mmh@p200300f1c73b5145ee086bfffe095315.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
21:25:45 mmhat joins (~mmh@p200300f1c73b51cbee086bfffe095315.dip0.t-ipconnect.de)
21:26:35 bgs joins (~bgs@212-85-160-171.dynamic.telemach.net)
21:27:07 dudek joins (~dudek@185.150.236.173)
21:31:40 × bgs quits (~bgs@212-85-160-171.dynamic.telemach.net) (Remote host closed the connection)
21:35:36 <EvanR> the burning question becomes, do guards desugar to case analysis
21:35:46 <EvanR> or compile to case analysis xD
21:35:50 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
21:36:34 eggplantade joins (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net)
21:40:37 <gnyeki> EvanR: try compiling with ghc -ddump-ds to see if they desugar to the same code?
21:41:35 × eggplantade quits (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 264 seconds)
21:42:29 × freeside_ quits (~mengwong@103.252.202.193) (Ping timeout: 260 seconds)
21:42:29 × freeside quits (~mengwong@103.252.202.193) (Ping timeout: 260 seconds)
21:44:26 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
21:49:35 × fserucas quits (~fserucas@laubervilliers-657-1-66-228.w90-63.abo.wanadoo.fr) (Ping timeout: 246 seconds)
21:52:07 fizbin joins (~fizbin@user/fizbin)
21:53:56 <monochrom> I am not convinced that -ddump-ds outputs Haskell.
21:54:58 <geekosaur> I don't think there's a way to get Haskell as such out of desugaring, yes. it produces Core, which is similar to Haskell but differs in a number of ways (see for example `case`)
21:55:33 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
21:56:20 <monochrom> Usually "desugar" means staying within the same language, just trying to use fewer features of that language.
21:56:42 <geekosaur> but thsat's not how ghc uses it, sadly
21:57:35 freeside joins (~mengwong@103.252.202.193)
21:57:57 × titibandit quits (~titibandi@xdsl-78-35-173-119.nc.de) (Remote host closed the connection)
21:58:07 <monochrom> Right, so here is a dilemma between bending the meaning of "desugar" not slightly at all, or downright assert that GHC desugars all of Haskell.
21:59:14 Lycurgus joins (~juan@user/Lycurgus)
22:00:20 × TonyStone quits (~TonyStone@cpe-74-76-57-186.nycap.res.rr.com) (Ping timeout: 260 seconds)
22:00:27 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
22:00:58 jmdaemon joins (~jmdaemon@user/jmdaemon)
22:01:22 <monochrom> OK I concede. I know of a very good Brown University course that desugars one language to another. GHC is doing that.
22:01:33 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
22:01:48 <EvanR> the Glorious Glasgow Haskell Desugarer
22:01:56 <monochrom> (Specifically it shows desugaring OOP to closures, for example.)
22:02:02 × bjourne2 quits (~bjorn@94.191.136.138.mobile.tre.se) (Read error: Connection reset by peer)
22:02:32 <EvanR> if it desugarerers "one language to another" it's actually transugaring
22:02:38 freeside_ joins (~mengwong@103.252.202.193)
22:02:46 <monochrom> (Later on it also shows desugaring a language that has call/cc to a language that doesn't, but the output is in CPS.)
22:03:27 <monochrom> Yeah that's my thought, but I guess other people differ, and some of those other people I greatly admire and respect.
22:04:26 <monochrom> Great we had trans-fat, now we also have trans-sugar, this is going to taste great but horrible to health...
22:05:22 jpds joins (~jpds@gateway/tor-sasl/jpds)
22:10:51 × dudek quits (~dudek@185.150.236.173) (Quit: Leaving)
22:12:58 × fizbin quits (~fizbin@user/fizbin) (Ping timeout: 256 seconds)
22:13:16 TonyStone joins (~TonyStone@cpe-74-76-57-186.nycap.res.rr.com)
22:14:02 notzmv joins (~zmv@user/notzmv)
22:16:38 merijn joins (~merijn@c-001-001-017.client.esciencecenter.eduvpn.nl)
22:18:00 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
22:20:00 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
22:24:52 tomokojun_ joins (~tomokojun@143.244.47.69)
22:25:24 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
22:26:45 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
22:27:42 × tomokojun quits (~tomokojun@37.19.210.31) (Ping timeout: 256 seconds)
22:28:27 × tomokojun_ quits (~tomokojun@143.244.47.69) (Client Quit)
22:29:10 fizbin joins (~fizbin@user/fizbin)
22:31:04 seydar joins (~seydar@154-27-113-252.starry-inc.net)
22:31:32 <seydar> I'm solving day 5 of AoC using a stack. But it... doesn't feel very haskellish. Is there a better way to approach this problem in haskell?
22:33:00 <EvanR> the haskell list type is basically a stack
22:33:14 <EvanR> if a stack would work, you're in luck
22:33:32 dsrt^ joins (~dsrt@76.145.185.103)
22:34:16 <seydar> I used a stack in Ruby, but... i dunno, it just feels... inefficient? because every change requires producing a whole new stack?
22:34:27 <EvanR> in ruby, yeah xD
22:34:40 <seydar> in ruby it's fine!!! ruby is perfect!!!
22:34:43 <EvanR> not in haskell, the tail of any give list will be shared
22:34:44 <seydar> but i worry for my haskell
22:34:57 <seydar> oh whew that's good news
22:35:35 <EvanR> continually inspecting and replacing the first item in a list is cheap
22:37:43 <mauke> it occurs to me that running transpose on the header would probably make it easier to parse
22:38:37 <EvanR> transpose the file before reading it? xD
22:38:58 <EvanR> why doesn't unix have this
22:39:13 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
22:39:34 × fizbin quits (~fizbin@user/fizbin) (Ping timeout: 252 seconds)
22:40:26 <mauke> not the whole file, just the first paragraph
22:41:16 <dsal> Yeah, that would simplify things tremendously.
22:41:53 <EvanR> linear algebra wins again
22:42:18 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
22:43:35 <monochrom> Next time you have to do fast-fourier-transform to the header and then it's super-easy to parse. >:)
22:43:57 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 256 seconds)
22:44:02 × king_gs quits (~Thunderbi@2806:103e:29:94a4:81e0:429b:22ec:cf13) (Ping timeout: 265 seconds)
22:45:24 king_gs joins (~Thunderbi@187.201.204.122)
22:45:36 <seydar> mauke: do you post your solutions after you solve them?
22:45:52 <mauke> seydar: sometimes, in an ad-hoc fashion
22:46:39 <mauke> e.g. here's day 5 part 1: http://sprunge.us/yCdDCw
22:46:55 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
22:47:50 <EvanR> a mutable array... damn
22:48:29 <EvanR> :t interact
22:48:30 <lambdabot> (String -> String) -> IO ()
22:49:37 <mauke> @src interact
22:49:37 <lambdabot> interact f = do s <- getContents; putStr (f s)
22:51:19 × merijn quits (~merijn@c-001-001-017.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
22:53:52 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 252 seconds)
22:54:47 × raym quits (~ray@user/raym) (Ping timeout: 264 seconds)
22:55:16 opticblast joins (~Thunderbi@secure-165.caltech.edu)
22:55:17 × michalz quits (~michalz@185.246.204.75) (Remote host closed the connection)
22:58:18 × freeside quits (~mengwong@103.252.202.193) (Ping timeout: 268 seconds)
22:58:28 × freeside_ quits (~mengwong@103.252.202.193) (Ping timeout: 248 seconds)
22:59:37 elevenkb joins (~elevenkb@105.184.125.168)
23:00:38 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 255 seconds)
23:00:40 × wootehfoot quits (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer)
23:01:24 stiell joins (~stiell@gateway/tor-sasl/stiell)
23:03:35 srk- joins (~sorki@user/srk)
23:05:21 <moonsheep> mauke, seydar: this is how I parse my input https://paste.tomsmeding.com/8FJuu3eE
23:05:32 <moonsheep> basically transpose and chunk
23:05:42 <moonsheep> the find functions are just regex
23:05:51 × srk quits (~sorki@user/srk) (Ping timeout: 252 seconds)
23:05:53 seydar joins (~seydar@154-27-113-252.starry-inc.net)
23:06:14 × Lycurgus quits (~juan@user/Lycurgus) (Ping timeout: 256 seconds)
23:06:18 srk- is now known as srk
23:06:29 × king_gs quits (~Thunderbi@187.201.204.122) (Ping timeout: 260 seconds)
23:09:03 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
23:09:39 Feuermagier joins (~Feuermagi@user/feuermagier)
23:09:40 × Tuplanolla quits (~Tuplanoll@91-159-68-152.elisa-laajakaista.fi) (Quit: Leaving.)
23:10:09 freeside joins (~mengwong@103.252.202.193)
23:10:12 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 256 seconds)
23:10:12 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 256 seconds)
23:12:41 × Feuermagier quits (~Feuermagi@user/feuermagier) (Client Quit)
23:14:25 × freeside quits (~mengwong@103.252.202.193) (Ping timeout: 260 seconds)
23:15:30 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
23:19:05 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 255 seconds)
23:20:56 ddellacosta joins (~ddellacos@89.45.224.153)
23:21:00 × elevenkb quits (~elevenkb@105.184.125.168) (Quit: Client closed)
23:21:07 stiell joins (~stiell@gateway/tor-sasl/stiell)
23:21:55 × zant quits (~zant@62.214.20.26) (Ping timeout: 256 seconds)
23:24:01 zant joins (~zant@62.214.20.26)
23:25:03 seydar joins (~seydar@154-27-113-252.starry-inc.net)
23:27:26 freeside joins (~mengwong@103.252.202.193)
23:29:49 × zant quits (~zant@62.214.20.26) (Ping timeout: 260 seconds)
23:30:13 × Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection)
23:31:34 × ddellacosta quits (~ddellacos@89.45.224.153) (Ping timeout: 260 seconds)
23:32:09 × freeside quits (~mengwong@103.252.202.193) (Ping timeout: 260 seconds)
23:32:20 srk- joins (~sorki@user/srk)
23:34:50 freeside joins (~mengwong@103.252.202.193)
23:35:15 merijn joins (~merijn@c-001-001-017.client.esciencecenter.eduvpn.nl)
23:35:15 zant joins (~zant@62.214.20.26)
23:35:43 freeside_ joins (~mengwong@103.252.202.193)
23:35:55 × srk quits (~sorki@user/srk) (Ping timeout: 268 seconds)
23:35:55 srk- is now known as srk
23:37:23 × bobbingbob quits (~dfadsva@2604:3d09:207f:f650::7b3a) (Ping timeout: 252 seconds)
23:37:28 ddellacosta joins (~ddellacos@143.244.47.89)
23:38:21 × heinz9 quits (~trace@user/trace) (Remote host closed the connection)
23:40:11 × merijn quits (~merijn@c-001-001-017.client.esciencecenter.eduvpn.nl) (Ping timeout: 260 seconds)
23:40:21 bobbingbob joins (~dfadsva@2604:3d09:207f:f650::7b3a)
23:40:32 money_ joins (~money@user/polo)
23:40:34 Erutuon joins (~Erutuon@user/erutuon)
23:42:44 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 248 seconds)
23:42:56 fizbin joins (~fizbin@user/fizbin)
23:45:26 raym joins (~ray@user/raym)
23:46:03 × mastarija quits (~mastarija@2a05:4f46:e03:6000:2a89:666a:1e9:351e) (Quit: WeeChat 3.7.1)
23:47:39 × fizbin quits (~fizbin@user/fizbin) (Ping timeout: 260 seconds)
23:48:15 × zant quits (~zant@62.214.20.26) (Ping timeout: 268 seconds)
23:50:51 zant joins (~zant@62.214.20.26)
23:53:33 × use-value quits (~Thunderbi@2a00:23c6:8a03:2f01:6956:303f:1676:5fd5) (Remote host closed the connection)
23:53:51 use-value joins (~Thunderbi@2a00:23c6:8a03:2f01:6956:303f:1676:5fd5)
23:56:28 fizbin joins (~fizbin@user/fizbin)
23:57:37 seydar joins (~seydar@154-27-113-252.starry-inc.net)
23:58:59 natechan joins (~nate@98.45.169.16)

All times are in UTC on 2022-12-05.