2022/11/18

2022-11-18 00:01:18 +0100 <cowboy8625> hmmm that makes a lot of sense.....
2022-11-18 00:01:25 +0100 <cowboy8625> thanks!
2022-11-18 00:02:56 +0100 <cowboy8625> I dont understand why ocaml went with the `;;` for there deliminator.
2022-11-18 00:03:08 +0100califax(~califax@user/califx) (Remote host closed the connection)
2022-11-18 00:03:14 +0100srz(~srz@181.228.49.93)
2022-11-18 00:03:32 +0100 <cowboy8625> been struggling with the pratt parser for a long time but I think I figured it out.
2022-11-18 00:03:57 +0100califax(~califax@user/califx)
2022-11-18 00:04:01 +0100freeside(~mengwong@103.252.202.193)
2022-11-18 00:04:04 +0100michalz(~michalz@185.246.207.221) (Remote host closed the connection)
2022-11-18 00:04:30 +0100wonko(~wjc@2a0e:1c80:2:0:45:15:19:130) (Ping timeout: 240 seconds)
2022-11-18 00:05:06 +0100wonko(~wjc@2a0e:1c80:2:0:45:15:19:130)
2022-11-18 00:06:50 +0100elevenkb(~elevenkb@105.184.125.168)
2022-11-18 00:09:43 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-11-18 00:10:24 +0100beteigeuze(~Thunderbi@a79-169-109-107.cpe.netcabo.pt) (Remote host closed the connection)
2022-11-18 00:15:41 +0100 <EvanR> ;; is so you know it's ocaml
2022-11-18 00:16:15 +0100 <EvanR> or more likely "someone picked that first, blame them"
2022-11-18 00:16:21 +0100king_gs(~Thunderbi@187.201.139.206)
2022-11-18 00:16:27 +0100elevenkb(~elevenkb@105.184.125.168) (Ping timeout: 268 seconds)
2022-11-18 00:16:41 +0100 <hpc> EvanR: it could still be bash ;)
2022-11-18 00:18:18 +0100 <EvanR> see, told you
2022-11-18 00:18:21 +0100 <monochrom> I think SML or even its predecessor started using ;;
2022-11-18 00:21:00 +0100mncheck(~mncheck@193.224.205.254) (Ping timeout: 260 seconds)
2022-11-18 00:21:12 +0100beteigeuze(~Thunderbi@a79-169-109-107.cpe.netcabo.pt)
2022-11-18 00:22:13 +0100denl^(~denl@76.145.185.103)
2022-11-18 00:25:42 +0100srz(~srz@181.228.49.93) (Ping timeout: 268 seconds)
2022-11-18 00:27:17 +0100 <EvanR> when the question is too hard, use recursion
2022-11-18 00:27:57 +0100 <juri_> when recursion is too hard, use violence?
2022-11-18 00:28:24 +0100zeenk(~zeenk@2a02:2f04:a208:3600::7fe)
2022-11-18 00:29:22 +0100beteigeuze(~Thunderbi@a79-169-109-107.cpe.netcabo.pt) (Remote host closed the connection)
2022-11-18 00:29:42 +0100 <hpc> when recursion is too hard, use recursion
2022-11-18 00:29:49 +0100 <EvanR> ^
2022-11-18 00:29:54 +0100 <monochrom> What hpc said. :)
2022-11-18 00:34:10 +0100 <cowboy8625> What are yall working on?
2022-11-18 00:35:34 +0100Guest5270money
2022-11-18 00:36:06 +0100 <EvanR> advent of code 2020
2022-11-18 00:36:08 +0100 <monochrom> Um, writing a few lines of emacs lisp to tell emacs that for *.dump-* files emacs should auto-reload them whenever they are changed externally (by GHC in my case).
2022-11-18 00:36:40 +0100 <monochrom> *.dump-* files are made by GHC when I request it to spit out intermediate code.
2022-11-18 00:37:25 +0100 <monochrom> You can also white-paper-level-understand it as "writing emacs lisp to help me understand haskell"? >:)
2022-11-18 00:37:38 +0100 <monochrom> or popsci-level-understand
2022-11-18 00:41:30 +0100acidjnk_new(~acidjnk@p200300d6e7137a332868e30cc8c30a1f.dip0.t-ipconnect.de)
2022-11-18 00:41:31 +0100acidjnk(~acidjnk@p200300d6e7137a338cbf33f376421589.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2022-11-18 00:47:30 +0100king_gs1(~Thunderbi@2806:103e:29:bfeb:c988:bbd5:2586:4924)
2022-11-18 00:47:31 +0100king_gs(~Thunderbi@187.201.139.206) (Read error: Connection reset by peer)
2022-11-18 00:47:31 +0100king_gs1king_gs
2022-11-18 00:47:48 +0100elevenkb(~elevenkb@105.184.125.168)
2022-11-18 00:51:37 +0100mixfix41(~sdenynine@user/mixfix41) (Ping timeout: 268 seconds)
2022-11-18 00:51:47 +0100ted[m](~tedmatrix@2001:470:69fc:105::2:bf60)
2022-11-18 00:52:44 +0100beteigeuze(~Thunderbi@a79-169-109-107.cpe.netcabo.pt)
2022-11-18 00:52:50 +0100fockerize(~finn@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 268 seconds)
2022-11-18 00:53:59 +0100coot(~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
2022-11-18 00:56:10 +0100king_gs(~Thunderbi@2806:103e:29:bfeb:c988:bbd5:2586:4924) (Ping timeout: 240 seconds)
2022-11-18 00:59:17 +0100king_gs(~Thunderbi@187.201.139.206)
2022-11-18 01:06:34 +0100titibandit(~titibandi@xdsl-78-35-182-184.nc.de) (Remote host closed the connection)
2022-11-18 01:09:29 +0100freeside(~mengwong@103.252.202.193) (Ping timeout: 268 seconds)
2022-11-18 01:10:22 +0100elevenkb(~elevenkb@105.184.125.168) (Ping timeout: 256 seconds)
2022-11-18 01:10:46 +0100mauke_(~mauke@p57b6eb34.dip0.t-ipconnect.de)
2022-11-18 01:12:19 +0100mauke(~mauke@p54958ca8.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2022-11-18 01:14:54 +0100Kaiepi(~Kaiepi@108.175.84.104) (Ping timeout: 260 seconds)
2022-11-18 01:14:58 +0100gurkenglas(~gurkengla@p548ac72e.dip0.t-ipconnect.de)
2022-11-18 01:15:57 +0100 <cowboy8625> what I dont understand is how to parse calls.
2022-11-18 01:16:17 +0100 <cowboy8625> calls are kicking my butt
2022-11-18 01:19:10 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:3cb4:cd70:33e6:e916)
2022-11-18 01:19:11 +0100king_gs(~Thunderbi@187.201.139.206) (Read error: Connection reset by peer)
2022-11-18 01:19:30 +0100king_gs(~Thunderbi@2806:103e:29:bfeb:c988:bbd5:2586:4924)
2022-11-18 01:19:32 +0100gqplox(~textual@2a02:c7c:941d:fd00:c91:4591:f163:6ae7) (Quit: Textual IRC Client: www.textualapp.com)
2022-11-18 01:20:33 +0100detuneattune(~detuneatt@user/detuneattune) (Quit: The Lounge - https://thelounge.chat)
2022-11-18 01:22:24 +0100 <Axman6> App <$> expr <*> expr? :P
2022-11-18 01:23:20 +0100beteigeuze(~Thunderbi@a79-169-109-107.cpe.netcabo.pt) (Remote host closed the connection)
2022-11-18 01:24:00 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:3cb4:cd70:33e6:e916) (Ping timeout: 260 seconds)
2022-11-18 01:24:49 +0100beteigeuze(~Thunderbi@a79-169-109-107.cpe.netcabo.pt)
2022-11-18 01:25:09 +0100causal(~user@50.35.83.177)
2022-11-18 01:28:19 +0100acidjnk_new(~acidjnk@p200300d6e7137a332868e30cc8c30a1f.dip0.t-ipconnect.de) (Ping timeout: 256 seconds)
2022-11-18 01:29:16 +0100perrierjouet(~perrier-j@modemcable048.127-56-74.mc.videotron.ca) (Quit: WeeChat 3.7.1)
2022-11-18 01:29:47 +0100 <cowboy8625> yeah I get that
2022-11-18 01:30:02 +0100 <Axman6> so, this might be more of a unix question, but I'm thinking about it from a haskell perspective - If you wanted to spawn two subprocesses and pipe the output from one to another, you's first spawn the recipient of the data, get its stdin handle, then use that as the stdout handle, correct?
2022-11-18 01:31:19 +0100 <geekosaur> should work, I think. might need to use the lower level process stuff from the unix package though
2022-11-18 01:31:38 +0100 <Axman6> I'm wondering if there's a way to find out how much data has been sent between the two processes - hFileSize specifically talks about being only for handles for real files
2022-11-18 01:31:58 +0100 <Axman6> I guess trying the piping would be pretty easy
2022-11-18 01:32:19 +0100 <geekosaur> there isn't, really
2022-11-18 01:32:36 +0100 <geekosaur> a pipe has a kernel buffer and no other "memory"
2022-11-18 01:32:49 +0100mixfix41(~sdeny9ee@user/mixfix41)
2022-11-18 01:33:14 +0100 <Axman6> so if you wanted to do that, from haskell, you'd be better off forking a thread to read, keep track of stats and then write to separate handles?
2022-11-18 01:33:29 +0100 <geekosaur> yeh
2022-11-18 01:33:53 +0100freeside(~mengwong@103.252.202.193)
2022-11-18 01:34:24 +0100 <Axman6> Wondering how hard writing something like pv would be in Haskell
2022-11-18 01:34:31 +0100 <Axman6> (pipe viewer)
2022-11-18 01:35:17 +0100 <geekosaur> the unix package should give you everything you need, unless it's accessing /proc directly, and possibly even then
2022-11-18 01:35:47 +0100beteigeuze(~Thunderbi@a79-169-109-107.cpe.netcabo.pt) (Remote host closed the connection)
2022-11-18 01:37:18 +0100beteigeuze(~Thunderbi@a79-169-109-107.cpe.netcabo.pt)
2022-11-18 01:37:54 +0100 <Axman6> is GHC2021 a base language or an extension?
2022-11-18 01:38:08 +0100 <Axman6> (is it even GHC2021 or 2020?)
2022-11-18 01:38:27 +0100freeside(~mengwong@103.252.202.193) (Ping timeout: 260 seconds)
2022-11-18 01:38:43 +0100perrierjouet(~perrier-j@modemcable048.127-56-74.mc.videotron.ca)
2022-11-18 01:39:52 +0100 <monochrom> How to parse calls: `some expr` to get a non-empty list, then you can split it or even foldl1 FunApp.
2022-11-18 01:40:57 +0100 <monochrom> To a large extent I would parse s-expressions that way too.
2022-11-18 01:43:58 +0100acidjnk_new(~acidjnk@p200300d6e7137a332868e30cc8c30a1f.dip0.t-ipconnect.de)
2022-11-18 01:44:51 +0100zeenk(~zeenk@2a02:2f04:a208:3600::7fe) (Quit: Konversation terminated!)
2022-11-18 01:45:16 +0100beteigeuze(~Thunderbi@a79-169-109-107.cpe.netcabo.pt) (Remote host closed the connection)
2022-11-18 01:50:44 +0100mmhat(~mmh@p200300f1c722a143ee086bfffe095315.dip0.t-ipconnect.de)
2022-11-18 01:50:46 +0100zebrag(~chris@user/zebrag)
2022-11-18 01:51:36 +0100beteigeuze(~Thunderbi@a79-169-109-107.cpe.netcabo.pt)
2022-11-18 01:53:06 +0100 <cowboy8625> WOOOOOOO I think I got it!!!!!!!
2022-11-18 01:57:35 +0100mixfix41(~sdeny9ee@user/mixfix41) (Ping timeout: 260 seconds)
2022-11-18 01:58:03 +0100srz(~srz@181.228.49.93)
2022-11-18 01:58:32 +0100xff0x(~xff0x@2405:6580:b080:900:43db:c639:c914:6f0d) (Ping timeout: 256 seconds)
2022-11-18 01:59:30 +0100chromoblob(~user@37.113.164.122) (Ping timeout: 240 seconds)
2022-11-18 01:59:51 +0100 <geekosaur> Axman6, it's a language, although ghc itself accepts all language designators with the same -X / LANGUAGE pragma as extensions
2022-11-18 02:00:01 +0100merijn(~merijn@c-001-001-012.client.esciencecenter.eduvpn.nl)
2022-11-18 02:00:17 +0100 <geekosaur> cabal will accept `default-language: GHC2021` if you're using ghc 9.2 or later
2022-11-18 02:00:29 +0100 <geekosaur> (stack as well, if it's recent enough)
2022-11-18 02:00:58 +0100freeside(~mengwong@103.252.202.193)
2022-11-18 02:01:33 +0100 <Axman6> yeah, cabal/ghc weren't happy with default-language: Haskell2010 and other-extensions: GHC2021, so tried changing the language and it's all good. I should read what's in GHC2021 now...
2022-11-18 02:03:05 +0100beteigeuze(~Thunderbi@a79-169-109-107.cpe.netcabo.pt) (Ping timeout: 260 seconds)
2022-11-18 02:03:21 +0100king_gs(~Thunderbi@2806:103e:29:bfeb:c988:bbd5:2586:4924) (Remote host closed the connection)
2022-11-18 02:03:23 +0100 <geekosaur> https://downloads.haskell.org/ghc/9.4.2/docs/users_guide/exts/control.html?highlight=ghc2021#exten…
2022-11-18 02:04:22 +0100td_(~td@83.135.9.50) (Ping timeout: 268 seconds)
2022-11-18 02:04:52 +0100maerwald(~maerwald@user/maerwald) (Ping timeout: 248 seconds)
2022-11-18 02:05:27 +0100beteigeuze(~Thunderbi@a79-169-109-107.cpe.netcabo.pt)
2022-11-18 02:05:30 +0100ubert(~Thunderbi@77.119.167.253.wireless.dyn.drei.com) (Ping timeout: 240 seconds)
2022-11-18 02:05:36 +0100freeside(~mengwong@103.252.202.193) (Ping timeout: 268 seconds)
2022-11-18 02:05:55 +0100ubert(~Thunderbi@178.165.197.162.wireless.dyn.drei.com)
2022-11-18 02:06:06 +0100ub(~Thunderbi@178.165.197.162.wireless.dyn.drei.com)
2022-11-18 02:06:41 +0100akegalj(~akegalj@210-96.dsl.iskon.hr) (Quit: leaving)
2022-11-18 02:06:49 +0100beteigeuze(~Thunderbi@a79-169-109-107.cpe.netcabo.pt) (Client Quit)
2022-11-18 02:07:35 +0100maerwald(~maerwald@mail.hasufell.de)
2022-11-18 02:07:36 +0100ubert1(~Thunderbi@77.119.167.253.wireless.dyn.drei.com) (Ping timeout: 256 seconds)
2022-11-18 02:09:11 +0100beteigeuze(~Thunderbi@a79-169-109-107.cpe.netcabo.pt)
2022-11-18 02:09:46 +0100xff0x(~xff0x@2405:6580:b080:900:43db:c639:c914:6f0d)
2022-11-18 02:10:00 +0100td_(~td@83.135.9.50)
2022-11-18 02:10:05 +0100L29Ah(~L29Ah@wikipedia/L29Ah) (Ping timeout: 260 seconds)
2022-11-18 02:10:24 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
2022-11-18 02:11:53 +0100L29Ah(~L29Ah@wikipedia/L29Ah)
2022-11-18 02:12:10 +0100malte(~malte@mal.tc) (Ping timeout: 240 seconds)
2022-11-18 02:14:58 +0100mmhat(~mmh@p200300f1c722a143ee086bfffe095315.dip0.t-ipconnect.de) (Ping timeout: 256 seconds)
2022-11-18 02:15:44 +0100beteigeuze(~Thunderbi@a79-169-109-107.cpe.netcabo.pt) (Remote host closed the connection)
2022-11-18 02:16:31 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8)
2022-11-18 02:17:11 +0100pavonia(~user@user/siracusa) (Ping timeout: 260 seconds)
2022-11-18 02:17:45 +0100beteigeuze(~Thunderbi@a79-169-109-107.cpe.netcabo.pt)
2022-11-18 02:18:50 +0100malte(~malte@mal.tc)
2022-11-18 02:19:47 +0100pavonia(~user@user/siracusa)
2022-11-18 02:19:56 +0100freeside(~mengwong@103.252.202.193)
2022-11-18 02:24:22 +0100sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
2022-11-18 02:25:29 +0100sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
2022-11-18 02:25:34 +0100troydm(~troydm@host-176-37-124-197.b025.la.net.ua)
2022-11-18 02:28:23 +0100xff0x(~xff0x@2405:6580:b080:900:43db:c639:c914:6f0d) (Ping timeout: 260 seconds)
2022-11-18 02:29:07 +0100mmhat(~mmh@p200300f1c701b7cbee086bfffe095315.dip0.t-ipconnect.de)
2022-11-18 02:29:32 +0100dtman34(~dtman34@2601:447:d080:83c8:24bc:55ba:13b9:cc55) (Quit: ZNC 1.8.2+deb2+b1 - https://znc.in)
2022-11-18 02:29:39 +0100beteigeuze(~Thunderbi@a79-169-109-107.cpe.netcabo.pt) (Ping timeout: 268 seconds)
2022-11-18 02:29:39 +0100merijn(~merijn@c-001-001-012.client.esciencecenter.eduvpn.nl) (Ping timeout: 268 seconds)
2022-11-18 02:29:49 +0100Tuplanolla(~Tuplanoll@91-159-68-152.elisa-laajakaista.fi) (Quit: Leaving.)
2022-11-18 02:29:53 +0100dtman34(~dtman34@2601:447:d080:83c8:3fe9:6f54:f618:67a8)
2022-11-18 02:32:48 +0100beteigeuze(~Thunderbi@a79-169-109-107.cpe.netcabo.pt)
2022-11-18 02:33:27 +0100wroathe(~wroathe@207-153-38-140.fttp.usinternet.com)
2022-11-18 02:33:27 +0100wroathe(~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
2022-11-18 02:33:27 +0100wroathe(~wroathe@user/wroathe)
2022-11-18 02:40:47 +0100maerwald(~maerwald@mail.hasufell.de) (Quit: gone)
2022-11-18 02:42:24 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 260 seconds)
2022-11-18 02:43:14 +0100maerwald(~maerwald@mail.hasufell.de)
2022-11-18 02:51:38 +0100srz_(~srz@179.36.100.24)
2022-11-18 02:53:22 +0100machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net)
2022-11-18 02:53:25 +0100hsw_(~hsw@112-104-142-182.adsl.dynamic.seed.net.tw) (Quit: Leaving)
2022-11-18 02:53:37 +0100hsw(~hsw@2001-b030-2303-0104-0172-0025-0012-0132.hinet-ip6.hinet.net)
2022-11-18 02:54:04 +0100srz(~srz@181.228.49.93) (Ping timeout: 256 seconds)
2022-11-18 02:56:03 +0100waleee(~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
2022-11-18 02:58:19 +0100nate4(~nate@98.45.169.16)
2022-11-18 03:02:57 +0100 <cowboy8625> well I am extremly excited! Pratt Parsing is awesome! SOO simple really.
2022-11-18 03:03:34 +0100nate4(~nate@98.45.169.16) (Ping timeout: 268 seconds)
2022-11-18 03:06:08 +0100zebrag(~chris@user/zebrag) (Quit: Konversation terminated!)
2022-11-18 03:07:55 +0100xff0x(~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp)
2022-11-18 03:08:42 +0100srz_(~srz@179.36.100.24) (Remote host closed the connection)
2022-11-18 03:12:46 +0100maerwald(~maerwald@mail.hasufell.de) (Ping timeout: 256 seconds)
2022-11-18 03:13:08 +0100maerwald(~maerwald@mail.hasufell.de)
2022-11-18 03:14:40 +0100bontaq(~user@ool-45779fe5.dyn.optonline.net) (Ping timeout: 268 seconds)
2022-11-18 03:16:44 +0100mmhat(~mmh@p200300f1c701b7cbee086bfffe095315.dip0.t-ipconnect.de) (Ping timeout: 256 seconds)
2022-11-18 03:16:58 +0100wroathe(~wroathe@207-153-38-140.fttp.usinternet.com)
2022-11-18 03:16:58 +0100wroathe(~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
2022-11-18 03:16:58 +0100wroathe(~wroathe@user/wroathe)
2022-11-18 03:19:49 +0100Unicorn_Princess(~Unicorn_P@user/Unicorn-Princess/x-3540542)
2022-11-18 03:20:38 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:3cb4:cd70:33e6:e916)
2022-11-18 03:24:32 +0100freeside(~mengwong@103.252.202.193) (Ping timeout: 268 seconds)
2022-11-18 03:25:20 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:3cb4:cd70:33e6:e916) (Ping timeout: 260 seconds)
2022-11-18 03:27:04 +0100acidjnk_new(~acidjnk@p200300d6e7137a332868e30cc8c30a1f.dip0.t-ipconnect.de) (Read error: Connection reset by peer)
2022-11-18 03:27:54 +0100shapr(~user@68.54.166.125) (Ping timeout: 260 seconds)
2022-11-18 03:28:58 +0100mmhat(~mmh@p200300f1c70468f6ee086bfffe095315.dip0.t-ipconnect.de)
2022-11-18 03:30:42 +0100gurkenglas(~gurkengla@p548ac72e.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
2022-11-18 03:37:55 +0100youziqi(~youziqi@103.37.140.45) (Ping timeout: 260 seconds)
2022-11-18 03:42:49 +0100shapr(~user@68.54.166.125)
2022-11-18 03:45:13 +0100youziqi(~youziqi@103.37.140.125)
2022-11-18 03:45:14 +0100razetime(~quassel@117.254.35.237)
2022-11-18 03:45:51 +0100merijn(~merijn@c-001-001-012.client.esciencecenter.eduvpn.nl)
2022-11-18 03:48:30 +0100ddellacosta(~ddellacos@143.244.47.83) (Ping timeout: 240 seconds)
2022-11-18 03:48:54 +0100beteigeuze(~Thunderbi@a79-169-109-107.cpe.netcabo.pt) (Ping timeout: 260 seconds)
2022-11-18 03:50:12 +0100 <elvishjerricco> So I was trying to be clever, doing `asum $ fmap f [1..5] ++ [die "too many tries"]`, where `f` is an `IO` function. The bulk of `f` is a `callProcess`. I expected that `ctrl-c` would kill the whole thing, but it just kills one of the tries at a time.
2022-11-18 03:50:44 +0100ddellacosta(~ddellacos@143.244.47.70)
2022-11-18 03:51:18 +0100 <elvishjerricco> I wanted it to be that if `callProcess` failed, `asum` would just cause it to try again through the `IO` instance of `Alternative`
2022-11-18 03:51:52 +0100machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 256 seconds)
2022-11-18 03:52:38 +0100freeside(~mengwong@103.252.202.193)
2022-11-18 03:54:49 +0100werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Quit: leaving)
2022-11-18 03:55:03 +0100werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2022-11-18 03:55:10 +0100werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Client Quit)
2022-11-18 03:55:41 +0100werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2022-11-18 04:00:31 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
2022-11-18 04:05:22 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-11-18 04:07:12 +0100zebrag(~chris@user/zebrag)
2022-11-18 04:08:18 +0100td_(~td@83.135.9.50) (Ping timeout: 256 seconds)
2022-11-18 04:10:05 +0100td_(~td@83.135.9.5)
2022-11-18 04:15:08 +0100marc___(~marc@5.83.191.79)
2022-11-18 04:18:31 +0100marc__(~marc@5.83.191.222) (Ping timeout: 260 seconds)
2022-11-18 04:19:55 +0100Batzy(~quassel@user/batzy) (Ping timeout: 260 seconds)
2022-11-18 04:20:39 +0100merijn(~merijn@c-001-001-012.client.esciencecenter.eduvpn.nl) (Ping timeout: 268 seconds)
2022-11-18 04:21:18 +0100Batzy(~quassel@user/batzy)
2022-11-18 04:21:48 +0100Batzy(~quassel@user/batzy) (Client Quit)
2022-11-18 04:23:12 +0100Batzy(~quassel@user/batzy)
2022-11-18 04:23:46 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
2022-11-18 04:24:08 +0100maxfan8(~max@2a01:4f8:192:5356::2)
2022-11-18 04:25:13 +0100Batzy_(~quassel@user/batzy)
2022-11-18 04:25:27 +0100Batzy_(~quassel@user/batzy) (Client Quit)
2022-11-18 04:26:34 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-11-18 04:27:01 +0100Batzy(~quassel@user/batzy) (Read error: Connection reset by peer)
2022-11-18 04:29:19 +0100Batzy(~quassel@user/batzy)
2022-11-18 04:39:03 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 260 seconds)
2022-11-18 04:41:13 +0100euandreh(~Thunderbi@179.214.113.107) (Remote host closed the connection)
2022-11-18 04:42:09 +0100cowboy8625(~cowboy@96-2-208-2-static.midco.net) (Quit: WeeChat 3.5)
2022-11-18 04:42:55 +0100terrorjack(~terrorjac@2a01:4f8:1c1e:509a::1) (Quit: The Lounge - https://thelounge.chat)
2022-11-18 04:44:16 +0100terrorjack(~terrorjac@2a01:4f8:1c1e:509a::1)
2022-11-18 04:44:31 +0100jinsun__(~jinsun@user/jinsun)
2022-11-18 04:44:31 +0100jinsun(~jinsun@user/jinsun) (Killed (silver.libera.chat (Nickname regained by services)))
2022-11-18 04:44:31 +0100jinsun__jinsun
2022-11-18 04:51:05 +0100evanvarvell(~evanvarve@097-088-181-216.res.spectrum.com) (Quit: Leaving)
2022-11-18 04:56:12 +0100hgolden(~hgolden@cpe-172-251-233-141.socal.res.rr.com) (Remote host closed the connection)
2022-11-18 04:57:01 +0100euandreh(~Thunderbi@179.214.113.107)
2022-11-18 04:57:06 +0100polo(~polo@user/polo)
2022-11-18 04:57:36 +0100hgolden(~hgolden@cpe-172-251-233-141.socal.res.rr.com)
2022-11-18 04:57:40 +0100merijn(~merijn@c-001-001-012.client.esciencecenter.eduvpn.nl)
2022-11-18 04:59:29 +0100freeside(~mengwong@103.252.202.193) (Ping timeout: 260 seconds)
2022-11-18 05:00:02 +0100haasn(~nand@haasn.dev) (Quit: ZNC 1.7.5+deb4 - https://znc.in)
2022-11-18 05:00:13 +0100 <Inst> ummm, i'm looking for some help on Cabal
2022-11-18 05:00:30 +0100 <Inst> I'm on Windows, and somehow it's not allowing me to compile based on .configure scripts, but my installation is managed by maerwald's ghcup
2022-11-18 05:00:42 +0100euandreh(~Thunderbi@179.214.113.107) (Remote host closed the connection)
2022-11-18 05:01:14 +0100freeside(~mengwong@103.252.202.193)
2022-11-18 05:01:24 +0100haasn(~nand@haasn.dev)
2022-11-18 05:02:52 +0100merijn(~merijn@c-001-001-012.client.esciencecenter.eduvpn.nl) (Ping timeout: 260 seconds)
2022-11-18 05:03:09 +0100euandreh(~Thunderbi@179.214.113.107)
2022-11-18 05:06:49 +0100zebrag(~chris@user/zebrag) (Quit: Konversation terminated!)
2022-11-18 05:09:09 +0100mvk(~mvk@2607:fea8:5ce3:8500::4b68) (Quit: Going elsewhere)
2022-11-18 05:09:22 +0100ddellacosta(~ddellacos@143.244.47.70) (Ping timeout: 268 seconds)
2022-11-18 05:09:53 +0100polo(~polo@user/polo) (Ping timeout: 256 seconds)
2022-11-18 05:10:17 +0100polo(~polo@user/polo)
2022-11-18 05:10:50 +0100polo(~polo@user/polo) (Client Quit)
2022-11-18 05:12:24 +0100Guest75(~Guest75@178.141.130.118)
2022-11-18 05:15:09 +0100azimut(~azimut@gateway/tor-sasl/azimut)
2022-11-18 05:17:10 +0100denl^(~denl@76.145.185.103) (Remote host closed the connection)
2022-11-18 05:17:13 +0100Guest75(~Guest75@178.141.130.118) (Ping timeout: 260 seconds)
2022-11-18 05:18:09 +0100 <sm> @where paste
2022-11-18 05:18:09 +0100 <lambdabot> Help us help you: please paste full code, input and/or output at e.g. https://paste.tomsmeding.com
2022-11-18 05:21:23 +0100 <Inst> https://paste.tomsmeding.com/QX4w8JGZ
2022-11-18 05:21:49 +0100 <Inst> except msys+mingw should be installed?
2022-11-18 05:25:38 +0100 <sm> I'm not sure how that works with ghcup, #haskell-ghcup / maerwald may know
2022-11-18 05:30:08 +0100InstX1(~Liam@c-98-208-218-119.hsd1.fl.comcast.net)
2022-11-18 05:31:28 +0100 <maerwald[m]> Inst: your cabal.config?
2022-11-18 05:31:32 +0100 <maerwald[m]> The global one
2022-11-18 05:32:16 +0100mbuf(~Shakthi@49.204.132.239)
2022-11-18 05:33:31 +0100 <Inst> maerwald:
2022-11-18 05:33:32 +0100 <Inst> https://paste.tomsmeding.com/51QGzezE
2022-11-18 05:33:39 +0100waleee(~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 260 seconds)
2022-11-18 05:34:02 +0100 <Inst> if i delete the config file and reinstall cabal, it should attempt to regenerate the bindings to msys, right?
2022-11-18 05:34:41 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:3cb4:cd70:33e6:e916)
2022-11-18 05:34:54 +0100 <maerwald[m]> extra-include-dirs, extra-lib-dirs and extra-prog-path are not set for some reason
2022-11-18 05:35:00 +0100InstX1(~Liam@c-98-208-218-119.hsd1.fl.comcast.net) (Ping timeout: 256 seconds)
2022-11-18 05:35:02 +0100 <maerwald[m]> https://github.com/hasufell/ghcup-hs/blob/e924ad8278966795ea6f8393fc38900c549f6e2a/scripts/bootstr…
2022-11-18 05:35:35 +0100 <maerwald[m]> The bootstrap script should set them. It's possible that you're using different shell or something and cabal.config.location is different
2022-11-18 05:35:50 +0100 <maerwald[m]> Set those values manually
2022-11-18 05:39:35 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
2022-11-18 05:40:31 +0100waleee(~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
2022-11-18 05:41:28 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-11-18 05:42:36 +0100 <Inst> how do i force the bootstrap script to run?
2022-11-18 05:43:14 +0100razetime(~quassel@117.254.35.237) (Ping timeout: 260 seconds)
2022-11-18 05:44:27 +0100freeside(~mengwong@103.252.202.193) (Ping timeout: 256 seconds)
2022-11-18 05:46:52 +0100 <maerwald[m]> It's invoked by the powershell script. If you're already in an msys2 bash shell, you can invoke the same as on unix
2022-11-18 05:48:36 +0100 <Inst> i'm reinstalling ghcup, would that work?
2022-11-18 05:49:37 +0100catern(~sbaugh@2604:2000:8fc0:b:a9c7:866a:bf36:3407) (Read error: Connection reset by peer)
2022-11-18 05:53:35 +0100 <Inst> yup, it's refusing to run
2022-11-18 05:53:40 +0100 <Inst> which powershell script?
2022-11-18 05:55:58 +0100Vajb(~Vajb@2001:999:504:3ad6:52a4:a3b5:32d8:e74d) (Read error: Connection reset by peer)
2022-11-18 05:56:57 +0100Vajb(~Vajb@hag-jnsbng11-58c3a5-27.dhcp.inet.fi)
2022-11-18 05:58:26 +0100 <Inst> okay, got a fresh config file for cabal
2022-11-18 06:02:38 +0100Vajb(~Vajb@hag-jnsbng11-58c3a5-27.dhcp.inet.fi) (Read error: Connection reset by peer)
2022-11-18 06:02:57 +0100Vajb(~Vajb@2001:999:504:3ad6:52a4:a3b5:32d8:e74d)
2022-11-18 06:03:54 +0100 <maerwald[m]> https://github.com/haskell/ghcup-hs/blob/master/scripts/bootstrap/bootstrap-haskell.ps1
2022-11-18 06:06:10 +0100merijn(~merijn@c-001-001-012.client.esciencecenter.eduvpn.nl)
2022-11-18 06:18:23 +0100pottsy(~pottsy@129.227.183.244)
2022-11-18 06:31:12 +0100freeside(~mengwong@122.11.214.158)
2022-11-18 06:31:59 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 260 seconds)
2022-11-18 06:32:08 +0100Lord_of_Life_(~Lord@user/lord-of-life/x-2819915)
2022-11-18 06:32:14 +0100Neuromancer(~Neuromanc@user/neuromancer) (Ping timeout: 256 seconds)
2022-11-18 06:33:23 +0100Lord_of_Life_Lord_of_Life
2022-11-18 06:36:16 +0100Guest12(~Guest12@110.226.84.78)
2022-11-18 06:36:41 +0100freeside(~mengwong@122.11.214.158) (Read error: Connection reset by peer)
2022-11-18 06:37:41 +0100rembo10(~rembo10@main.remulis.com) (Quit: ZNC 1.8.2 - https://znc.in)
2022-11-18 06:38:47 +0100merijn(~merijn@c-001-001-012.client.esciencecenter.eduvpn.nl) (Ping timeout: 268 seconds)
2022-11-18 06:39:50 +0100rembo10(~rembo10@main.remulis.com)
2022-11-18 06:44:07 +0100Guest12(~Guest12@110.226.84.78) (Quit: Client closed)
2022-11-18 06:44:13 +0100mbuf(~Shakthi@49.204.132.239) (Quit: Leaving)
2022-11-18 06:45:50 +0100Erutuon(~Erutuon@user/erutuon) (Ping timeout: 256 seconds)
2022-11-18 06:48:20 +0100red-snail(~snail@static.151.210.203.116.clients.your-server.de) (Ping timeout: 260 seconds)
2022-11-18 06:51:21 +0100ircbrowse_tom(~ircbrowse@2a01:4f8:1c1c:9319::1) (ZNC 1.8.2+deb2build5 - https://znc.in)
2022-11-18 06:51:36 +0100ircbrowse_tom(~ircbrowse@2a01:4f8:1c1c:9319::1)
2022-11-18 06:51:41 +0100Server+Cnt
2022-11-18 06:51:49 +0100xnbya(~xnbya@2a01:4f8:c17:cbdd::1)
2022-11-18 06:52:25 +0100Hafydd(~Hafydd@user/hafydd) (Ping timeout: 260 seconds)
2022-11-18 06:52:33 +0100fiddlerwoaroof(~fiddlerwo@user/fiddlerwoaroof)
2022-11-18 06:53:40 +0100maxfan8(~max@personal.max.fan)
2022-11-18 06:56:59 +0100waleee(~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 256 seconds)
2022-11-18 06:59:51 +0100nate4(~nate@98.45.169.16)
2022-11-18 07:04:32 +0100nate4(~nate@98.45.169.16) (Ping timeout: 256 seconds)
2022-11-18 07:10:20 +0100Hafydd(~Hafydd@user/hafydd)
2022-11-18 07:15:18 +0100res0nat0r0844909(~Fletch@fenrir.whatbox.ca) (Ping timeout: 256 seconds)
2022-11-18 07:15:21 +0100DDR(~DDR@2604:3d08:4c7f:8250:7257:f6a:ab73:6e5d) (Remote host closed the connection)
2022-11-18 07:15:51 +0100takuan(~takuan@178-116-218-225.access.telenet.be)
2022-11-18 07:17:14 +0100chromoblob(~user@37.113.164.122)
2022-11-18 07:17:53 +0100mmhat(~mmh@p200300f1c70468f6ee086bfffe095315.dip0.t-ipconnect.de) (Quit: WeeChat 3.7.1)
2022-11-18 07:18:19 +0100stiell(~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
2022-11-18 07:19:18 +0100Luj37(~Luj@2a01:e0a:5f9:9681:5880:c9ff:fe9f:3dfb)
2022-11-18 07:20:07 +0100stiell(~stiell@gateway/tor-sasl/stiell)
2022-11-18 07:21:35 +0100Luj3(~Luj@2a01:e0a:5f9:9681:5880:c9ff:fe9f:3dfb) (Ping timeout: 260 seconds)
2022-11-18 07:21:35 +0100Luj37Luj3
2022-11-18 07:22:06 +0100chromoblob(~user@37.113.164.122) (Ping timeout: 256 seconds)
2022-11-18 07:22:40 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-11-18 07:26:59 +0100bgs(~bgs@212-85-160-171.dynamic.telemach.net)
2022-11-18 07:29:17 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 255 seconds)
2022-11-18 07:31:59 +0100moneyGuest1479
2022-11-18 07:32:23 +0100Guest1479(sid532813@user/polo) ()
2022-11-18 07:47:02 +0100tcard(~tcard@2400:4051:5801:7500:19ce:ed82:2ab7:90f9) (Quit: Leaving)
2022-11-18 07:48:12 +0100chomwitt(~chomwitt@2a02:587:7a0a:c00:1ac0:4dff:fedb:a3f1)
2022-11-18 07:49:20 +0100nisstyre(wes@user/nisstyre) (Quit: WeeChat 3.4)
2022-11-18 07:50:03 +0100Guest1479(sid532813@user/polo)
2022-11-18 07:50:06 +0100Guest1479money
2022-11-18 07:52:29 +0100tcard(~tcard@2400:4051:5801:7500:19ce:ed82:2ab7:90f9)
2022-11-18 07:53:19 +0100nisstyre(wes@user/nisstyre)
2022-11-18 07:58:56 +0100Guest75(~Guest75@178.141.130.118)
2022-11-18 07:58:57 +0100youziqi(~youziqi@103.37.140.125) (Ping timeout: 256 seconds)
2022-11-18 08:01:51 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-11-18 08:02:08 +0100merijn(~merijn@c-001-001-012.client.esciencecenter.eduvpn.nl)
2022-11-18 08:06:28 +0100werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Remote host closed the connection)
2022-11-18 08:06:52 +0100merijn(~merijn@c-001-001-012.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
2022-11-18 08:13:30 +0100kaskal(~kaskal@213-225-13-82.nat.highway.a1.net) (Ping timeout: 240 seconds)
2022-11-18 08:14:11 +0100jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 260 seconds)
2022-11-18 08:16:27 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-11-18 08:20:18 +0100Major_Biscuit(~MajorBisc@2a02-a461-129d-1-193d-75d8-745d-e91e.fixed6.kpn.net)
2022-11-18 08:23:52 +0100ft(~ft@p508dbd59.dip0.t-ipconnect.de) (Quit: leaving)
2022-11-18 08:26:36 +0100fockerize(~finn@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
2022-11-18 08:29:30 +0100kenran(~user@user/kenran)
2022-11-18 08:32:47 +0100Unicorn_Princess(~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection)
2022-11-18 08:33:06 +0100mud(~mud@user/kadoban) (Ping timeout: 255 seconds)
2022-11-18 08:34:06 +0100troydm(~troydm@host-176-37-124-197.b025.la.net.ua) (Ping timeout: 268 seconds)
2022-11-18 08:34:32 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:65cf:cc10:c4dc:168)
2022-11-18 08:43:49 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-11-18 08:47:49 +0100chromoblob(~user@37.113.164.122)
2022-11-18 08:50:51 +0100kenran(~user@user/kenran) (Remote host closed the connection)
2022-11-18 08:56:12 +0100machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net)
2022-11-18 08:56:50 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-11-18 08:57:45 +0100mud(~mud@user/kadoban)
2022-11-18 08:59:06 +0100werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2022-11-18 08:59:10 +0100youziqi(~youziqi@103.37.140.90)
2022-11-18 09:00:17 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg)
2022-11-18 09:00:42 +0100zeenk(~zeenk@2a02:2f04:a208:3600::7fe)
2022-11-18 09:01:40 +0100 <tomsmeding> dminuoso: relevant to our discussion yesterday, and published two days before it :p https://serokell.io/blog/datakinds-are-not-what-you-think
2022-11-18 09:02:03 +0100Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2022-11-18 09:02:38 +0100Kaiepi(~Kaiepi@108.175.84.104)
2022-11-18 09:08:20 +0100coot(~coot@213.134.171.3)
2022-11-18 09:09:28 +0100michalz(~michalz@185.246.207.203)
2022-11-18 09:12:03 +0100chromoblob(~user@37.113.164.122) (Ping timeout: 260 seconds)
2022-11-18 09:15:35 +0100mncheck(~mncheck@193.224.205.254)
2022-11-18 09:17:20 +0100libertyprime(~libertypr@118-92-78-165.dsl.dyn.ihug.co.nz)
2022-11-18 09:20:54 +0100 <Inst> this freaking toolchain
2022-11-18 09:21:18 +0100 <Inst> why is it a bad idea to --lib with Cabal again?
2022-11-18 09:21:27 +0100 <Inst> I think I just discovered why because I've been using --lib to get HLS to work
2022-11-18 09:21:53 +0100 <Inst> now i'm stuck reinstalling GHCup and my whole Haskell toolchain
2022-11-18 09:22:02 +0100 <Inst> VSC Haskell wouldn't recognize a bunch of libraries, etc
2022-11-18 09:22:08 +0100 <Inst> VSC HLS
2022-11-18 09:22:17 +0100 <Inst> then it stalled my attempt to get servant to work because fo types
2022-11-18 09:22:19 +0100 <Inst> great
2022-11-18 09:22:48 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 256 seconds)
2022-11-18 09:26:07 +0100chromoblob(~user@37.113.164.122)
2022-11-18 09:27:51 +0100machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net) (Quit: leaving)
2022-11-18 09:28:54 +0100 <tomsmeding> Inst: HLS won't recognise a bunch of libraries? Are they correctly listed in the build-depends of you .cabal file, did you 'cabal build', and did you restart HLS?
2022-11-18 09:29:11 +0100 <tomsmeding> doing those things hasn't failed me yet with semi-recent HLS versions
2022-11-18 09:30:04 +0100 <c_wraith> if they're using cabal install --lib, they probably don't have a .cabal file
2022-11-18 09:30:45 +0100 <tomsmeding> c_wraith: they said they've been using --lib to get HLS to work; presumably they at least have a .cabal file but something somehow doesn't work?
2022-11-18 09:31:02 +0100 <tomsmeding> Otherwise it makes sense they're criticising the toolchain, because they don't understand it :p
2022-11-18 09:31:12 +0100Lycurgus(~juan@user/Lycurgus)
2022-11-18 09:31:43 +0100merijn(~merijn@c-001-001-012.client.esciencecenter.eduvpn.nl)
2022-11-18 09:32:03 +0100 <Inst> i have a cabal file
2022-11-18 09:32:07 +0100 <Inst> i don't use cabal files that much
2022-11-18 09:32:20 +0100 <tomsmeding> does it list all the dependencies you need? Does 'cabal build' work?
2022-11-18 09:32:26 +0100 <tomsmeding> (or 'stack build')
2022-11-18 09:32:31 +0100 <Inst> let me try this stuff again
2022-11-18 09:32:43 +0100 <Inst> cabal build works, HLS on the other hand reports a type error
2022-11-18 09:32:50 +0100 <Inst> sorry about this
2022-11-18 09:32:51 +0100 <Inst> ugh
2022-11-18 09:32:56 +0100dibblego(~dibblego@haskell/developer/dibblego) (Ping timeout: 252 seconds)
2022-11-18 09:32:59 +0100 <tomsmeding> do you have a stack.yaml file too?
2022-11-18 09:33:12 +0100 <tomsmeding> Perhaps HLS is using the stack infrastructure to build and is getting different package versions
2022-11-18 09:33:13 +0100 <Inst> i don't think i do
2022-11-18 09:33:21 +0100 <Inst> just reinstalled GHCup, restarting VSC
2022-11-18 09:33:22 +0100 <tomsmeding> is there a .stack-work folder in your project?
2022-11-18 09:33:33 +0100 <Inst> nope
2022-11-18 09:33:35 +0100 <tomsmeding> good
2022-11-18 09:36:22 +0100 <Inst> hmmm, Haskell extension on VSC on Windows is demanding to install Stack
2022-11-18 09:36:23 +0100 <Inst> ffff
2022-11-18 09:36:42 +0100 <tomsmeding> don't
2022-11-18 09:36:46 +0100 <tomsmeding> just say no
2022-11-18 09:37:05 +0100 <tomsmeding> it's too pushy about that IMO
2022-11-18 09:38:25 +0100 <Inst> too late
2022-11-18 09:38:32 +0100 <Inst> i suppose ghcup rm stack, no?
2022-11-18 09:39:16 +0100machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net)
2022-11-18 09:40:03 +0100 <tomsmeding> if it used ghcup to install it, yes
2022-11-18 09:40:24 +0100 <maerwald[m]> GHCup installs stack by default
2022-11-18 09:40:31 +0100 <maerwald[m]> You can tell the vscode extension to never install stack
2022-11-18 09:40:34 +0100 <tomsmeding> only if you ask it to, right?
2022-11-18 09:40:35 +0100 <tomsmeding> OH
2022-11-18 09:40:37 +0100 <tomsmeding> TELL ME HOW
2022-11-18 09:40:44 +0100 <tomsmeding> I need to tell my students that
2022-11-18 09:40:57 +0100 <money> HELP
2022-11-18 09:41:00 +0100 <maerwald[m]> https://github.com/haskell/vscode-haskell#setting-a-specific-toolchain
2022-11-18 09:42:10 +0100 <maerwald[m]> {"haskell.toolchain": { "stack": null }}
2022-11-18 09:43:01 +0100 <tomsmeding> <3
2022-11-18 09:44:50 +0100gmg(~user@user/gehmehgeh)
2022-11-18 09:44:56 +0100 <maerwald[m]> Anyone knows why the survey results take so long?
2022-11-18 09:46:11 +0100 <dminuoso> I havent fixed up the results, yet.
2022-11-18 09:46:44 +0100chromoblob(~user@37.113.164.122) (Ping timeout: 248 seconds)
2022-11-18 09:48:33 +0100cfricke(~cfricke@user/cfricke)
2022-11-18 09:49:45 +0100titibandit(~titibandi@xdsl-87-78-52-100.nc.de)
2022-11-18 09:51:52 +0100machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 252 seconds)
2022-11-18 09:53:28 +0100machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net)
2022-11-18 09:54:35 +0100 <tomsmeding> dminuoso: are you running it this year?
2022-11-18 09:55:41 +0100 <dminuoso> No sorry, that was just a snarky comment.
2022-11-18 09:55:51 +0100 <tomsmeding> :p
2022-11-18 09:56:38 +0100Inst_(~Inst@c-98-208-218-119.hsd1.fl.comcast.net)
2022-11-18 09:56:40 +0100gmg(~user@user/gehmehgeh) (Remote host closed the connection)
2022-11-18 09:56:49 +0100acidjnk(~acidjnk@p200300d6e7137a33bcc873a44fb839de.dip0.t-ipconnect.de)
2022-11-18 09:57:33 +0100Robert35(~Robert@wpa52.eduroam.gu.se)
2022-11-18 09:57:45 +0100Inst(~Inst@2601:6c4:4081:54f0:155b:1b8c:fa18:504e) (Ping timeout: 256 seconds)
2022-11-18 09:58:12 +0100 <Robert35> Hi! One or two weeks ago I brought up some questions of MVar and IORef. Someone posted a hack of creating an 'empty' ioref, but I did not save that code
2022-11-18 09:58:36 +0100 <dminuoso> Robert35: foo <- newIORef (error "foo not initialized")
2022-11-18 09:58:38 +0100 <Robert35> Does anyone have any tips for creating 'empty' IORef, similarly to MVar? I need to create & get a reference to an IORef before I actually can write to it
2022-11-18 09:58:42 +0100dminuosois fairly sure that was himself
2022-11-18 09:58:45 +0100 <Robert35> Oh right
2022-11-18 09:58:59 +0100 <Robert35> newIORef does not evaluate the initial contents
2022-11-18 09:59:01 +0100 <dminuoso> Robert35: Alternatively hide the IORef behind an interface that uses Maybe
2022-11-18 09:59:20 +0100 <dminuoso> Benefit is that you can cleanly throw an IO exception upon your readIORef wrapper if the actual IORef has a Nothing
2022-11-18 09:59:26 +0100 <Robert35> I think your LOC above is sufficient
2022-11-18 09:59:43 +0100 <Inst_> the thing disables itself
2022-11-18 09:59:44 +0100Inst_Inst
2022-11-18 09:59:49 +0100 <Robert35> I wlll initialize them in a principled way, so I have no risk of reading it before there is an actual value in it
2022-11-18 09:59:59 +0100 <dminuoso> Robert35: Is this more than just one use of it?
2022-11-18 10:00:05 +0100 <Inst> if you say no
2022-11-18 10:00:11 +0100 <Inst> thanks for the override to disable stack
2022-11-18 10:00:12 +0100 <dminuoso> If yes, I would strongly consider using a wrapper interface.
2022-11-18 10:00:48 +0100 <Inst> now HLS is complaining it can't find a package database
2022-11-18 10:00:50 +0100 <dminuoso> Robert35: Anyway, there's a bunch of different perhaps better techniques - mostly "dont let this happen in the first place"
2022-11-18 10:01:05 +0100 <Inst> haskell-language-server-9.2.4~1.8.0.0.exe: can't find a package database at C:\GHCup\cabal\store\ghc-9.2.4\package.dbcompiler
2022-11-18 10:01:16 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg)
2022-11-18 10:01:18 +0100 <dminuoso> Robert35: One example is using a higher kinded data type, where you have some `validateInput :: Input Maybe -> Validation Err (Input Identity)`
2022-11-18 10:01:30 +0100 <Robert35> The codebase I am modifying is full of hacks anyway
2022-11-18 10:01:39 +0100 <Robert35> This seems like a fairly simple hack
2022-11-18 10:01:46 +0100 <dminuoso> With `data Input f = Input { inpUser :: f Text, inpEmail :: f Text, inpAge :: Int }`
2022-11-18 10:02:23 +0100gmg(~user@user/gehmehgeh)
2022-11-18 10:02:29 +0100 <dminuoso> Robert35: fair enough, just use it sparingly. it is a powerful technique however
2022-11-18 10:02:33 +0100 <Robert35> I will read from it more than once, but in a controlled way
2022-11-18 10:02:36 +0100 <Robert35> With great power ~
2022-11-18 10:02:40 +0100 <dminuoso> GHC itself in its implementation actually uses this trick in a few places
2022-11-18 10:02:57 +0100 <dminuoso> Mostly because it avoids the need to have multiple versions of a data type where one or two fields might be missing at some stage
2022-11-18 10:04:10 +0100Erutuon(~Erutuon@user/erutuon) (Ping timeout: 256 seconds)
2022-11-18 10:04:41 +0100 <Inst> i mean, it could be worse
2022-11-18 10:04:48 +0100 <Inst> i'm sure if i reinstall windows this'll all of a sudden start working
2022-11-18 10:08:34 +0100gmg(~user@user/gehmehgeh) (Quit: Leaving)
2022-11-18 10:09:50 +0100libertyprime(~libertypr@118-92-78-165.dsl.dyn.ihug.co.nz) (Ping timeout: 256 seconds)
2022-11-18 10:09:56 +0100__monty__(~toonn@user/toonn)
2022-11-18 10:10:19 +0100 <sm> Inst: for hls stuff, try also #haskell-language-server
2022-11-18 10:10:33 +0100 <Inst> thanks
2022-11-18 10:10:38 +0100 <Inst> also, dead chat, but what can i do
2022-11-18 10:12:33 +0100 <__monty__> Meditate and become a paragon of patience.
2022-11-18 10:13:05 +0100Robert35(~Robert@wpa52.eduroam.gu.se) (Ping timeout: 260 seconds)
2022-11-18 10:13:18 +0100dibblego(~dibblego@122-199-1-30.ip4.superloop.com)
2022-11-18 10:13:19 +0100dibblego(~dibblego@122-199-1-30.ip4.superloop.com) (Changing host)
2022-11-18 10:13:19 +0100dibblego(~dibblego@haskell/developer/dibblego)
2022-11-18 10:13:43 +0100chele(~chele@user/chele)
2022-11-18 10:14:50 +0100Lycurgus(~juan@user/Lycurgus) (Quit: Exeunt https://tinyurl.com/4m8d4kd5)
2022-11-18 10:15:28 +0100simp|e(skralg@user/simple) (Ping timeout: 252 seconds)
2022-11-18 10:19:44 +0100`2jt(~jtomas@191.red-88-17-199.dynamicip.rima-tde.net)
2022-11-18 10:21:22 +0100 <Inst> meditate and drop off this mortal coil
2022-11-18 10:21:26 +0100 <Inst> but programming is a lot about patience, tbh
2022-11-18 10:22:11 +0100szkl(uid110435@id-110435.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
2022-11-18 10:22:13 +0100 <Inst> strangely enough, but this is part of an opinion of mine, that haskell is more about engineering, lisps are about wizardry
2022-11-18 10:22:24 +0100 <Inst> are there any actual haskell gods / wizards?
2022-11-18 10:22:39 +0100 <Inst> i hear more of haskell skill being ascribed to Haskell than Haskellers
2022-11-18 10:22:44 +0100econo(uid147250@user/econo) (Quit: Connection closed for inactivity)
2022-11-18 10:29:54 +0100titibandit(~titibandi@xdsl-87-78-52-100.nc.de) (Remote host closed the connection)
2022-11-18 10:30:57 +0100 <__monty__> There's the Kmettiverse and people like Oleg : )
2022-11-18 10:32:25 +0100nschoe(~q@2a01:e0a:8e:a190:c3cc:9b76:de4b:1492)
2022-11-18 10:32:52 +0100CiaoSen(~Jura@p200300c95701f1002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
2022-11-18 10:39:18 +0100 <maerwald[m]> __monty__: there's no one like Oleg. There's just Oleg.
2022-11-18 10:39:36 +0100arthurs115(~arthurs11@2405:9800:b653:8c03:e450:c6b6:f077:6a04)
2022-11-18 10:39:52 +0100arthurs115(~arthurs11@2405:9800:b653:8c03:e450:c6b6:f077:6a04) (Client Quit)
2022-11-18 10:40:49 +0100simp|e(~skralg@user/simple)
2022-11-18 10:41:40 +0100jmdaemon(~jmdaemon@user/jmdaemon) (Ping timeout: 260 seconds)
2022-11-18 10:41:52 +0100 <Inst> Are Haskell gods different from other programming gods / wizards, though?
2022-11-18 10:42:06 +0100 <Inst> To me, Oleg is known through his papers.
2022-11-18 10:42:24 +0100 <Inst> Kmett is known for his libraries
2022-11-18 10:42:46 +0100 <Inst> I'd assume other programmers would be known for their work; like, of prominent clojurists, what they're known for is that so and so can code without tests
2022-11-18 10:43:07 +0100 <Inst> anyways, nuked my GHCide
2022-11-18 10:43:32 +0100 <Inst> works now, but back to the older problem
2022-11-18 10:43:36 +0100 <dminuoso> It should be said, we also have a second Oleg that is prominent for having authored or maintaining a lot of libraries too.
2022-11-18 10:44:16 +0100eggplant_(~Eggplanta@2600:1700:38c5:d800:89a4:6d1:4909:326f)
2022-11-18 10:44:33 +0100 <dminuoso> Maintainer for what feels like a third of the widely used packages on hackage.
2022-11-18 10:45:02 +0100 <dminuoso> (Well trustee in fact)
2022-11-18 10:45:05 +0100 <Inst> Oleg Grenrus?
2022-11-18 10:45:52 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:3cb4:cd70:33e6:e916) (Ping timeout: 260 seconds)
2022-11-18 10:46:10 +0100 <__monty__> How are libraries not "their work?"
2022-11-18 10:46:43 +0100 <Inst> I assume one difference is that Haskell gods tend to be known for their papers and their libraries, in part because say, Oleg Kisarov: he seems to be a defense contractor so his "good stuff" is likely national security
2022-11-18 10:47:02 +0100 <__monty__> And coding without tests sounds more like a disability. Only makes it harder for whoever comes after you. And they're probably constantly testing stuff in the REPL anyway which is just non-automated testing.
2022-11-18 10:47:14 +0100 <Inst> oh, he's at Tohoku University right now
2022-11-18 10:47:52 +0100 <__monty__> Also though, why are you looking for cults of personality?
2022-11-18 10:48:17 +0100 <dminuoso> I think there is a misconception that good programmers are "gods given gift" that dont even need to write tests.
2022-11-18 10:48:29 +0100 <dminuoso> What makes a programmer good it not really the ability to write complicated code.
2022-11-18 10:48:44 +0100 <Inst> also possibly it might be an issue with Clojure culture, my understanding of Clojure is that it's all wizards who write unmaintainable code
2022-11-18 10:48:55 +0100 <Inst> more powerful than Haskell, but substantially less scalable
2022-11-18 10:49:05 +0100 <Inst> like Klarna abandoned Clojure
2022-11-18 10:50:11 +0100 <Inst> https://news.ycombinator.com/item?id=27301219
2022-11-18 10:50:53 +0100 <dminuoso> I recall a stackoverflow thread, in which someone claimed that a language like go (or some other similar language) was good because it allowed complete newcomers to instantly dead and understood code that any senior expert wrote.
2022-11-18 10:51:16 +0100 <dminuoso> And someone else (might have been edward even) remarked, that they thought this was scary and perhaps actually a downside to go.
2022-11-18 10:51:32 +0100 <dminuoso> If the bar was so low, that you could only communicate the simplest thoughts that a beginner could express, then you could never express your actual thoughts.
2022-11-18 10:52:11 +0100 <dminuoso> Part of what makes Haskell a bit more complicated, and perhaps imbue that legendary perception of some programmers, is that unlike many other languages, you can express thought much like you can express ideas in mathematics
2022-11-18 10:52:40 +0100 <dminuoso> It lets you express domain specific things very well, but only for people well versed in that domain
2022-11-18 10:53:00 +0100 <probie> Things like "not supporting a map function" are considered to be positive features of Go
2022-11-18 10:53:28 +0100werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 256 seconds)
2022-11-18 10:53:47 +0100 <dminuoso> Well I mean this is by design. Go is designed to have the bar at the entry level, so you can hire people straight from high school en masse, and put them to work.
2022-11-18 10:54:10 +0100 <dminuoso> That's not really a "downside", its a core design feature of the language.
2022-11-18 10:54:51 +0100Cid47(~Cid47@110.226.84.78)
2022-11-18 10:55:35 +0100 <dminuoso> It's designed for hiring and throwing lots of inexperienced people at a problem. And for that, it must not be even possible to express complicated thought.
2022-11-18 10:58:05 +0100tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
2022-11-18 10:58:45 +0100 <dminuoso> Much of edkmet code is not really that complicated, or requires magical powers to understand. It just requires a reader to study the domain for a moment
2022-11-18 10:59:31 +0100acidjnk(~acidjnk@p200300d6e7137a33bcc873a44fb839de.dip0.t-ipconnect.de) (Ping timeout: 256 seconds)
2022-11-18 11:00:22 +0100 <c_wraith> :t confusing
2022-11-18 11:00:23 +0100 <lambdabot> Applicative f => LensLike (Data.Functor.Day.Curried.Curried (Data.Functor.Yoneda.Yoneda f) (Data.Functor.Yoneda.Yoneda f)) s t a b -> LensLike f s t a b
2022-11-18 11:00:27 +0100 <c_wraith> but sometimes there's that
2022-11-18 11:01:21 +0100nate4(~nate@98.45.169.16)
2022-11-18 11:04:50 +0100chromoblob(~user@37.113.164.122)
2022-11-18 11:04:53 +0100 <dminuoso> c_wraith: To be fair, that isnt even Edwards creation. Eric Mertens was responsible for that,.
2022-11-18 11:05:55 +0100mncheck(~mncheck@193.224.205.254) (Remote host closed the connection)
2022-11-18 11:06:24 +0100nate4(~nate@98.45.169.16) (Ping timeout: 260 seconds)
2022-11-18 11:06:54 +0100 <dminuoso> And in addition, lens has received a lot of work over the years. If you start at how `confusing` was introduced, it seemed much simpler and more obvious this way. It was just over the years that it was generalized
2022-11-18 11:07:15 +0100Cid47Sid47
2022-11-18 11:07:50 +0100xff0x(~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 240 seconds)
2022-11-18 11:12:45 +0100Sid47(~Cid47@110.226.84.78) (Quit: Connection closed)
2022-11-18 11:13:32 +0100acidjnk(~acidjnk@p200300d6e7137a33d8eab253bd5e2a70.dip0.t-ipconnect.de)
2022-11-18 11:15:04 +0100Sid47(~sid@110.226.84.78)
2022-11-18 11:15:32 +0100Sid47(~sid@110.226.84.78) (Client Quit)
2022-11-18 11:19:06 +0100kuribas(~user@ptr-17d51enw7vbqv4wetdn.18120a2.ip6.access.telenet.be)
2022-11-18 11:24:30 +0100zaquest(~notzaques@5.130.79.72) (Remote host closed the connection)
2022-11-18 11:28:29 +0100zaquest(~notzaques@5.130.79.72)
2022-11-18 11:31:20 +0100tabaqui(~root@85.106.195.55) (Quit: WeeChat 3.7.1)
2022-11-18 11:32:47 +0100vpan(~0@212.117.1.172)
2022-11-18 11:34:30 +0100 <Inst> also re maerwald:
2022-11-18 11:34:31 +0100 <Inst> [ Warn ] New ghc version available. To upgrade, run 'ghcup install ghc 9.4.3'
2022-11-18 11:34:31 +0100 <Inst> [ Info ] verifying digest of: gs.exe
2022-11-18 11:34:31 +0100 <Inst> [ Warn ] stack-2.9.1 is already installed; if you really want to reinstall it, you may want to run 'ghcup install cabal --force 2.9.1'
2022-11-18 11:36:30 +0100 <tomsmeding> lol typo
2022-11-18 11:39:11 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 256 seconds)
2022-11-18 11:40:00 +0100fockerize(~finn@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 260 seconds)
2022-11-18 11:40:28 +0100 <Guest75> Hello. Can anyone help with producing an instance of FixF? https://hackage.haskell.org/package/data-fix-0.3.2/docs/Data-Fix.html
2022-11-18 11:40:55 +0100 <Guest75> I fail, 'cause that List a isn't Fix f
2022-11-18 11:40:57 +0100ubert(~Thunderbi@178.165.197.162.wireless.dyn.drei.com) (Remote host closed the connection)
2022-11-18 11:40:57 +0100ububert
2022-11-18 11:43:49 +0100eggplant_(~Eggplanta@2600:1700:38c5:d800:89a4:6d1:4909:326f) (Remote host closed the connection)
2022-11-18 11:44:16 +0100 <byorgey> Guest75: not sure I understand your question. Can you put your code so far on https://paste.tomsmeding.com/ ?
2022-11-18 11:45:15 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2022-11-18 11:47:13 +0100ubert1(~Thunderbi@178.165.197.162.wireless.dyn.drei.com)
2022-11-18 11:48:31 +0100 <dminuoso> What is FixF?
2022-11-18 11:50:08 +0100CiaoSen(~Jura@p200300c95701f1002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 256 seconds)
2022-11-18 11:50:42 +0100 <Guest75> byorgey: here it is https://paste.tomsmeding.com/qYZmBqnp
2022-11-18 11:51:19 +0100 <Guest75> dminuoso: I believe it's like Fixed point combinator, but for types
2022-11-18 11:51:34 +0100 <Guest75> related video: https://www.youtube.com/watch?v=zkDVCQiveEo
2022-11-18 11:51:55 +0100sid__(~sid@110.226.84.78)
2022-11-18 11:52:07 +0100 <kuribas> Guest75: are you missing a Fix constructor?
2022-11-18 11:52:22 +0100 <sid__> exit
2022-11-18 11:52:29 +0100 <dminuoso> Guest75: Which `Fix` are you using? Did you define it yourself? Or which module is it from?
2022-11-18 11:52:53 +0100 <dminuoso> Are we talking about Data.Fix from data-fix?
2022-11-18 11:52:57 +0100 <tomsmeding> dminuoso: presumably https://hackage.haskell.org/package/data-fix-0.3.2/docs/Data-Fix.html which they linked before
2022-11-18 11:53:07 +0100 <dminuoso> Oh I did not see that link
2022-11-18 11:53:10 +0100 <kuribas> Cons 1 $ Fix $ Cons 2 $ Fix $ Cons 3 $ Fix Nil
2022-11-18 11:53:17 +0100 <Guest75> aha
2022-11-18 11:54:24 +0100 <Guest75> thanks kuribas, it works now!
2022-11-18 11:55:11 +0100troydm(~troydm@host-176-37-124-197.b025.la.net.ua)
2022-11-18 11:55:28 +0100 <kuribas> np
2022-11-18 11:55:28 +0100 <Guest75> so that menas that if I make my own type higher-kinded, then for all my data constructors I'll need to prepend them with Fix
2022-11-18 11:55:35 +0100 <kuribas> yes
2022-11-18 11:55:47 +0100 <Guest75> +about 50 lines of code :/
2022-11-18 11:56:13 +0100 <kuribas> So just use normal lists :)
2022-11-18 11:56:22 +0100 <kuribas> And don't bother with recursion schemes
2022-11-18 11:56:30 +0100 <kuribas> they don't add much anyway.
2022-11-18 11:56:56 +0100sid__(~sid@110.226.84.78) (Ping timeout: 256 seconds)
2022-11-18 11:56:57 +0100 <byorgey> Guest75: pattern synonyms can be helpful
2022-11-18 11:57:10 +0100 <kuribas> ah true
2022-11-18 11:57:19 +0100 <kuribas> and wrapping stuff in newtypes is pretty idiomatic haskell.
2022-11-18 11:57:42 +0100 <Guest75> well: https://github.com/andrewboltachev/pyparts/blob/master/src/Lib.hs#L68
2022-11-18 11:57:46 +0100 <kuribas> I find the amount of boilerplate in haskell still much less than in java.
2022-11-18 11:58:18 +0100 <Guest75> for this I think I it'll be helpful for many reasons if I'll make the type parametric
2022-11-18 11:58:28 +0100 <Guest75> i.e. higher-kinded
2022-11-18 11:59:01 +0100 <kuribas> Guest75: that's not higher-kinded?
2022-11-18 11:59:33 +0100 <Guest75> it's just "data MatchPattern = ...", not "data MatchPattern a = ..."
2022-11-18 12:02:53 +0100ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 255 seconds)
2022-11-18 12:03:39 +0100 <Guest75> https://ghc.gitlab.haskell.org/ghc/doc/users_guide/exts/pattern_synonyms.html — giving programming languages as example — insane! (though that's what I also use)
2022-11-18 12:04:01 +0100ec(~ec@gateway/tor-sasl/ec)
2022-11-18 12:04:07 +0100AkechiShiro(~licht@user/akechishiro) (Ping timeout: 256 seconds)
2022-11-18 12:04:09 +0100 <kuribas> Guest75: so what's wrong with that code?
2022-11-18 12:04:39 +0100 <Guest75> no that's fine. just it's not "apples and bananas" or "cats and dogs", or "users and orders" etc
2022-11-18 12:04:41 +0100Raito_Bezarius(~Raito@wireguard/tunneler/raito-bezarius) (Ping timeout: 256 seconds)
2022-11-18 12:04:52 +0100Luj3(~Luj@2a01:e0a:5f9:9681:5880:c9ff:fe9f:3dfb) (Ping timeout: 256 seconds)
2022-11-18 12:07:36 +0100pavonia(~user@user/siracusa) (Quit: Bye!)
2022-11-18 12:08:13 +0100 <kuribas> I find you often end up with GADTs, HKD types, etc, when trying to create declarative specs.
2022-11-18 12:08:31 +0100 <kuribas> As opposed to using function combinators.
2022-11-18 12:09:20 +0100 <kuribas> The advantage of a declarative spec is that you can use them in multiple ways, simplify or transform them, etc...
2022-11-18 12:09:32 +0100 <kuribas> But you easily reach the limits of haskells type system.
2022-11-18 12:09:56 +0100dminuosofinds HKDs disstateful
2022-11-18 12:10:12 +0100 <kuribas> Having to wrap a lot of stuff in newtypes is one result of it, though not a big deal.
2022-11-18 12:10:18 +0100 <kuribas> dminuoso: that's a nice word :)
2022-11-18 12:10:27 +0100 <dminuoso> Heh that typo
2022-11-18 12:10:44 +0100 <Guest75> kuribas: I have similar feeling. that I will reach limits soon
2022-11-18 12:11:23 +0100 <Guest75> moreover, I need this "structurre" to be mapped to sth else. i.e. to create an UI to construct this data type expressions
2022-11-18 12:11:54 +0100 <kuribas> dminuoso: they are necessary when you want to make declarative specs like in lisp, but keep type safety.
2022-11-18 12:12:15 +0100 <Guest75> kuribas: what's the minimal example of function combinators?
2022-11-18 12:12:35 +0100 <kuribas> Guest75: a parser for example.
2022-11-18 12:12:44 +0100 <kuribas> Guest75: like parsec
2022-11-18 12:12:53 +0100 <Guest75> well, what I'm doing is essentially a parser
2022-11-18 12:13:16 +0100 <Guest75> well, I need to read up and learn about on existing stuff first then
2022-11-18 12:13:17 +0100 <dminuoso> kuribas: I dont think of them as being *necessary*
2022-11-18 12:13:22 +0100dminuososhrugs
2022-11-18 12:14:09 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg)
2022-11-18 12:19:11 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 268 seconds)
2022-11-18 12:23:58 +0100ScK(~ScK@110.226.84.78)
2022-11-18 12:25:03 +0100ScK(~ScK@110.226.84.78) (Quit: Leaving)
2022-11-18 12:29:43 +0100swamp_(~zmt00@user/zmt00) (Ping timeout: 252 seconds)
2022-11-18 12:30:21 +0100beteigeuze(~Thunderbi@a79-169-109-107.cpe.netcabo.pt)
2022-11-18 12:30:41 +0100razetime(~quassel@117.193.0.17)
2022-11-18 12:37:23 +0100szkl(uid110435@id-110435.uxbridge.irccloud.com)
2022-11-18 12:44:17 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:89a4:6d1:4909:326f)
2022-11-18 12:48:53 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:89a4:6d1:4909:326f) (Ping timeout: 256 seconds)
2022-11-18 12:50:14 +0100chromoblob(~user@37.113.164.122) (Ping timeout: 260 seconds)
2022-11-18 12:50:53 +0100 <lortabac> I find that those who are used to dynamically-typed languages tend to use advanced types in Haskell more than those who come from an OOP background
2022-11-18 12:52:02 +0100 <lortabac> maybe there is a desire to replicate the same flexibility and genericity that we enjoyed in the dynamically-typed world
2022-11-18 12:52:57 +0100 <merijn> lortabac: I find that's mostly people getting excited about types and then overcorrecting and leaning on them too hard
2022-11-18 12:53:02 +0100 <merijn> trying to do *everything* in the types
2022-11-18 12:53:46 +0100 <lortabac> merijn: that's also an important factor
2022-11-18 12:54:37 +0100 <lortabac> but there is also this habit of making super-generic duck-typed abstractions
2022-11-18 12:54:41 +0100 <dminuoso> merijn: +1
2022-11-18 12:54:58 +0100 <lortabac> when you try to replicate them in Haskell you end up with HKD and other complicated stuff
2022-11-18 12:55:13 +0100 <dminuoso> Once I realized that I increased complexity and issues by doing that, I've actually come down to writing simple code as much as possible.
2022-11-18 12:55:20 +0100 <lortabac> at least that's my personal experience
2022-11-18 12:56:12 +0100 <lortabac> it took me years to understand that in a statically-typed setting sometimes it's better to accept a little bit of duplication
2022-11-18 12:57:43 +0100 <dminuoso> What I would really like is being able to attach data to constructors and fields, in a way that you can recover them. Quite a few non-trivial uses of HKDs or even weird Generics would be better solved by that.
2022-11-18 12:58:12 +0100glguy(~glguy@libera/staff-emeritus/glguy) (Ping timeout: 248 seconds)
2022-11-18 12:58:15 +0100 <lortabac> that would be a great feature
2022-11-18 12:59:18 +0100glguy(~glguy@libera/staff-emeritus/glguy)
2022-11-18 13:05:21 +0100chromoblob(~user@37.113.164.122)
2022-11-18 13:06:17 +0100jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2022-11-18 13:07:16 +0100jakalx(~jakalx@base.jakalx.net)
2022-11-18 13:10:02 +0100Techcable(~Techcable@user/Techcable) (Ping timeout: 256 seconds)
2022-11-18 13:15:33 +0100titibandit(~titibandi@xdsl-87-78-52-100.nc.de)
2022-11-18 13:18:00 +0100Major_Biscuit(~MajorBisc@2a02-a461-129d-1-193d-75d8-745d-e91e.fixed6.kpn.net) (Ping timeout: 260 seconds)
2022-11-18 13:21:13 +0100Luj3(~Luj@2a01:e0a:5f9:9681:5880:c9ff:fe9f:3dfb)
2022-11-18 13:25:14 +0100chromoblob(~user@37.113.164.122) (Ping timeout: 260 seconds)
2022-11-18 13:26:42 +0100chromoblob(~user@37.113.164.122)
2022-11-18 13:26:45 +0100jakalx(~jakalx@base.jakalx.net) ()
2022-11-18 13:27:47 +0100AkechiShiro(~licht@user/akechishiro)
2022-11-18 13:27:57 +0100jakalx(~jakalx@base.jakalx.net)
2022-11-18 13:28:09 +0100 <dminuoso> tomsmeding: https://github.com/dminuoso/flatparse-state/blob/main/app/Main.hs
2022-11-18 13:28:21 +0100 <dminuoso> Here we go, this is actually even better. :)
2022-11-18 13:28:38 +0100 <dminuoso> Idea being to rework all of flatparse with `State# s` threading
2022-11-18 13:28:56 +0100 <dminuoso> It's kind of cute you get a) pure parsers, b) IO parser and c) ST parsers all for free from this.
2022-11-18 13:30:17 +0100InstX1(~Liam@c-98-208-218-119.hsd1.fl.comcast.net)
2022-11-18 13:34:43 +0100 <Xeroine> Hi, what is the problem here https://bpa.st/LFDQ I was trying to install ghc-vis while using debian's repo cabal-install, ghc and ghci but after several hours of trying to find what was causing ghci not to find GHC.Vis despite it being installed I decided to reinstall ghc, ghci and cabal-install using ghcup since it has newer versions of them and now I'm getting this error
2022-11-18 13:34:58 +0100InstX1(~Liam@c-98-208-218-119.hsd1.fl.comcast.net) (Ping timeout: 256 seconds)
2022-11-18 13:35:22 +0100 <Xeroine> previously I had a similar issue but I resolved it by installing a library with cairo or svg in it's name (don't remember what was the package's name)
2022-11-18 13:35:57 +0100 <Xeroine> now I'm guessing there's some kind of issue with the version I have for that library from the debian repo?
2022-11-18 13:38:03 +0100 <Xeroine> I don't really understand the error message, is it trying to install svgcairo as a dependency for ghc-vis and is trying different versions of svgcairo until it no longer satisfies the dependecy version? is that what's happening?
2022-11-18 13:38:25 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 260 seconds)
2022-11-18 13:41:26 +0100xff0x(~xff0x@ai071162.d.east.v6connect.net)
2022-11-18 13:43:19 +0100mauke_mauke
2022-11-18 13:44:20 +0100pottsy(~pottsy@129.227.183.244) (Quit: Leaving)
2022-11-18 13:46:04 +0100 <Xeroine> vacuum-graphviz also has some kind of version issue https://bpa.st/ACVQ
2022-11-18 13:46:29 +0100 <dminuoso> https://github.com/gtk2hs/svgcairo/blob/master/svgcairo.cabal#L35
2022-11-18 13:46:44 +0100 <dminuoso> Xeroine: So this has an upper bound of Cabal to be lower than 3.1
2022-11-18 13:46:51 +0100frase(~Fraser@159.196.13.21) ()
2022-11-18 13:46:55 +0100 <dminuoso> [__2] rejecting: svgcairo:setup.Cabal-3.6.3.0/installed-3.6.3.0 (conflict: svgcairo => svgcairo:setup.Cabal>=1.24 && <3.1)
2022-11-18 13:47:12 +0100 <dminuoso> The cabal planner is trying to figure out version of cabal to pick that satisfies its constraints
2022-11-18 13:47:24 +0100 <dminuoso> The installed version 3.6.3.0 cant be picked (because it violates the constraint <3.1)
2022-11-18 13:49:02 +0100 <dminuoso> (it first tries the installed version)
2022-11-18 13:49:13 +0100 <dminuoso> It then proceeds to skip cabal versions between 3.6.10 and 3.2.1.0 because they all fail the same constraint
2022-11-18 13:49:31 +0100 <dminuoso> What I dont quite understand however, is this:
2022-11-18 13:49:38 +0100 <dminuoso> svgcairo:setup.Cabal-1.24.1.0 (constraint from minimum version of Cabal used by Setup.hs requires >=3.4)
2022-11-18 13:51:41 +0100 <Xeroine> oh
2022-11-18 13:51:55 +0100 <dminuoso> That line really doesnt compute
2022-11-18 13:52:38 +0100 <Xeroine> dminuoso: wait but so what happens when it figures out 3.6.3.0 can't be picked? it tries to install different cabal versions?
2022-11-18 13:52:50 +0100 <dminuoso> Xeroine: Right.
2022-11-18 13:52:53 +0100 <Xeroine> ah
2022-11-18 13:52:54 +0100 <dminuoso> Xeroine: Cabal does this normally anyway
2022-11-18 13:53:05 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-11-18 13:53:35 +0100 <dminuoso> So normally Cabal (the library!) should be installed at version 2.4.1.0
2022-11-18 13:53:39 +0100 <dminuoso> (or it should attempt that version)
2022-11-18 13:53:50 +0100 <dminuoso> but for some reason I cant explain, a constraint >=3.4 is introduced
2022-11-18 13:54:13 +0100 <dminuoso> (and >=3.4 combined with <3.1 is obviously mutually exclusive to the point that no version of Cabal could ever satisfy that)
2022-11-18 13:54:59 +0100 <dminuoso> `cabal check` has some curious warnings about svgcairo, I wonder whether the cabal file might be broken
2022-11-18 13:55:49 +0100 <dminuoso> Xeroine: My assumption is as follows:
2022-11-18 13:55:52 +0100 <dminuoso> https://github.com/gtk2hs/svgcairo/blob/master/svgcairo.cabal#L9
2022-11-18 13:55:55 +0100 <dminuoso> This format with >= is no longer legit
2022-11-18 13:57:01 +0100 <dminuoso> (It was only allowed before 1.12)
2022-11-18 13:57:28 +0100 <dminuoso> https://cabal.readthedocs.io/en/stable/cabal-package.html says its supported up until >=2.0 however.
2022-11-18 13:57:39 +0100coot(~coot@213.134.171.3) (Quit: coot)
2022-11-18 13:59:31 +0100youziqi(~youziqi@103.37.140.90) (Ping timeout: 260 seconds)
2022-11-18 14:00:01 +0100 <Xeroine> hmm
2022-11-18 14:00:55 +0100Raito_Bezarius(~Raito@wireguard/tunneler/raito-bezarius)
2022-11-18 14:01:10 +0100 <Xeroine> well I don't know, maybe it's easier to get something similar like vacuum-graphviz working then, but like I said I tried that as well and got different errors
2022-11-18 14:01:40 +0100 <Xeroine> I just want to visualize data structures in haskell but looks like it's a pain in the ass to get those libraries installed and working =/
2022-11-18 14:04:52 +0100 <dminuoso> Aha!
2022-11-18 14:04:56 +0100 <dminuoso> I have it figured out
2022-11-18 14:05:39 +0100 <dminuoso> Xeroine: The package has a missing upper base constraint.
2022-11-18 14:06:37 +0100 <Xeroine> dminuoso: you mean https://hackage.haskell.org/package/base ?
2022-11-18 14:06:43 +0100 <dminuoso> (And an incorrect Cabal constraint in setup-depends)
2022-11-18 14:06:48 +0100 <dminuoso> (or both, I guess)
2022-11-18 14:07:01 +0100 <dminuoso> The Cabal constraint should be removed its redundant
2022-11-18 14:07:06 +0100 <dminuoso> Roughly we have this:
2022-11-18 14:07:23 +0100 <dminuoso> If you use a Setup.hs build, then cabal-install will automatically add a setup-depends constraint on Cabal
2022-11-18 14:07:31 +0100 <dminuoso> In particular a minimum version
2022-11-18 14:07:34 +0100 <dminuoso> https://github.com/haskell/cabal/blob/master/cabal-install/src/Distribution/Client/ProjectPlanning…
2022-11-18 14:07:39 +0100 <dminuoso> That logic is used to select the minimum cabal version
2022-11-18 14:08:04 +0100 <dminuoso> So presumably you use GHC 9.4, which is how cabal-install derives Cabal 3.4 or newer must be present
2022-11-18 14:08:11 +0100 <dminuoso> However, that is in direct conflict with the author specified:
2022-11-18 14:08:17 +0100 <dminuoso> https://github.com/gtk2hs/svgcairo/blob/master/svgcairo.cabal#L35
2022-11-18 14:08:24 +0100jero98772(~jero98772@2800:484:1d80:d8ce:efcc:cbb3:7f2a:6dff)
2022-11-18 14:09:34 +0100 <dminuoso> Using that table you can deduce, that this package at present can only build up until GHC 8.8, which means up until base 4.13.0.0
2022-11-18 14:09:54 +0100 <Xeroine> ah
2022-11-18 14:10:12 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg)
2022-11-18 14:10:25 +0100 <Xeroine> I'll try install a <= 8.8 GHC then
2022-11-18 14:10:30 +0100 <dminuoso> I dont know whether there is actual restrictions, or whether the bounds can be bumped. Try it out or file a a bug report. Until then, use GHC 8.8 or older
2022-11-18 14:13:46 +0100Major_Biscuit(~MajorBisc@145.94.173.169)
2022-11-18 14:14:27 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 260 seconds)
2022-11-18 14:18:30 +0100acidjnk(~acidjnk@p200300d6e7137a33d8eab253bd5e2a70.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
2022-11-18 14:24:05 +0100Major_Biscuit(~MajorBisc@145.94.173.169) (Ping timeout: 256 seconds)
2022-11-18 14:27:20 +0100gurkenglas(~gurkengla@p548ac72e.dip0.t-ipconnect.de)
2022-11-18 14:28:22 +0100zmt00(~zmt00@user/zmt00)
2022-11-18 14:28:22 +0100coot(~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
2022-11-18 14:30:31 +0100ssw(~ssw@user/ssw) (Quit: ZNC 1.7.5+deb4 - https://znc.in)
2022-11-18 14:31:53 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-11-18 14:32:58 +0100epolanski(uid312403@id-312403.helmsley.irccloud.com)
2022-11-18 14:33:04 +0100ssw(~ssw@user/ssw)
2022-11-18 14:33:29 +0100blueonyx(~blueonyx@user/blueonyx)
2022-11-18 14:34:28 +0100pie_(~pie_bnc@user/pie/x-2818909) ()
2022-11-18 14:34:46 +0100pie_(~pie_bnc@user/pie/x-2818909)
2022-11-18 14:37:35 +0100Major_Biscuit(~MajorBisc@145.94.173.169)
2022-11-18 14:38:12 +0100ssw(~ssw@user/ssw) (Quit: ZNC 1.7.5+deb4 - https://znc.in)
2022-11-18 14:38:16 +0100 <Xeroine> dminuoso: it installed but I got a warning which said I might have needed to use --lib when installing but none of documentation for ghc-vis recommends --lib so I'm not sure if I should use it. Also ghc-vis window pops up when I run ":vis" in ghci but using ":view" on variables causes and error. Here's the paste with all of this https://bpa.st/ACVQ
2022-11-18 14:39:16 +0100 <Xeroine> I'm on GHC 8.8.4 now by the way
2022-11-18 14:41:17 +0100 <dminuoso> Xeroine: Is this the right paste?
2022-11-18 14:41:34 +0100 <dminuoso> That looks like the output of `cabal install vacuum-graphviz`, not ghc-vis
2022-11-18 14:42:30 +0100 <Xeroine> oh my bad
2022-11-18 14:42:37 +0100 <merijn> hg diff
2022-11-18 14:42:44 +0100 <merijn> terminal fail >.>
2022-11-18 14:42:53 +0100 <Xeroine> I meant this one https://bpa.st/OJCA
2022-11-18 14:45:24 +0100 <dminuoso> Xeroine: You can ignore the warning.
2022-11-18 14:45:41 +0100 <dminuoso> ghc-vis is a bit special in that you do not get actual executables, but it is assumed you run this from ghci
2022-11-18 14:46:02 +0100 <Xeroine> oh
2022-11-18 14:46:12 +0100 <dminuoso> cabal-install acknowledges such cases by phrasing "it *might* not be completed"
2022-11-18 14:47:00 +0100 <dminuoso> Xeroine: and the error you get is because you need the `dot` binary
2022-11-18 14:47:08 +0100 <dminuoso> (s/binary/executable/)
2022-11-18 14:48:22 +0100 <Xeroine> from the debian package manager or cabal?
2022-11-18 14:48:33 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
2022-11-18 14:49:02 +0100 <dminuoso> debian package manager
2022-11-18 14:49:08 +0100 <Xeroine> alright
2022-11-18 14:49:24 +0100 <dminuoso> http://felsin9.de/nnis/ghc-vis/installing-debian/
2022-11-18 14:49:32 +0100 <dminuoso> Note the installation of `graphviz`
2022-11-18 14:49:48 +0100 <dminuoso> And some other dependencies you may need
2022-11-18 14:51:54 +0100 <Xeroine> sigh... now it installed ghc from apt as well, I'll see if it causes problems in a sec
2022-11-18 14:52:58 +0100 <dminuoso> oh, probably yes
2022-11-18 14:53:12 +0100 <dminuoso> feel free to uninstall that, I did not closely go through the installed packages
2022-11-18 14:53:50 +0100 <Xeroine> I think it installed it as a dependency of one of those libraries
2022-11-18 14:54:12 +0100 <Xeroine> anyways the ghcup ghc is still being used over the debian one so I guess it's all good
2022-11-18 14:54:15 +0100 <Xeroine> :view works as well now
2022-11-18 14:54:18 +0100 <Xeroine> dminuoso: thanks
2022-11-18 14:55:43 +0100 <kuribas> lortabac: the advantage of a declarative spec is that you can have multiple usecases for that spec.
2022-11-18 14:56:24 +0100 <kuribas> lortabac: where a combinator usually just has a single usecase.
2022-11-18 14:57:09 +0100 <kuribas> lortabac: or in other words, a combinator cannot be repurposed, while a data spec can.
2022-11-18 14:57:47 +0100 <kuribas> or you have to go into metaprogramming using template haskell.
2022-11-18 14:58:16 +0100bitmapper(uid464869@id-464869.lymington.irccloud.com)
2022-11-18 14:58:31 +0100ft(~ft@i59F54BF7.versanet.de)
2022-11-18 14:59:06 +0100 <kuribas> lortabac: take for example servant, you can generate openapi documentation, clients, etc... from a single spec.
2022-11-18 14:59:13 +0100 <kuribas> you cannot do that with combinators.
2022-11-18 14:59:43 +0100 <dminuoso> kuribas: You can do it with a code generator.
2022-11-18 15:00:13 +0100 <dminuoso> Normally with OpenAPI the idea is the other way around.
2022-11-18 15:00:21 +0100 <dminuoso> Start with the OpenAPI specification, generate boilerplate code from it.
2022-11-18 15:01:12 +0100 <kuribas> that's easier for clients than for servers
2022-11-18 15:01:28 +0100 <dminuoso> Why would it be any more difficult for servers?
2022-11-18 15:02:12 +0100 <kuribas> how can you verify that your server matches the openapi spec, without unit tests?
2022-11-18 15:02:23 +0100 <kuribas> you'll end up with redundant code.
2022-11-18 15:02:41 +0100 <dminuoso> I can think of a few ways.
2022-11-18 15:02:52 +0100nate4(~nate@98.45.169.16)
2022-11-18 15:02:58 +0100 <dminuoso> You simply generate stub calls in the Setup.hs from the OpenAPI spec
2022-11-18 15:03:06 +0100 <dminuoso> Which will assure matching types
2022-11-18 15:03:07 +0100 <kuribas> and you know, openapi is actually a typed declarative spec :)
2022-11-18 15:03:11 +0100 <kuribas> just not in the same language
2022-11-18 15:03:15 +0100 <dminuoso> Sure.
2022-11-18 15:03:28 +0100 <kuribas> dminuoso: and when you need to update the spec?
2022-11-18 15:03:46 +0100 <kuribas> can you garantee the stub stays in sync?
2022-11-18 15:04:01 +0100 <dminuoso> well, you can actually use the same stubs to actually call your code.
2022-11-18 15:04:07 +0100 <dminuoso> then its a matter of you just fixing type errors.
2022-11-18 15:04:55 +0100 <dminuoso> say an endpoint of `foo :: Int -> String -> IO Bool` is expected, and it gets changed to `foo :: Int -> String -> IO ()`, you have a "expected (), actual Bool" type of warning.
2022-11-18 15:04:57 +0100 <kuribas> yes, that's a possibility
2022-11-18 15:05:29 +0100 <dminuoso> this is roughly what the Corba IDL compilers do
2022-11-18 15:05:56 +0100Everything(~Everythin@37.115.210.35)
2022-11-18 15:07:44 +0100 <dminuoso> kuribas: We do generate OpenAPI specs for one of our largest projects.
2022-11-18 15:07:47 +0100 <dminuoso> via servant
2022-11-18 15:07:55 +0100 <dminuoso> It's probably the most horrid haskell experience I've had.,
2022-11-18 15:08:04 +0100GoldsteinQ(~goldstein@goldstein.rs) (Quit: ZNC 1.8.2 - https://znc.in)
2022-11-18 15:08:04 +0100 <dminuoso> And I am comfortable with type level shenanigans
2022-11-18 15:08:10 +0100nate4(~nate@98.45.169.16) (Ping timeout: 268 seconds)
2022-11-18 15:08:26 +0100mud(~mud@user/kadoban) (Quit: quit)
2022-11-18 15:08:38 +0100GoldsteinQ(~goldstein@goldstein.rs)
2022-11-18 15:10:18 +0100mncheck(~mncheck@193.224.205.254)
2022-11-18 15:12:00 +0100srz(~srz@157.92.5.222)
2022-11-18 15:12:25 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-11-18 15:12:29 +0100mud(~mud@user/kadoban)
2022-11-18 15:13:37 +0100srz_(~srz@devil.dm.uba.ar)
2022-11-18 15:15:37 +0100 <lortabac> it's a horrid experience because Haskell is not powerful enough for this kind of stuff, but given an imaginary infinitely expressive and ergonomic language I would definitely choose a Servant-like DSL to code-generation
2022-11-18 15:16:38 +0100 <lortabac> code-generation is less powerful than types and introduces complexity at build level
2022-11-18 15:16:47 +0100srz(~srz@157.92.5.222) (Ping timeout: 256 seconds)
2022-11-18 15:17:29 +0100 <dminuoso> But at least it is trivial to build said build level tools, and rig it with simple and expressive diagnostics
2022-11-18 15:17:33 +0100 <dminuoso> Making it tractable in any way
2022-11-18 15:20:27 +0100use-value(~Thunderbi@2a00:23c6:8a03:2f01:75c2:a71f:beaa:29bf) (Remote host closed the connection)
2022-11-18 15:21:27 +0100 <lortabac> yes I agree, I was thinking abstractly about the two approaches
2022-11-18 15:22:03 +0100 <lortabac> but in practice I think you are right
2022-11-18 15:22:36 +0100feliix42(~felix@gibbs.uberspace.de) (Ping timeout: 255 seconds)
2022-11-18 15:23:18 +0100titibandit(~titibandi@xdsl-87-78-52-100.nc.de) (Remote host closed the connection)
2022-11-18 15:25:21 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg)
2022-11-18 15:30:44 +0100troydm(~troydm@host-176-37-124-197.b025.la.net.ua) (Ping timeout: 248 seconds)
2022-11-18 15:31:03 +0100jinsun(~jinsun@user/jinsun) (Read error: Connection reset by peer)
2022-11-18 15:31:37 +0100InstX1(~Liam@c-98-208-218-119.hsd1.fl.comcast.net)
2022-11-18 15:31:42 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 256 seconds)
2022-11-18 15:36:08 +0100Guest75(~Guest75@178.141.130.118) (Ping timeout: 260 seconds)
2022-11-18 15:36:32 +0100InstX1(~Liam@c-98-208-218-119.hsd1.fl.comcast.net) (Ping timeout: 268 seconds)
2022-11-18 15:37:22 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg)
2022-11-18 15:38:38 +0100poljar(~poljar@93-139-1-236.adsl.net.t-com.hr)
2022-11-18 15:38:56 +0100econo(uid147250@user/econo)
2022-11-18 15:39:39 +0100_srz(~srz@157.92.5.222)
2022-11-18 15:42:05 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 260 seconds)
2022-11-18 15:42:41 +0100srz_(~srz@devil.dm.uba.ar) (Ping timeout: 268 seconds)
2022-11-18 15:44:46 +0100acidjnk(~acidjnk@p200300d6e7137a305cc03b10fd7a2523.dip0.t-ipconnect.de)
2022-11-18 15:47:12 +0100feliix42(~felix@gibbs.uberspace.de)
2022-11-18 15:53:02 +0100wroathe(~wroathe@207-153-38-140.fttp.usinternet.com)
2022-11-18 15:53:03 +0100wroathe(~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
2022-11-18 15:53:03 +0100wroathe(~wroathe@user/wroathe)
2022-11-18 15:54:37 +0100srz_(~srz@devil.dm.uba.ar)
2022-11-18 15:57:12 +0100_srz(~srz@157.92.5.222) (Ping timeout: 256 seconds)
2022-11-18 15:57:46 +0100chomwitt(~chomwitt@2a02:587:7a0a:c00:1ac0:4dff:fedb:a3f1) (Ping timeout: 256 seconds)
2022-11-18 16:07:58 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 268 seconds)
2022-11-18 16:15:02 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-11-18 16:19:18 +0100Vajb(~Vajb@2001:999:504:3ad6:52a4:a3b5:32d8:e74d) (Read error: Connection reset by peer)
2022-11-18 16:20:28 +0100catern(~sbaugh@2604:2000:8fc0:b:a9c7:866a:bf36:3407)
2022-11-18 16:20:31 +0100Vajb(~Vajb@hag-jnsbng11-58c3a5-27.dhcp.inet.fi)
2022-11-18 16:22:12 +0100Sgeo(~Sgeo@user/sgeo)
2022-11-18 16:26:34 +0100Lycurgus(~juan@user/Lycurgus)
2022-11-18 16:29:42 +0100jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
2022-11-18 16:29:53 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg)
2022-11-18 16:34:36 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 256 seconds)
2022-11-18 16:42:33 +0100azimut_(~azimut@gateway/tor-sasl/azimut)
2022-11-18 16:45:56 +0100azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
2022-11-18 16:47:43 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-11-18 16:49:10 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-11-18 16:51:23 +0100chomwitt(~chomwitt@athedsl-351939.home.otenet.gr)
2022-11-18 16:56:44 +0100azimut_(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
2022-11-18 16:57:55 +0100srz_(~srz@devil.dm.uba.ar) (Ping timeout: 268 seconds)
2022-11-18 16:58:10 +0100azimut(~azimut@gateway/tor-sasl/azimut)
2022-11-18 16:59:24 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-11-18 17:06:05 +0100Vajb(~Vajb@hag-jnsbng11-58c3a5-27.dhcp.inet.fi) (Ping timeout: 260 seconds)
2022-11-18 17:07:37 +0100Vajb(~Vajb@2001:999:504:3ad6:52a4:a3b5:32d8:e74d)
2022-11-18 17:14:27 +0100jakalx(~jakalx@base.jakalx.net) ()
2022-11-18 17:17:44 +0100jakalx(~jakalx@base.jakalx.net)
2022-11-18 17:20:28 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg)
2022-11-18 17:21:39 +0100bjourne(~bjourne@2001:6b0:1:1140:42bf:ff4:f8fa:50e5)
2022-11-18 17:22:11 +0100Major_Biscuit(~MajorBisc@145.94.173.169) (Quit: WeeChat 3.6)
2022-11-18 17:23:57 +0100vpan(~0@212.117.1.172) (Quit: Leaving.)
2022-11-18 17:24:18 +0100szkl(uid110435@id-110435.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
2022-11-18 17:24:50 +0100justGrit(~justache@user/justache) (Quit: ZNC 1.8.2 - https://znc.in)
2022-11-18 17:25:15 +0100justache(~justache@user/justache)
2022-11-18 17:26:44 +0100 <bjourne> what is the haskell syntax for: data Eq a => Foo a = Blah a ...?
2022-11-18 17:27:59 +0100 <geekosaur> it isn't. the "correct" syntax doesn't do what you expect or want, usually; you should put the constraint on functions that consume a Foo
2022-11-18 17:28:28 +0100 <geekosaur> DatatypeContexts aka "stupid theta" was removed in Haskell2010
2022-11-18 17:29:21 +0100 <geekosaur> you can get something somewhat closer to what you usually intend with GADTs, but you're usually still better off putting it on consumers of a Foo than on its construction
2022-11-18 17:29:59 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 268 seconds)
2022-11-18 17:30:49 +0100justache(~justache@user/justache) (Remote host closed the connection)
2022-11-18 17:30:52 +0100rburkholder(~blurb@96.45.2.121) (Remote host closed the connection)
2022-11-18 17:31:09 +0100rburkholder(~blurb@96.45.2.121)
2022-11-18 17:31:12 +0100justache(~justache@user/justache)
2022-11-18 17:33:54 +0100kronicmage(user93427@neotame.csclub.uwaterloo.ca) (Ping timeout: 246 seconds)
2022-11-18 17:36:22 +0100kronicmage(user90047@neotame.csclub.uwaterloo.ca)
2022-11-18 17:40:20 +0100`2jt(~jtomas@191.red-88-17-199.dynamicip.rima-tde.net) (Ping timeout: 256 seconds)
2022-11-18 17:41:04 +0100Lycurgus(~juan@user/Lycurgus) (Quit: Exeunt https://tinyurl.com/4m8d4kd5)
2022-11-18 17:46:53 +0100zeenk(~zeenk@2a02:2f04:a208:3600::7fe) (Quit: Konversation terminated!)
2022-11-18 17:47:43 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:89a4:6d1:4909:326f)
2022-11-18 17:55:08 +0100blueonyx_(~blueonyx@user/blueonyx)
2022-11-18 17:56:15 +0100blueonyx(~blueonyx@user/blueonyx) (Ping timeout: 260 seconds)
2022-11-18 17:56:53 +0100blueonyx_(~blueonyx@user/blueonyx) (Client Quit)
2022-11-18 17:57:04 +0100blueonyx(~blueonyx@user/blueonyx)
2022-11-18 17:57:46 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
2022-11-18 17:59:27 +0100bjourne(~bjourne@2001:6b0:1:1140:42bf:ff4:f8fa:50e5) (Quit: Konversation terminated!)
2022-11-18 17:59:34 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-11-18 18:02:41 +0100lambdap237(~lambdap@static.167.190.119.168.clients.your-server.de) (Quit: lambdap237)
2022-11-18 18:03:01 +0100lambdap237(~lambdap@static.167.190.119.168.clients.your-server.de)
2022-11-18 18:06:03 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:65cf:cc10:c4dc:168) (Quit: WeeChat 2.8)
2022-11-18 18:06:33 +0100Techcable(~Techcable@user/Techcable)
2022-11-18 18:09:29 +0100 <probie> I think you can emulate it with pattern synonyms
2022-11-18 18:12:33 +0100nschoe(~q@2a01:e0a:8e:a190:c3cc:9b76:de4b:1492) (Quit: Switching off)
2022-11-18 18:19:43 +0100finsternis(~X@23.226.237.192) (Read error: Connection reset by peer)
2022-11-18 18:20:41 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:89a4:6d1:4909:326f) (Remote host closed the connection)
2022-11-18 18:21:24 +0100 <Xeroine> Here http://felsin9.de/nnis/ghc-vis/#introduction this "at" function to access the nth element of that infinite list but I don't understand why that function is used instead of !! and if there's any difference and why is there a 0 in the function declaration?
2022-11-18 18:21:37 +0100 <Xeroine> function is used to access*
2022-11-18 18:21:56 +0100jinsun(~jinsun@user/jinsun)
2022-11-18 18:24:52 +0100blueonyx(~blueonyx@user/blueonyx) (Ping timeout: 268 seconds)
2022-11-18 18:27:56 +0100 <mauke> Xeroine: the function is equivalent to !! (but with arguments swapped)
2022-11-18 18:28:15 +0100 <mauke> it's probably defined like this to make it explicit what's going on
2022-11-18 18:29:21 +0100 <mauke> the 0 is for pattern matching: to check whether the first argument is 0
2022-11-18 18:30:10 +0100 <Xeroine> oh right
2022-11-18 18:30:20 +0100 <Xeroine> that was pretty obvious =D sry
2022-11-18 18:32:06 +0100Guest|74(~Guest|74@65-23-213-182.prtc.net)
2022-11-18 18:32:40 +0100Guest|74(~Guest|74@65-23-213-182.prtc.net) (Client Quit)
2022-11-18 18:36:25 +0100Tuplanolla(~Tuplanoll@91-159-68-152.elisa-laajakaista.fi)
2022-11-18 18:39:03 +0100acidjnk(~acidjnk@p200300d6e7137a305cc03b10fd7a2523.dip0.t-ipconnect.de) (Remote host closed the connection)
2022-11-18 18:39:23 +0100acidjnk(~acidjnk@p200300d6e7137a305cc03b10fd7a2523.dip0.t-ipconnect.de)
2022-11-18 18:40:32 +0100 <tomsmeding> dminuoso: cool, so just one parser implementation now? :)
2022-11-18 18:41:38 +0100goepsilongo(~goepsilon@2603-7000-ab00-00e5-392a-bca4-733f-bcd4.res6.spectrum.com)
2022-11-18 18:44:32 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
2022-11-18 18:46:04 +0100shapr(~user@68.54.166.125) (Remote host closed the connection)
2022-11-18 18:46:23 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:89a4:6d1:4909:326f)
2022-11-18 18:50:11 +0100titibandit(~titibandi@xdsl-87-78-52-100.nc.de)
2022-11-18 18:50:57 +0100razetime(~quassel@117.193.0.17) (Remote host closed the connection)
2022-11-18 18:53:08 +0100moneyGuest417
2022-11-18 18:58:29 +0100titibandit(~titibandi@xdsl-87-78-52-100.nc.de) (Remote host closed the connection)
2022-11-18 19:04:22 +0100nate4(~nate@98.45.169.16)
2022-11-18 19:09:24 +0100nate4(~nate@98.45.169.16) (Ping timeout: 248 seconds)
2022-11-18 19:09:53 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-11-18 19:18:08 +0100DDR(~DDR@2604:3d08:4c7f:8250:1acb:505b:bbc9:304c)
2022-11-18 19:21:31 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-11-18 19:21:50 +0100DDR(~DDR@2604:3d08:4c7f:8250:1acb:505b:bbc9:304c) (Remote host closed the connection)
2022-11-18 19:23:08 +0100tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
2022-11-18 19:23:10 +0100beteigeuze(~Thunderbi@a79-169-109-107.cpe.netcabo.pt) (Ping timeout: 260 seconds)
2022-11-18 19:27:25 +0100zeenk(~zeenk@2a02:2f04:a208:3600::7fe)
2022-11-18 19:27:42 +0100chomwitt(~chomwitt@athedsl-351939.home.otenet.gr) (Read error: Connection reset by peer)
2022-11-18 19:28:35 +0100Feuermagier_(~Feuermagi@2a02:2488:4211:3400:6419:933b:46e0:8942)
2022-11-18 19:30:59 +0100Feuermagier(~Feuermagi@user/feuermagier) (Ping timeout: 260 seconds)
2022-11-18 19:31:59 +0100mixfix41(~sdeny9ee@user/mixfix41)
2022-11-18 19:37:02 +0100azimut(~azimut@gateway/tor-sasl/azimut) (Quit: ZNC - https://znc.in)
2022-11-18 19:37:38 +0100mixfix41(~sdeny9ee@user/mixfix41) (Ping timeout: 256 seconds)
2022-11-18 19:38:23 +0100Unicorn_Princess(~Unicorn_P@user/Unicorn-Princess/x-3540542)
2022-11-18 19:38:52 +0100azimut(~azimut@gateway/tor-sasl/azimut)
2022-11-18 19:40:34 +0100roconnor(~quassel@coq/roconnor)
2022-11-18 19:41:30 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-11-18 19:44:31 +0100Feuermagier(~Feuermagi@user/feuermagier)
2022-11-18 19:45:50 +0100Feuermagier_(~Feuermagi@2a02:2488:4211:3400:6419:933b:46e0:8942) (Ping timeout: 240 seconds)
2022-11-18 19:46:56 +0100 <roconnor> Is there a way to create a Nix derivation to build a project using "cabal build" instead of "Setup build"? In particular I want to use "cabal haddock" because "Setup haddock" is broken for Backpack.
2022-11-18 19:47:41 +0100mzan(~quassel@mail.asterisell.com) (Quit: No Ping reply in 180 seconds.)
2022-11-18 19:49:06 +0100mzan(~quassel@mail.asterisell.com)
2022-11-18 19:49:06 +0100 <geekosaur> suspect the derivation would have to use either vendored deps or cabal.freeze or both
2022-11-18 19:49:39 +0100systemhalted(~systemhal@130.51.137.77)
2022-11-18 19:50:39 +0100systemhalted(~systemhal@130.51.137.77) (Remote host closed the connection)
2022-11-18 19:51:42 +0100ec(~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
2022-11-18 19:52:14 +0100ec(~ec@gateway/tor-sasl/ec)
2022-11-18 19:52:55 +0100hgolden(~hgolden@cpe-172-251-233-141.socal.res.rr.com) (Remote host closed the connection)
2022-11-18 19:53:36 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-11-18 19:54:01 +0100 <davean> haskell.nix has a thing to extract the deps from the cabal file using the solver
2022-11-18 19:54:45 +0100stefan-_(~cri@42dots.de) (Remote host closed the connection)
2022-11-18 19:55:33 +0100stefan-_(~cri@42dots.de)
2022-11-18 19:56:17 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 255 seconds)
2022-11-18 19:58:51 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643)
2022-11-18 19:59:55 +0100shof(~shof@user/shof) (Ping timeout: 248 seconds)
2022-11-18 20:00:43 +0100jmdaemon(~jmdaemon@user/jmdaemon)
2022-11-18 20:01:24 +0100mixfix41(~sdeny9ee@user/mixfix41)
2022-11-18 20:02:37 +0100epolanski(uid312403@id-312403.helmsley.irccloud.com) (Quit: Connection closed for inactivity)
2022-11-18 20:04:16 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-11-18 20:05:27 +0100kaskal(~kaskal@213-147-167-253.nat.highway.webapn.at)
2022-11-18 20:05:31 +0100 <Athas> Is there a way to specify a minimum GHC version that will make Cabal emit a user-comprehensible error when the minimum is not met?
2022-11-18 20:05:53 +0100AdonisExberger(~Adonis-Ex@176.54.36.182)
2022-11-18 20:05:55 +0100AdonisExberger(~Adonis-Ex@176.54.36.182) (Excess Flood)
2022-11-18 20:06:17 +0100AdonisExberger(~Adonis-Ex@176.54.36.182)
2022-11-18 20:06:29 +0100 <davean> Athas: I mean, effectively the base dependency does that. There is also a field for listing the GHC versions that should work.
2022-11-18 20:06:29 +0100bjobjo(~bjobjo@user/bjobjo)
2022-11-18 20:07:18 +0100 <davean> (the "compiler" field)
2022-11-18 20:07:29 +0100 <geekosaur> base dep doesn't tell you "your ghc is too old" though
2022-11-18 20:07:47 +0100 <davean> geekosaur: No, it EFFECTIVELY tells you that, it depends on what you consider comprehensible
2022-11-18 20:08:02 +0100chomwitt(~chomwitt@2a02:587:7a0a:c00:1ac0:4dff:fedb:a3f1)
2022-11-18 20:08:02 +0100 <davean> it tells anyone with a passing familiarity with haskell that, but it doesn't say it outright
2022-11-18 20:08:14 +0100 <Athas> davean: it's for people who are not Haskell programmers.
2022-11-18 20:08:14 +0100 <davean> the tested-with field is often used and makes it pretty clear but doesn't emit a message.
2022-11-18 20:08:28 +0100 <Athas> Even I have to look up a GHC:base mapping table every time to figure out what the actual requirement is.
2022-11-18 20:08:51 +0100 <davean> so I don't think there is anything that strictly does what you want.
2022-11-18 20:08:55 +0100 <Athas> I get error reports like this one: https://github.com/diku-dk/futhark/issues/1763
2022-11-18 20:09:05 +0100 <Athas> Alright, I think I will create an issue on the Cabal issue tracker about this.
2022-11-18 20:09:23 +0100 <Athas> While not terribly principled, I think this should be solved simply by special-casing the error message for 'base' version bounds.
2022-11-18 20:10:07 +0100 <davean> Athas: you can do a conditional on the compiler versions
2022-11-18 20:10:48 +0100 <davean> So you could hack it in the meantime by depending on an unsatisfiable "ghc-version-too-old" package
2022-11-18 20:10:53 +0100 <davean> (when the impl is too old)
2022-11-18 20:11:05 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-11-18 20:11:16 +0100 <davean> It would be a hack
2022-11-18 20:11:21 +0100Guest417money
2022-11-18 20:13:00 +0100 <roconnor> I admit I'm totally lost when it comes to cabal, but cabal build seems to work for me right now without a cabal update.
2022-11-18 20:14:41 +0100 <davean> Athas: if impl(ghc < 9.0): build-depends: new-enough-ghc == 0
2022-11-18 20:14:47 +0100 <davean> Athas: I don't know how you feel about hacks :-p
2022-11-18 20:14:56 +0100 <davean> roconnor: what are you lost about?
2022-11-18 20:15:10 +0100 <monochrom> ghcup list has a ghc<->base mapping
2022-11-18 20:15:13 +0100 <davean> cabal update just gets you new information about what packages are available.
2022-11-18 20:15:26 +0100 <tomsmeding> monochrom++
2022-11-18 20:15:33 +0100 <roconnor> mostly about how much cabal depends on hackage when building sthings.
2022-11-18 20:15:57 +0100 <tomsmeding> that saves a lot of looking up that same page on the ghc wiki again and again
2022-11-18 20:16:32 +0100 <davean> roconnor: it depends on hackage to download the packages, it depends on hackage to get a list of what is available when you run update.
2022-11-18 20:16:37 +0100 <davean> roconnor: total list, we're done.
2022-11-18 20:17:02 +0100 <davean> (you can also request it interact with hackage with cabal upload, but it doesn't "depend" in that case IMO and thats not building)
2022-11-18 20:17:16 +0100hgolden(~hgolden@cpe-172-251-233-141.socal.res.rr.com)
2022-11-18 20:17:43 +0100 <roconnor> "we're done"?
2022-11-18 20:19:59 +0100azimut(~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
2022-11-18 20:20:33 +0100lisq(~quassel@lis.moe) (Quit: No Ping reply in 180 seconds.)
2022-11-18 20:20:34 +0100azimut(~azimut@gateway/tor-sasl/azimut)
2022-11-18 20:20:43 +0100 <davean> roconnor: There is nothing else to list
2022-11-18 20:21:23 +0100 <davean> We've completely explored the dependencies cabal has on hackage for building packages
2022-11-18 20:21:53 +0100lisq(~quassel@lis.moe)
2022-11-18 20:22:18 +0100 <davean> I guess I can add to the first, it only downloads if it hasn't downloaded it already or the cache has been cleared since it downloaded it
2022-11-18 20:22:30 +0100 <roconnor> ls
2022-11-18 20:22:32 +0100dequbed(~dequbed@banana-new.kilobyte22.de)
2022-11-18 20:22:39 +0100 <roconnor> sorry.
2022-11-18 20:22:46 +0100waleee(~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
2022-11-18 20:23:12 +0100 <davean> roconnor: basicly in principle cabal doesn't depend on hackage at all. Its just that hackage is where it usually gets package data from.
2022-11-18 20:24:03 +0100 <davean> You can infact point it at a local directory instead for example.
2022-11-18 20:24:06 +0100 <geekosaur> hypothetically any package system could set up its own hackage-server, point cabal at it, and thereby integrate cabal directly into its build system
2022-11-18 20:24:34 +0100 <davean> geekosaur: huh what? No? cabal very explicitely is about Haskell
2022-11-18 20:24:44 +0100 <geekosaur> that's not what I meant
2022-11-18 20:25:10 +0100 <geekosaur> I meant it could use a private "hackage" with only the (Haskell) packages for that distro
2022-11-18 20:25:10 +0100 <monochrom> pretty sure geekosaur means Haskell too.
2022-11-18 20:25:22 +0100 <geekosaur> in the versions that distro packages
2022-11-18 20:25:46 +0100systemhalted(~systemhal@130.51.137.77)
2022-11-18 20:26:00 +0100 <monochrom> My meta-level comment is that there seems to be a lot of "I need to educate all you people" today.
2022-11-18 20:26:08 +0100 <geekosaur> it's just easier for them to go the Setup route instead of building a private hackage server
2022-11-18 20:26:14 +0100 <davean> setting up alternative package ecosystems for haskell is perfectly standard. You don't need to use hackage at all.
2022-11-18 20:26:50 +0100 <davean> I think the most common is a network share
2022-11-18 20:27:16 +0100 <geekosaur> lots of companies use their own hackages of approved packages+versions
2022-11-18 20:27:17 +0100 <roconnor> It seems like cabal build with locally installed packages (ghc-pkg list) if they are available.
2022-11-18 20:27:27 +0100 <geekosaur> whether as a server or as a directory
2022-11-18 20:27:29 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-11-18 20:27:32 +0100 <roconnor> no hackage needed.
2022-11-18 20:30:40 +0100systemhalted(~systemhal@130.51.137.77) (Ping timeout: 268 seconds)
2022-11-18 20:31:01 +0100troydm(~troydm@host-176-37-124-197.b025.la.net.ua)
2022-11-18 20:32:34 +0100 <davean> roconnor: right so cabal never needs hackage if you have already downloaded the package tarballs. What is already installed somewhere isn't really a "thing" to cabal past the base set of packages that come with the compiler (and not all of them)
2022-11-18 20:37:35 +0100chromoblob(~user@37.113.164.122) (Ping timeout: 260 seconds)
2022-11-18 20:38:51 +0100`2jt(~jtomas@191.red-88-17-199.dynamicip.rima-tde.net)
2022-11-18 20:43:22 +0100jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2022-11-18 20:43:57 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-11-18 20:45:12 +0100libertyprime(~libertypr@118-92-78-165.dsl.dyn.ihug.co.nz)
2022-11-18 20:48:42 +0100jakalx(~jakalx@base.jakalx.net)
2022-11-18 20:50:09 +0100bontaq(~user@ool-45779fe5.dyn.optonline.net)
2022-11-18 20:51:06 +0100Lycurgus(~juan@user/Lycurgus)
2022-11-18 20:51:10 +0100 <EvanR> speaking of which, is the arch linux situation resolved yet, or was there ever one or
2022-11-18 20:52:31 +0100 <davean> No, its not resolved. They want the thing they want and what they want doesn't make much sense.
2022-11-18 20:56:51 +0100 <roconnor> I think to register a package I need to run cabal install, but cabal install seems to want to rebuild my package (and it's failing due to some issue with my C dependencies that isn't a problem with cabal build).
2022-11-18 20:58:25 +0100 <davean> you don't really install packages
2022-11-18 20:58:43 +0100 <roconnor> how do I register cabal built packages with ghc?
2022-11-18 20:58:59 +0100 <davean> you can but you almost definately don't want to
2022-11-18 20:59:08 +0100 <sclv> `setup.hs install`
2022-11-18 20:59:19 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
2022-11-18 20:59:28 +0100 <sclv> if you're using the setup path
2022-11-18 20:59:56 +0100 <roconnor> sclv: I'm trying to use cabal instead of setup becuase Setup.hs haddock is broken with backpack projects.
2022-11-18 21:00:13 +0100 <sclv> does v1-build work?
2022-11-18 21:00:22 +0100 <davean> That won't affect cabal build for other project for example though, about the only thing it will affect is bare "ghci"
2022-11-18 21:00:50 +0100 <roconnor> right, bare ghci.
2022-11-18 21:00:56 +0100 <sclv> if its just v2-build then registering v2-build built packages in the standard package db will be rough, and i'm not sure even possible :-/
2022-11-18 21:01:43 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643)
2022-11-18 21:01:50 +0100 <sclv> v2-install just puts the package in the store and then modifies the global package environment file, it doesn't register it in the ghc pkgdb
2022-11-18 21:01:55 +0100 <roconnor> sclv: I have cabal 3.8.1.0 I don't know if build is doing a v1-build or a v2-build. v1-build maybe?
2022-11-18 21:02:01 +0100 <davean> v2
2022-11-18 21:02:02 +0100werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2022-11-18 21:02:03 +0100 <sclv> that's going to be v2-build by default
2022-11-18 21:02:06 +0100 <davean> v1 is basicly gone
2022-11-18 21:02:14 +0100 <sclv> you can explicitly say v1-build and v1-install and it will do it the v1 way
2022-11-18 21:02:29 +0100 <roconnor> I see. it was using dist instead of new-dist so I thought it would be v1.
2022-11-18 21:04:00 +0100 <roconnor> sclv: really, v2 doesn't support package registration?
2022-11-18 21:04:21 +0100 <davean> roconnor: its against the design but I think it does? I think you need like --lib and ...
2022-11-18 21:04:24 +0100 <davean> soemthing else
2022-11-18 21:04:26 +0100 <sclv> no. it only registers packages in the "store" which is not a normal package database
2022-11-18 21:04:28 +0100 <davean> but it is very much against the design
2022-11-18 21:04:52 +0100 <davean> --package-env ?
2022-11-18 21:05:03 +0100 <sclv> you can try to use ghc-pkg by hand to register the artifacts it has thus built into another package database but... errr.. good luck
2022-11-18 21:05:37 +0100 <roconnor> I mean, all my dependencies are registered. It feels weird that cabal v2 doesn't support registring newly build stuff.
2022-11-18 21:05:56 +0100 <davean> roconnor: it is supposed to create consistent enviroments
2022-11-18 21:06:00 +0100 <tomsmeding> roconnor: wait, it was using 'dist'? v2 commands should definitely use dist-newstyle by default
2022-11-18 21:06:01 +0100 <davean> you can create consistent enviroments with ti
2022-11-18 21:06:41 +0100Lycurgus(~juan@user/Lycurgus) (Quit: Exeunt https://tinyurl.com/4m8d4kd5)
2022-11-18 21:07:05 +0100 <roconnor> tomsmeding: Oh it seems I was misreading it.
2022-11-18 21:07:21 +0100 <tomsmeding> roconnor: why do you want to register a package? Is the purpose it being available in plain ghci? Or is the purpose it being available in other packages? Or something else?
2022-11-18 21:07:21 +0100 <davean> roconnor: Why not create a package-env that is how you want it to be?
2022-11-18 21:08:06 +0100 <tomsmeding> (And what do you want to happen when you "register" two different versions of the same package?)
2022-11-18 21:08:31 +0100 <roconnor> tomsmeding: What I'd like to do is build a nix expression that builds with cabal instead of setup because setup haddock is broken for backpack builds (and I'm not optimisitic it will be fixed).
2022-11-18 21:08:50 +0100 <davean> roconnor: ok, but what your proposing is like the opposite of that
2022-11-18 21:08:58 +0100 <tomsmeding> roconnor: is this for an executable or a haskell library?
2022-11-18 21:09:01 +0100 <davean> I pointed you at haskell.nxi above
2022-11-18 21:09:09 +0100 <roconnor> tomsmeding: both.
2022-11-18 21:09:14 +0100 <davean> *haskellnix
2022-11-18 21:09:21 +0100 <davean> *haskell.nix god damn my typing
2022-11-18 21:09:54 +0100 <tomsmeding> hm, ok, you'll need a nix expert, not me; hopefully my questions and your answers were useful for the other people in the conversation :)
2022-11-18 21:10:05 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 255 seconds)
2022-11-18 21:10:17 +0100 <roconnor> davean: Okay I'll take a closer look. I thought because cabal build was so easy to use from the command line, I could whip up a simple nix expression.
2022-11-18 21:10:39 +0100 <davean> roconnor: you'd have to extract the solver generally speaking, and you can do that. But what you want is NOT registration
2022-11-18 21:12:08 +0100 <sclv> i think that building it with cabal v1-build is likely fine. the only problem is if you need to pass in special hardcoded paths relative to the store, because cabal currently doesn't let you do that (i have a patch in the works but it hasn't landed yet)
2022-11-18 21:12:36 +0100 <davean> sclv: well there is also the purity thing with nix expressions
2022-11-18 21:12:51 +0100 <c_wraith> sclv: did you see that my doc patch for internal libraries was accepted with minimal fuss?
2022-11-18 21:12:51 +0100 <roconnor> cabal v1-haddock is just as broken as setup haddock, which probably isn't too surprising.
2022-11-18 21:12:53 +0100 <sclv> if you assume all your deps are already available, which nix should handle for you, you're ok
2022-11-18 21:13:00 +0100 <sclv> c_wraith: great :-)
2022-11-18 21:13:08 +0100 <davean> sclv: I mean getting the registration out of the nix expression
2022-11-18 21:13:17 +0100 <roconnor> davean: I was looking at the default install phase of Nix @ https://github.com/NixOS/nixpkgs/blob/ba90bab628277d977d3a381e91d4ce0af4ea4f91/pkgs/development/ha…
2022-11-18 21:13:28 +0100 <c_wraith> Now (well, after the next update) the docs will actually explain what I was doing wrong!
2022-11-18 21:13:30 +0100 <roconnor> it runs Setup register --gen-pkg-config
2022-11-18 21:13:35 +0100 <sclv> davean: i don't understand what you mean -- the artifact will be in a consistent place in dist-newstyle
2022-11-18 21:13:59 +0100 <davean> roconnor: Note that that VERY SPECIFICLY isn't doing a straight install
2022-11-18 21:14:17 +0100 <davean> sclv: I mean that having the registration become relivent outside the nix expression takes setup
2022-11-18 21:14:28 +0100 <sclv> i think setup.hs register is very much a thin wrapper around ghc-pkg and the latter could suffice
2022-11-18 21:14:43 +0100 <davean> sclv: except nix expression builds are isolated from the system
2022-11-18 21:14:49 +0100 <davean> sclv: so nothing will see what it does
2022-11-18 21:14:54 +0100 <roconnor> Though I guess Setup register --gen-pkg-config=... is maybe kinda not a registration.
2022-11-18 21:15:10 +0100 <roconnor> sclv: that would make sense.
2022-11-18 21:15:10 +0100 <davean> roconnor: local packageConfFile="$packageConfDir/${pname}-${version}.conf"
2022-11-18 21:15:20 +0100 <davean> Its making specific stuff for that exact package-version
2022-11-18 21:15:27 +0100 <davean> other stuff gets that file searched
2022-11-18 21:15:32 +0100 <davean> its NOT doing a global install
2022-11-18 21:15:36 +0100 <davean> its making a very specific install
2022-11-18 21:16:13 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643)
2022-11-18 21:16:51 +0100 <davean> if it worked on the *global* database, from the perspective of the nix derivation, there would be *no way to combine nix derivations to get a set of registrations*
2022-11-18 21:17:51 +0100 <davean> from the man page of cabal:
2022-11-18 21:17:54 +0100 <davean> --gen-pkg-config [PKG]
2022-11-18 21:17:55 +0100 <davean> instead of registering, generate a package registration file/directoryyy
2022-11-18 21:18:26 +0100 <davean> We're effectively getting a file SOMETHING ELSE can refer to to make an envirment that includes it
2022-11-18 21:18:43 +0100 <sclv> ah gotcha!
2022-11-18 21:18:46 +0100 <davean> which is very specificly why I was saying I thought you didn't want what you were asking for at the top
2022-11-18 21:18:51 +0100 <sclv> idk if there's a v2 version of that
2022-11-18 21:19:15 +0100 <roconnor> there didn't seem to be any v2 versions of copy and register.
2022-11-18 21:19:50 +0100 <davean> Don't quote me on this, but I think register might just work with v2-built libraries
2022-11-18 21:20:10 +0100 <davean> The registration stuff is the same
2022-11-18 21:21:05 +0100 <davean> sclv: Sorry I wasn't explaining it great
2022-11-18 21:22:16 +0100systemhalted(~systemhal@130.51.137.77)
2022-11-18 21:25:36 +0100 <roconnor> wow, using cabal v1-register does seem to be promising. Using a depricated feature is a bit unnerving, but perhaps it is good enough for now.
2022-11-18 21:26:11 +0100 <roconnor> OTOH maybe I should be looking at haskell.nix
2022-11-18 21:26:13 +0100 <sclv> if it actually works, we arguably should just keep it around since we don't have a replacement, and its not clear if having one makes sense
2022-11-18 21:26:21 +0100systemhalted(~systemhal@130.51.137.77) (Read error: Connection reset by peer)
2022-11-18 21:26:31 +0100 <dminuoso> tomsmeding: well no, stateful still needs to be duplicated sadlz.
2022-11-18 21:26:46 +0100 <dminuoso> tomsmeding: but at least for both basic and stateful, we can have a single implementation indeed.
2022-11-18 21:27:40 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
2022-11-18 21:28:13 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643)
2022-11-18 21:28:21 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:89a4:6d1:4909:326f) (Remote host closed the connection)
2022-11-18 21:29:29 +0100 <davean> roconnor: right, it SHOULD work, you know, in principal.
2022-11-18 21:29:38 +0100InstX1(~Liam@c-98-208-218-119.hsd1.fl.comcast.net)
2022-11-18 21:31:20 +0100 <davean> roconnor: you should look at haskell.nix, mostly it has the production grade version of what we've talked about. OTOH, now you know how this ACTUALLY works, so you can fix things properly.
2022-11-18 21:31:35 +0100 <davean> roconnor: and you are on a valuable but less trod pathway
2022-11-18 21:31:39 +0100 <davean> so I'm glad you're using it!
2022-11-18 21:31:43 +0100 <roconnor> does haskell.nix use cabal build?
2022-11-18 21:32:22 +0100 <tomsmeding> dminuoso: oh right, you need stateful still because an STRef state wouldn't backtrack?
2022-11-18 21:32:57 +0100 <roconnor> https://github.com/input-output-hk/haskell.nix/blob/d82e4c0e249e99259c083863e26a35509283f250/build… doesn't look promising.
2022-11-18 21:33:04 +0100 <dminuoso> tomsmeding: For one that, and also an unboxed state is likely going to be faster than an STRef
2022-11-18 21:33:19 +0100 <tomsmeding> right
2022-11-18 21:33:27 +0100 <dminuoso> But I have my doubts
2022-11-18 21:33:27 +0100 <roconnor> I think haskell.nix still uses Setup.hs
2022-11-18 21:33:42 +0100 <dminuoso> Like you have pointed out, a single Int# worth of state is not enough for parsing whitespace sensitive things.
2022-11-18 21:33:55 +0100 <dminuoso> At least not for reasonable inputs in programming languages
2022-11-18 21:34:39 +0100InstX1(~Liam@c-98-208-218-119.hsd1.fl.comcast.net) (Ping timeout: 260 seconds)
2022-11-18 21:34:45 +0100 <dminuoso> So I dont know how useful it truly is, to me it smells like a lot of baggage dragging along for no real world use
2022-11-18 21:34:56 +0100 <roconnor> All right, I think I'll attempt to make a custom nix derivation using cabal build and cabal v1-register with lots of flags and see how far I can make it.
2022-11-18 21:35:09 +0100 <dminuoso> If you are *that* desperate for cpu cycles you're probably better off writing some cbits
2022-11-18 21:35:22 +0100 <tomsmeding> dminuoso: yeah I think so
2022-11-18 21:35:24 +0100 <davean> roconnor: No ,but it sets up stuff correctly - like generating the dependencies with cabal
2022-11-18 21:35:41 +0100 <davean> roconnor: so its just the build stuff that is a problem in it
2022-11-18 21:36:02 +0100 <dminuoso> tomsmeding: Either way, if we have `State# s` threading through the pure parser, I dont have to care about it. :P
2022-11-18 21:36:06 +0100 <davean> roconnor: you'd just have to override buildPhase I think
2022-11-18 21:36:18 +0100 <dminuoso> (but like you pointed out, backtracking is still a problem)
2022-11-18 21:36:18 +0100__monty__(~toonn@user/toonn) (Quit: leaving)
2022-11-18 21:36:39 +0100 <dminuoso> But that we could possibly work around
2022-11-18 21:36:40 +0100 <tomsmeding> dminuoso: yeah a backtracking state is essential for parser state :p
2022-11-18 21:36:47 +0100 <tomsmeding> like whitespace parsing
2022-11-18 21:36:57 +0100 <dminuoso> well, if you cut early before state changes occur its not a big deal
2022-11-18 21:37:15 +0100 <dminuoso> s/cut/backtrack/
2022-11-18 21:37:17 +0100 <tomsmeding> maybe, but I wouldn't like to have to watch for that
2022-11-18 21:37:30 +0100 <dminuoso> maybe there is a way to do something akin to `bracket` but for backtracking
2022-11-18 21:38:06 +0100 <dminuoso> The only alternative is to thread boxed state through, but duplicating every parser a third time.. I think backpack might be more interesting at that point.
2022-11-18 21:38:29 +0100 <tomsmeding> dminuoso: the hack in the ghc grammar to properly parse layout springs to mind, where I believe there's some long distance backtracking going on (but I may be misremembering)
2022-11-18 21:38:36 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg)
2022-11-18 21:39:13 +0100 <dminuoso> tomsmeding: I mean realistically you will want to cut early *anyway*
2022-11-18 21:39:19 +0100 <dminuoso> because it makes for much better diagnostics
2022-11-18 21:39:20 +0100 <tomsmeding> dminuoso: probably naive suggestion, but it isn't possible to make the additional field a, you know, type parameter?
2022-11-18 21:39:28 +0100 <tomsmeding> and {-# SPECIALIZE #-} the hell out of it
2022-11-18 21:39:42 +0100 <tomsmeding> sure
2022-11-18 21:40:21 +0100 <tomsmeding> but if I'm sure to cut that early always, I can really just rewrite my parser to not backtrack at all
2022-11-18 21:40:41 +0100 <dminuoso> well no there is good reasons not to do that
2022-11-18 21:40:42 +0100 <tomsmeding> because all the backtracking will be extremely local
2022-11-18 21:40:43 +0100 <dminuoso> consider:
2022-11-18 21:40:53 +0100 <dminuoso> say you want to branch behavior based on a keyword
2022-11-18 21:41:25 +0100 <tomsmeding> or perhaps better formulated, not backtrack _in the parser framework_ at all
2022-11-18 21:41:55 +0100 <dminuoso> https://gist.github.com/dminuoso/a73383874e06061c3526049997472f79
2022-11-18 21:42:02 +0100pavonia(~user@user/siracusa)
2022-11-18 21:42:32 +0100 <dminuoso> So you can simply `many topStanza`
2022-11-18 21:42:53 +0100 <dminuoso> Of course you can rewrite topStanza as a recursive loop, but you will lose tons of expressivity
2022-11-18 21:42:59 +0100 <dminuoso> And yet this cuts early after just one token
2022-11-18 21:43:21 +0100 <tomsmeding> it will cut after just one token, but before or after the state update?
2022-11-18 21:43:24 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 260 seconds)
2022-11-18 21:43:30 +0100 <tomsmeding> indentation updates can happen after every token
2022-11-18 21:43:35 +0100 <dminuoso> Well in this case there is no state update, because its really just the switch
2022-11-18 21:43:39 +0100 <dminuoso> Mmm
2022-11-18 21:43:43 +0100 <tomsmeding> if I parse 'let', I now need to update my state because I'm starting a new layout block
2022-11-18 21:43:44 +0100 <dminuoso> I see what you're getting at
2022-11-18 21:43:49 +0100 <tomsmeding> okay 'let' is a bad example
2022-11-18 21:43:53 +0100 <tomsmeding> the first token after the 'let', rather
2022-11-18 21:44:11 +0100 <dminuoso> Know what really sucks?
2022-11-18 21:44:19 +0100 <tomsmeding> you can architect this to work, but I don't want to need to
2022-11-18 21:44:24 +0100 <dminuoso> That you cant just do boxed/unboxed-polymorphic code.
2022-11-18 21:44:33 +0100 <dminuoso> If we could, this would be entirely trivial
2022-11-18 21:44:35 +0100 <tomsmeding> if I need to think about this, I'd rather just not just parser backtracking at all :p
2022-11-18 21:44:40 +0100 <dminuoso> since you could just set s ~ (##) for non-stateful and be done.
2022-11-18 21:44:40 +0100 <tomsmeding> more transparent
2022-11-18 21:44:51 +0100 <dminuoso> or s ~ Int#, or s ~ YourThing
2022-11-18 21:44:52 +0100 <tomsmeding> hmm
2022-11-18 21:45:10 +0100 <tomsmeding> isn't the thing that you can't make an unboxed field polymorphic?
2022-11-18 21:45:33 +0100 <dminuoso> no you can make it polymorphic, but you can no longer provide binding sites in things like pattern matches
2022-11-18 21:45:35 +0100 <tomsmeding> because different unboxed types have different representations in the heap block
2022-11-18 21:45:42 +0100 <dminuoso> right
2022-11-18 21:45:45 +0100 <dminuoso> roughly that
2022-11-18 21:45:45 +0100 <tomsmeding> how does that even work? :')
2022-11-18 21:45:50 +0100euandreh2(~Thunderbi@189.40.77.30)
2022-11-18 21:46:07 +0100 <tomsmeding> how can a data type have a polymorphic unboxed field where the size of that field is potentially even runtime-dependent
2022-11-18 21:46:28 +0100 <dminuoso> Ah no you cant have that
2022-11-18 21:46:39 +0100 <dminuoso> I phrased it poorly, you can have it as a type (say phantom)
2022-11-18 21:46:55 +0100 <tomsmeding> oh right you can have a phantom type variable of unboxed type, sure
2022-11-18 21:47:03 +0100 <dminuoso> Proxy (TYPE r)
2022-11-18 21:47:10 +0100 <tomsmeding> but for phantom type variables levity polymorphism is a thing I thought
2022-11-18 21:47:17 +0100 <tomsmeding> but proxies don't get us anything here :p
2022-11-18 21:47:17 +0100 <dminuoso> Yup
2022-11-18 21:47:24 +0100euandreh(~Thunderbi@179.214.113.107) (Ping timeout: 256 seconds)
2022-11-18 21:47:25 +0100euandreh2euandreh
2022-11-18 21:47:27 +0100 <dminuoso> To be fair
2022-11-18 21:47:31 +0100 <dminuoso> 21:45:35 tomsmeding | because different unboxed types have different representations in the heap block
2022-11-18 21:47:38 +0100 <dminuoso> I dont think this is a fundamental problem
2022-11-18 21:47:46 +0100 <dminuoso> Its merely that GHC wants to know it fairly early
2022-11-18 21:47:58 +0100 <tomsmeding> one could write a runtime system that can handle that
2022-11-18 21:48:02 +0100 <dminuoso> In principle GHC could just figure out the layout once you instantiate it at a given type
2022-11-18 21:48:21 +0100 <tomsmeding> or, hm
2022-11-18 21:48:35 +0100 <dminuoso> Im not saying it can be easily done, but its definitely not a fundamental problem
2022-11-18 21:48:48 +0100 <tomsmeding> actually indeed, if the unboxed polymorphic type parameters are all monomorphic, you should be able to do all the usual things to a heap object
2022-11-18 21:49:09 +0100 <tomsmeding> one just has to reject higher-rank types with explicitly polymorphic unboxed type variables
2022-11-18 21:49:12 +0100 <dminuoso> tomsmeding: the real problem is still polymorphic code.
2022-11-18 21:49:16 +0100 <dminuoso> not just higher rank
2022-11-18 21:49:19 +0100 <dminuoso> even rank 1
2022-11-18 21:49:29 +0100 <tomsmeding> inline all the things
2022-11-18 21:49:32 +0100 <tomsmeding> not fundamental
2022-11-18 21:49:33 +0100 <dminuoso> Consider something as mundane as:
2022-11-18 21:49:45 +0100 <tomsmeding> super inconvenient and probably non-optimal, sure
2022-11-18 21:49:56 +0100 <tomsmeding> but at least you can SPECIALIZE your way out of that
2022-11-18 21:50:07 +0100 <dminuoso> `foo :: Maybe (a :: TYPE r) -> ...`
2022-11-18 21:50:16 +0100 <dminuoso> and export that in a module
2022-11-18 21:50:20 +0100 <dminuoso> GHC must provide code that works for that.
2022-11-18 21:50:37 +0100 <tomsmeding> ghc could just not, right? Only provide an inlineable Core snippet
2022-11-18 21:50:56 +0100 <tomsmeding> but not sure whether this is a useful discussion to have, since ghc doesn't
2022-11-18 21:51:24 +0100 <dminuoso> I think backpack would be a solution to all of this
2022-11-18 21:51:39 +0100tomsmedinggets nervous
2022-11-18 21:51:41 +0100 <dminuoso> tomsmeding: or something more tight as SPECIALIZE
2022-11-18 21:52:05 +0100 <dminuoso> Something like SPECIALIZE_EXACTLY, where code is instantiated for each pragma, and only exactly that.
2022-11-18 21:52:17 +0100 <tomsmeding> and no polymorphic code generated?
2022-11-18 21:52:19 +0100 <dminuoso> And if you try and run it with something else, get a bottom thrown in your face
2022-11-18 21:52:22 +0100 <dminuoso> Right
2022-11-18 21:52:27 +0100 <tomsmeding> right
2022-11-18 21:52:29 +0100 <dminuoso> (Or well I guess GHC could catch that)
2022-11-18 21:52:44 +0100 <tomsmeding> that's what I was trying to suggest above
2022-11-18 21:52:52 +0100 <dminuoso> Mmm
2022-11-18 21:52:54 +0100 <tomsmeding> well, not really
2022-11-18 21:52:56 +0100 <dminuoso> Couldnt we use a typeclass for this?
2022-11-18 21:53:02 +0100EvanR_(~EvanR@user/evanr)
2022-11-18 21:53:02 +0100 <dminuoso> with an associated type synonym?
2022-11-18 21:53:06 +0100 <dminuoso> something along the lines of
2022-11-18 21:54:29 +0100`2jt(~jtomas@191.red-88-17-199.dynamicip.rima-tde.net) (Ping timeout: 260 seconds)
2022-11-18 21:55:20 +0100 <dminuoso> class Thing a where type TYP a :: Type; po :: (a :: TYP a) -> Int -> Int
2022-11-18 21:55:31 +0100 <dminuoso> % :set -XTypeFamilies
2022-11-18 21:55:31 +0100 <yahb2> <no output>
2022-11-18 21:55:37 +0100 <dminuoso> % :set -XPolyKinds
2022-11-18 21:55:37 +0100 <yahb2> <no output>
2022-11-18 21:55:40 +0100 <dminuoso> % class Thing a where type TYP a :: Type; po :: (a :: TYP a) -> Int -> Int
2022-11-18 21:55:40 +0100 <yahb2> <interactive>:150:49: error: ; • Expected a type, but ‘a :: TYP a’ has kind ‘TYP a’ ; • In the type signature: po :: (a :: TYP a) -> Int -> Int ; In the class declaration for ‘Thing’
2022-11-18 21:55:42 +0100 <dminuoso> Mmmm
2022-11-18 21:55:47 +0100 <dminuoso> % :set -XTypeInType
2022-11-18 21:55:47 +0100 <yahb2> <no output>
2022-11-18 21:55:50 +0100 <dminuoso> % class Thing a where type TYP a :: Type; po :: (a :: TYP a) -> Int -> Int
2022-11-18 21:55:50 +0100 <yahb2> <interactive>:154:49: error: ; • Expected a type, but ‘a :: TYP a’ has kind ‘TYP a’ ; • In the type signature: po :: (a :: TYP a) -> Int -> Int ; In the class declaration for ‘Thing’
2022-11-18 21:55:54 +0100EvanR(~EvanR@user/evanr) (Ping timeout: 256 seconds)
2022-11-18 21:55:58 +0100 <dminuoso> Oh right, I remember that extension doesnt do anything
2022-11-18 21:56:12 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:89a4:6d1:4909:326f)
2022-11-18 21:56:44 +0100 <dminuoso> % class Thing a r where type TYP a :: TYPE r; po :: (a :: TYP a) -> Int -> Int
2022-11-18 21:56:45 +0100 <yahb2> <interactive>:156:53: error: ; • Expected a type, but ‘a :: TYP a’ has kind ‘TYP a’ ; • In the type signature: po :: (a :: TYP a) -> Int -> Int ; In the class declaration for ‘Thing’
2022-11-18 21:59:26 +0100 <tomsmeding> dminuoso: I think all actual function argument types must have kind either LiftedType or UnliftedType
2022-11-18 21:59:47 +0100 <tomsmeding> since this might be anything (depending on the instance), including other kinds that are nonsensical in that position, ghc rejects it?
2022-11-18 22:00:21 +0100 <tomsmeding> % class ThingNotRelly a where type TYP a :: Type; po :: (a :: UnliftedType) -> Int -> Int
2022-11-18 22:00:21 +0100 <yahb2> <no output>
2022-11-18 22:00:25 +0100 <tomsmeding> that works fine, for example
2022-11-18 22:00:42 +0100 <tomsmeding> % class ThingNotRelly a where type TYP a :: Type; po :: (a :: (UnliftedType :: Type)) -> Int -> Int
2022-11-18 22:00:42 +0100 <yahb2> <no output>
2022-11-18 22:00:45 +0100 <tomsmeding> look at that
2022-11-18 22:01:00 +0100 <tomsmeding> oh s/Relly/Really/
2022-11-18 22:01:55 +0100 <tomsmeding> % :k (Type :: (Type :: (Type :: (Type :: Type))))
2022-11-18 22:01:55 +0100 <yahb2> (Type :: (Type :: (Type :: (Type :: Type)))) :: Type
2022-11-18 22:02:35 +0100 <dminuoso> oh hold on, we dont even need a method.
2022-11-18 22:02:42 +0100 <dminuoso> % class Thing a r where type TYP a :: TYPE r
2022-11-18 22:02:42 +0100 <yahb2> <no output>
2022-11-18 22:02:59 +0100 <dminuoso> % instance Thing Int LiftedRep
2022-11-18 22:03:00 +0100 <yahb2> <interactive>:166:1: warning: [-Wmissing-methods] ; • No explicit associated type or default declaration for ‘TYP’ ; • In the instance declaration for ‘Thing Int LiftedRep’
2022-11-18 22:03:11 +0100 <dminuoso> Mmm, maybe even wiuthout the synonym
2022-11-18 22:03:22 +0100 <dminuoso> % class Thing a r | a -> r
2022-11-18 22:03:23 +0100 <yahb2> <interactive>:168:1: error: ; • Fundeps in class ‘Thing’ ; (Enable FunctionalDependencies to allow fundeps) ; • In the class declaration for ‘Thing’
2022-11-18 22:03:30 +0100 <dminuoso> % :set -XFunctionalDependencies
2022-11-18 22:03:30 +0100 <yahb2> <no output>
2022-11-18 22:03:33 +0100 <dminuoso> % class Thing a r | a -> r
2022-11-18 22:03:33 +0100 <yahb2> <no output>
2022-11-18 22:03:45 +0100 <dminuoso> % instance Thing Int (TYPE LiftedRep)
2022-11-18 22:03:45 +0100 <yahb2> <no output>
2022-11-18 22:03:56 +0100 <dminuoso> % import GHC.Int
2022-11-18 22:03:56 +0100 <yahb2> <no output>
2022-11-18 22:04:05 +0100 <dminuoso> % :set -XMagicHash
2022-11-18 22:04:05 +0100 <yahb2> <no output>
2022-11-18 22:04:06 +0100 <dminuoso> % instance Thing Int# (TYPE UnliftedRep)
2022-11-18 22:04:07 +0100 <yahb2> <no output>
2022-11-18 22:04:24 +0100 <dminuoso> % f :: Thing a b => (a :: b) -> Int; f = undefined
2022-11-18 22:04:24 +0100 <yahb2> <interactive>:182:20: error: ; • Expected a type, but ‘a :: b’ has kind ‘b1’ ; ‘b1’ is a rigid type variable bound by ; the type signature for ‘f’ ; at <interactive>:182:1...
2022-11-18 22:04:31 +0100 <dminuoso> tomsmeding: Gah I want this. :(
2022-11-18 22:04:49 +0100 <tomsmeding> isn't this the precise same issue as with the 'po' method?
2022-11-18 22:04:54 +0100 <tomsmeding> the type class is open
2022-11-18 22:05:21 +0100 <tomsmeding> someone might write an instance 'instance Thing Double Bool' and what would f do
2022-11-18 22:05:43 +0100 <dminuoso> Not mind.
2022-11-18 22:05:51 +0100 <dminuoso> But you couldnt instantiate f at those.
2022-11-18 22:05:58 +0100 <dminuoso> at least thats my expectancy
2022-11-18 22:06:13 +0100 <tomsmeding> what if you're in a polymorphic context ;)
2022-11-18 22:06:27 +0100 <tomsmeding> what would the dictionary even contain here
2022-11-18 22:06:30 +0100 <dminuoso> uh okay.
2022-11-18 22:06:51 +0100 <dminuoso> maybe tyfams can help here?
2022-11-18 22:07:25 +0100 <tomsmeding> fundamentally you need >=two different generated assembly versions for f
2022-11-18 22:07:35 +0100 <tomsmeding> one for lifted, and one for each unlifted type
2022-11-18 22:07:41 +0100 <dminuoso> Yeah I get what you're saying.
2022-11-18 22:07:46 +0100 <tomsmeding> some type level thing isn't going to do that
2022-11-18 22:08:00 +0100 <tomsmeding> no matter how much we'd want that :p
2022-11-18 22:08:04 +0100 <dminuoso> I expect to find something that type checks, and then magically conjures up differnet machine code out of thin air
2022-11-18 22:08:17 +0100 <dminuoso> because clearly if it type checks, its gotta do the right thing
2022-11-18 22:08:21 +0100 <tomsmeding> who wants a JITted haskell
2022-11-18 22:09:45 +0100 <tomsmeding> dminuoso: this though https://github.com/ekmett/unboxed/blob/main/internal/Unboxed/Internal/Class.hs
2022-11-18 22:10:14 +0100 <dminuoso> huh
2022-11-18 22:10:23 +0100ChaiTRex(~ChaiTRex@user/chaitrex) (Ping timeout: 255 seconds)
2022-11-18 22:10:44 +0100 <tomsmeding> I was looking through this repo while we were discussing because I was pretty sure this kind of magic was in there
2022-11-18 22:10:56 +0100 <dminuoso> I actually do know this heh
2022-11-18 22:11:30 +0100 <tomsmeding> oh hey
2022-11-18 22:11:39 +0100 <dminuoso> that FunctorRep typeclass looks interesting
2022-11-18 22:11:46 +0100 <tomsmeding> isn't the point here that you cannot do (a :: k) but you can do (a :: TYPE k)
2022-11-18 22:11:50 +0100 <dminuoso> Its sort of what I was trying to build
2022-11-18 22:12:03 +0100 <tomsmeding> because the types that hold values are precisely those that are of the form TYPE r
2022-11-18 22:12:24 +0100 <dminuoso> Ill have to do some thinking how this could be plugged into flatparse
2022-11-18 22:12:27 +0100ChaiTRex(~ChaiTRex@user/chaitrex)
2022-11-18 22:12:54 +0100 <dminuoso> the main problem is, you would have to write *all* parser combinators as part of a singular typeclass
2022-11-18 22:12:58 +0100 <dminuoso> because they all go like
2022-11-18 22:13:27 +0100 <tomsmeding> all the basic ones, in any case
2022-11-18 22:13:31 +0100 <dminuoso> word8 = Parser $ \fp r eob s n -> ...
2022-11-18 22:13:34 +0100 <tomsmeding> or also derived ones?
2022-11-18 22:13:59 +0100 <dminuoso> Which means every single combinator must live in this typeclass, because of the binding site of `n`
2022-11-18 22:14:08 +0100 <dminuoso> even derived ones.
2022-11-18 22:14:12 +0100 <dminuoso> so its actually fixewd
2022-11-18 22:14:16 +0100 <dminuoso> (well you could subclass I suppose)
2022-11-18 22:14:39 +0100 <tomsmeding> % class Thing r (a :: TYPE r) where po :: a -> Int -> Int
2022-11-18 22:14:39 +0100 <yahb2> <no output>
2022-11-18 22:14:43 +0100 <tomsmeding> just for completeness
2022-11-18 22:14:57 +0100 <tomsmeding> note that the type parameters of Thing cannot be swapped!
2022-11-18 22:15:00 +0100 <dminuoso> % instance Thing LiftedRep Int
2022-11-18 22:15:01 +0100 <yahb2> <interactive>:186:10: warning: [-Wmissing-methods] ; • No explicit implementation for ; ‘po’ ; • In the instance declaration for ‘Thing LiftedRep Int’
2022-11-18 22:15:03 +0100 <dminuoso> % instance Thing LiftedRep Int#
2022-11-18 22:15:03 +0100 <yahb2> <interactive>:188:26: error: ; • Expecting a lifted type, but ‘Int#’ is unlifted ; • In the second argument of ‘Thing’, namely ‘Int#’ ; In the instance declaration for ‘Thing LiftedRe...
2022-11-18 22:15:05 +0100 <dminuoso> Nice
2022-11-18 22:15:26 +0100 <tomsmeding> % instance Thing UnliftedRep Int#
2022-11-18 22:15:26 +0100 <yahb2> <interactive>:190:28: error: ; • Couldn't match kind ‘'IntRep’ with ‘'BoxedRep 'Unlifted’ ; Expected kind ‘TYPE UnliftedRep’, ; but ‘Int#’ has kind ‘TYPE 'IntRep’ ; • In the s...
2022-11-18 22:15:34 +0100 <tomsmeding> % instance Thing IntRep Int#
2022-11-18 22:15:34 +0100 <yahb2> <interactive>:192:10: warning: [-Wmissing-methods] ; • No explicit implementation for ; ‘po’ ; • In the instance declaration for ‘Thing 'IntRep Int#’
2022-11-18 22:15:39 +0100 <tomsmeding> there we go
2022-11-18 22:15:55 +0100 <dminuoso> Maybe..
2022-11-18 22:15:57 +0100 <dminuoso> Mmm.
2022-11-18 22:16:26 +0100 <dminuoso> I have a bunch of really poor ideas
2022-11-18 22:16:45 +0100coot(~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
2022-11-18 22:16:51 +0100 <dminuoso> Thinking whether we could just pass a Word# through, and unsafeCoerce# it into back
2022-11-18 22:16:57 +0100 <dminuoso> And get polymorphism this way
2022-11-18 22:17:02 +0100 <tomsmeding> into back?
2022-11-18 22:17:05 +0100 <dminuoso> or hold on!
2022-11-18 22:17:08 +0100 <tomsmeding> into what, a boxed pointer?
2022-11-18 22:17:11 +0100 <dminuoso> Yes.
2022-11-18 22:17:13 +0100 <tomsmeding> that ain't gonna fly with the gc
2022-11-18 22:17:18 +0100 <dminuoso> I know, hence "poor ideas"
2022-11-18 22:17:23 +0100 <tomsmeding> ::p
2022-11-18 22:17:25 +0100 <tomsmeding> * :p
2022-11-18 22:17:45 +0100 <dminuoso> well or we just remand the user only supply pinned objects.
2022-11-18 22:17:48 +0100 <dminuoso> :p
2022-11-18 22:17:53 +0100 <dminuoso> "if you dont, this will crash very horribly"
2022-11-18 22:18:30 +0100 <tomsmeding> doesn't pinning objects have a performance penalty?
2022-11-18 22:19:08 +0100 <geekosaur> just a GC penalty I think
2022-11-18 22:19:09 +0100 <dminuoso> can you please not shoot down an idea that actually work with performance worries?
2022-11-18 22:19:11 +0100 <dminuoso> :p
2022-11-18 22:19:19 +0100 <tomsmeding> lol
2022-11-18 22:19:24 +0100 <money> Okay
2022-11-18 22:19:27 +0100 <geekosaur> since GC can't use memory optimally any more
2022-11-18 22:19:34 +0100 <tomsmeding> ah
2022-11-18 22:21:01 +0100 <dminuoso> tomsmeding: Ultimately this problem arises because in monadic parsers there is no barrier between the grammatic parsing and the parser action.
2022-11-18 22:21:27 +0100 <dminuoso> If we did this in a traditional parser generator like happy, the backtracking happens on the BNF specification, but not after monadic actions occur.
2022-11-18 22:21:47 +0100 <tomsmeding> right
2022-11-18 22:22:28 +0100 <dminuoso> I mean it is cute that with a `ParserT (State Int)` you get to freely intermingle them
2022-11-18 22:23:26 +0100 <dminuoso> Mmm Ill get some rest and think about it tomorrow. Good night
2022-11-18 22:24:05 +0100 <tomsmeding> good night :)
2022-11-18 22:26:52 +0100Everything(~Everythin@37.115.210.35) (Quit: leaving)
2022-11-18 22:26:53 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:89a4:6d1:4909:326f) (Remote host closed the connection)
2022-11-18 22:33:28 +0100xilo(~yourname@84.32.165.17)
2022-11-18 22:34:16 +0100 <tomsmeding> dminuoso: seems to work https://paste.tomsmeding.com/ySfezf4q
2022-11-18 22:36:29 +0100azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
2022-11-18 22:36:49 +0100gmg(~user@user/gehmehgeh)
2022-11-18 22:39:44 +0100AdonisExberger(~Adonis-Ex@176.54.36.182) (Quit: Going offline, see ya! (www.adiirc.com))
2022-11-18 22:40:15 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:89a4:6d1:4909:326f)
2022-11-18 22:43:16 +0100 <Xeroine> Data constructors and values are interchangeable/the same thing, right? Is that the case always?
2022-11-18 22:43:33 +0100irrgit__(~irrgit@89.47.234.74)
2022-11-18 22:44:58 +0100Erutuon(~Erutuon@user/erutuon)
2022-11-18 22:45:04 +0100 <geekosaur> if you find yourself playing with Core at some point you'll discover that partially applied data constructors are handled a little differently, but in surface Haskell they are indistinguishable
2022-11-18 22:46:01 +0100 <EvanR_> Xeroine, hold the phone
2022-11-18 22:46:08 +0100 <c_wraith> Data constructors are values, but not all values are data constructors
2022-11-18 22:46:12 +0100EvanR_EvanR
2022-11-18 22:46:14 +0100 <EvanR> yeah, that
2022-11-18 22:46:32 +0100 <EvanR> functions don't have a data constructor in haskell
2022-11-18 22:46:54 +0100irrgit_(~irrgit@89.47.234.74) (Ping timeout: 256 seconds)
2022-11-18 22:47:18 +0100 <geekosaur> also underneath a literal number isn't a data constructor, it's application of a function. but haskell tries hard to pretend they are
2022-11-18 22:47:49 +0100irrgit_(~irrgit@89.47.234.74)
2022-11-18 22:48:56 +0100 <Xeroine> geekosaur: isn't a literal number just a nullary data constructor which is a constant which is a value?
2022-11-18 22:48:58 +0100 <c_wraith> I'd even argue that `Just' is a data constructor, but `Just ()` isn't. Data constructors are things that can be atoms of a pattern match.
2022-11-18 22:49:22 +0100 <geekosaur> Xeroine, no. literal numbers are handled specially
2022-11-18 22:49:33 +0100 <geekosaur> :t 5
2022-11-18 22:49:34 +0100 <lambdabot> Num p => p
2022-11-18 22:49:44 +0100irrgit__(~irrgit@89.47.234.74) (Ping timeout: 256 seconds)
2022-11-18 22:50:09 +0100 <Xeroine> it has a Num class type constraint, does that mean it's not a data constructor?
2022-11-18 22:50:19 +0100 <geekosaur> underneath, this is compiled as `fromInteger <hardcoded Integer literal>`
2022-11-18 22:50:46 +0100 <geekosaur> floating point literals do something similar but using `fromRational`
2022-11-18 22:50:51 +0100 <geekosaur> :t 5.0
2022-11-18 22:50:52 +0100 <lambdabot> Fractional p => p
2022-11-18 22:50:56 +0100 <Xeroine> oh right I've heard of fromInteger but didn't read much what it does
2022-11-18 22:52:34 +0100 <geekosaur> that said, a Char literal is compiled to `C# <ordinal of character>#` so it is a normal data constructor
2022-11-18 22:55:47 +0100 <geekosaur> (the #s there require the MagicHash extension, otherwise # is an ordinary operator character)
2022-11-18 22:58:00 +0100 <Xeroine> what does the :% operator do? it's used a lot in https://hackage.haskell.org/package/base-4.9.0.0/docs/src/GHC.Real.html#fromIntegral and in the fromInteger definition as well
2022-11-18 22:58:48 +0100 <mauke> data Ratio a = !a :% !a deriving (Eq)
2022-11-18 22:58:51 +0100 <geekosaur> it's the raw constructor for a Rational
2022-11-18 22:58:53 +0100 <mauke> data constructor
2022-11-18 22:59:00 +0100 <EvanR> think of Functional p => p as like actually a function taking a dictionary, handled behind the scenes
2022-11-18 22:59:21 +0100 <EvanR> nothing happens until something provides the implementation of Functional p
2022-11-18 22:59:28 +0100 <EvanR> er Fractional
2022-11-18 23:03:22 +0100 <EvanR> for instance, how to convert 5.0 to p
2022-11-18 23:05:53 +0100nate4(~nate@98.45.169.16)
2022-11-18 23:09:23 +0100beteigeuze(~Thunderbi@bl14-81-220.dsl.telepac.pt)
2022-11-18 23:10:10 +0100 <Xeroine> geekosaur: does raw mean it's somehow special? I saw "data Ratio a = !a :% !a deriving (Eq)" as well but I don't understand :% in that context either
2022-11-18 23:10:42 +0100nate4(~nate@98.45.169.16) (Ping timeout: 256 seconds)
2022-11-18 23:11:06 +0100 <geekosaur> that just defines :% as an infix data constructor (all infix data constructors must start with a colon)
2022-11-18 23:11:40 +0100 <geekosaur> it's "raw" because Ratio wants to have normalized values, whereas a data constructor takes what it's given
2022-11-18 23:12:18 +0100 <geekosaur> so we actually construct Rationals with % instead of :%, and % normalizes the values before using :% to create the actual value
2022-11-18 23:12:32 +0100 <geekosaur> (% is therefore called a "smart constructor")
2022-11-18 23:12:32 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:89a4:6d1:4909:326f) (Remote host closed the connection)
2022-11-18 23:12:38 +0100beteigeuze(~Thunderbi@bl14-81-220.dsl.telepac.pt) (Client Quit)
2022-11-18 23:12:58 +0100beteigeuze(~Thunderbi@bl14-81-220.dsl.telepac.pt)
2022-11-18 23:13:29 +0100mncheck(~mncheck@193.224.205.254) (Ping timeout: 268 seconds)
2022-11-18 23:14:24 +0100 <Xeroine> ah okay
2022-11-18 23:14:40 +0100 <geekosaur> the "must start with a colon" thing is because of pattern matching, which has to tell the difference between constructors and variables. for normal constructors it uses case, which is why all normal data constructors start with uppercase
2022-11-18 23:14:56 +0100 <geekosaur> but there's no such thing as an "uppercase symbol", so the prefix colon is used instead
2022-11-18 23:15:44 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:89a4:6d1:4909:326f)
2022-11-18 23:17:56 +0100michalz(~michalz@185.246.207.203) (Remote host closed the connection)
2022-11-18 23:20:54 +0100chomwitt(~chomwitt@2a02:587:7a0a:c00:1ac0:4dff:fedb:a3f1) (Ping timeout: 256 seconds)
2022-11-18 23:22:32 +0100chromoblob(~user@37.113.164.122)
2022-11-18 23:27:03 +0100euandreh(~Thunderbi@189.40.77.30) (Ping timeout: 268 seconds)
2022-11-18 23:27:09 +0100euandreh2(~Thunderbi@179.214.113.107)
2022-11-18 23:28:50 +0100accord(uid568320@id-568320.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
2022-11-18 23:29:26 +0100euandreh2euandreh
2022-11-18 23:30:58 +0100libertyprime(~libertypr@118-92-78-165.dsl.dyn.ihug.co.nz) (Quit: leaving)
2022-11-18 23:32:35 +0100chromoblob(~user@37.113.164.122) (Ping timeout: 268 seconds)
2022-11-18 23:33:56 +0100gurkenglas(~gurkengla@p548ac72e.dip0.t-ipconnect.de) (Ping timeout: 256 seconds)
2022-11-18 23:38:15 +0100Guest99(~Guest99@2607:fb91:30b:a443:3fd:394e:ecd:5968)
2022-11-18 23:38:27 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-11-18 23:38:50 +0100 <Guest99> Hi.
2022-11-18 23:40:38 +0100takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2022-11-18 23:41:59 +0100coot(~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
2022-11-18 23:46:27 +0100cfricke(~cfricke@user/cfricke) (Quit: WeeChat 3.7.1)
2022-11-18 23:47:34 +0100bgs(~bgs@212-85-160-171.dynamic.telemach.net) (Remote host closed the connection)
2022-11-18 23:48:20 +0100 <sclv> let me mention because someone asked about arch and dynamic stuff earlier -- this pending pr will hopefully make the dynamic-only story supported a bit better in cabal, although i still don't like that story :-P https://github.com/haskell/cabal/pull/8461
2022-11-18 23:48:23 +0100Guest99(~Guest99@2607:fb91:30b:a443:3fd:394e:ecd:5968) (Quit: Client closed)
2022-11-18 23:48:26 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-11-18 23:49:22 +0100Guest99(~Guest99@2607:fb91:30b:a443:3fd:394e:ecd:5968)
2022-11-18 23:50:34 +0100titibandit(~titibandi@xdsl-87-78-52-100.nc.de)
2022-11-18 23:50:45 +0100ChaiTRex(~ChaiTRex@user/chaitrex) (Remote host closed the connection)
2022-11-18 23:50:52 +0100 <sclv> EvanR: ^^
2022-11-18 23:51:47 +0100ChaiTRex(~ChaiTRex@user/chaitrex)
2022-11-18 23:54:34 +0100 <Guest99> I'm learning Agda by trying to imitate the Haskell code from the book "Discrete Mathematics Using a Computer". I'm trying to implement list comprehension in Agda and I would like to find the source code for the Haskell (..) operator. I haven't been able to find it anywhere. Not Hoogle, not Google, not the GHC docs, not in the Haskell docs! I'm sure
2022-11-18 23:54:34 +0100 <Guest99> I'm just missing something obvious. Would you please be so kind as to point me to the source code for the (..) operator, i.e., [0..3] returns [1,2,3] ? Thanks!
2022-11-18 23:55:17 +0100 <geekosaur> it's not an operator, it's special syntax. [x .. y] expands to `enumFromTo x y`
2022-11-18 23:55:17 +0100chele(~chele@user/chele) (Remote host closed the connection)
2022-11-18 23:56:02 +0100 <geekosaur> `[x, y .. z]` is `enumFromThenTo x y z`
2022-11-18 23:56:16 +0100 <geekosaur> `[x ..]` is `enumFrom x`
2022-11-18 23:56:59 +0100Guest99(~Guest99@2607:fb91:30b:a443:3fd:394e:ecd:5968) (Quit: Client closed)
2022-11-18 23:57:23 +0100 <geekosaur> all the list-associated syntax in Haskell is hardwired into the compiler; a list "natively" uses the (:) constructor and `[]` for end-of-list
2022-11-18 23:57:40 +0100 <geekosaur> didn't stick around long, did they? sigh
2022-11-18 23:58:25 +0100Guest99(~Guest99@2607:fb91:30b:a443:3fd:394e:ecd:5968)