2022/02/19

2022-02-19 00:03:01 +0100cosimone(~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Quit: ERC (IRC client for Emacs 27.1))
2022-02-19 00:03:14 +0100acidjnk(~acidjnk@p200300d0c71a5a00cca7d468eb16bc46.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2022-02-19 00:03:49 +0100alp(~alp@user/alp)
2022-02-19 00:04:06 +0100wonko(~wjc@user/wonko) (Ping timeout: 252 seconds)
2022-02-19 00:04:50 +0100cheater(~Username@user/cheater)
2022-02-19 00:06:16 +0100jao(~jao@static-68-235-44-54.cust.tzulo.com)
2022-02-19 00:06:24 +0100c209e6dc-4d76-47(~aditya@2601:249:4300:1296:195:dac6:592c:a55a) (Quit: Konversation terminated!)
2022-02-19 00:06:58 +0100acidjnk_new(~acidjnk@p200300d0c71a5a00a926c52c5a33de35.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2022-02-19 00:07:12 +0100wonko(~wjc@user/wonko)
2022-02-19 00:07:17 +0100CiaoSen(~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
2022-02-19 00:07:30 +0100alx741(~alx741@157.100.197.240)
2022-02-19 00:07:50 +0100Tuplanolla(~Tuplanoll@91-159-69-98.elisa-laajakaista.fi) (Quit: Leaving.)
2022-02-19 00:10:50 +0100prolic(~prolic@181.122.131.227) (Remote host closed the connection)
2022-02-19 00:11:13 +0100prolic(~prolic@181.122.131.227)
2022-02-19 00:11:42 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 00:13:14 +0100Null_A(~null_a@2601:645:8700:2290:890f:d3a0:aab0:f3f)
2022-02-19 00:15:19 +0100burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk) (Remote host closed the connection)
2022-02-19 00:15:27 +0100jao(~jao@static-68-235-44-54.cust.tzulo.com) (Remote host closed the connection)
2022-02-19 00:16:03 +0100romesrf(~romes@44.190.189.46.rev.vodafone.pt) (Quit: WeeChat 3.4)
2022-02-19 00:17:09 +0100TonyStone(~TonyStone@2603-7080-8607-c36a-b0ed-1a92-719b-f6c2.res6.spectrum.com)
2022-02-19 00:17:14 +0100hueso(~root@user/hueso)
2022-02-19 00:17:59 +0100Null_A(~null_a@2601:645:8700:2290:890f:d3a0:aab0:f3f) (Ping timeout: 256 seconds)
2022-02-19 00:18:24 +0100wonko-(~wjc@user/wonko) (Ping timeout: 252 seconds)
2022-02-19 00:19:07 +0100wonko(~wjc@user/wonko) (Ping timeout: 256 seconds)
2022-02-19 00:20:17 +0100wonko_(~wjc@2a0e:1c80:11::50) (Ping timeout: 240 seconds)
2022-02-19 00:21:32 +0100bontaq(~user@ool-45779fe5.dyn.optonline.net)
2022-02-19 00:22:23 +0100euandreh(~euandreh@2804:14c:33:9fe5:41b:9f3:a75a:9b8b)
2022-02-19 00:24:52 +0100 <prolic> I still have this problem with stack, stack build works just fine, but stack test fails during the build process, the linker cannot find the c-lib apperently (this one that just worked fine using stack build). I have an open issue here https://github.com/prolic/secp256k1-schnorr/issues/1#issuecomment-1044972716 giving a bit more details about how the config files look like, etc. I hope someone can help me out.
2022-02-19 00:25:32 +0100jao(~jao@static-68-235-44-54.cust.tzulo.com)
2022-02-19 00:25:32 +0100zincy_(~zincy@2a00:23c8:970c:4801:39f9:90f7:922:e73b)
2022-02-19 00:29:10 +0100prolic(~prolic@181.122.131.227) (Remote host closed the connection)
2022-02-19 00:29:28 +0100prolic(~prolic@181.122.131.227)
2022-02-19 00:29:57 +0100machinedgod(~machinedg@24.105.81.50) (Ping timeout: 272 seconds)
2022-02-19 00:30:00 +0100alx741(~alx741@157.100.197.240)
2022-02-19 00:31:22 +0100kraftwerk28(~kraftwerk@178.62.210.83)
2022-02-19 00:33:17 +0100yauhsien(~yauhsien@61-231-37-106.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
2022-02-19 00:33:21 +0100jackalope(~jackalope@user/jackal0pe)
2022-02-19 00:33:35 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 00:34:33 +0100jackalope(~jackalope@user/jackal0pe) (Client Quit)
2022-02-19 00:34:48 +0100jackalope(~jackalope@user/jackal0pe)
2022-02-19 00:35:24 +0100jackalope(~jackalope@user/jackal0pe) (Client Quit)
2022-02-19 00:35:38 +0100jackalope(~jackalope@user/jackal0pe)
2022-02-19 00:36:17 +0100chomwitt(~chomwitt@2a02:587:dc15:800:53f7:4b4c:ef86:ecad) (Ping timeout: 240 seconds)
2022-02-19 00:37:36 +0100alMalsamo(~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
2022-02-19 00:38:31 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 00:38:37 +0100prolic(~prolic@181.122.131.227) (Ping timeout: 256 seconds)
2022-02-19 00:39:15 +0100jackalope(~jackalope@user/jackal0pe) (Client Quit)
2022-02-19 00:42:55 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
2022-02-19 00:43:22 +0100 <shiraeeshi> prolic: at risk of stating the obvious may I remind you that "executable" and "test" may have different dependencies in configs
2022-02-19 00:47:39 +0100burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk)
2022-02-19 00:48:11 +0100Null_A(~null_a@2601:645:8700:2290:890f:d3a0:aab0:f3f)
2022-02-19 00:48:55 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-02-19 00:49:06 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Client Quit)
2022-02-19 00:49:23 +0100jgeerds(~jgeerds@55d4b9df.access.ecotel.net) (Ping timeout: 256 seconds)
2022-02-19 00:50:15 +0100alx741(~alx741@181.199.42.143)
2022-02-19 00:52:42 +0100Null_A(~null_a@2601:645:8700:2290:890f:d3a0:aab0:f3f) (Ping timeout: 260 seconds)
2022-02-19 00:52:47 +0100dolio(~dolio@130.44.130.54)
2022-02-19 00:53:49 +0100alx741(~alx741@181.199.42.143) (Read error: Connection reset by peer)
2022-02-19 00:58:42 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-02-19 00:59:43 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Ping timeout: 272 seconds)
2022-02-19 01:02:26 +0100alMalsamo(~alMalsamo@gateway/tor-sasl/almalsamo)
2022-02-19 01:04:50 +0100 <shapr> Anyone want to create intro music for the cofree coffee podcast? Preferably in Haskell?
2022-02-19 01:10:31 +0100alx741(~alx741@157.100.197.240)
2022-02-19 01:13:52 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 01:16:38 +0100Topsi(~Tobias@dyndsl-095-033-091-109.ewe-ip-backbone.de)
2022-02-19 01:19:18 +0100chenqisu1(~chenqisu1@183.217.200.249)
2022-02-19 01:20:57 +0100jackalope(~jackalope@50-24-138-131.bcstcmta02.res.dyn.suddenlink.net)
2022-02-19 01:21:32 +0100jackalope(~jackalope@50-24-138-131.bcstcmta02.res.dyn.suddenlink.net) (Client Quit)
2022-02-19 01:21:48 +0100jackalope(~jackalope@50-24-138-131.bcstcmta02.res.dyn.suddenlink.net)
2022-02-19 01:21:59 +0100Null_A(~null_a@2601:645:8700:2290:890f:d3a0:aab0:f3f)
2022-02-19 01:24:13 +0100briandaed(~root@109.95.142.92.r.toneticgroup.pl) (Ping timeout: 256 seconds)
2022-02-19 01:25:02 +0100lbseale(~ep1ctetus@user/ep1ctetus) (Ping timeout: 272 seconds)
2022-02-19 01:25:11 +0100prolic(~prolic@181.122.131.227)
2022-02-19 01:26:17 +0100Null_A(~null_a@2601:645:8700:2290:890f:d3a0:aab0:f3f) (Ping timeout: 240 seconds)
2022-02-19 01:28:13 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-02-19 01:28:13 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-02-19 01:28:13 +0100wroathe(~wroathe@user/wroathe)
2022-02-19 01:30:46 +0100alx741(~alx741@157.100.197.240)
2022-02-19 01:32:36 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 240 seconds)
2022-02-19 01:34:02 +0100machinedgod(~machinedg@24.105.81.50)
2022-02-19 01:34:08 +0100zincy_(~zincy@2a00:23c8:970c:4801:39f9:90f7:922:e73b) (Remote host closed the connection)
2022-02-19 01:35:30 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 01:36:47 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2022-02-19 01:38:28 +0100prolic(~prolic@181.122.131.227) (Remote host closed the connection)
2022-02-19 01:38:48 +0100prolic(~prolic@181.122.131.227)
2022-02-19 01:40:28 +0100prolic(~prolic@181.122.131.227) (Remote host closed the connection)
2022-02-19 01:40:32 +0100nabaiste^(~nabaiste@50.233.120.162)
2022-02-19 01:40:46 +0100prolic(~prolic@181.122.131.227)
2022-02-19 01:43:44 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:b580:ab83:1b56:af3b) (Remote host closed the connection)
2022-02-19 01:44:01 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-02-19 01:45:04 +0100azimut(~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
2022-02-19 01:45:29 +0100shiraeeshi(~shiraeesh@109.166.56.8) (Remote host closed the connection)
2022-02-19 01:45:30 +0100azimut(~azimut@gateway/tor-sasl/azimut)
2022-02-19 01:47:10 +0100prolic(~prolic@181.122.131.227) (Remote host closed the connection)
2022-02-19 01:47:28 +0100prolic(~prolic@181.122.131.227)
2022-02-19 01:51:26 +0100prolic(~prolic@181.122.131.227) (Remote host closed the connection)
2022-02-19 01:51:42 +0100alx741(~alx741@157.100.197.240)
2022-02-19 01:51:45 +0100prolic(~prolic@181.122.131.227)
2022-02-19 01:53:26 +0100prolic(~prolic@181.122.131.227) (Remote host closed the connection)
2022-02-19 01:53:43 +0100prolic(~prolic@181.122.131.227)
2022-02-19 01:55:39 +0100prolic(~prolic@181.122.131.227) (Remote host closed the connection)
2022-02-19 01:55:59 +0100prolic(~prolic@181.122.131.227)
2022-02-19 01:58:13 +0100jtomas(~jtomas@210.red-88-24-179.staticip.rima-tde.net) (Ping timeout: 256 seconds)
2022-02-19 01:58:19 +0100theproffesor(~theproffe@user/theproffesor) (Read error: Connection reset by peer)
2022-02-19 01:59:20 +0100rekahsoft(~rekahsoft@cpe0008a20f982f-cm64777d666260.cpe.net.cable.rogers.com)
2022-02-19 01:59:33 +0100jonathanx(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Remote host closed the connection)
2022-02-19 01:59:51 +0100jonathanx(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
2022-02-19 01:59:51 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 02:04:06 +0100alp(~alp@user/alp) (Ping timeout: 260 seconds)
2022-02-19 02:06:26 +0100prolic(~prolic@181.122.131.227) (Remote host closed the connection)
2022-02-19 02:06:43 +0100dhil(~dhil@cpc103052-sgyl39-2-0-cust260.18-2.cable.virginm.net) (Ping timeout: 256 seconds)
2022-02-19 02:06:44 +0100prolic(~prolic@181.122.131.227)
2022-02-19 02:07:33 +0100 <prolic> resolved it, FYI
2022-02-19 02:09:51 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-02-19 02:10:37 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
2022-02-19 02:12:56 +0100prolic(~prolic@181.122.131.227) (Remote host closed the connection)
2022-02-19 02:14:25 +0100merijn(~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl)
2022-02-19 02:14:48 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-02-19 02:14:48 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-02-19 02:14:48 +0100wroathe(~wroathe@user/wroathe)
2022-02-19 02:16:43 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8)
2022-02-19 02:16:44 +0100alx741(~alx741@157.100.197.240)
2022-02-19 02:19:31 +0100 <sm> how, prolic ?
2022-02-19 02:20:33 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 02:20:37 +0100jle`(~jle`@cpe-23-240-75-236.socal.res.rr.com) (Ping timeout: 256 seconds)
2022-02-19 02:21:57 +0100shiraeeshi(~shiraeesh@109.166.56.8)
2022-02-19 02:22:22 +0100jle`(~jle`@cpe-23-240-75-236.socal.res.rr.com)
2022-02-19 02:26:16 +0100fresheyeball(~fresheyeb@c-76-25-93-164.hsd1.co.comcast.net)
2022-02-19 02:26:53 +0100 <fresheyeball> It is a member of the hidden package ‘ghc-lib-parser-9.2.1.20211101’.
2022-02-19 02:26:55 +0100 <fresheyeball> Perhaps you need to add ‘ghc-lib-parser’ to the build-depends in your .cabal file.
2022-02-19 02:26:58 +0100 <fresheyeball> but it IS there
2022-02-19 02:27:01 +0100 <fresheyeball> it's in the .cabal file
2022-02-19 02:27:07 +0100 <fresheyeball> This happens every so often
2022-02-19 02:27:26 +0100 <fresheyeball> I forget how to resolve
2022-02-19 02:27:32 +0100 <fresheyeball> I did an rm -rf dist*
2022-02-19 02:27:34 +0100 <fresheyeball> cabal clean
2022-02-19 02:27:36 +0100 <fresheyeball> all that stuff
2022-02-19 02:27:38 +0100 <fresheyeball> no dice
2022-02-19 02:31:36 +0100 <sm> fresheyeball: is it in the build-depends for each component in the cabal file that needs it ?
2022-02-19 02:36:17 +0100 <Artem[m]> fresheyeball: may be helpful to post (a link to) the whole .cabal file here
2022-02-19 02:36:45 +0100alx741(~alx741@157.100.197.240)
2022-02-19 02:38:32 +0100mshiraeeshi(~shiraeesh@109.166.56.8)
2022-02-19 02:38:35 +0100shiraeeshi(~shiraeesh@109.166.56.8) (Read error: No route to host)
2022-02-19 02:38:53 +0100mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475)
2022-02-19 02:45:13 +0100 <DigitalKiwi> hi fresheyeball
2022-02-19 02:45:30 +0100 <fresheyeball> DigitalKiwi: howdy!
2022-02-19 02:45:35 +0100 <fresheyeball> sm: http://ix.io/3Q08
2022-02-19 02:45:38 +0100 <fresheyeball> Artem[m]: ^
2022-02-19 02:46:58 +0100 <sm> no library component.. is that legal ?
2022-02-19 02:47:27 +0100 <sm> I guess it is
2022-02-19 02:48:12 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 02:48:14 +0100 <sm> fresheyeball: and if you like, paste the full cabal build log
2022-02-19 02:48:23 +0100merijn(~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
2022-02-19 02:48:50 +0100cynomys(~cynomys@user/cynomys)
2022-02-19 02:49:57 +0100 <fresheyeball> sm: what do you mean?
2022-02-19 02:50:46 +0100 <fresheyeball> http://ix.io/3Q0a
2022-02-19 02:50:54 +0100 <fresheyeball> that maybe?
2022-02-19 02:51:28 +0100 <fresheyeball> now I got 2 errors
2022-02-19 02:54:21 +0100cynomys(~cynomys@user/cynomys) (Ping timeout: 272 seconds)
2022-02-19 02:54:49 +0100cynomys(~cynomys@user/cynomys)
2022-02-19 02:56:16 +0100 <octeep[m]> Is there a way to catch exception thrown by Text.Printf (I have to use something similar to UNIX printf). I've tried handle and try from Control.Exception, but none of it seems to catch the exception at all.
2022-02-19 02:56:56 +0100 <FernandoChu[m]> is there a way to hide the implementation of type classes for `[]` so I can make my own?
2022-02-19 02:57:37 +0100lottaquestions(~nick@2607:fa49:5041:a200:c52d:7d43:3699:c92e) (Quit: Konversation terminated!)
2022-02-19 02:57:47 +0100 <fresheyeball> FernandoChu[m]: -NoImplicitPrelude
2022-02-19 02:57:56 +0100 <fresheyeball> then import what you need only
2022-02-19 03:02:35 +0100machinedgod(~machinedg@24.105.81.50) (Ping timeout: 272 seconds)
2022-02-19 03:02:39 +0100jao(~jao@static-68-235-44-54.cust.tzulo.com) (Remote host closed the connection)
2022-02-19 03:03:33 +0100jonathanx(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Remote host closed the connection)
2022-02-19 03:03:51 +0100jonathanx(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
2022-02-19 03:04:04 +0100 <Artem[m]> Fernando Chu: I hope you're asking for purely educational purposes. In practice, you'd wrap [] into a newtype and define your instances for it.
2022-02-19 03:04:39 +0100 <Artem[m]> fresheyeball: looks legit; trying it locally. No bounds on packages are a bit suspicious though
2022-02-19 03:06:01 +0100 <FernandoChu[m]> <fresheyeball> "then import what you need only" <- thanks, but now it's complaining that it exits in GHC.Base, I also did `import GHC.Base ()` but I get the same error
2022-02-19 03:06:12 +0100 <FernandoChu[m]> Artem[m]: haha yeah, don't worry
2022-02-19 03:06:21 +0100alx741(~alx741@181.199.42.143)
2022-02-19 03:06:25 +0100 <jackdk> Even if you import no names from a module, you still get instances
2022-02-19 03:06:36 +0100 <fresheyeball> FernandoChu[m]:oh right I forgot you still get the instances
2022-02-19 03:07:27 +0100 <fresheyeball> FernandoChu[m]: maybe just write your own classes?
2022-02-19 03:07:44 +0100 <fresheyeball> instance Functor' f where fmap' :: ...
2022-02-19 03:08:08 +0100 <FernandoChu[m]> according to this I can't hide the instances damn https://stackoverflow.com/questions/54835367/hiding-typeclass-instance-declarations-while-importin…
2022-02-19 03:08:17 +0100 <Artem[m]> guys, why getting out of your way instead of simply newtype...
2022-02-19 03:08:27 +0100 <sm> fresheyeball: two problem signs are: 1. "Build profile: -w ghc-8.10.7" vs "ghc-lib-9.2.1.20211101" (ghc version mismatch ?) and 2. "The package list for 'hackage.haskell.org' is 97 days old."
2022-02-19 03:08:40 +0100 <FernandoChu[m]> the problem with making my own is then I'd have to remake all that depends on Functor too
2022-02-19 03:08:57 +0100 <fresheyeball> FernandoChu[m]: backpack?
2022-02-19 03:09:10 +0100 <fresheyeball> sm: interesting
2022-02-19 03:09:13 +0100 <FernandoChu[m]> Artem[m]: yeah I'll do that, just was wondering if there was another way
2022-02-19 03:09:13 +0100 <Artem[m]> sm: in theory, it's the whole deal of `ghc-lib` that you're no longer bound to the host GHC
2022-02-19 03:09:23 +0100 <sm> ha
2022-02-19 03:09:28 +0100 <fresheyeball> ok
2022-02-19 03:11:40 +0100 <fresheyeball> looks like a GHC version mismatch
2022-02-19 03:13:32 +0100 <FernandoChu[m]> also, what does a `!` before a type means?
2022-02-19 03:20:25 +0100 <sm> Fernando Chu: evaluate it (somewhat) strictly
2022-02-19 03:21:25 +0100 <FernandoChu[m]> sm: thanks, could I get some kind of name for that to search references? I haven't been able to find it
2022-02-19 03:21:41 +0100 <sm> "bang notation" maybe
2022-02-19 03:21:59 +0100 <sm> "strictness annotations"
2022-02-19 03:22:18 +0100 <sm> https://downloads.haskell.org/ghc/latest/docs/html/users_guide/search.html?q=strictness&check_keyw…
2022-02-19 03:23:48 +0100 <FernandoChu[m]> thank you
2022-02-19 03:24:29 +0100alx741(~alx741@181.199.42.143) (Read error: Connection reset by peer)
2022-02-19 03:26:09 +0100pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.4)
2022-02-19 03:27:13 +0100dyeplexer(~dyeplexer@user/dyeplexer)
2022-02-19 03:27:17 +0100pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2022-02-19 03:29:42 +0100pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Client Quit)
2022-02-19 03:33:13 +0100 <Artem[m]> fresheyeball: just finished building with your cabal file and a Main that has just two imports indicated in the error message you posted: it has built successfully with GHC 8.10.7 and ghc-lib-(parser-)9.2.1.20220109. The problem is on your end!.. I know, this is not helpful. But at least the cabal file you posted seems fine.
2022-02-19 03:34:32 +0100justGhost(~justache@user/justache) (Read error: Connection reset by peer)
2022-02-19 03:35:00 +0100cynomys(~cynomys@user/cynomys) (Ping timeout: 240 seconds)
2022-02-19 03:35:12 +0100 <sm> oh.. what about a cabal update then ?
2022-02-19 03:35:22 +0100fresheyeball(~fresheyeb@c-76-25-93-164.hsd1.co.comcast.net) (Quit: WeeChat 3.3)
2022-02-19 03:35:30 +0100justGhost(~justache@user/justache)
2022-02-19 03:35:48 +0100notzmv(~zmv@user/notzmv) (Ping timeout: 240 seconds)
2022-02-19 03:35:50 +0100harveypwca(~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67)
2022-02-19 03:36:24 +0100 <sm> fresh out of eyeballs. we'll never know.
2022-02-19 03:37:08 +0100unyu(~pyon@user/pyon) (Quit: brb)
2022-02-19 03:39:19 +0100 <Artem[m]> yes, a reasonably recent cabal may help
2022-02-19 03:40:38 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2022-02-19 03:41:36 +0100alx741(~alx741@157.100.197.240)
2022-02-19 03:41:52 +0100cynomys(~cynomys@user/cynomys)
2022-02-19 03:41:53 +0100Topsi(~Tobias@dyndsl-095-033-091-109.ewe-ip-backbone.de) (Read error: Connection reset by peer)
2022-02-19 03:42:30 +0100tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net)
2022-02-19 03:46:16 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 03:50:14 +0100 <sm> that too, but I meant just `cabal update`
2022-02-19 03:50:57 +0100xff0x(~xff0x@2001:1a81:5290:8400:55c0:f8c1:431:6807) (Ping timeout: 240 seconds)
2022-02-19 03:53:05 +0100xff0x(~xff0x@2001:1a81:52c9:2700:23a4:7c27:1274:b7bc)
2022-02-19 03:55:14 +0100 <chronon> How should I verbalise the syntax <- when reading Haskell code out loud, or to myself even?
2022-02-19 03:55:56 +0100 <ski> in list comprehensions, `do'-notation, or pattern guards ?
2022-02-19 03:58:22 +0100 <chronon> I'm just reading a tutorial for the first time so I'm not sure. I've seen <- appearing inside [] and after "do".
2022-02-19 03:58:48 +0100 <ski> "inside []" would be list comprehensions
2022-02-19 04:00:01 +0100 <chronon> What does <- mean, and how would you read this to yourself?
2022-02-19 04:00:22 +0100 <ski> > [(x,y) | x <- [0 .. 3],y <- [0 .. x]] -- the list of all pairs `(x,y)', where `x' is drawn from the list `[0 .. 3]' (`x' lies inbetween `0' and `3'), and `y' is drawn from the list `[0 .. x]' (`y' lies inbetween `0' and `x')
2022-02-19 04:00:24 +0100 <lambdabot> [(0,0),(1,0),(1,1),(2,0),(2,1),(2,2),(3,0),(3,1),(3,2),(3,3)]
2022-02-19 04:01:13 +0100 <chronon> Ah, so "drawn from" is how to read <-
2022-02-19 04:01:47 +0100 <ski> `x <- [0 .. 3]' is called a "generator". it generates possible values for `x', by drawing them from the list
2022-02-19 04:01:50 +0100 <chronon> Same after "do", right?
2022-02-19 04:01:56 +0100 <ski> more or less
2022-02-19 04:02:06 +0100 <chronon> Ok, thanks.
2022-02-19 04:02:08 +0100 <ski> although that's more general (doesn't have to be about lists)
2022-02-19 04:02:46 +0100alx741(~alx741@157.100.197.240)
2022-02-19 04:02:57 +0100 <ski> > do x <- [0 .. 3],y <- [0 .. x]; return (x,y) -- select `x' nondeterministically from `[0 .. 3]', and `y' from `[0 .. x]', yielding `(x,y)' as a result
2022-02-19 04:02:58 +0100 <lambdabot> <hint>:1:17: error: parse error on input ‘,’
2022-02-19 04:03:00 +0100 <chronon> It might seem like an odd question but reading example code without being able to verbalise what I'm reading proved to be a bit disorientating.
2022-02-19 04:03:04 +0100 <ski> > do x <- [0 .. 3]; y <- [0 .. x]; return (x,y) -- select `x' nondeterministically from `[0 .. 3]', and `y' from `[0 .. x]', yielding `(x,y)' as a result
2022-02-19 04:03:06 +0100 <lambdabot> [(0,0),(1,0),(1,1),(2,0),(2,1),(2,2),(3,0),(3,1),(3,2),(3,3)]
2022-02-19 04:03:56 +0100 <ski> more generally, in `do', you could read `x <- act' as "bind `x' to the result of executing the action `act'"
2022-02-19 04:04:25 +0100 <ski> (in case of lists, "executing an action" amounts to selecting an element from a list in all possible ways)
2022-02-19 04:05:10 +0100cynomys(~cynomys@user/cynomys) (Ping timeout: 256 seconds)
2022-02-19 04:05:17 +0100Ariakenom_(~Ariakenom@h-82-196-111-63.NA.cust.bahnhof.se) (Ping timeout: 272 seconds)
2022-02-19 04:05:29 +0100 <chronon> So that's similar in concept to an assignment in other languages, I guess.
2022-02-19 04:05:32 +0100 <ski> no
2022-02-19 04:05:49 +0100 <ski> assignment means *changing* the value which is stored in a location
2022-02-19 04:06:00 +0100 <chronon> Binding names to values is assignment, isn't it?
2022-02-19 04:06:03 +0100 <ski> this is not about changing, this is about binding a new variable to a value
2022-02-19 04:06:08 +0100 <ski> no, it's not
2022-02-19 04:06:16 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 04:06:44 +0100 <ski> in C, `int x = 5;' binds the identifier `x' to a fresh location, and initializes that location to the value `5'
2022-02-19 04:06:55 +0100 <ski> the binding of `x' to that location is immutable, can't be changed
2022-02-19 04:07:02 +0100 <chronon> Ok, I see the distinction you're making. I'll use the word "bind" not "assign".
2022-02-19 04:08:01 +0100 <ski> > do x <- [0 .. 3]; x <- [0 .. x]; return x -- this is not assignment, it is shadowing
2022-02-19 04:08:03 +0100 <lambdabot> [0,0,1,0,1,2,0,1,2,3]
2022-02-19 04:08:58 +0100 <ski> (`<-'-bindings are non-recursive (unless you use the `rec' keyword (extension)))
2022-02-19 04:09:30 +0100 <chronon> Oh, that's over my head. I'll have to read this tutorial first.
2022-02-19 04:09:37 +0100 <chronon> Thanks for now....
2022-02-19 04:10:09 +0100 <ski> > do x <- [0 .. 3]; y <- [0 .. x]; return y -- this is the same thing as just before, only renaming the "inner" `x' to `y'
2022-02-19 04:10:11 +0100 <lambdabot> [0,0,1,0,1,2,0,1,2,3]
2022-02-19 04:11:04 +0100 <ski> chronon : btw, it should be clear that any list comprehension could also alternatively be written using `do', using a very simple rewriting
2022-02-19 04:12:17 +0100 <ski> (in fact, there's even an extension for being able to use list comprehension syntax for arbitrary monads (which you'd often otherwise express using `do'), not just for lists)
2022-02-19 04:13:10 +0100 <ski> anyway, have fun with your Haskell learning :)
2022-02-19 04:13:23 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 04:13:51 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2022-02-19 04:14:09 +0100 <chronon> I'm sure I will. Learning new languages is one of my favourite things to do. :-)
2022-02-19 04:18:12 +0100mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 240 seconds)
2022-02-19 04:19:34 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
2022-02-19 04:19:54 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643)
2022-02-19 04:20:37 +0100mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475)
2022-02-19 04:22:48 +0100alx741(~alx741@181.199.42.143)
2022-02-19 04:25:51 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-02-19 04:26:07 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-02-19 04:26:08 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-02-19 04:26:08 +0100wroathe(~wroathe@user/wroathe)
2022-02-19 04:27:27 +0100td_(~td@94.134.91.32) (Ping timeout: 272 seconds)
2022-02-19 04:28:37 +0100td_(~td@94.134.91.184)
2022-02-19 04:28:38 +0100alx741(~alx741@181.199.42.143) (Read error: Connection reset by peer)
2022-02-19 04:29:17 +0100alx741(~alx741@157.100.197.240)
2022-02-19 04:29:20 +0100cynomys(~cynomys@user/cynomys)
2022-02-19 04:30:19 +0100xkuru(~xkuru@user/xkuru) (Read error: Connection reset by peer)
2022-02-19 04:32:00 +0100 <chronon> In ghci, how do I ask it to show me the current err... "equations" for a given function name?
2022-02-19 04:33:52 +0100mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 250 seconds)
2022-02-19 04:33:53 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 04:36:00 +0100mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475)
2022-02-19 04:38:01 +0100cynomys(~cynomys@user/cynomys) (Ping timeout: 256 seconds)
2022-02-19 04:38:08 +0100 <chronon> I found :show bindings in the :help, but this shows all of the functions I defined, not just those of a given name, and if I append the name to :show bindings I get a syntax error.
2022-02-19 04:42:18 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2022-02-19 04:44:09 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2022-02-19 04:46:16 +0100irishman(~vshev4enk@178.151.117.243)
2022-02-19 04:48:57 +0100mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 240 seconds)
2022-02-19 04:50:15 +0100troydm(~troydm@host-176-37-124-197.b025.la.net.ua) (Ping timeout: 272 seconds)
2022-02-19 04:50:30 +0100irishman(~vshev4enk@178.151.117.243) (Ping timeout: 256 seconds)
2022-02-19 04:50:37 +0100troydm(~troydm@host-176-37-124-197.b025.la.net.ua)
2022-02-19 04:51:21 +0100mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475)
2022-02-19 04:51:42 +0100alx741(~alx741@157.100.197.240)
2022-02-19 04:56:23 +0100 <chronon> Also, the output of :show bindings seems to be the type signature only, rather than the definition.
2022-02-19 04:56:50 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 250 seconds)
2022-02-19 04:57:52 +0100mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds)
2022-02-19 04:59:41 +0100mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475)
2022-02-19 05:00:01 +0100haasn(~nand@haasn.dev) (Quit: ZNC 1.7.5+deb4 - https://znc.in)
2022-02-19 05:00:52 +0100yauhsien(~yauhsien@61-231-37-106.dynamic-ip.hinet.net)
2022-02-19 05:01:15 +0100 <chronon> What am I doing wrong here:
2022-02-19 05:01:15 +0100 <chronon> prod [] = 1
2022-02-19 05:01:15 +0100 <chronon> prod (x:xs) = x * prod xs
2022-02-19 05:01:15 +0100 <chronon> prod [1..5]
2022-02-19 05:01:15 +0100 <chronon> *** Exception: <interactive>:2:1-25: Non-exhaustive patterns in function prod
2022-02-19 05:01:15 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 05:01:23 +0100haasn(~nand@haasn.dev)
2022-02-19 05:01:58 +0100 <dsal> chronon: Are you just pasting those lines into ghci?
2022-02-19 05:02:09 +0100 <chronon> I typed them in.
2022-02-19 05:02:20 +0100 <dsal> Well, same thing. You defined prod, and then you redefined prod.
2022-02-19 05:02:31 +0100 <dsal> ghci is a slightly confusing environment. Better off writing things in a file.
2022-02-19 05:03:05 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-02-19 05:03:05 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-02-19 05:03:05 +0100wroathe(~wroathe@user/wroathe)
2022-02-19 05:03:12 +0100alphabeta(~kilolympu@31.205.200.235) (Quit: Quitting IRC :()
2022-02-19 05:03:21 +0100 <chronon> I thought that the params were pat of the definition and you could define different equations under the same name.
2022-02-19 05:03:34 +0100 <chronon> s/pat/part/
2022-02-19 05:03:58 +0100 <dsal> Yes, but ghci is a different thing.
2022-02-19 05:04:11 +0100 <dsal> If you were doing that in a file, it'd be a lot less confusing.
2022-02-19 05:04:22 +0100 <chronon> Is ghci really no good for this kind of experimentation?
2022-02-19 05:04:24 +0100 <dsal> ghci is good for some kinds of exploration, but it's not a good plcae to write code.
2022-02-19 05:04:37 +0100 <dsal> People don't write code in ghci. :)
2022-02-19 05:04:43 +0100 <chronon> Oh.
2022-02-19 05:05:31 +0100yauhsien(~yauhsien@61-231-37-106.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
2022-02-19 05:06:24 +0100 <chronon> Ok, so what is the most convenient way to experiment while I learn? Do I just put the lines of code in a file and then run ghc filename or something?
2022-02-19 05:07:47 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-02-19 05:10:09 +0100 <ski> use `:r' to reload files into the interactor, after saving in editor
2022-02-19 05:11:08 +0100 <ski> (short for `:reload'. you can also use `:l' (`:load') if you didn't pass the filename when starting the interactor)
2022-02-19 05:12:17 +0100 <ski> anyway, if you define things in a file, then you can define things out of order (use things, then define them later in the file). also recursion (including mutual recursion)
2022-02-19 05:13:19 +0100 <ski> in the interactor, each new binding (potentially) shadows the old. if you want to enter multiple declarations (including defining equations) at the same time, you can start with `:{' and end with `:}' (that would make your `prod' example work)
2022-02-19 05:13:23 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-19 05:13:38 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 05:13:46 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-19 05:13:52 +0100 <ski> (alternatively, you could enter multiple declarations, all in one go, separating them by `;' instead of by newlines)
2022-02-19 05:13:52 +0100 <chronon> Ah, ok, I'll try that. Thanks.
2022-02-19 05:13:59 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 05:14:07 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-19 05:14:17 +0100little_mac(~little_ma@2601:410:4300:3ce0:3581:2989:c5ee:9353) (Quit: Leaving)
2022-02-19 05:14:17 +0100 <chronon> That also sounds convenient.
2022-02-19 05:14:19 +0100 <ski> but, for anything more complicated than simple stuff, it's more convenient to simply type it up into your editor of choice
2022-02-19 05:14:22 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 05:14:29 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-19 05:14:43 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 05:14:50 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-19 05:15:05 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 05:15:12 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-19 05:15:28 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 05:15:30 +0100 <ski> there's also an `:e' (`:edit') command, which you could set up to start Vi or Emacs (or Emacsclient) or something. when that editor command terminates, the interactor will (iirc) automatically reload any loaded files that you've changed
2022-02-19 05:15:34 +0100little_mac(~little_ma@2601:410:4300:3ce0:24a8:40ee:fe3d:56e6)
2022-02-19 05:15:35 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-19 05:15:49 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 05:15:50 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2022-02-19 05:15:56 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-19 05:16:11 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 05:16:13 +0100 <chronon> If I start ghci with the filename containing the two equations of prod, it says: target ‘prod’ is not a module name or a source file
2022-02-19 05:16:18 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-19 05:16:32 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 05:16:33 +0100 <ski> try `ghci prod.hs' ?
2022-02-19 05:16:39 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-19 05:16:54 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 05:16:57 +0100 <chronon> Oh, it *requires* a .hs extension?
2022-02-19 05:17:01 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-19 05:17:11 +0100 <ski> it takes a filename, yes
2022-02-19 05:17:17 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 05:17:24 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-19 05:17:29 +0100 <chronon> I tend not to use filename extensions on scripts.
2022-02-19 05:17:38 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 05:17:39 +0100alx741(~alx741@157.100.197.240)
2022-02-19 05:17:46 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-19 05:17:46 +0100 <chronon> So I just called the file prod
2022-02-19 05:18:00 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 05:18:07 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-19 05:18:22 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 05:18:29 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-19 05:18:44 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 05:18:51 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-19 05:19:05 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 05:19:12 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-19 05:19:27 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 05:19:34 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-19 05:19:49 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 05:19:56 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-19 05:20:10 +0100 <chronon> I do indeed get different behaviour depending on the filename. Wow, how very MS Windows.
2022-02-19 05:20:10 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 05:20:17 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-19 05:20:32 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 05:20:39 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-19 05:20:44 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 05:20:54 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 05:21:01 +0100 <dsal> Haskell isn't a scripting language, so it's not going to be a problem in the long term.
2022-02-19 05:21:01 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-19 05:21:10 +0100 <dsal> You're optimizing a bit for things that don't come up all that often.
2022-02-19 05:21:16 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 05:21:17 +0100burnsidesLlama(~burnsides@dhcp168-022.wadham.ox.ac.uk) (Remote host closed the connection)
2022-02-19 05:21:23 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-19 05:21:37 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 05:21:44 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-19 05:21:48 +0100 <chronon> Hmmm, probably just my past experience getting in the way.
2022-02-19 05:21:59 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 05:22:06 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-19 05:22:22 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 05:22:29 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-19 05:22:43 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 05:22:50 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-19 05:23:06 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 05:23:07 +0100 <chronon> The super simple two line definition of prod is giving this error as I start ghci on it: Parse error: module header, import declaration or top-level declaration expected.
2022-02-19 05:23:13 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-19 05:23:28 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 05:23:35 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-19 05:23:40 +0100 <chronon> Ah, it's my problem. A typo.
2022-02-19 05:23:50 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 05:23:57 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-19 05:24:12 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 05:24:19 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-19 05:24:34 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 05:24:41 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-19 05:24:57 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 05:25:04 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-19 05:25:18 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 05:25:25 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-19 05:25:40 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 05:25:48 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-19 05:26:02 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 05:26:08 +0100 <chronon> The :e thing seems like the quickest way to work. Thanks.
2022-02-19 05:26:09 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-19 05:26:23 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 05:26:30 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-19 05:26:45 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 05:26:46 +0100 <dsal> It's a good idea to get into the habit of declaring types. It may seem a bit foreign, but types are the things you're mostly going to be reading.
2022-02-19 05:26:49 +0100 <dsal> :t product
2022-02-19 05:26:50 +0100 <lambdabot> (Foldable t, Num a) => t a -> a
2022-02-19 05:26:52 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-19 05:27:06 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 05:27:12 +0100ChanServ+o litharge
2022-02-19 05:27:13 +0100litharge+b lavaman!~lavaman@98.38.249.169$##fix-your-connection
2022-02-19 05:27:13 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-19 05:27:23 +0100litharge-o litharge
2022-02-19 05:28:28 +0100 <chronon> Foldable? Err... I think I need to read more tutorial before getting to that.
2022-02-19 05:28:41 +0100 <ski> product :: [Integer] -> Integer
2022-02-19 05:28:45 +0100 <ski> or
2022-02-19 05:28:54 +0100 <ski> product :: Num a => [a] -> a
2022-02-19 05:29:06 +0100 <ski> is probably nicest to start with
2022-02-19 05:29:30 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2022-02-19 05:30:28 +0100Unicorn_Princess(~Unicorn_P@93-103-228-248.dynamic.t-2.net) (Remote host closed the connection)
2022-02-19 05:30:34 +0100 <ski> (well, s/product/prod/, in your case)
2022-02-19 05:31:37 +0100 <chronon> Ok, that seems to go at the top of the file without causing errors, so I must have understood it well enough.
2022-02-19 05:32:49 +0100 <ski> normally people would put the type signature just before the corresponding defining equations. occasionally, you'll see it appear earlier (e.g. if multiple operations all share the same signature, in which case you can declare them all at once, instead of repeating the signature)
2022-02-19 05:33:14 +0100 <chronon> Ok got it.
2022-02-19 05:33:33 +0100 <ski> sum,prod :: [Integer] -> Integer -- e.g.
2022-02-19 05:34:16 +0100 <ski> btw <https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/ghci.html#modules-vs-filenames>
2022-02-19 05:36:14 +0100unyu(~pyon@user/pyon)
2022-02-19 05:37:21 +0100 <chronon> Ah, thanks.
2022-02-19 05:38:57 +0100Erutuon(~Erutuon@user/erutuon) (Ping timeout: 256 seconds)
2022-02-19 05:39:16 +0100alx741(~alx741@181.199.42.143)
2022-02-19 05:39:25 +0100 <chronon> Taht webpage looks very much like a readthedocs/Sphinx style document. IS that something that can be autogenerated using haddock or similar tool?
2022-02-19 05:41:33 +0100Erutuon(~Erutuon@user/erutuon)
2022-02-19 05:45:19 +0100theproffesor(~theproffe@user/theproffesor)
2022-02-19 05:46:25 +0100 <chronon> Nevermind. Too open kind of question that, I can tell. ;-)
2022-02-19 05:47:03 +0100yauhsien(~yauhsien@61-231-37-106.dynamic-ip.hinet.net)
2022-02-19 05:47:44 +0100waleee(~waleee@h-98-128-229-110.NA.cust.bahnhof.se) (Ping timeout: 256 seconds)
2022-02-19 05:47:51 +0100 <dsal> chronon: Sorry, I'm a bit in and out. I didn't mean to use that exactly. It's a bit too abstract of an example, yeah. but declare the thing you think you want and then try to make it work.
2022-02-19 05:47:52 +0100alx741(~alx741@181.199.42.143) (Read error: Connection reset by peer)
2022-02-19 05:50:21 +0100lagash(lagash@lagash.shelltalk.net) (Quit: ZNC - https://znc.in)
2022-02-19 05:55:13 +0100yauhsien(~yauhsien@61-231-37-106.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-02-19 05:55:16 +0100lagash(lagash@lagash.shelltalk.net)
2022-02-19 05:55:34 +0100 <chronon> np
2022-02-19 05:56:09 +0100yauhsien(~yauhsien@61-231-37-106.dynamic-ip.hinet.net)
2022-02-19 05:57:13 +0100ChanServ+o litharge
2022-02-19 05:57:14 +0100litharge-bo lavaman!~lavaman@98.38.249.169$##fix-your-connection litharge
2022-02-19 05:58:33 +0100mike11(~Mike@user/mike11)
2022-02-19 05:58:39 +0100notzmv(~zmv@user/notzmv)
2022-02-19 05:59:11 +0100 <ski> it is also possible (on a *nix system) to write shebangs like having the first line be `#!/usr/bin/env runhaskell'. then the filename needn't end in `.hs' or `.lhs' (literate). but then it would start execution at `main', rather than load the file into the interactor
2022-02-19 06:00:16 +0100 <ski> hm, after testing around a little, it appears that `#!/usr/bin/env -S ghci -x hs' here allows the file to be loaded into the interactor, without needing to have a name ending in `.hs' (and without needing `main' to be defined)
2022-02-19 06:00:20 +0100 <ski> chronon ^
2022-02-19 06:00:43 +0100 <chronon> Interesting.
2022-02-19 06:01:03 +0100yauhsien(~yauhsien@61-231-37-106.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
2022-02-19 06:01:32 +0100 <chronon> I do like running scripts with shebang. Keeping separate source and executable for small stuff is a bit overkill.
2022-02-19 06:01:45 +0100 <ski> <https://stackoverflow.com/questions/14018282/how-to-embed-haskell-in-a-batch-file-hash-bang-runhas…> apparently gives some answer for what could be done to make batch running (like shebang), on Windows
2022-02-19 06:02:24 +0100 <chronon> Fortunately, I do not have the handicap of needing to use Windows. Ever.
2022-02-19 06:03:05 +0100yauhsien(~yauhsien@61-231-37-106.dynamic-ip.hinet.net)
2022-02-19 06:04:31 +0100alx741(~alx741@181.199.42.143)
2022-02-19 06:06:53 +0100 <chronon> Where did this site go? https://ghc.readthedocs.io/
2022-02-19 06:08:49 +0100Null_A(~null_a@2601:645:8700:2290:890f:d3a0:aab0:f3f)
2022-02-19 06:11:32 +0100 <dsal> IMO, trying to shebang a script in Haskell is a path to unnecessary frustration.
2022-02-19 06:11:55 +0100 <dsal> You're probably going to want some libraries among other requirements.
2022-02-19 06:13:24 +0100Null_A(~null_a@2601:645:8700:2290:890f:d3a0:aab0:f3f) (Ping timeout: 240 seconds)
2022-02-19 06:13:56 +0100alx741(~alx741@181.199.42.143) (Read error: Connection reset by peer)
2022-02-19 06:14:18 +0100 <chronon> Libraries can be inported by the script presumably?
2022-02-19 06:14:21 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 06:18:36 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 240 seconds)
2022-02-19 06:20:32 +0100 <dsal> I'm not sure how you're thinking of that, but most surely not.
2022-02-19 06:21:42 +0100 <dsal> I've got a lot of haskell projects that use a lot of libraries, some of which aren't version compatible with each other.
2022-02-19 06:21:58 +0100 <chronon> Well, most languages allow sourcec files to specify the inclusion of other source files, and/or use of particular libraries, by declaring them at the top of the file.
2022-02-19 06:22:42 +0100 <dsal> That's almost entirely untrue in my experience. Can you give an example?
2022-02-19 06:22:43 +0100 <chronon> I'm jumping the gun. Probably best for me to read on and wait to find out how to do library imports.
2022-02-19 06:24:44 +0100 <chronon> If there is a widespread issue with libraries having multiple incompatible versions then that is an ecosystem failing. There should be a central registry for libarary names, and a cultural attitude towards ensuring that later versions of libraries do not break backward compatibility.
2022-02-19 06:29:25 +0100 <chronon> You can't build reliable software when there is a chaotic free-for-all in the library ecosystem.
2022-02-19 06:29:50 +0100 <chronon> I think (hope) you must be exaggerating the problem.
2022-02-19 06:30:50 +0100 <dsal> No, you just restated it, though. If you just throw an import at the top of a file, how should it resolve?
2022-02-19 06:30:55 +0100alx741(~alx741@181.199.42.143)
2022-02-19 06:31:05 +0100rekahsoft(~rekahsoft@cpe0008a20f982f-cm64777d666260.cpe.net.cable.rogers.com) (Ping timeout: 256 seconds)
2022-02-19 06:31:07 +0100 <dsal> If you run your script again tomorrow, should it get library updates and maybe break, or somehow know to not update?
2022-02-19 06:31:39 +0100 <chronon> It should get the latest version and that should work just like the previous version.
2022-02-19 06:31:53 +0100 <dsal> Uh. That's a terrible, and unprecedented idea.
2022-02-19 06:32:05 +0100 <chronon> If the API contract is broken in a latr version then the later version should not have the same name. The name is the contract.
2022-02-19 06:32:41 +0100 <dsal> The newest version of the amazon interface has a large number of major API changes which greatly improve a lot of things. Most programs will ignore the new version until they're ready.
2022-02-19 06:32:42 +0100 <chronon> Maybe we're not talking about the same thing.
2022-02-19 06:33:49 +0100 <dsal> This is primarily how we manage compatibility: https://pvp.haskell.org (well, the base bit)
2022-02-19 06:33:58 +0100 <dsal> We have a few abstractions above this.
2022-02-19 06:34:49 +0100yauhsien(~yauhsien@61-231-37-106.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-02-19 06:34:54 +0100 <dsal> The point is that "a script" isn't going to express any of these things. It's not impossible, but it's a lot harder than just making a project and declaring what you need.
2022-02-19 06:35:06 +0100 <chronon> Hmmm, version dependencies should always be minimums, not also maximums.
2022-02-19 06:35:35 +0100 <dsal> Lots of people with production systems disagree with you. :)
2022-02-19 06:35:35 +0100alx741(~alx741@181.199.42.143) (Read error: Connection reset by peer)
2022-02-19 06:35:56 +0100 <dsal> When the next amazonka version ships should your programs all stop running?
2022-02-19 06:36:19 +0100 <dsal> Because if you don't put effort into applying the API changes, you're going to have a bad day if you don't have a max version constraint.
2022-02-19 06:38:02 +0100 <chronon> Looks like the dotted version numbers in the document you linked do indeed allow version numbers to increase and for the user of the module to be confident nothing will break. It is just that they have made breaking changes part of a more significant part of the version number, rather than making that a naming issue. So it's swings and roundabouts.
2022-02-19 06:39:03 +0100mike11(~Mike@user/mike11) (Quit: Leaving.)
2022-02-19 06:39:05 +0100slowButPresent(~slowButPr@user/slowbutpresent) (Quit: leaving)
2022-02-19 06:39:39 +0100yauhsien(~Yau-Hsien@61-231-37-106.dynamic-ip.hinet.net)
2022-02-19 06:39:41 +0100dagit3146dagit
2022-02-19 06:39:57 +0100 <chronon> Personallly, I think that culturally there should be a greater emphasis on allowing imrovemnts that do not break things.
2022-02-19 06:40:27 +0100 <dsal> I can't even imagine how you could expect something like that to work.
2022-02-19 06:41:08 +0100 <chronon> It works like that everywher eoutside the Haskell community. It's basic practise in software engineering to honour the API.
2022-02-19 06:41:23 +0100 <chronon> But I think we must be talking about different things.
2022-02-19 06:41:48 +0100 <dsal> It's possible. I've used a large number of languages over the last few decades and don't have much experience that matches what you're saying.
2022-02-19 06:41:57 +0100 <chronon> BEcause I simply cannot believe that anyone thinks it is good to change the API with every version bump.
2022-02-19 06:42:31 +0100 <dsal> It's the other way around. If you change the API, you do a major version bump.
2022-02-19 06:42:39 +0100 <dsal> If the alternative is "you can never fix anything" then that seems like a bad idea.
2022-02-19 06:45:34 +0100 <chronon> Well, I think it is a question of priorities and emphasis. By allowing breaking changes across different major versions of a library, you are saying that change is favoured over stability. Whereas, if your ecosystem says that a library name is an API contract, and that to change it you would need a new name, then that emphasises careful API design up front and doing your best to honour the API when
2022-02-19 06:45:39 +0100deadmarshal(~deadmarsh@95.38.113.80)
2022-02-19 06:45:40 +0100 <chronon> updating things.
2022-02-19 06:46:27 +0100 <c_wraith> it's not like old libraries expire
2022-02-19 06:46:46 +0100 <dsal> heh, I've rarely seen anyone get anything right before deploying.
2022-02-19 06:47:27 +0100 <chronon> Sure the implementation is rarely correct first time, but the basic API is something you can plan and then stick to (usually).
2022-02-19 06:47:36 +0100 <dsal> The conversation came from "how do you specify which libraries you want" (which includes which versions). If "always use the latest version" is enabled, then every time you run the script, you might be running different code, which seems bad.
2022-02-19 06:48:05 +0100 <chronon> Yes, but that is bad if you presume people will keep making breaking changes.
2022-02-19 06:48:36 +0100 <chronon> If your culture says never make breaking changes, then assuming the latest version is fine will work.
2022-02-19 06:48:49 +0100 <dsal> Your idea of "basic API" sounds super handwavy. I changed a type from a type alias to a newtype in a release. The API docs read mostly the same, but it caused compilation issues for users.
2022-02-19 06:49:05 +0100 <chronon> I think this is purely a cultural issue, not a technical one.
2022-02-19 06:49:27 +0100 <c_wraith> It's not a cultural issue that most people get APIs wrong on the first try
2022-02-19 06:49:50 +0100 <c_wraith> that's just a failure to predict the future
2022-02-19 06:50:16 +0100 <c_wraith> You seem to be advocating for only making libraries after you know everything
2022-02-19 06:50:21 +0100 <c_wraith> Which seems awfully late to start
2022-02-19 06:50:38 +0100 <chronon> Maybe Haskell makes it harder than other languages to abstract type details away from the users of an API.
2022-02-19 06:50:41 +0100merijn(~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl)
2022-02-19 06:50:57 +0100 <dsal> I have no experience in any language that matches your description.
2022-02-19 06:51:11 +0100 <chronon> I cannot tell yet because I'm still learning it. Probably best for me to shut up for now. :-)
2022-02-19 06:52:04 +0100 <c_wraith> I think lens is an incredibly illustrative example. Those early versions changed tons of things because nobody knew how to make it work yet.
2022-02-19 06:52:17 +0100 <c_wraith> Until someone actually makes the thing, you just have no idea
2022-02-19 06:52:18 +0100alx741(~alx741@181.199.42.143)
2022-02-19 06:52:39 +0100 <c_wraith> And then until 100 other people run into problems, all you have is a guess
2022-02-19 06:53:11 +0100 <dsal> What would lens be called if it had to be renamed every time there was a breaking change?
2022-02-19 06:53:23 +0100 <chronon> lens45 ?
2022-02-19 06:53:57 +0100 <dsal> Why would you put numbers at the end when there's already a version number?
2022-02-19 06:54:02 +0100 <chronon> Or maybe with a culture that leans towards not making so many breaking changes, it might only be called lens2
2022-02-19 06:54:05 +0100 <c_wraith> so really, all you're advocating for is making the version number part of the package name? What does that change?
2022-02-19 06:55:42 +0100 <chronon> Yes, that's exatcly my point, name or major version number is essentially the same thing, it defines the API contract we are using. The differrence is that Haskell versioning seems to favour regular breaking changes, whereas most other languages aim not to have breaking changes in the first place. It's a cultural issue.
2022-02-19 06:56:07 +0100 <chronon> Anyway, no point in me discussing this any further at the moment, I need to press on with the tutorial.
2022-02-19 06:56:31 +0100 <c_wraith> I assure you, in my 20 year professional career, exactly 0 languages have lacked constant breaking changes to library
2022-02-19 06:57:06 +0100 <dsal> The only libraries that don't change are also not getting bug fixes.
2022-02-19 06:58:32 +0100 <chronon> I'm curious about a line like: qsort (x:xs) = qsort before ++ [x] ++ qsort after
2022-02-19 06:59:14 +0100 <chronon> How does haskell know that the first qsort does not apply to the result of the whole of the rest of the line? When are brackets needed?
2022-02-19 06:59:37 +0100 <dsal> function calls bind very tightly.
2022-02-19 06:59:44 +0100 <ski> function application binds tighter than infix operators
2022-02-19 06:59:46 +0100zebrag(~chris@user/zebrag) (Quit: Konversation terminated!)
2022-02-19 06:59:55 +0100 <ski> (higher precedence)
2022-02-19 07:00:05 +0100 <dsal> But any given operator can have different binding strength (that the author gets to decide).
2022-02-19 07:00:06 +0100 <chronon> Ok, I seee. Is tere a precendence table I can look up somewhere?
2022-02-19 07:00:15 +0100 <dsal> % :i (++)
2022-02-19 07:00:16 +0100 <yahb> dsal: (++) :: forall a. [a] -> [a] -> [a] -- Defined in `GHC.Base'; infixr 5 ++
2022-02-19 07:00:39 +0100 <dsal> % :i ($)
2022-02-19 07:00:39 +0100 <yahb> dsal: ($) :: forall a b. (a -> b) -> a -> b -- Defined in `GHC.Base'; infixr 0 $
2022-02-19 07:00:41 +0100 <ski> function application is left-associative, with precedence level `10'
2022-02-19 07:00:42 +0100 <dsal> % :i (.)
2022-02-19 07:00:42 +0100 <yahb> dsal: (.) :: forall b c a. (b -> c) -> (a -> b) -> a -> c -- Defined in `GHC.Base'; infixr 9 .
2022-02-19 07:00:57 +0100 <c_wraith> sure. operators: anywhere from 0 to 9. the operator definition can specify. Function application: 10. Record update: 11
2022-02-19 07:01:51 +0100 <ski> (`@',`~',`!' (and record construction) in patterns also have higher precedence than application)
2022-02-19 07:02:11 +0100 <dsal> The neat thing about that is that the language itself doesn't have to have an opinion on + or * precedence. That's a library concern.
2022-02-19 07:03:05 +0100 <chronon> Neat, or scary, I guess is depends on context. :-)
2022-02-19 07:03:05 +0100alx741(~alx741@181.199.42.143) (Read error: Connection reset by peer)
2022-02-19 07:03:47 +0100alx741(~alx741@181.199.42.143)
2022-02-19 07:05:03 +0100takuan(~takuan@178-116-218-225.access.telenet.be)
2022-02-19 07:05:07 +0100 <dsal> It does mean if you see `some stuff $$$$ other stuff` you know what's happening. But if you see `a $$ b $$$ c` you might need to look things up.
2022-02-19 07:05:38 +0100 <chronon> And what is the usual way to look up things like that?
2022-02-19 07:05:51 +0100 <dsal> % :i (<$>)
2022-02-19 07:05:51 +0100 <yahb> dsal: (<$>) :: forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b -- Defined in `Data.Functor'; infixl 4 <$>
2022-02-19 07:06:46 +0100k8yun(~k8yun@user/k8yun)
2022-02-19 07:06:52 +0100 <mshiraeeshi> chronon: why are you learning haskell?
2022-02-19 07:06:55 +0100 <dsal> A lot of times, you can't really write terribly ambiguous things without the compiler getting mad at you.
2022-02-19 07:08:02 +0100 <chronon> Why am I learning Haskell? That's an odd question in a haskell group. Because I believe it will be a powerful and useful language, and expand my mind along the way? Is that a good enough answer?
2022-02-19 07:08:29 +0100alx741(~alx741@181.199.42.143) (Read error: Connection reset by peer)
2022-02-19 07:08:38 +0100 <mshiraeeshi> I mean, do you have a specific purpose or just for fun
2022-02-19 07:08:55 +0100 <mshiraeeshi> seems like you're learning it for fun
2022-02-19 07:09:42 +0100 <chronon> Well, if it turns out to be as useful as I am hoping then I will likely use it for day to day tasks, and if I really enjoy it I might hope to get work using it. Yes, for fun, but hopefully not only for fun.
2022-02-19 07:10:25 +0100 <mshiraeeshi> I noticed that some languages tend to gravitate towards some niche
2022-02-19 07:10:43 +0100 <mshiraeeshi> for scala it is big data analysis
2022-02-19 07:11:13 +0100 <chronon> I am someone who likes correctness in software. I care about correctness more than most of my colleagues. I believe that haskell is a language that will make it possible to have a higher degree of confidence in the correctness of my code.
2022-02-19 07:11:31 +0100 <mshiraeeshi> for haskell it is blockchain I think
2022-02-19 07:11:42 +0100 <dsal> oh no. Please no.
2022-02-19 07:11:54 +0100 <davean> mshiraeeshi: Ugh
2022-02-19 07:12:09 +0100 <mshiraeeshi> it is weird that you have a whole language and you have to use it in some narrow field
2022-02-19 07:12:16 +0100 <mshiraeeshi> only
2022-02-19 07:12:41 +0100 <mshiraeeshi> anyway, that's the impression I got
2022-02-19 07:12:50 +0100 <dsal> None of my haskell code interacts with any blockchains.
2022-02-19 07:13:01 +0100 <dsal> (as far as I know)
2022-02-19 07:13:21 +0100 <davean> The only "block chain" my code interacts with is a merkle tree of SSL certificates
2022-02-19 07:13:30 +0100 <mshiraeeshi> dsal: what are your projects about? I mean, they are web applications?
2022-02-19 07:13:32 +0100 <chronon> I had not seen any suggestion of haskell and blockchain being correlated. But perhaps blockchain people care enough about correctness to pick a language where correctness is a thing.
2022-02-19 07:14:49 +0100 <dsal> mshiraeeshi: I have a lot of iot stuff, data processing stuff, etc...
2022-02-19 07:15:10 +0100 <dsal> mshiraeeshi: Currently, my computer is doing this stuff: https://dustin.sallings.org/2020/04/29/gopro-plus.html
2022-02-19 07:19:32 +0100merijn(~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
2022-02-19 07:20:03 +0100 <chronon> What's the comment charater? It doesn't like # (except on the shebang line).
2022-02-19 07:20:34 +0100k8yun(~k8yun@user/k8yun) (Quit: Leaving)
2022-02-19 07:20:41 +0100 <mshiraeeshi> it's --
2022-02-19 07:22:04 +0100 <chronon> Like SQL. Thanks.
2022-02-19 07:22:45 +0100 <mshiraeeshi> so what do you think is the solution to the "niche language" situation?
2022-02-19 07:23:11 +0100 <mshiraeeshi> avoiding putting all the eggs in one basket and gaining expertise in several languages?
2022-02-19 07:23:49 +0100 <dsal> What niche language situation?
2022-02-19 07:24:25 +0100 <mshiraeeshi> earlier I wrote:
2022-02-19 07:24:25 +0100 <mshiraeeshi> I noticed that some languages tend to gravitate towards some niche
2022-02-19 07:24:41 +0100 <mshiraeeshi> for scala it is big data analysis
2022-02-19 07:25:05 +0100 <dsal> Well yes, but you also thought haskell is a blockchain language. Perhaps just learn more about what people are doing with things?
2022-02-19 07:25:05 +0100alx741(~alx741@181.199.42.143)
2022-02-19 07:25:29 +0100bontaq(~user@ool-45779fe5.dyn.optonline.net) (Ping timeout: 256 seconds)
2022-02-19 07:25:32 +0100 <chronon> I don't think languages gravitate to a niche. It's that people working in a niche gravitate towards the most suitable language. Sharing a common language is the driver for this.
2022-02-19 07:25:40 +0100 <dsal> Haskell is my go-to language for just about anything I need to get done (exceptions being things that require other languages).
2022-02-19 07:26:49 +0100 <mshiraeeshi> dsal: "Perhaps just learn more about what people are doing with things?"
2022-02-19 07:27:08 +0100 <mshiraeeshi> how?
2022-02-19 07:27:32 +0100 <dsal> Instead of saying things like, "hey, I hear you all are scammers" maybe ask what people are working on. :)
2022-02-19 07:27:58 +0100 <mshiraeeshi> I check haskell subreddit, I see hobby pet projects, abstract libraries
2022-02-19 07:28:00 +0100 <dsal> It's possible someone in here works on some blockchains, but it only comes up WRT, like, one company.
2022-02-19 07:28:05 +0100Midjak(~Midjak@82.66.147.146) (Quit: This computer has gone to sleep)
2022-02-19 07:28:19 +0100 <davean> mshiraeeshi: those abstract libraries are for work
2022-02-19 07:28:56 +0100 <mshiraeeshi> also vacancies - that's what describes actual work that gets done, right?
2022-02-19 07:29:27 +0100 <mshiraeeshi> and oftentimes there is blockchain involved in the job description
2022-02-19 07:29:39 +0100 <dsal> "works" is a strange abstraction. I don't know the relevance.
2022-02-19 07:29:48 +0100 <chronon> buzzwords sell jobs.
2022-02-19 07:30:17 +0100 <monochrom> The niche language problem seems to be an XY problem. The true problem seems to be: you can't simultaneously choose both what job offers to accept and what language to use in that job.
2022-02-19 07:31:33 +0100 <dsal> I rely on Haskell to monitor my car and run my air conditioner and measure my consumption and freezer temperatures and manage my video and other large media management. But also I get paid for writing haskell. The last part isn't as interesting as the others to me. :)
2022-02-19 07:32:01 +0100 <monochrom> Well, what's new. Even before programming existed in the first place, you can't simultaneously choose both which jobs offer to accept and which place to live in.
2022-02-19 07:32:34 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 07:33:06 +0100 <monochrom> I bet people back then talked about the niche town problem, like "Detroit is for cars, Washington D.C. is for civil service".
2022-02-19 07:33:36 +0100 <chronon> If there are two functions f and g, then when I write f g x would that naturally parse as f(g(x)) or do I necessarily need brackets?
2022-02-19 07:34:04 +0100 <Maxdamantus> (f g) x
2022-02-19 07:34:53 +0100 <Maxdamantus> So yes, if you want it to mean `f(g(x))`, you need brackets, though not that many. `f (g x)` will suffice.
2022-02-19 07:34:53 +0100alx741(~alx741@181.199.42.143) (Read error: Connection reset by peer)
2022-02-19 07:35:33 +0100alx741(~alx741@157.100.197.240)
2022-02-19 07:35:49 +0100 <Maxdamantus> alternatively you can use the `($)` application operator which has lower precedence than the built-in call syntax, `f $ g x`
2022-02-19 07:35:55 +0100 <chronon> I see, yes, just verified this manually. Hmm, it seems odd that it would choose the wrong interpretation when contextually it seems clear that (f g) x is not a valid parsing.
2022-02-19 07:35:57 +0100 <ski> <ski> function application is left-associative, with precedence level `10'
2022-02-19 07:35:57 +0100 <dsal> chronon: you can pass g as an argument to f
2022-02-19 07:36:34 +0100 <dsal> `(f g) x` is the valid parsing.
2022-02-19 07:36:34 +0100 <ski> the "left-associative" bit means that `f g x' gets parsed as `(f g) x', just like `7 - 2 - 3' gets parsed as `(7 - 2) - 3'
2022-02-19 07:37:03 +0100 <monochrom> When you later learn higher order functions such as "map cos [1,2,3]" you will appreciate that the computer does not think "map (cos [1,2,3])".
2022-02-19 07:37:04 +0100 <ski> if you want `f (g x)' or `7 - (2 - 3)', you'll have to be explicit about those brackets
2022-02-19 07:37:06 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
2022-02-19 07:37:41 +0100 <chronon> I suppose my question is why did they decide function application should be left associative?
2022-02-19 07:37:46 +0100 <dsal> chronon: It's worth noting that functions take one argument and return one value.
2022-02-19 07:38:04 +0100yauhsien_(~yauhsien@61-231-37-106.dynamic-ip.hinet.net)
2022-02-19 07:38:10 +0100 <Maxdamantus> chronon: because of "curried" functions.
2022-02-19 07:38:23 +0100 <ski> `map cos [1,2,3]' means `(map cos) [1,2,3]', which is the valid (and intended) parsing here, yes
2022-02-19 07:38:42 +0100 <Maxdamantus> > let sum = foldl (+) 0 in sum [1, 2, 3]
2022-02-19 07:38:43 +0100 <lambdabot> 6
2022-02-19 07:38:52 +0100 <chronon> Hmm, ok, looks like the answer is because I don't know enough yet. I will suspend my curiocity and read on in the tutorial.
2022-02-19 07:39:30 +0100 <ski> > map (map (^ 2)) [[],[0],[1,2],[3,4,5],[6,7,8,9]] -- this would be more awkward, without `map' being expressed in curried style
2022-02-19 07:39:32 +0100 <lambdabot> [[],[0],[1,4],[9,16,25],[36,49,64,81]]
2022-02-19 07:39:54 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 07:40:01 +0100 <ski> > map (\xs -> map (^ 2) xs) [[],[0],[1,2],[3,4,5],[6,7,8,9]] -- this is basically what you'd have to do, if you couldn't partially apply `map'
2022-02-19 07:40:03 +0100 <lambdabot> [[],[0],[1,4],[9,16,25],[36,49,64,81]]
2022-02-19 07:40:52 +0100 <Maxdamantus> Functions all take exactly one argument, so if you see something like `f x y z`, it means `((f x) y) z`, so you can always just omit the "last arguments" and apply them later.
2022-02-19 07:41:13 +0100 <dsal> Or, often more interestingly, reuse them.
2022-02-19 07:41:18 +0100 <Maxdamantus> by doing `let g = f x y in g z`
2022-02-19 07:41:23 +0100 <ski> > filter (all odd) [[0,2,6],[1,7],[3,4,8],[5,9]] -- another partial application example
2022-02-19 07:41:25 +0100 <lambdabot> [[1,7],[5,9]]
2022-02-19 07:41:36 +0100 <dsal> > map (mod 2) [1..9]
2022-02-19 07:41:37 +0100 <lambdabot> [0,0,2,2,2,2,2,2,2]
2022-02-19 07:42:03 +0100 <dsal> mod is probably a bad example since nobody writes it that way. heh
2022-02-19 07:42:20 +0100 <ski> > map (`mod` 3) [1..9]
2022-02-19 07:42:22 +0100 <lambdabot> [1,2,0,1,2,0,1,2,0]
2022-02-19 07:42:25 +0100 <monochrom> I sometimes write it that way. :)
2022-02-19 07:42:33 +0100 <monochrom> mod 5 2 and div 5 2.
2022-02-19 07:42:34 +0100Maxdamantusthinks he prefers his `sum` example.
2022-02-19 07:42:56 +0100 <monochrom> too lazy to reach the ` key... :)
2022-02-19 07:43:18 +0100 <ski> % :i elem
2022-02-19 07:43:18 +0100 <yahb> ski: type Foldable :: (* -> *) -> Constraint; class Foldable t where; ...; elem :: forall a. Eq a => a -> t a -> Bool; ...; -- Defined in `Data.Foldable'; infix 4 `elem`
2022-02-19 07:43:20 +0100yauhsien_(~yauhsien@61-231-37-106.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
2022-02-19 07:44:31 +0100 <ski> > filter (1 `elem`) [[0,2,4,6],[1,3,5,7],[1,5],[3,7],[1],[5],[3],[7]]
2022-02-19 07:44:32 +0100 <lambdabot> [[1,3,5,7],[1,5],[1]]
2022-02-19 07:45:13 +0100 <EvanR> :t `($)`
2022-02-19 07:45:14 +0100 <lambdabot> error: parse error on input ‘`’
2022-02-19 07:45:26 +0100 <EvanR> fiddlesticks
2022-02-19 07:46:05 +0100skiwould prefer `$' not being mentioned early in tutorials
2022-02-19 07:50:27 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2022-02-19 07:51:12 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2022-02-19 07:55:00 +0100 <chronon> Does the "standard prelude" exist as a file I can read in source form?
2022-02-19 07:56:12 +0100 <chronon> If so, which filename do I need to look for?
2022-02-19 07:57:44 +0100 <dsal> that's not exactly how it works. A module can export symbols from other modules.
2022-02-19 07:58:04 +0100alx741(~alx741@157.100.197.240)
2022-02-19 07:58:08 +0100 <dsal> You can read the docs for at least some version here: https://hackage.haskell.org/package/base-4.16.0.0/docs/Prelude.html
2022-02-19 07:58:31 +0100 <dsal> The source links seem broken there, though. That's unfortunate.
2022-02-19 07:58:36 +0100Erutuon(~Erutuon@user/erutuon) (Ping timeout: 240 seconds)
2022-02-19 07:58:38 +0100coot(~coot@213.134.190.95)
2022-02-19 07:58:51 +0100mbuf(~Shakthi@223.184.49.187)
2022-02-19 07:58:57 +0100little_mac(~little_ma@2601:410:4300:3ce0:24a8:40ee:fe3d:56e6) (Ping timeout: 240 seconds)
2022-02-19 07:59:09 +0100 <dsal> Some of them work, at leaset.
2022-02-19 08:01:01 +0100 <ski> source link (to <https://hackage.haskell.org/package/base-4.16.0.0/docs/src/Prelude.html>) works here
2022-02-19 08:01:02 +0100 <chronon> Ok, thanks.
2022-02-19 08:01:41 +0100 <ski> (of course, that just, for GHC, reexports a bunch of other modules)
2022-02-19 08:01:45 +0100Erutuon(~Erutuon@user/erutuon)
2022-02-19 08:02:35 +0100 <chronon> Oh look: import System.IO there's no version number on that import statement. That's not what I was expecting to see given the earlier conversation.
2022-02-19 08:03:30 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 08:04:21 +0100chrononregrets bring that up again.
2022-02-19 08:04:27 +0100 <dsal> The point of that conversation is that there's no version number.
2022-02-19 08:05:02 +0100 <dsal> `System.IO` isn't a package.
2022-02-19 08:05:53 +0100 <dsal> But it's part of a versioned package and when you write software that depends on a package and you just hope it works after each new software update, you eventually get sad. That's why we don't do that.
2022-02-19 08:07:05 +0100 <dsal> The early days of go were like that. It was pretty exciting. There were several inventions people came up with to try to figure out how have predictable builds. There are only about two or so in use now that they've made a new standard after everyone else solved it.
2022-02-19 08:09:20 +0100 <dsal> I can't remember how many ways python ended up with. I just know I ended up with a lot of broken python scripts and basically assume if someone has a python script on the internet, I won't be able to make it run on my computer.
2022-02-19 08:12:18 +0100 <chronon> The python people have a virtual environment system. I never got into using that. It seem like a symptom of a bigger failing in the ecosystem.
2022-02-19 08:12:30 +0100ski. o O ( "A Ban on Imports" by Gilad Bracha in 2009-06-30 at <https://gbracha.blogspot.com/2009/06/ban-on-imports.html> )
2022-02-19 08:12:37 +0100kjak(~kjak@pool-108-45-56-21.washdc.fios.verizon.net) (Ping timeout: 240 seconds)
2022-02-19 08:18:33 +0100tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz)
2022-02-19 08:21:30 +0100alx741(~alx741@157.100.197.240)
2022-02-19 08:26:08 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 08:28:38 +0100 <chronon> That blog is a wonderfully humorous read. Some people really have a gift for writing.
2022-02-19 08:28:52 +0100 <chronon> But it's a distraction. Stop it. ;-)
2022-02-19 08:29:30 +0100 <dsal> Yes, some projects use virtualenv. Those *sometimes* work as they do list many of the things you need to get started. But what if I don't have a C library they're linking against? Or the C library I have is the wrong version? That's typically where those stop working for me.
2022-02-19 08:30:11 +0100 <dsal> Nowadays, if it ships as a docker image, it might work, but now I'm installing another operating system just to run a python script. Hardly seems better than just compiling a program.
2022-02-19 08:30:21 +0100dsalstill has to figure out how to make a docker image for one of his projects since someone asked
2022-02-19 08:32:08 +0100 <EvanR> hey man you can't beat the reliability of driving a van containing a working PC with the desired software already installed and working to your house
2022-02-19 08:32:49 +0100 <EvanR> latency is an issue but whatevs
2022-02-19 08:34:46 +0100 <dsal> So much bandwidth.
2022-02-19 08:42:13 +0100gehmehgeh(~user@user/gehmehgeh)
2022-02-19 08:43:04 +0100 <systemfault> Hi, I was wondering was is the "best" way to install ghc on my mac, I could probably do it via brew... but then there's also the "stack" route... but now there's also something called ghcup that can be used to install ghc + cabal or stack... etc..
2022-02-19 08:43:48 +0100 <sclv> ghcup is the best way
2022-02-19 08:44:02 +0100alx741(~alx741@157.100.197.240)
2022-02-19 08:44:05 +0100 <sclv> it is standard and recommended
2022-02-19 08:44:57 +0100notzmv(~zmv@user/notzmv) (Ping timeout: 240 seconds)
2022-02-19 08:46:39 +0100 <systemfault> And if I dare asking cabal vs stack, am I going to start a war? I heard that stack used to be the way to go for painless dependency management but that nowadays cabal has caught up or something
2022-02-19 08:47:23 +0100mbuf(~Shakthi@223.184.49.187) (Quit: Leaving)
2022-02-19 08:47:52 +0100 <systemfault> ghcup is good stuff 👍
2022-02-19 08:48:49 +0100 <sclv> right. nowadays both work fine and of the two
2022-02-19 08:48:49 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 08:49:00 +0100 <sclv> cabal is more actively developed.
2022-02-19 08:49:17 +0100 <dsal> I've not successfully built a project without stack, but I've worked on them, so it's possible.
2022-02-19 08:49:25 +0100 <sclv> and makes it more convenient to use a broader range of packages.
2022-02-19 08:50:49 +0100wonko_(~wjc@2a0e:1c80:11::50)
2022-02-19 08:51:14 +0100 <systemfault> Fair enough, I'll start with Cabal since it's the "blessed" package manager
2022-02-19 08:51:18 +0100 <dsal> Last time I tried ghcup it wasn't working on my Mac. I use nix for all that stuff. It's precarious
2022-02-19 08:51:52 +0100 <dsal> stack uses cabal, so you'll user cabal either way. :)
2022-02-19 08:52:07 +0100 <systemfault> I haven't had good experiences with nix on mac... there was like no binaries and it had to compile the whole world
2022-02-19 08:52:18 +0100 <systemfault> But Nix on NixOS is pretty good stuff
2022-02-19 08:52:27 +0100dolio(~dolio@130.44.130.54) (Remote host closed the connection)
2022-02-19 08:52:42 +0100dolio(~dolio@130.44.130.54)
2022-02-19 08:52:43 +0100irishman(~vshev4enk@178.151.117.243)
2022-02-19 08:52:50 +0100 <dsal> I've not had that particular problem in a bit, but yeah, I've had it.
2022-02-19 08:53:34 +0100 <dsal> I had it worse on nixos recently since we it a patched version of ghc and I didn't have my cache configured.
2022-02-19 08:53:38 +0100wonko_(~wjc@2a0e:1c80:11::50) (Client Quit)
2022-02-19 08:53:46 +0100max22-(~maxime@2a01cb0883359800bbcc7fa8d7db61b8.ipv6.abo.wanadoo.fr)
2022-02-19 08:54:35 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer)
2022-02-19 08:54:59 +0100 <jackdk> systemfault: the trick is to make sure your nixpkgs pin is drawn from a darwin channel
2022-02-19 08:55:07 +0100 <ski> systemfault : "The Cabal/Stack Disambiguation Guide" <https://gist.github.com/merijn/8152d561fb8b011f9313c48d876ceb07>
2022-02-19 08:56:07 +0100 <systemfault> jackdk: I'll stay with ghcup for now, it was really quick to install ghc + latest cabal. But I may revisit nix on osx eventually
2022-02-19 08:56:19 +0100 <systemfault> jackdk: Thanks for the info though, really helpful
2022-02-19 08:56:28 +0100mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 250 seconds)
2022-02-19 08:57:16 +0100 <dsal> ghcup installed fast for me, but doesn't build anything. :) That might just be arm, though.
2022-02-19 08:57:17 +0100irishman(~vshev4enk@178.151.117.243) (Ping timeout: 256 seconds)
2022-02-19 08:57:33 +0100 <dsal> I've not tried in a month or so.
2022-02-19 08:58:15 +0100 <systemfault> I just want the less friction possible with tooling so I can focus on learning and writing code
2022-02-19 08:59:09 +0100turlando(~turlando@user/turlando) (Ping timeout: 272 seconds)
2022-02-19 08:59:10 +0100zeenk(~zeenk@2a02:2f04:a30d:1300:51a3:bcfc:6cda:9fc5)
2022-02-19 09:00:10 +0100 <dsal> Yep, makes sense. I try to get projects off of stack now and then and fail. It seems like it'd be easy, but I always run into something. I work by inertia
2022-02-19 09:00:12 +0100shiraeeshi(~shiraeesh@109.166.56.8)
2022-02-19 09:00:47 +0100shiraeeshi(~shiraeesh@109.166.56.8) (Read error: Connection reset by peer)
2022-02-19 09:01:39 +0100 <jackdk> systemfault: good luck. to be precise I mean something like nixpkgs-21.11-darwin
2022-02-19 09:01:41 +0100mshiraeeshi(~shiraeesh@109.166.56.8) (Ping timeout: 272 seconds)
2022-02-19 09:01:53 +0100shiraeeshi(~shiraeesh@109.166.56.8)
2022-02-19 09:02:08 +0100 <systemfault> I've been interested in Haskell for a long time now... but I never really built anything real world using it, and I would like to change that. The closest thing to pure FP I've done in the real-world is to using effect-ts with TypeScript. (Shame on me...)
2022-02-19 09:02:47 +0100shiraeeshi(~shiraeesh@109.166.56.8) (Read error: Connection reset by peer)
2022-02-19 09:04:58 +0100alx741(~alx741@157.100.197.240)
2022-02-19 09:08:28 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 09:16:37 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 09:18:09 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-02-19 09:18:09 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-02-19 09:18:09 +0100wroathe(~wroathe@user/wroathe)
2022-02-19 09:19:54 +0100acidjnk_new(~acidjnk@p200300d0c71a5a00a926c52c5a33de35.dip0.t-ipconnect.de)
2022-02-19 09:20:02 +0100turlando(~turlando@93-42-250-112.ip89.fastwebnet.it)
2022-02-19 09:20:02 +0100turlando(~turlando@93-42-250-112.ip89.fastwebnet.it) (Changing host)
2022-02-19 09:20:02 +0100turlando(~turlando@user/turlando)
2022-02-19 09:20:52 +0100turlando(~turlando@user/turlando) (Client Quit)
2022-02-19 09:21:19 +0100turlando(~turlando@93-42-250-112.ip89.fastwebnet.it)
2022-02-19 09:21:19 +0100turlando(~turlando@93-42-250-112.ip89.fastwebnet.it) (Changing host)
2022-02-19 09:21:19 +0100turlando(~turlando@user/turlando)
2022-02-19 09:23:00 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2022-02-19 09:23:23 +0100jpds(~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
2022-02-19 09:23:48 +0100jpds(~jpds@gateway/tor-sasl/jpds)
2022-02-19 09:26:21 +0100alx741(~alx741@157.100.197.240)
2022-02-19 09:27:53 +0100turlando(~turlando@user/turlando) (Ping timeout: 256 seconds)
2022-02-19 09:33:30 +0100acidjnk_new(~acidjnk@p200300d0c71a5a00a926c52c5a33de35.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2022-02-19 09:34:07 +0100jakalx(~jakalx@base.jakalx.net) ()
2022-02-19 09:34:12 +0100pooryorick(~pooryoric@87-119-174-173.tll.elisa.ee) (Ping timeout: 240 seconds)
2022-02-19 09:37:38 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 09:41:02 +0100alp(~alp@user/alp)
2022-02-19 09:47:24 +0100jakalx(~jakalx@base.jakalx.net)
2022-02-19 09:48:55 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-02-19 09:48:55 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-02-19 09:48:55 +0100wroathe(~wroathe@user/wroathe)
2022-02-19 09:51:13 +0100polezaivsani(~polezaivs@orangeshoelaces.net)
2022-02-19 09:52:31 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2022-02-19 09:52:39 +0100jtomas(~jtomas@210.red-88-24-179.staticip.rima-tde.net)
2022-02-19 09:53:57 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-02-19 09:55:56 +0100alx741(~alx741@157.100.197.240)
2022-02-19 09:57:25 +0100 <dminuoso> dsal: Heh, and I have not successfully built a project *with* stack yet.
2022-02-19 09:59:54 +0100turlando(~turlando@93-42-250-112.ip89.fastwebnet.it)
2022-02-19 09:59:54 +0100turlando(~turlando@93-42-250-112.ip89.fastwebnet.it) (Changing host)
2022-02-19 09:59:54 +0100turlando(~turlando@user/turlando)
2022-02-19 09:59:56 +0100kuribas(~user@ptr-25vy0i8y9oiry1fm4yq.18120a2.ip6.access.telenet.be)
2022-02-19 10:00:06 +0100thejuan24f[m](~thejuan2m@2001:470:69fc:105::1:6569) (Quit: You have been kicked for being idle)
2022-02-19 10:00:11 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 10:00:16 +0100afotgkmnzj7asv3r(~afotgkmnz@2001:470:69fc:105::c24b) (Quit: You have been kicked for being idle)
2022-02-19 10:00:16 +0100throwaaaa[m](~throwaaaa@2001:470:69fc:105::1:6fe6) (Quit: You have been kicked for being idle)
2022-02-19 10:00:43 +0100merijn(~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl)
2022-02-19 10:05:34 +0100gehmehgeh(~user@user/gehmehgeh) (Quit: Leaving)
2022-02-19 10:06:50 +0100coot(~coot@213.134.190.95) (Quit: coot)
2022-02-19 10:09:00 +0100mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475)
2022-02-19 10:11:54 +0100 <kuribas> Should you version control your configuration?
2022-02-19 10:12:26 +0100 <kuribas> What about sensitive info, like database passwords?
2022-02-19 10:12:48 +0100waleee(~waleee@h-98-128-229-110.NA.cust.bahnhof.se)
2022-02-19 10:14:22 +0100lottaquestions_(~nick@2607:fa49:5041:a200:b668:8e8:f292:8d7c)
2022-02-19 10:15:09 +0100dyeplexer(~dyeplexer@user/dyeplexer) (Ping timeout: 272 seconds)
2022-02-19 10:16:20 +0100 <dminuoso> kuribas: So what we started to do is use GPG on every server. The server receives a master key, and we then encrypt credentials against the master public key.
2022-02-19 10:16:49 +0100 <dminuoso> So that way we have a repository for each fleet of servers that contains their full specification
2022-02-19 10:16:52 +0100alx741(~alx741@157.100.197.240)
2022-02-19 10:17:35 +0100 <dminuoso> It requires a bit of systemd unit machinery to decrypt these, and sometimes a bit of templating or replacemnet shenanigans for when a given software doesnt have a way to include another file, or have some passwordFile option
2022-02-19 10:18:50 +0100 <kuribas> So you encrypt passwords in the configuration files?
2022-02-19 10:18:56 +0100 <dminuoso> So we dont just version control configuration, we version control the entire server.
2022-02-19 10:19:00 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 240 seconds)
2022-02-19 10:19:15 +0100 <kuribas> and what do you encrypt?
2022-02-19 10:19:30 +0100 <dminuoso> Mmm, hold on let find something that I can share with you
2022-02-19 10:19:43 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-02-19 10:19:43 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-02-19 10:19:43 +0100wroathe(~wroathe@user/wroathe)
2022-02-19 10:20:11 +0100 <kuribas> "whole server" <= like a nix configuration?
2022-02-19 10:20:19 +0100 <kuribas> or ansible?
2022-02-19 10:20:19 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 10:20:36 +0100 <dminuoso> For us its a nixos configuration, but you can do this with whatever tool you use.
2022-02-19 10:20:48 +0100 <kuribas> well, don't use any...
2022-02-19 10:20:50 +0100 <dminuoso> There's really no other way if you want to be able to automatically recover any server.
2022-02-19 10:20:53 +0100Tuplanolla(~Tuplanoll@91-159-69-98.elisa-laajakaista.fi)
2022-02-19 10:21:00 +0100 <kuribas> we just copy the binary to the production server.
2022-02-19 10:21:08 +0100 <dminuoso> Plus, you always have a declarative specification of your server. :)
2022-02-19 10:21:15 +0100 <kuribas> yeah, that's nice.
2022-02-19 10:21:45 +0100 <dminuoso> Over time you accumulate admins managing iptables, configuring the network, installing packages, editing files, setting kernel config, manipulating systemd units..
2022-02-19 10:21:51 +0100 <kuribas> We want to go more towards ansible and reproducability, but it is a long term project, like months...
2022-02-19 10:22:06 +0100 <dminuoso> And quickly you reach to the point where you *have* to snapshot entire VMs, but nobody can tell you how its configured...
2022-02-19 10:22:32 +0100 <dminuoso> And when you have a hardware machine, you're pretty much out of luck.
2022-02-19 10:22:42 +0100 <dminuoso> But anyway
2022-02-19 10:22:51 +0100 <dminuoso> Irrespective of how much you store, the general idea is still applicable
2022-02-19 10:23:51 +0100 <kuribas> dminuoso: So what do you encrypt then?
2022-02-19 10:24:05 +0100 <dminuoso> kuribas: Operationally what we do is this: We use `git-secrets` to do multi key encryption, and the ring of keys to encrypt all secrets for consists of: a) each administrator of the server, and b) the master key of the server itself.
2022-02-19 10:24:33 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-02-19 10:25:06 +0100 <dminuoso> Then, using that, we encrypt each secret/password (including the master private key) using git-secret against that "ring"
2022-02-19 10:25:45 +0100 <dminuoso> Each server has some initial bootstrapping, where it receives the master private key (so we type `git secret reveal`, copy over the master private key using `morph/nixos`, but you can do whatever here)
2022-02-19 10:26:35 +0100 <dminuoso> Then, we just use `git secret` to encrypt further secrets like database passwords.
2022-02-19 10:27:13 +0100 <dminuoso> So we can encrypt passwords such that the server can decrypt them
2022-02-19 10:27:21 +0100 <dminuoso> And keep the encrypted password in the repo
2022-02-19 10:27:59 +0100 <dminuoso> So then the server has a systemd unit running for each secret it must decrypt
2022-02-19 10:28:24 +0100 <dminuoso> With the correct systemd ordering and dependencies
2022-02-19 10:29:02 +0100 <dminuoso> (say if you have a password that your app `foo` needs to even start up, it would have `Before=foo.service; WantedBy=foo.service`
2022-02-19 10:29:06 +0100Guest73(~Guest73@2a02:587:983d:7c00:d3f3:4e58:6ef2:5281)
2022-02-19 10:29:41 +0100dyeplexer(~dyeplexer@user/dyeplexer)
2022-02-19 10:30:09 +0100 <dminuoso> And then you might have another systemd unit that either does some minor templating (say replace some PASSWORD string in your config with the actual decrypted content, again with systemd ordering and dependencies), or sometimes software allows "include" macro processors, then you can just refer to the path you know the secret will be decrypted to
2022-02-19 10:30:43 +0100 <dminuoso> Or sometimes software can also just refer to a path like `passwordFile = /srv/secrets-decrypted/my-db-password`
2022-02-19 10:31:01 +0100 <dminuoso> It took us a bit of engineering to get there, such that all these units are automatically generated.
2022-02-19 10:31:05 +0100 <dminuoso> But it was well worth it
2022-02-19 10:32:12 +0100vglfr(~vglfr@coupling.penchant.volia.net) (Ping timeout: 240 seconds)
2022-02-19 10:32:17 +0100jtomas(~jtomas@210.red-88-24-179.staticip.rima-tde.net) (Ping timeout: 240 seconds)
2022-02-19 10:32:49 +0100vglfr(~vglfr@coupling.penchant.volia.net)
2022-02-19 10:32:53 +0100 <kuribas> yeah, it's the direction we want to go in, but it will be a lot of work.
2022-02-19 10:35:12 +0100 <dminuoso> If you want to use just ansible, perhaps ansible vault might be suitable for you
2022-02-19 10:35:23 +0100 <kuribas> right
2022-02-19 10:35:45 +0100 <kuribas> We're also short on infra people.
2022-02-19 10:35:50 +0100 <dminuoso> Our solution is quite elaborate to cope with the realities of nixos. :)
2022-02-19 10:36:09 +0100 <kuribas> nixos looks interesting, but no way they'll accept it in our company :)
2022-02-19 10:37:20 +0100 <dminuoso> heh there's not much acceptance here either
2022-02-19 10:37:25 +0100 <dminuoso> but we're short on infra people
2022-02-19 10:37:52 +0100dwt_(~dwt_@c-98-198-103-176.hsd1.tx.comcast.net) (Ping timeout: 256 seconds)
2022-02-19 10:37:59 +0100 <dminuoso> So its a "if you need us to manage this, we must use the tools to reduce our burden and effort"
2022-02-19 10:38:17 +0100alx741(~alx741@181.199.42.143)
2022-02-19 10:38:24 +0100chenqisu1(~chenqisu1@183.217.200.249) (Remote host closed the connection)
2022-02-19 10:40:31 +0100 <dminuoso> But now here we are. ~20 nixos machins running our mail cluster, we're rebuilding our DNS infrastructure to nixos, rebuilding a thanos cluster with nixos, our customer authentication service is a fleet of nixos..
2022-02-19 10:40:40 +0100 <dminuoso> We're like the borg.
2022-02-19 10:41:10 +0100 <maerwald[m]> Using nix to reduce effort sounds like using Haskell to reduce code denseness
2022-02-19 10:42:54 +0100alx741(~alx741@181.199.42.143) (Read error: Connection reset by peer)
2022-02-19 10:43:32 +0100Guest73(~Guest73@2a02:587:983d:7c00:d3f3:4e58:6ef2:5281) (Quit: Client closed)
2022-02-19 10:43:40 +0100 <dminuoso> maerwald[m]: when you're managing some 30 servers, then getting any coherence in terms of "how must all servers be equipped", how are the servers even configures (admins logging in and just modifying things?) is definitely a problem
2022-02-19 10:43:59 +0100 <dminuoso> Especially if we want to do other things than play sysadmin all day long
2022-02-19 10:44:20 +0100 <dminuoso> Im not saying its the only way, but we tried alternatives and nixos seems to be getting us what we need
2022-02-19 10:44:26 +0100 <dminuoso> so for us its working
2022-02-19 10:44:48 +0100wonko(~wjc@user/wonko)
2022-02-19 10:46:04 +0100dwt_(~dwt_@c-98-198-103-176.hsd1.tx.comcast.net)
2022-02-19 10:47:24 +0100alp(~alp@user/alp) (Ping timeout: 240 seconds)
2022-02-19 10:48:36 +0100dyeplexer(~dyeplexer@user/dyeplexer) (Ping timeout: 240 seconds)
2022-02-19 10:49:46 +0100Null_A(~null_a@2601:645:8700:2290:890f:d3a0:aab0:f3f)
2022-02-19 10:49:48 +0100_ht(~quassel@231-169-21-31.ftth.glasoperator.nl)
2022-02-19 10:50:29 +0100wroathe(~wroathe@user/wroathe)
2022-02-19 10:51:47 +0100 <kuribas> maerwald[m]: haskell is great to reduce code denseness.
2022-02-19 10:51:58 +0100 <kuribas> not sure what point you want to make.
2022-02-19 10:52:54 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:b580:ab83:1b56:af3b)
2022-02-19 10:52:57 +0100fendor(~fendor@77.119.223.31.wireless.dyn.drei.com)
2022-02-19 10:53:15 +0100coot(~coot@213.134.190.95)
2022-02-19 10:54:17 +0100Null_A(~null_a@2601:645:8700:2290:890f:d3a0:aab0:f3f) (Ping timeout: 240 seconds)
2022-02-19 10:54:38 +0100 <kuribas> I find haskell even denser than lisps, despite the types.
2022-02-19 10:55:00 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2022-02-19 10:55:23 +0100 <maerwald[m]> I have no idea what you mean
2022-02-19 10:55:44 +0100notzmv(~zmv@user/notzmv)
2022-02-19 10:56:03 +0100chronon(~chronon@user/chronon) (Quit: leaving)
2022-02-19 10:56:13 +0100chronon(~chronon@user/chronon)
2022-02-19 10:56:22 +0100 <ski> ("dense" as in "concise"/"brief" ?)
2022-02-19 10:56:57 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:b580:ab83:1b56:af3b) (Ping timeout: 240 seconds)
2022-02-19 10:57:47 +0100 <maerwald[m]> ski: depends. Dense as in: you can't be drunk while reading code, which works great with java
2022-02-19 10:59:39 +0100alx741(~alx741@157.100.197.240)
2022-02-19 11:00:42 +0100 <kuribas> you shouldn't be drunk while reading code...
2022-02-19 11:01:03 +0100 <maerwald[m]> kuribas: why not
2022-02-19 11:01:05 +0100dyeplexer(~dyeplexer@user/dyeplexer)
2022-02-19 11:04:13 +0100merijn(~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
2022-02-19 11:04:13 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 11:05:23 +0100 <kuribas> being drunk is not a criterium I use for evaluation anything programming related.
2022-02-19 11:05:32 +0100 <kuribas> being tired perhaps.
2022-02-19 11:05:53 +0100 <kuribas> I'd prefer read haskell being tired over read java.
2022-02-19 11:06:15 +0100Ariakenom_(~Ariakenom@2001:9b1:efe:9d00:c571:ed19:3ac0:c340)
2022-02-19 11:07:27 +0100 <icrbow[m]> Being drunk while hotfixing some python code at 2am was my pivotal moment for turning Haskell. The solution was... not. And there was no compiler to steady my hands.
2022-02-19 11:07:43 +0100coot(~coot@213.134.190.95) (Ping timeout: 272 seconds)
2022-02-19 11:07:45 +0100 <maerwald[m]> xD
2022-02-19 11:09:01 +0100 <ski> @quote is.ok.though
2022-02-19 11:09:01 +0100 <lambdabot> dons says: Coding drunk in Haskell is ok though, its like drinking on a passenger plane flight -- the stewards will prevent you from hurting anyone. However, coding drunk in C is just scary, DUI
2022-02-19 11:09:01 +0100 <lambdabot> territory, and should not be allowed. I hope linux kernel devs don't write code under the influence
2022-02-19 11:10:38 +0100 <icrbow[m]> I wonder if "Ballmer Peak" thing somehow related to Microsoft Research work on Haskell.
2022-02-19 11:11:58 +0100 <maerwald[m]> ski: reading and writing are two wildly different things though. Reading other people's code feels like going through the memoirs of a serial killer and trying to figure out when they lost it.
2022-02-19 11:12:34 +0100szkl(uid110435@id-110435.uxbridge.irccloud.com)
2022-02-19 11:13:58 +0100 <maerwald[m]> "Other people" here equates to yourself in two weeks xD
2022-02-19 11:14:30 +0100 <maerwald[m]> So don't worry, have a glass
2022-02-19 11:15:32 +0100 <kuribas> That's a scary comparison...
2022-02-19 11:16:22 +0100Ariakenom__(~Ariakenom@h-82-196-111-63.NA.cust.bahnhof.se)
2022-02-19 11:17:19 +0100capo_greco(~textual@60-241-161-167.static.tpgi.com.au)
2022-02-19 11:20:20 +0100Ariakenom_(~Ariakenom@2001:9b1:efe:9d00:c571:ed19:3ac0:c340) (Ping timeout: 250 seconds)
2022-02-19 11:21:31 +0100 <[exa]> icrbow[m]: I believe that Ballmer peak was evaluated using the traditional microsoft evaluation methods, such as the cumulative success of Mr Clippy
2022-02-19 11:22:12 +0100alx741(~alx741@181.199.42.143)
2022-02-19 11:26:36 +0100dyeplexer(~dyeplexer@user/dyeplexer) (Ping timeout: 240 seconds)
2022-02-19 11:27:32 +0100 <dminuoso> maerwald[m]: But anyway, I can certainly see where you're coming from. In many cases simpler is better, and nix certainly complicated things a lot.
2022-02-19 11:27:49 +0100 <dminuoso> Nix has very shitty UX (the diagnostics are ususally horrid), has piss poor documentation at times..
2022-02-19 11:29:09 +0100waleee(~waleee@h-98-128-229-110.NA.cust.bahnhof.se) (Ping timeout: 256 seconds)
2022-02-19 11:30:50 +0100alx741(~alx741@181.199.42.143) (Read error: Connection reset by peer)
2022-02-19 11:34:12 +0100 <maerwald[m]> Would you trust nix to manage your postfix config via high level declarative config? ;)
2022-02-19 11:35:43 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-02-19 11:35:43 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-02-19 11:35:43 +0100wroathe(~wroathe@user/wroathe)
2022-02-19 11:39:45 +0100dyeplexer(~dyeplexer@user/dyeplexer)
2022-02-19 11:40:29 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-02-19 11:40:49 +0100cosimone(~user@93-47-228-207.ip115.fastwebnet.it)
2022-02-19 11:40:55 +0100bonz060bonfacekilz
2022-02-19 11:42:48 +0100bonfacekilzbonz060
2022-02-19 11:45:55 +0100 <[exa]> maerwald[m]: I thought it's just me, but are the admins generally very touchy about postfix configs? :D
2022-02-19 11:46:58 +0100irishman(~vshev4enk@178.151.117.243)
2022-02-19 11:47:17 +0100dyeplexer(~dyeplexer@user/dyeplexer) (Ping timeout: 256 seconds)
2022-02-19 11:47:27 +0100alx741(~alx741@181.199.42.143)
2022-02-19 11:49:37 +0100bonz060bonfacekilz
2022-02-19 11:49:40 +0100capo_greco(~textual@60-241-161-167.static.tpgi.com.au) (Quit: My MacBook Air has gone to sleep. ZZZzzz…)
2022-02-19 11:50:10 +0100alx741(~alx741@181.199.42.143) (Read error: Connection reset by peer)
2022-02-19 11:50:24 +0100 <maerwald[m]> Not sure, but having configured postfix servers manually, I don't trust some random packager to get it right, especially across postfix versions
2022-02-19 11:50:55 +0100alx741(~alx741@157.100.197.240)
2022-02-19 11:51:38 +0100 <maerwald[m]> That leaves us with replicating low level configs across machines, which isn't that hard if you control the environment
2022-02-19 11:52:03 +0100irishman(~vshev4enk@178.151.117.243) (Ping timeout: 272 seconds)
2022-02-19 11:52:04 +0100bonfacekilzbonz060
2022-02-19 11:52:22 +0100bonz060bonfacekilz
2022-02-19 11:53:09 +0100awpr(uid446117@id-446117.lymington.irccloud.com) (Quit: Connection closed for inactivity)
2022-02-19 11:53:39 +0100coot(~coot@213.134.190.95)
2022-02-19 11:55:07 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 11:57:36 +0100Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2022-02-19 11:59:35 +0100dyeplexer(~dyeplexer@user/dyeplexer)
2022-02-19 12:01:09 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
2022-02-19 12:03:36 +0100capo_greco(~textual@60-241-161-167.static.tpgi.com.au)
2022-02-19 12:10:28 +0100mikoto-chan(~mikoto-ch@213.177.151.239)
2022-02-19 12:10:45 +0100chronon(~chronon@user/chronon) (Quit: leaving)
2022-02-19 12:10:54 +0100chronon(~chronon@user/chronon)
2022-02-19 12:11:07 +0100 <mikoto-chan> what was the category channel called again?
2022-02-19 12:11:20 +0100pooryorick(~pooryoric@87-119-174-173.tll.elisa.ee)
2022-02-19 12:12:24 +0100kmein(~weechat@user/kmein) (Quit: ciao kakao)
2022-02-19 12:12:44 +0100kmein(~weechat@user/kmein)
2022-02-19 12:13:23 +0100alx741(~alx741@157.100.197.240)
2022-02-19 12:13:53 +0100zeenk(~zeenk@2a02:2f04:a30d:1300:51a3:bcfc:6cda:9fc5) (Quit: Konversation terminated!)
2022-02-19 12:14:00 +0100kritzefitz(~kritzefit@debian/kritzefitz)
2022-02-19 12:16:33 +0100lavaman(~lavaman@98.38.249.169)
2022-02-19 12:17:40 +0100fendor_(~fendor@178.165.200.21.wireless.dyn.drei.com)
2022-02-19 12:19:48 +0100fendor(~fendor@77.119.223.31.wireless.dyn.drei.com) (Ping timeout: 240 seconds)
2022-02-19 12:21:00 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
2022-02-19 12:22:10 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 12:38:18 +0100kuribas(~user@ptr-25vy0i8y9oiry1fm4yq.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 26.3))
2022-02-19 12:40:01 +0100alx741(~alx741@181.199.42.143)
2022-02-19 12:42:45 +0100 <capo_greco> in the miso documentation, Nix seems to be more or less a pre-requisite?
2022-02-19 12:43:22 +0100 <capo_greco> Nix is a bit annoying to install on Big Sur
2022-02-19 12:43:22 +0100alx741(~alx741@181.199.42.143) (Read error: Connection reset by peer)
2022-02-19 12:43:39 +0100 <capo_greco> I was wondering if people were using Miso without Nix
2022-02-19 12:46:34 +0100wonko(~wjc@user/wonko) (Ping timeout: 250 seconds)
2022-02-19 12:50:06 +0100Null_A(~null_a@2601:645:8700:2290:890f:d3a0:aab0:f3f)
2022-02-19 12:53:00 +0100Erutuon(~Erutuon@user/erutuon) (Ping timeout: 240 seconds)
2022-02-19 12:54:36 +0100Null_A(~null_a@2601:645:8700:2290:890f:d3a0:aab0:f3f) (Ping timeout: 240 seconds)
2022-02-19 12:54:57 +0100acidjnk(~acidjnk@p200300d0c733ea53d592f9418a369360.dip0.t-ipconnect.de)
2022-02-19 12:54:59 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:b580:ab83:1b56:af3b)
2022-02-19 12:56:40 +0100Hanicef(~gustaf@81-229-9-108-no92.tbcn.telia.com)
2022-02-19 12:57:26 +0100bontaq(~user@ool-45779fe5.dyn.optonline.net)
2022-02-19 12:59:17 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:b580:ab83:1b56:af3b) (Ping timeout: 240 seconds)
2022-02-19 13:00:16 +0100alx741(~alx741@181.199.42.143)
2022-02-19 13:01:51 +0100acidjnk(~acidjnk@p200300d0c733ea53d592f9418a369360.dip0.t-ipconnect.de) (Ping timeout: 256 seconds)
2022-02-19 13:02:02 +0100 <maerwald> capo_greco: ghcjs without nix is generally almost impossible
2022-02-19 13:03:49 +0100alx741(~alx741@181.199.42.143) (Read error: Connection reset by peer)
2022-02-19 13:03:53 +0100 <capo_greco> ah. ok nix it is
2022-02-19 13:08:25 +0100Null_A(~null_a@2601:645:8700:2290:890f:d3a0:aab0:f3f)
2022-02-19 13:12:57 +0100Null_A(~null_a@2601:645:8700:2290:890f:d3a0:aab0:f3f) (Ping timeout: 240 seconds)
2022-02-19 13:20:29 +0100alx741(~alx741@157.100.197.240)
2022-02-19 13:22:11 +0100jao(~jao@68.235.43.84)
2022-02-19 13:23:58 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 13:32:45 +0100capo_greco(~textual@60-241-161-167.static.tpgi.com.au) (Quit: Textual IRC Client: www.textualapp.com)
2022-02-19 13:37:01 +0100alp(~alp@user/alp)
2022-02-19 13:40:33 +0100vysn(~vysn@user/vysn)
2022-02-19 13:41:54 +0100alx741(~alx741@157.100.197.240)
2022-02-19 13:44:24 +0100coot(~coot@213.134.190.95) (Quit: coot)
2022-02-19 13:45:04 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 13:45:37 +0100dyeplexer(~dyeplexer@user/dyeplexer) (Ping timeout: 240 seconds)
2022-02-19 13:46:52 +0100Hashstoned
2022-02-19 13:51:02 +0100stonedHash
2022-02-19 13:54:04 +0100econo(uid147250@user/econo) (Quit: Connection closed for inactivity)
2022-02-19 13:55:57 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:5928:8400:a51e:7799)
2022-02-19 14:00:17 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:5928:8400:a51e:7799) (Ping timeout: 240 seconds)
2022-02-19 14:00:38 +0100zer0bitz(~zer0bitz@2001:2003:f74d:b800:34e0:8b74:dd2c:1d62)
2022-02-19 14:00:40 +0100pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2022-02-19 14:01:18 +0100capo_greco(~textual@60-241-161-167.static.tpgi.com.au)
2022-02-19 14:03:31 +0100alx741(~alx741@157.100.197.240)
2022-02-19 14:10:54 +0100jtomas(~jtomas@210.red-88-24-179.staticip.rima-tde.net)
2022-02-19 14:11:15 +0100 <capo_greco> ok so I have installed nix according to this guide: https://duan.ca/2020/12/13/nix-on-macos-11-big-sur/
2022-02-19 14:11:16 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 14:11:27 +0100 <capo_greco> but I am getting `fish: Unknown command: nix-shell`
2022-02-19 14:12:08 +0100szkl(uid110435@id-110435.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
2022-02-19 14:12:30 +0100 <capo_greco> I feel like I want to `fish_add_path` but I'm not sure where nix-shell lives
2022-02-19 14:12:45 +0100 <capo_greco> or if it even works that way
2022-02-19 14:13:02 +0100vysn(~vysn@user/vysn) (Ping timeout: 260 seconds)
2022-02-19 14:13:29 +0100Ariakenom__(~Ariakenom@h-82-196-111-63.NA.cust.bahnhof.se) (Ping timeout: 256 seconds)
2022-02-19 14:13:29 +0100merijn(~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl)
2022-02-19 14:14:03 +0100vglfr(~vglfr@coupling.penchant.volia.net) (Ping timeout: 256 seconds)
2022-02-19 14:14:15 +0100vglfr(~vglfr@coupling.penchant.volia.net)
2022-02-19 14:15:30 +0100 <chronon> Is it really true that 1-ary tuples are not allowed to exist at alll in Haskell? Python has the syntax (123,) with that extra comma to differentiate tuples from mere parentheses.
2022-02-19 14:16:01 +0100slowButPresent(~slowButPr@user/slowbutpresent)
2022-02-19 14:16:16 +0100jao(~jao@68.235.43.84) (Ping timeout: 250 seconds)
2022-02-19 14:18:29 +0100 <kritzefitz> chronon: Arguably there is a 1-ary tuple in Haskell, it's just called Identity.
2022-02-19 14:19:06 +0100 <chronon> But that would not have type tuple, unless I'm misunderstanding something.
2022-02-19 14:20:00 +0100 <kritzefitz> Formally, there is no “tuple type” that is common between all tuples, because all tuples of different lengths necessarily have different types.
2022-02-19 14:20:13 +0100razetime(~quassel@117.254.35.46)
2022-02-19 14:21:08 +0100 <chronon> Right. I was about to suggest.. ok got it. Thanks.
2022-02-19 14:21:10 +0100coot(~coot@213.134.190.95)
2022-02-19 14:21:47 +0100 <kritzefitz> This makes 1-ary tuples much less useful in Haskell than in Python, because in Python a 1-ary tuple is a special case of n-ary tuples. In Haskell tuples of different lengths don't really have anything in common.
2022-02-19 14:23:06 +0100 <chronon> Right. Makes sense.
2022-02-19 14:27:38 +0100alx741(~alx741@181.199.42.143)
2022-02-19 14:30:56 +0100alx741(~alx741@181.199.42.143) (Read error: Connection reset by peer)
2022-02-19 14:33:19 +0100vglfr(~vglfr@coupling.penchant.volia.net) (Ping timeout: 256 seconds)
2022-02-19 14:36:56 +0100azimut_(~azimut@gateway/tor-sasl/azimut)
2022-02-19 14:37:14 +0100vglfr(~vglfr@coupling.penchant.volia.net)
2022-02-19 14:37:25 +0100Null_A(~null_a@2601:645:8700:2290:890f:d3a0:aab0:f3f)
2022-02-19 14:38:56 +0100azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds)
2022-02-19 14:43:30 +0100Midjak(~Midjak@82.66.147.146)
2022-02-19 14:47:24 +0100merijn(~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
2022-02-19 14:47:53 +0100alx741(~alx741@157.100.197.240)
2022-02-19 14:49:45 +0100 <Inst[m]> kritzefitz: how do tuples work in Haskell?
2022-02-19 14:49:49 +0100 <Inst[m]> I have fst, snd, pattern matching
2022-02-19 14:49:55 +0100 <Inst[m]> but how do I manipulate tuples?
2022-02-19 14:49:56 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 14:50:19 +0100jtomas(~jtomas@210.red-88-24-179.staticip.rima-tde.net) (Ping timeout: 256 seconds)
2022-02-19 14:51:38 +0100ProfSimm(~ProfSimm@176-12-60-137.pon.spectrumnet.bg)
2022-02-19 14:52:41 +0100 <geekosaur> that's basically it. inparticular you cannot iterate over a tuple without type level magick
2022-02-19 14:53:01 +0100 <geekosaur> also fst and snd only work on 2-tuples
2022-02-19 14:53:21 +0100ncopa(~ncopa@alpine/developer/ncopa) (Quit: Alpine Linux, the security-oriented, lightweight Linux distribution)
2022-02-19 14:54:18 +0100dyeplexer(~dyeplexer@user/dyeplexer)
2022-02-19 14:54:37 +0100Null_A(~null_a@2601:645:8700:2290:890f:d3a0:aab0:f3f) (Ping timeout: 256 seconds)
2022-02-19 14:55:24 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Ping timeout: 240 seconds)
2022-02-19 14:55:35 +0100ncopa(~ncopa@gbr2-dev1.alpinelinux.org)
2022-02-19 14:57:17 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2022-02-19 14:59:17 +0100alp(~alp@user/alp) (Ping timeout: 240 seconds)
2022-02-19 15:01:34 +0100max22-(~maxime@2a01cb0883359800bbcc7fa8d7db61b8.ipv6.abo.wanadoo.fr) (Ping timeout: 260 seconds)
2022-02-19 15:01:49 +0100kritzefitz(~kritzefit@debian/kritzefitz) (Ping timeout: 240 seconds)
2022-02-19 15:04:02 +0100kritzefitz(~kritzefit@debian/kritzefitz)
2022-02-19 15:07:00 +0100alx741(~alx741@157.100.197.240)
2022-02-19 15:07:46 +0100 <pavonia> Inst[m]: Manipulating tuples in Haskell basically means deconstructing them and building new ones based on the original or new values
2022-02-19 15:09:53 +0100Unicorn_Princess(~Unicorn_P@93-103-228-248.dynamic.t-2.net)
2022-02-19 15:10:00 +0100cheater(~Username@user/cheater) (Ping timeout: 250 seconds)
2022-02-19 15:10:01 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 15:13:16 +0100cheater(~Username@user/cheater)
2022-02-19 15:18:35 +0100AlexNoo_(~AlexNoo@178.34.160.240)
2022-02-19 15:21:48 +0100Alex_test(~al_test@94.233.240.208) (Ping timeout: 240 seconds)
2022-02-19 15:22:03 +0100AlexNoo(~AlexNoo@94.233.240.208) (Ping timeout: 252 seconds)
2022-02-19 15:22:12 +0100AlexZenon(~alzenon@94.233.240.208) (Ping timeout: 240 seconds)
2022-02-19 15:23:53 +0100Null_A(~null_a@c-98-210-133-39.hsd1.ca.comcast.net)
2022-02-19 15:23:53 +0100alp(~alp@user/alp)
2022-02-19 15:25:44 +0100Alex_test(~al_test@178.34.160.240)
2022-02-19 15:26:07 +0100AlexZenon(~alzenon@178.34.160.240)
2022-02-19 15:26:52 +0100kritzefitz(~kritzefit@debian/kritzefitz) (Ping timeout: 256 seconds)
2022-02-19 15:28:17 +0100Null_A(~null_a@c-98-210-133-39.hsd1.ca.comcast.net) (Ping timeout: 240 seconds)
2022-02-19 15:28:37 +0100alx741(~alx741@157.100.197.240)
2022-02-19 15:31:27 +0100alp(~alp@user/alp) (Ping timeout: 256 seconds)
2022-02-19 15:31:33 +0100AlexNoo_AlexNoo
2022-02-19 15:32:01 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 15:33:10 +0100machinedgod(~machinedg@24.105.81.50)
2022-02-19 15:33:23 +0100mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds)
2022-02-19 15:35:21 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2022-02-19 15:35:25 +0100mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475)
2022-02-19 15:35:40 +0100max22-(~maxime@2a01cb088335980000d616136ecfccf9.ipv6.abo.wanadoo.fr)
2022-02-19 15:36:14 +0100Vajb(~Vajb@2001:999:274:c862:3b86:e1e1:5bff:355e)
2022-02-19 15:37:01 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-02-19 15:37:01 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-02-19 15:37:01 +0100wroathe(~wroathe@user/wroathe)
2022-02-19 15:44:57 +0100 <FernandoChu[m]> multiline evals in HLS are not working for me, any ideas? Running the example in the docs gives me `unknown command '{'` https://github.com/haskell/haskell-language-server/blob/master/plugins/hls-eval-plugin/README.md#m…
2022-02-19 15:45:37 +0100 <FernandoChu[m]> running vscode with ghc 8.10.7 if it matters
2022-02-19 15:46:37 +0100 <geekosaur> I believe the point of that is exactly that miultilines don't work in HLS (that's a doctest example)
2022-02-19 15:48:18 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2022-02-19 15:48:39 +0100alx741(~alx741@157.100.197.240)
2022-02-19 15:49:26 +0100 <FernandoChu[m]> oops skimmed too fast
2022-02-19 15:49:29 +0100 <FernandoChu[m]> thanks
2022-02-19 15:53:20 +0100xff0x(~xff0x@2001:1a81:52c9:2700:23a4:7c27:1274:b7bc) (Ping timeout: 250 seconds)
2022-02-19 15:53:21 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 15:54:57 +0100hughjfchen(~hughjfche@vmi556545.contaboserver.net) (Quit: WeeChat 2.8)
2022-02-19 15:58:19 +0100hueso(~root@user/hueso) (Ping timeout: 256 seconds)
2022-02-19 15:58:25 +0100coot(~coot@213.134.190.95) (Quit: coot)
2022-02-19 15:59:38 +0100xff0x(~xff0x@2001:1a81:52c9:2700:23a4:7c27:1274:b7bc)
2022-02-19 16:02:48 +0100hughjfchen(~hughjfche@vmi556545.contaboserver.net)
2022-02-19 16:04:23 +0100hueso(~root@user/hueso)
2022-02-19 16:09:59 +0100Hanicef(~gustaf@81-229-9-108-no92.tbcn.telia.com) (Quit: leaving)
2022-02-19 16:11:10 +0100alx741(~alx741@157.100.197.240)
2022-02-19 16:11:50 +0100kritzefitz(~kritzefit@debian/kritzefitz)
2022-02-19 16:12:14 +0100averell(~averell@user/averell) (Remote host closed the connection)
2022-02-19 16:20:55 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 16:21:53 +0100euandreh(~euandreh@2804:14c:33:9fe5:41b:9f3:a75a:9b8b) (Ping timeout: 256 seconds)
2022-02-19 16:23:43 +0100euandreh(~euandreh@2804:14c:33:9fe5:41b:9f3:a75a:9b8b)
2022-02-19 16:27:29 +0100xkuru(~xkuru@user/xkuru)
2022-02-19 16:27:51 +0100arievw(~arievw@85.148.234.95)
2022-02-19 16:27:57 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2022-02-19 16:30:50 +0100ix(~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe) (Quit: WeeChat 3.4)
2022-02-19 16:30:58 +0100ix(~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe)
2022-02-19 16:32:21 +0100neurocyte0917090(~neurocyte@IP-045014189135.dynamic.medianet-world.de)
2022-02-19 16:32:22 +0100neurocyte0917090(~neurocyte@IP-045014189135.dynamic.medianet-world.de) (Changing host)
2022-02-19 16:32:22 +0100neurocyte0917090(~neurocyte@user/neurocyte)
2022-02-19 16:33:48 +0100ix(~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe) (Client Quit)
2022-02-19 16:33:56 +0100ix(~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe)
2022-02-19 16:35:06 +0100vysn(~vysn@user/vysn)
2022-02-19 16:37:07 +0100alx741(~alx741@157.100.197.240)
2022-02-19 16:40:28 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 16:40:34 +0100yauhsien_(~yauhsien@61-231-37-106.dynamic-ip.hinet.net)
2022-02-19 16:47:54 +0100deadmarshal(~deadmarsh@95.38.113.80) (Ping timeout: 256 seconds)
2022-02-19 16:49:54 +0100deadmarshal(~deadmarsh@95.38.113.80)
2022-02-19 16:52:32 +0100neurocyte0917090(~neurocyte@user/neurocyte) (Quit: The Lounge - https://thelounge.chat)
2022-02-19 16:52:53 +0100coot(~coot@213.134.190.95)
2022-02-19 16:57:43 +0100neurocyte0917090(~neurocyte@ip-045014189135.dynamic.medianet-world.de)
2022-02-19 16:57:43 +0100neurocyte0917090(~neurocyte@ip-045014189135.dynamic.medianet-world.de) (Changing host)
2022-02-19 16:57:43 +0100neurocyte0917090(~neurocyte@user/neurocyte)
2022-02-19 16:58:17 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:5928:8400:a51e:7799)
2022-02-19 16:58:44 +0100alx741(~alx741@157.100.197.240)
2022-02-19 17:00:52 +0100jtomas(~jtomas@210.red-88-24-179.staticip.rima-tde.net)
2022-02-19 17:02:06 +0100tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net)
2022-02-19 17:02:06 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 17:02:37 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:5928:8400:a51e:7799) (Ping timeout: 240 seconds)
2022-02-19 17:09:58 +0100justGhostjustAstache
2022-02-19 17:11:36 +0100ProfSimm(~ProfSimm@176-12-60-137.pon.spectrumnet.bg) (Remote host closed the connection)
2022-02-19 17:11:56 +0100ProfSimm(~ProfSimm@176-12-60-137.pon.spectrumnet.bg)
2022-02-19 17:13:40 +0100Ariakenom__(~Ariakenom@2001:9b1:efe:9d00:7c26:4e8e:84e:d7a1)
2022-02-19 17:14:15 +0100kritzefitz(~kritzefit@debian/kritzefitz) (Ping timeout: 256 seconds)
2022-02-19 17:16:31 +0100ProfSimm(~ProfSimm@176-12-60-137.pon.spectrumnet.bg) (Ping timeout: 256 seconds)
2022-02-19 17:20:07 +0100alx741(~alx741@157.100.197.240)
2022-02-19 17:23:47 +0100Ariakenom_(~Ariakenom@h-82-196-111-63.NA.cust.bahnhof.se)
2022-02-19 17:23:47 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 17:27:38 +0100Ariakenom__(~Ariakenom@2001:9b1:efe:9d00:7c26:4e8e:84e:d7a1) (Ping timeout: 260 seconds)
2022-02-19 17:40:10 +0100alx741(~alx741@181.199.42.143)
2022-02-19 17:41:05 +0100awpr(uid446117@id-446117.lymington.irccloud.com)
2022-02-19 17:42:39 +0100pavonia(~user@user/siracusa) (Quit: Bye!)
2022-02-19 17:43:15 +0100alx741(~alx741@181.199.42.143) (Read error: Connection reset by peer)
2022-02-19 17:43:55 +0100yauhsien_(~yauhsien@61-231-37-106.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-02-19 17:44:37 +0100mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 240 seconds)
2022-02-19 17:44:46 +0100yauhsien_(~yauhsien@61-231-37-106.dynamic-ip.hinet.net)
2022-02-19 17:45:12 +0100tremontremon_
2022-02-19 17:46:43 +0100doyougnu(~doyougnu@cpe-67-249-83-190.twcny.res.rr.com) (Ping timeout: 272 seconds)
2022-02-19 17:46:51 +0100mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475)
2022-02-19 17:47:25 +0100michalz(~michalz@185.246.204.45)
2022-02-19 17:47:32 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-02-19 17:47:32 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-02-19 17:47:32 +0100wroathe(~wroathe@user/wroathe)
2022-02-19 17:48:01 +0100sebastiandb(~sebastian@pool-173-79-64-34.washdc.fios.verizon.net)
2022-02-19 17:49:24 +0100yauhsien_(~yauhsien@61-231-37-106.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
2022-02-19 17:49:48 +0100 <sebastiandb> I was having trouble getting ghcid set up, can I ask for help on this channel? I'm pretty much a beginner, and I'm trying to set up an environment to learn Haskell.
2022-02-19 17:50:59 +0100 <geekosaur> you can ask in here but I'm not sure anyone who could be helpful is around at the moment; you might want to ask your question and stick around
2022-02-19 17:51:11 +0100 <sebastiandb> Makes sense, thanks.
2022-02-19 17:51:55 +0100 <sebastiandb> Basically, if I load ghcid without any arguments, it tells me GHCi isn't working properly. "No files loaded, GHCi is not working properly."
2022-02-19 17:52:08 +0100 <sebastiandb> Is that meant to be the default behavior?
2022-02-19 17:53:17 +0100 <geekosaur> the default is to run ghci directly. if you are using stack or a cabal project, you'll need to tell ghcid to use stack ghci or cabal repl, respectively, because otherwise it won't find its dependencies
2022-02-19 17:54:29 +0100neurocyte0917090(~neurocyte@user/neurocyte) (Ping timeout: 256 seconds)
2022-02-19 17:55:23 +0100 <sebastiandb> How can I do that? Do I load something like a .ghci file in my local directory?
2022-02-19 17:56:33 +0100 <sebastiandb> Also, I installed it using cabal at first, because for some reason stack wasn't working. And then I installed it with stack. It seems like there isn't any way to uninstall cabal packages, too. Was that something I shouldn't have done?
2022-02-19 17:56:56 +0100 <geekosaur> actually it looks like it will use stack ghci or cabal repl by itselfifit finds the appropriate files. hardest is if you just use plain ghci, you'll need to create an appropriate .ghci file at the root of the project
2022-02-19 17:58:19 +0100 <sebastiandb> Yeah, it seems to load a cabal repl by default, and then gives that message from earlier. That makes sense, what you're saying.
2022-02-19 17:58:45 +0100 <sebastiandb> Specifically, it says this: "GHCi, version 8.10.7: https://www.haskell.org/ghc/ :? for help
2022-02-19 17:58:45 +0100 <sebastiandb> Loaded GHCi configuration from /tmp/cabal-repl.-18331/setcwd.ghci
2022-02-19 17:58:45 +0100 <sebastiandb> No files loaded, GHCi is not working properly."
2022-02-19 17:59:29 +0100 <sebastiandb> Sorry for all the questions, I'm just kind of confused at a a lot of things. It seems to be loading from /tmp/, which is weird.
2022-02-19 17:59:43 +0100 <geekosaur> that is just how it configures cabal repl
2022-02-19 18:00:22 +0100 <geekosaur> but you said you were using stack? you'll need to pass --command="stack ghci"
2022-02-19 18:00:24 +0100alx741(~alx741@157.100.197.240)
2022-02-19 18:00:27 +0100 <sclv> you have to run it as `ghcid "--command=ghci Main.hs"` or with whatever the command is that you want to pass it that will actually run a repl with the files you want loaded.
2022-02-19 18:00:51 +0100 <sclv> so you find the command line invocation that brings up ghci with your files loaded, and then whatever that command line is, you tell it to ghcid when you launch it
2022-02-19 18:00:53 +0100 <geekosaur> in general you don't remove packages with either cabal or stack
2022-02-19 18:01:23 +0100 <sclv> also ghcid is an executable, so cabal installing it just dropped a binary (or a symlink to a binary) in some directory on your path is all.
2022-02-19 18:03:02 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 18:03:41 +0100 <sebastiandb> I see. Yeah, I just passed --command="ghci test.hs" to it. And now it's loaded, and doesn't seem to be responding to any of my commands? Thanks for the info, though. I installed cabal and stack at first because I guess I was confused at which to use? I installed them a while ago.
2022-02-19 18:05:05 +0100 <geekosaur> the usual idea is it doesn't
2022-02-19 18:05:38 +0100 <geekosaur> it just watches for files to change and restarts ghci automatically, then shuts it down. you're looking for error messages from the attempt to compile
2022-02-19 18:05:59 +0100 <geekosaur> if you're looking for an interactive ghci, just run ghci directly
2022-02-19 18:06:35 +0100 <sebastiandb> I get it, now. And through this, I use a plugin for my editor or something, and that's how it's meant to be used, then?
2022-02-19 18:06:46 +0100 <sebastiandb> Thanks for answering my questions so far
2022-02-19 18:08:44 +0100razetime(~quassel@117.254.35.46) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
2022-02-19 18:09:07 +0100razetime(~quassel@117.254.35.46)
2022-02-19 18:10:21 +0100 <geekosaur> this doesn't really need an editor plugin, it does all the work itself. ad it's pretty simplistic. if you want a more traditional IDE setup, there's haskell-language-server which works with a numberof editors and in particular the VS Code Haskell plugin knows how to use it out of the box
2022-02-19 18:11:35 +0100 <sebastiandb> I got the sense that haskell-language-server and ghcid covered different things? That's why there's this neovim plugin for it. https://github.com/ndmitchell/ghcid/tree/master/plugins/nvim
2022-02-19 18:12:26 +0100Vajb(~Vajb@2001:999:274:c862:3b86:e1e1:5bff:355e) (Ping timeout: 260 seconds)
2022-02-19 18:12:54 +0100 <sebastiandb> But now I think I'm getting how it's meant to work. You have a terminal window with ghcid open, and run your editor in a different window, and check ghcid every now and then.
2022-02-19 18:13:02 +0100 <geekosaur> yep
2022-02-19 18:13:44 +0100razetime(~quassel@117.254.35.46) (Client Quit)
2022-02-19 18:14:00 +0100razetime(~quassel@117.254.35.46)
2022-02-19 18:14:10 +0100razetime(~quassel@117.254.35.46) (Client Quit)
2022-02-19 18:14:33 +0100razetime(~quassel@117.254.35.46)
2022-02-19 18:15:05 +0100razetime(~quassel@117.254.35.46) (Client Quit)
2022-02-19 18:17:11 +0100 <sebastiandb> Thanks for the help! Appreciate it.
2022-02-19 18:20:54 +0100alx741(~alx741@181.199.42.143)
2022-02-19 18:23:25 +0100alx741(~alx741@181.199.42.143) (Read error: Connection reset by peer)
2022-02-19 18:24:19 +0100yauhsien_(~yauhsien@61-231-37-106.dynamic-ip.hinet.net)
2022-02-19 18:24:51 +0100DNH(~DNH@2a02:8108:1100:16d8:682c:7604:30f7:a4ea)
2022-02-19 18:27:55 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-02-19 18:32:51 +0100tabemann(~travisb@172-13-49-137.lightspeed.milwwi.sbcglobal.net) (Remote host closed the connection)
2022-02-19 18:33:42 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-02-19 18:33:42 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-02-19 18:33:42 +0100wroathe(~wroathe@user/wroathe)
2022-02-19 18:36:12 +0100travisb(~travisb@172-13-49-137.lightspeed.milwwi.sbcglobal.net)
2022-02-19 18:38:39 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 272 seconds)
2022-02-19 18:40:13 +0100alx741(~alx741@157.100.197.240)
2022-02-19 18:44:07 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 18:44:53 +0100merijn(~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl)
2022-02-19 18:45:45 +0100zebrag(~chris@user/zebrag)
2022-02-19 18:46:57 +0100nabaiste^(~nabaiste@50.233.120.162) (Ping timeout: 240 seconds)
2022-02-19 18:48:56 +0100sebastiandb(~sebastian@pool-173-79-64-34.washdc.fios.verizon.net) (Leaving)
2022-02-19 18:50:18 +0100cheater(~Username@user/cheater) (Ping timeout: 256 seconds)
2022-02-19 18:51:25 +0100dspyz(~dspyz@135-180-196-116.fiber.dynamic.sonic.net)
2022-02-19 18:53:28 +0100cheater(~Username@user/cheater)
2022-02-19 18:54:54 +0100zaquest(~notzaques@5.130.79.72) (Ping timeout: 252 seconds)
2022-02-19 18:57:43 +0100zaquest(~notzaques@5.130.79.72)
2022-02-19 18:59:49 +0100nabaiste^(~nabaiste@50.233.120.162)
2022-02-19 19:00:02 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:5928:8400:a51e:7799)
2022-02-19 19:01:50 +0100alx741(~alx741@157.100.197.240)
2022-02-19 19:02:16 +0100dspyz_(~david@135-180-196-116.fiber.dynamic.sonic.net)
2022-02-19 19:02:22 +0100CiaoSen(~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
2022-02-19 19:02:43 +0100yauhsien_(~yauhsien@61-231-37-106.dynamic-ip.hinet.net) (Ping timeout: 272 seconds)
2022-02-19 19:02:46 +0100dspyz(~dspyz@135-180-196-116.fiber.dynamic.sonic.net) (Quit: Client closed)
2022-02-19 19:03:01 +0100 <dspyz_> Is hp2ps still in use? Or is there a better tool?
2022-02-19 19:04:12 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:5928:8400:a51e:7799) (Ping timeout: 240 seconds)
2022-02-19 19:04:15 +0100 <geekosaur> still in use although hp2pretty masy be better for some things
2022-02-19 19:04:50 +0100 <dspyz_> When I run without `-M` it cuts off the names with `...`; when I run _with_ `-M`, it just doesn't include the key at all
2022-02-19 19:04:50 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 19:05:07 +0100 <dspyz_> I can't figure out how to see the full key
2022-02-19 19:07:25 +0100 <dspyz_> Seems to be true with hp2pretty as well
2022-02-19 19:09:34 +0100 <dspyz_> Oh, there's a number. I guess I can cross-reference against the original .hp file
2022-02-19 19:09:37 +0100 <dspyz_> Still that's annoying
2022-02-19 19:10:16 +0100 <dspyz_> Huh? The `.hp` file _also_ has the names cut off with `...`
2022-02-19 19:11:56 +0100burnsidesLlama(~burnsides@dhcp168-012.wadham.ox.ac.uk)
2022-02-19 19:12:03 +0100 <geekosaur> yeh, I was just digging in the release notes because I vaguely recall this being fixed in some ghc release. what version of ghc are you using?
2022-02-19 19:12:43 +0100 <dspyz_> 8.10.7
2022-02-19 19:13:07 +0100 <dspyz_> (the one on the latest `stackage` lts)
2022-02-19 19:15:23 +0100mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 272 seconds)
2022-02-19 19:15:39 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2022-02-19 19:17:09 +0100mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475)
2022-02-19 19:17:19 +0100dhil(~dhil@cpc103052-sgyl39-2-0-cust260.18-2.cable.virginm.net)
2022-02-19 19:18:36 +0100merijn(~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
2022-02-19 19:19:50 +0100 <dspyz_> What tools are there for reading `.prof` files (JSON or normal)?
2022-02-19 19:20:21 +0100yauhsien_(~yauhsien@61-231-37-106.dynamic-ip.hinet.net)
2022-02-19 19:20:27 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 272 seconds)
2022-02-19 19:21:08 +0100 <geekosaur> not many. I think the intent is to move to eventlog files, for which there are many tools
2022-02-19 19:21:51 +0100 <dspyz_> Well, what do people do for profiling Haskell right now?
2022-02-19 19:22:31 +0100 <dspyz_> For that matter, why does the `-pj` option even _exist_ if there are no tools to read the output?
2022-02-19 19:22:57 +0100 <dspyz_> Presumably, whoever added that wouldn't have thought to include it unless they intended it to be read by _something_
2022-02-19 19:23:14 +0100alx741(~alx741@157.100.197.240)
2022-02-19 19:27:12 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 19:27:56 +0100 <geekosaur> -L ⟨num⟩
2022-02-19 19:27:56 +0100 <geekosaur> Sets the maximum length of a cost-centre stack name in a heap profile. Defaults to 25.
2022-02-19 19:28:20 +0100 <geekosaur> (RTS option)
2022-02-19 19:29:49 +0100arievw(~arievw@85.148.234.95) (Quit: Nettalk6 - www.ntalk.de)
2022-02-19 19:31:46 +0100michalz(~michalz@185.246.204.45) (Ping timeout: 260 seconds)
2022-02-19 19:32:00 +0100azimut_(~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
2022-02-19 19:32:27 +0100azimut(~azimut@gateway/tor-sasl/azimut)
2022-02-19 19:33:26 +0100 <dspyz_> @geekosaur Thanks
2022-02-19 19:33:26 +0100 <lambdabot> Unknown command, try @list
2022-02-19 19:34:09 +0100fef(~thedawn@user/thedawn)
2022-02-19 19:34:10 +0100c209e6dc-4d76-47(~aditya@2601:249:4300:1296:195:dac6:592c:a55a)
2022-02-19 19:35:31 +0100polyphem_wonders if the lamdabot prefix @ is configurable
2022-02-19 19:35:42 +0100polyphem_polyphem
2022-02-19 19:36:34 +0100 <geekosaur> iirc it is, but only at compile time
2022-02-19 19:37:37 +0100notzmv(~zmv@user/notzmv) (Ping timeout: 240 seconds)
2022-02-19 19:37:38 +0100isovector1(~isovector@172.103.216.166.cable.tpia.cipherkey.com)
2022-02-19 19:38:10 +0100michalz(~michalz@185.246.204.33)
2022-02-19 19:38:14 +0100 <isovector1> has anyone used shake in forward mode?
2022-02-19 19:38:26 +0100 <isovector1> i'm wondering if i can still use caches and oracles if doing it in forward mode
2022-02-19 19:38:28 +0100 <sm> dspyz_: profiterole is a simple one that makes prof files clearer
2022-02-19 19:38:48 +0100zincy_(~zincy@host86-160-236-152.range86-160.btcentralplus.com)
2022-02-19 19:38:54 +0100 <sm> there are actually lots of profiling tools. event2html might be a newer one
2022-02-19 19:39:20 +0100Topsi(~Tobias@95.33.25.255)
2022-02-19 19:39:32 +0100 <dspyz_> sm, where are you finding these?
2022-02-19 19:40:12 +0100 <ski> dspyz_ : IRC custom is to not adorn nicknames with sigils (like `@'), but rather to simply mention the nickname, when referring to, or addressing, someone. in the latter caes, you could mention the nickname, then a colon or a comman, and then the message. most IRC clients will highlight/alert the user if their nickname is mentioned, first thing, in a message. not as many will do that, if the nickname occurs
2022-02-19 19:40:15 +0100 <sm> hackage search, web search, past announcements, ghc user guide chapter on performance
2022-02-19 19:40:18 +0100 <ski> later in a message
2022-02-19 19:40:52 +0100 <ski> (prefixing with `@' causes the nickname to not be the first thing. besides, `@' already means something else on IRC (channel operator))
2022-02-19 19:41:28 +0100 <dspyz_> Thanks ski
2022-02-19 19:41:30 +0100dyeplexer(~dyeplexer@user/dyeplexer) (Remote host closed the connection)
2022-02-19 19:42:27 +0100 <dspyz_> sm I was looking at the ghc user guide chapter on performance and didn't see any mentioned. I don't know what to search to get results; everything keeps taking me back to old versions of the GHC user guide
2022-02-19 19:42:46 +0100 <dspyz_> (which mentions only `hp2ps`)
2022-02-19 19:44:01 +0100 <sm> dspyz_: i think there's no only complete list. I'd check the haskell wiki too
2022-02-19 19:44:12 +0100 <sm> no one complete list
2022-02-19 19:45:46 +0100alx741(~alx741@157.100.197.240)
2022-02-19 19:46:36 +0100jtomas(~jtomas@210.red-88-24-179.staticip.rima-tde.net) (Ping timeout: 240 seconds)
2022-02-19 19:49:26 +0100geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2022-02-19 19:49:48 +0100yauhsien_(~yauhsien@61-231-37-106.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
2022-02-19 19:51:01 +0100geekosaur(~geekosaur@xmonad/geekosaur)
2022-02-19 19:51:16 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 19:51:59 +0100econo(uid147250@user/econo)
2022-02-19 19:52:01 +0100Null_A(~null_a@2601:645:8700:2290:890f:d3a0:aab0:f3f)
2022-02-19 19:53:46 +0100mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds)
2022-02-19 19:55:04 +0100doyougnu(~doyougnu@cpe-67-249-83-190.twcny.res.rr.com)
2022-02-19 19:55:30 +0100mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475)
2022-02-19 19:55:37 +0100TonyStone(~TonyStone@2603-7080-8607-c36a-b0ed-1a92-719b-f6c2.res6.spectrum.com) (Ping timeout: 240 seconds)
2022-02-19 19:55:46 +0100s5smongs4msung
2022-02-19 19:56:36 +0100Null_A(~null_a@2601:645:8700:2290:890f:d3a0:aab0:f3f) (Ping timeout: 240 seconds)
2022-02-19 19:59:32 +0100wroathe(~wroathe@user/wroathe)
2022-02-19 20:01:37 +0100hgolden(~hgolden2@cpe-172-114-81-123.socal.res.rr.com) (Remote host closed the connection)
2022-02-19 20:02:02 +0100isovector1(~isovector@172.103.216.166.cable.tpia.cipherkey.com) (Quit: Leaving)
2022-02-19 20:06:11 +0100mcglk(~mcglk@131.191.49.120) (Read error: Connection reset by peer)
2022-02-19 20:09:08 +0100dhil(~dhil@cpc103052-sgyl39-2-0-cust260.18-2.cable.virginm.net) (Remote host closed the connection)
2022-02-19 20:09:14 +0100mcglk(~mcglk@131.191.49.120)
2022-02-19 20:09:26 +0100alx741(~alx741@157.100.197.240)
2022-02-19 20:10:49 +0100zincy_(~zincy@host86-160-236-152.range86-160.btcentralplus.com) (Remote host closed the connection)
2022-02-19 20:11:07 +0100zincy_(~zincy@2a00:23c8:970c:4801:39f9:90f7:922:e73b)
2022-02-19 20:11:38 +0100zincy_(~zincy@2a00:23c8:970c:4801:39f9:90f7:922:e73b) (Remote host closed the connection)
2022-02-19 20:12:53 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 20:18:40 +0100dspyz_(~david@135-180-196-116.fiber.dynamic.sonic.net) (Leaving)
2022-02-19 20:21:24 +0100Sgeo(~Sgeo@user/sgeo)
2022-02-19 20:21:29 +0100waleee(~waleee@h-98-128-229-110.NA.cust.bahnhof.se)
2022-02-19 20:27:24 +0100Null_A(~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909)
2022-02-19 20:29:27 +0100alx741(~alx741@157.100.197.240)
2022-02-19 20:31:57 +0100Null_A(~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909) (Ping timeout: 240 seconds)
2022-02-19 20:32:36 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 20:32:59 +0100coot(~coot@213.134.190.95) (Quit: coot)
2022-02-19 20:33:24 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2022-02-19 20:33:47 +0100TonyStone(~TonyStone@cpe-74-76-51-197.nycap.res.rr.com)
2022-02-19 20:39:15 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-02-19 20:39:15 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-02-19 20:39:15 +0100wroathe(~wroathe@user/wroathe)
2022-02-19 20:41:36 +0100mvk(~mvk@2607:fea8:5cdc:bf00::99e7) (Quit: Going elsewhere)
2022-02-19 20:42:34 +0100mvk(~mvk@2607:fea8:5cdc:bf00::99e7)
2022-02-19 20:42:58 +0100Lord_of_Life_(~Lord@user/lord-of-life/x-2819915)
2022-02-19 20:43:41 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 245 seconds)
2022-02-19 20:44:12 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 256 seconds)
2022-02-19 20:44:14 +0100Lord_of_Life_Lord_of_Life
2022-02-19 20:46:21 +0100Null_A(~null_a@2601:645:8700:2290:890f:d3a0:aab0:f3f)
2022-02-19 20:47:38 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:5928:8400:a51e:7799)
2022-02-19 20:48:00 +0100xff0x(~xff0x@2001:1a81:52c9:2700:23a4:7c27:1274:b7bc) (Ping timeout: 250 seconds)
2022-02-19 20:48:15 +0100mvk(~mvk@2607:fea8:5cdc:bf00::99e7) (Quit: Going elsewhere)
2022-02-19 20:48:31 +0100DNH(~DNH@2a02:8108:1100:16d8:682c:7604:30f7:a4ea) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2022-02-19 20:48:50 +0100xff0x(~xff0x@2001:1a81:52c9:2700:c4c8:f455:66db:3020)
2022-02-19 20:49:23 +0100mvk(~mvk@2607:fea8:5cdc:bf00::99e7)
2022-02-19 20:49:28 +0100alx741(~alx741@157.100.197.240)
2022-02-19 20:49:41 +0100justsomeguy(~justsomeg@user/justsomeguy)
2022-02-19 20:51:05 +0100notzmv(~zmv@user/notzmv)
2022-02-19 20:51:51 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 20:55:23 +0100mvk(~mvk@2607:fea8:5cdc:bf00::99e7) (Quit: Going elsewhere)
2022-02-19 20:55:56 +0100fendor_(~fendor@178.165.200.21.wireless.dyn.drei.com) (Remote host closed the connection)
2022-02-19 20:57:23 +0100mvk(~mvk@2607:fea8:5cdc:bf00::99e7)
2022-02-19 20:57:24 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Ping timeout: 240 seconds)
2022-02-19 21:00:43 +0100juhp(~juhp@128.106.188.82) (Remote host closed the connection)
2022-02-19 21:06:40 +0100juhp(~juhp@128.106.188.82)
2022-02-19 21:07:33 +0100DNH(~DNH@2a02:8108:1100:16d8:682c:7604:30f7:a4ea)
2022-02-19 21:09:57 +0100alx741(~alx741@157.100.197.240)
2022-02-19 21:12:32 +0100wootehfoot(~wootehfoo@user/wootehfoot)
2022-02-19 21:13:25 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 21:14:36 +0100fef(~thedawn@user/thedawn) (Ping timeout: 240 seconds)
2022-02-19 21:18:12 +0100 <Athas> Is there a way to run Haddock on a single module? It takes a long time to run on my entire program, and I'm just writing some (long-form) documentation in one module at the moment.
2022-02-19 21:19:54 +0100justsomeguy(~justsomeg@user/justsomeguy) (Ping timeout: 256 seconds)
2022-02-19 21:21:05 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
2022-02-19 21:22:36 +0100adanwan(~adanwan@gateway/tor-sasl/adanwan) (Ping timeout: 240 seconds)
2022-02-19 21:22:51 +0100adanwan(~adanwan@gateway/tor-sasl/adanwan)
2022-02-19 21:23:45 +0100nabaiste^(~nabaiste@50.233.120.162) (Remote host closed the connection)
2022-02-19 21:24:11 +0100synthmeat(~synthmeat@user/synthmeat) (Quit: WeeChat 3.0)
2022-02-19 21:24:24 +0100synthmeat(~synthmeat@user/synthmeat)
2022-02-19 21:25:17 +0100gehmehgeh(~user@user/gehmehgeh)
2022-02-19 21:28:31 +0100cosimone(~user@93-47-228-207.ip115.fastwebnet.it) (Remote host closed the connection)
2022-02-19 21:29:59 +0100alx741(~alx741@157.100.197.240)
2022-02-19 21:30:36 +0100hyiltiz(~quassel@31.220.5.250) (Ping timeout: 240 seconds)
2022-02-19 21:31:06 +0100 <janus> Athas: there is a new -Winvalid-haddock flag in ghc9, though i guess that wouldn't be sufficient for you
2022-02-19 21:33:11 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 21:33:30 +0100Null_A(~null_a@2601:645:8700:2290:890f:d3a0:aab0:f3f) (Ping timeout: 250 seconds)
2022-02-19 21:34:03 +0100hyiltiz(~quassel@31.220.5.250)
2022-02-19 21:35:00 +0100ystael(~ystael@user/ystael) (Ping timeout: 240 seconds)
2022-02-19 21:35:24 +0100doyougnu(~doyougnu@cpe-67-249-83-190.twcny.res.rr.com) (Ping timeout: 240 seconds)
2022-02-19 21:37:10 +0100acidsys(~LSD@2a03:4000:55:d20::3) (Excess Flood)
2022-02-19 21:41:40 +0100 <considerate[m]> Athas: Yes, you can run `haddock` on a single file.
2022-02-19 21:41:40 +0100 <considerate[m]> https://haskell-haddock.readthedocs.io/en/latest/invoking.html#invoking-haddock
2022-02-19 21:44:00 +0100Erutuon(~Erutuon@user/erutuon)
2022-02-19 21:45:10 +0100zincy_(~zincy@2a00:23c8:970c:4801:39f9:90f7:922:e73b)
2022-02-19 21:47:06 +0100ystael(~ystael@user/ystael)
2022-02-19 21:49:19 +0100k8yun(~k8yun@user/k8yun)
2022-02-19 21:49:35 +0100acidsys(~LSD@2a03:4000:55:d20::3)
2022-02-19 21:51:05 +0100_ht(~quassel@231-169-21-31.ftth.glasoperator.nl) (Remote host closed the connection)
2022-02-19 21:51:37 +0100alx741(~alx741@181.199.42.143)
2022-02-19 21:54:17 +0100alx741(~alx741@181.199.42.143) (Read error: Connection reset by peer)
2022-02-19 21:57:26 +0100pavonia(~user@user/siracusa)
2022-02-19 21:58:34 +0100justsomeguy(~justsomeg@user/justsomeguy)
2022-02-19 22:04:02 +0100chomwitt(~chomwitt@2a02:587:dc04:5f00:97ff:5c76:a7e3:730d)
2022-02-19 22:06:38 +0100 <Athas> considerate[m]: great, thanks!
2022-02-19 22:10:57 +0100alx741(~alx741@181.199.42.143)
2022-02-19 22:12:43 +0100mikoto-chan(~mikoto-ch@213.177.151.239) (Ping timeout: 272 seconds)
2022-02-19 22:14:17 +0100alx741(~alx741@181.199.42.143) (Read error: Connection reset by peer)
2022-02-19 22:14:50 +0100jtomas(~jtomas@210.red-88-24-179.staticip.rima-tde.net)
2022-02-19 22:19:29 +0100cosimone(~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20)
2022-02-19 22:27:16 +0100DNH(~DNH@2a02:8108:1100:16d8:682c:7604:30f7:a4ea) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2022-02-19 22:31:12 +0100alx741(~alx741@157.100.197.240)
2022-02-19 22:34:18 +0100acidjnk(~acidjnk@p200300d0c7363f90cc2edb7570cac520.dip0.t-ipconnect.de)
2022-02-19 22:35:35 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 22:38:12 +0100jtomas(~jtomas@210.red-88-24-179.staticip.rima-tde.net) (Ping timeout: 240 seconds)
2022-02-19 22:38:28 +0100pareto-optimal-d(~pareto-op@2001:470:69fc:105::1:b61f)
2022-02-19 22:39:54 +0100Guest80(~Guest80@47.186.214.206)
2022-02-19 22:40:17 +0100Guest80(~Guest80@47.186.214.206) (Client Quit)
2022-02-19 22:41:17 +0100 <pareto-optimal-d> Does anyone have opinions on "Sums of data types" versus "bucket" data types with a thingType field?
2022-02-19 22:41:17 +0100 <pareto-optimal-d> Longer explanation/note: https://www.paretooptimal.dev/sums-of-data-types-should-be-preferred-over-bucket-data-types-with-a…
2022-02-19 22:42:18 +0100little_mac(~little_ma@2601:410:4300:3ce0:14ec:228f:c3ec:ab2c)
2022-02-19 22:44:18 +0100gehmehgeh(~user@user/gehmehgeh) (Quit: Leaving)
2022-02-19 22:46:26 +0100 <EvanR> sum types are cool and are basically the same as union + tag but more ergonomic. Literally using sum of types (nested Either) is unwieldy, at least in haskell
2022-02-19 22:46:44 +0100 <EvanR> though anonymous sum comes up sometimes not sure where that is
2022-02-19 22:47:07 +0100jtomas(~jtomas@210.red-88-24-179.staticip.rima-tde.net)
2022-02-19 22:49:22 +0100 <ski> i suppose by "sums" they meant not just `Either'
2022-02-19 22:50:33 +0100 <ski> pareto-optimal-d : in the second alternative, why are there `freeUserType' and `paidUserType' fields ?
2022-02-19 22:52:08 +0100alx741(~alx741@157.100.197.240)
2022-02-19 22:53:00 +0100takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2022-02-19 22:53:50 +0100vorpuni(~pvorp@2001:861:3881:c690:d322:f659:136d:eef6)
2022-02-19 22:54:52 +0100 <ski> pareto-optimal-d : also, in the second alternative, the `case u of ...' should presumably match on `Paid pu' and `Free _', rather than `PaidUser pu' and `FreeUser _' ?
2022-02-19 22:54:52 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 22:55:28 +0100 <pareto-optimal-d> Agh, i'm sorry I didn't catch those when reviewing after writing
2022-02-19 22:55:31 +0100 <ski> and the `case articleType a of ...' makes no sense, since there is no `articleType'. presumably uou meant `case a of ...', matching on `Paid _' and `Free fa', rather than on `PaidArticle _' and `FreeArticle fa'
2022-02-19 22:56:03 +0100 <ski> (oh, and you had two distinct `Free' and `Paid' data constructors, so you should either rename, or add module qualification)
2022-02-19 22:57:48 +0100justsomeguy(~justsomeg@user/justsomeguy) (Ping timeout: 240 seconds)
2022-02-19 22:59:18 +0100 <ski> considering the third alternative, it is basically `User = Int * String * (1 + Int)'. if we ignore the (basically useless) `freeUserType' and `paidUserType' fields in the second alternative, then we can see that this alternative is what you get, when you distribute the multiplication over the sum, in the third one : `User = Int * String + Int * String * Int'
2022-02-19 23:02:19 +0100 <pareto-optimal-d> Updated the mistakes, thank you.
2022-02-19 23:02:24 +0100 <ski> this whole thing is reminiscent of attempting to represent `Maybe T' by `Bool * T'. but with that representation, representing `Just t' as `(True,t)', you get useless "slack" when representing `Nothing' as `(False,t0)' for some faux `t0' value. you allow data in your representation that is useless, can be used by mistake, and may be hard to conjure up
2022-02-19 23:02:49 +0100 <ski> (`Maybe T' is of course `1 + T', while `Bool' is `1 + 1')
2022-02-19 23:03:20 +0100cynomys(~cynomys@user/cynomys)
2022-02-19 23:03:39 +0100 <ski> (this ties into the "correct by construction" notion)
2022-02-19 23:04:39 +0100deadmarshal(~deadmarsh@95.38.113.80) (Ping timeout: 272 seconds)
2022-02-19 23:05:11 +0100jgeerds(~jgeerds@55d4b9df.access.ecotel.net)
2022-02-19 23:05:18 +0100Topsi(~Tobias@95.33.25.255) (Ping timeout: 256 seconds)
2022-02-19 23:07:42 +0100 <ehammarstrom> I have just been introduced to fused-effects and written a small program that composes some effects, namely a logger (glorified putStrLn) and file reader (glorified ReadFile with errorhandling). What is good "effect" design? As I see it the vocabulary of an effect could be _really big_ (Database Effect perhaps) since it's like a DSL of sorts (?) Are there any texts or fun libraries using fused-effects that showcase
2022-02-19 23:07:42 +0100 <ehammarstrom> a good practice/scope of an Effect?
2022-02-19 23:12:03 +0100 <pareto-optimal-d> Okay, thanks for your comments ski. I'm still mulling them over. If it helps the larger context that I had in mind here was how using database models as domain types can harm type safety.
2022-02-19 23:12:03 +0100 <pareto-optimal-d> This was a subproblem of that I was trying to solve and get feedback on
2022-02-19 23:12:36 +0100alx741(~alx741@157.100.197.240)
2022-02-19 23:15:45 +0100merijn(~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl)
2022-02-19 23:17:20 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 23:19:37 +0100cyphase_eviltwin(~cyphase@user/cyphase) (Ping timeout: 240 seconds)
2022-02-19 23:24:45 +0100ski. o O ( "Using Algebraic Datatypes as Uniform Representation for Structured Data" in 2003-03-17 at <https://ofai.at/papers/oefai-tr-2003-07.pdf>,"Modelling Large Datasets Using Algebraic Datatypes: A Case Study of the CONFMAN Database" in 2002-05-15 at <http://www.ofai.at/cgi-bin/get-tr?paper=oefai-tr-2002-27.pdf>, both by Markus Mottl )
2022-02-19 23:24:57 +0100 <ski> pareto-optimal-d : ^ might perhaps be interesting
2022-02-19 23:25:37 +0100vorpuni(~pvorp@2001:861:3881:c690:d322:f659:136d:eef6) (Quit: bye)
2022-02-19 23:25:46 +0100steerio(~steerio@aviv.kinneret.de)
2022-02-19 23:25:56 +0100vorpuni(~pvorp@2001:861:3881:c690:d322:f659:136d:eef6)
2022-02-19 23:26:17 +0100DNH(~DNH@2a02:8108:1100:16d8:682c:7604:30f7:a4ea)
2022-02-19 23:26:19 +0100vorpuni(~pvorp@2001:861:3881:c690:d322:f659:136d:eef6) (Client Quit)
2022-02-19 23:26:29 +0100 <jackdk> ehammarstrom: I'm not aware of anything specific but off the top of my head, I'd expect you'd want high-level effects determined by your domain: input this, output that, high-level ops against a datastore. interpret directly into IO, or perhaps an intermediate representation if you need to test at that layer: perhaps you interpret your datastore effect into either postgres or sqlite, and from tehre into IO
2022-02-19 23:27:09 +0100 <jackdk> The demo starting at https://www.youtube.com/watch?v=-dHFOjcK6pA&t=240 may give a good flavour. It shows the effect-system dream, certainly
2022-02-19 23:27:15 +0100cyphase(~cyphase@user/cyphase)
2022-02-19 23:28:04 +0100jonathanx(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Remote host closed the connection)
2022-02-19 23:28:24 +0100jonathanx(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
2022-02-19 23:28:45 +0100zincy_(~zincy@2a00:23c8:970c:4801:39f9:90f7:922:e73b) (Remote host closed the connection)
2022-02-19 23:32:27 +0100burnsidesLlama(~burnsides@dhcp168-012.wadham.ox.ac.uk) (Remote host closed the connection)
2022-02-19 23:35:15 +0100alx741(~alx741@157.100.197.240)
2022-02-19 23:37:31 +0100deadmarshal(~deadmarsh@95.38.118.170)
2022-02-19 23:37:49 +0100 <pareto-optimal-d> ski: interesting indeed! I'll add those to my reading list.
2022-02-19 23:42:08 +0100deadmarshal(~deadmarsh@95.38.118.170) (Ping timeout: 256 seconds)
2022-02-19 23:43:00 +0100alx741(~alx741@157.100.197.240) (Read error: Connection reset by peer)
2022-02-19 23:44:51 +0100 <pareto-optimal-d> <ehammarstrom> "I have just been introduced to..." <- I remember some discussion on keeping effects small and a bias towards reusing existing effects last I researched this.
2022-02-19 23:46:24 +0100lottaquestions_(~nick@2607:fa49:5041:a200:b668:8e8:f292:8d7c) (Remote host closed the connection)
2022-02-19 23:46:49 +0100lottaquestions_(~nick@2607:fa49:5041:a200:11a4:6cdd:1796:d5ed)
2022-02-19 23:50:04 +0100merijn(~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
2022-02-19 23:50:11 +0100ofl^(~ofl@50.233.120.162)
2022-02-19 23:52:20 +0100ezzieyguywuf(~Unknown@user/ezzieyguywuf) (Ping timeout: 256 seconds)
2022-02-19 23:53:47 +0100fendor(~fendor@178.165.200.21.wireless.dyn.drei.com)
2022-02-19 23:54:13 +0100ezzieyguywuf(~Unknown@user/ezzieyguywuf)
2022-02-19 23:55:17 +0100CiaoSen(~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
2022-02-19 23:56:44 +0100acidsys(~LSD@2a03:4000:55:d20::3) (Excess Flood)
2022-02-19 23:57:18 +0100acidsys(~LSD@2a03:4000:55:d20::3)
2022-02-19 23:59:08 +0100polezaivsani(~polezaivs@orangeshoelaces.net) (Quit: rcirc on GNU Emacs 27.2)
2022-02-19 23:59:13 +0100fendor(~fendor@178.165.200.21.wireless.dyn.drei.com) (Quit: Leaving)