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.