Home liberachat/#haskell: Logs Calendar

Logs on 2024-08-30 (liberachat/#haskell)

00:01:59 × jcarpenter2 quits (~lol@2603:3016:1e01:b960:a04f:145c:6e83:611e) (Ping timeout: 260 seconds)
00:05:30 Buliarous joins (~gypsydang@46.232.210.139)
00:11:16 × chiselfuse quits (~chiselfus@user/chiselfuse) (Ping timeout: 260 seconds)
00:13:10 chiselfuse joins (~chiselfus@user/chiselfuse)
00:13:48 spew joins (~spew@201.141.99.170)
00:23:32 × cbarrett quits (sid192934@helmsley.irccloud.com) (Read error: Connection reset by peer)
00:23:37 × iphy quits (sid67735@user/iphy) (Ping timeout: 252 seconds)
00:23:38 × buhman quits (sid411355@user/buhman) (Ping timeout: 252 seconds)
00:23:43 cbarrett joins (sid192934@id-192934.helmsley.irccloud.com)
00:23:44 × totbwf quits (uid402332@uxbridge.irccloud.com) (Read error: Connection reset by peer)
00:23:44 × edwardk quits (sid47016@haskell/developer/edwardk) (Read error: Connection reset by peer)
00:23:49 × jackdk quits (sid373013@cssa/jackdk) (Ping timeout: 248 seconds)
00:23:52 totbwf joins (uid402332@id-402332.uxbridge.irccloud.com)
00:23:55 edwardk joins (sid47016@haskell/developer/edwardk)
00:23:57 × degraafk quits (sid71464@lymington.irccloud.com) (Read error: Connection reset by peer)
00:24:00 × Fangs quits (sid141280@hampstead.irccloud.com) (Ping timeout: 252 seconds)
00:24:00 × caasih quits (sid13241@ilkley.irccloud.com) (Ping timeout: 252 seconds)
00:24:08 degraafk joins (sid71464@id-71464.lymington.irccloud.com)
00:24:21 × shawwwn quits (sid6132@helmsley.irccloud.com) (Ping timeout: 248 seconds)
00:24:21 × delyan_ quits (sid523379@hampstead.irccloud.com) (Ping timeout: 248 seconds)
00:24:43 × Kamuela quits (sid111576@tinside.irccloud.com) (Ping timeout: 252 seconds)
00:24:43 × bjs quits (sid190364@user/bjs) (Ping timeout: 252 seconds)
00:27:00 iphy joins (sid67735@user/iphy)
00:27:00 delyan_ joins (sid523379@id-523379.hampstead.irccloud.com)
00:27:02 shawwwn joins (sid6132@id-6132.helmsley.irccloud.com)
00:27:03 jackdk joins (sid373013@cssa/jackdk)
00:27:03 Kamuela joins (sid111576@id-111576.tinside.irccloud.com)
00:27:06 bjs joins (sid190364@user/bjs)
00:27:06 buhman joins (sid411355@user/buhman)
00:27:07 Fangs joins (sid141280@id-141280.hampstead.irccloud.com)
00:28:01 caasih joins (sid13241@id-13241.ilkley.irccloud.com)
00:30:30 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
00:30:46 ddellacosta joins (~ddellacos@ool-44c73c8f.dyn.optonline.net)
00:32:04 × califax quits (~califax@user/califx) (Remote host closed the connection)
00:33:34 califax joins (~califax@user/califx)
00:34:54 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
00:38:04 <lystra> Looks like I need to update libraries/Cabal/Cabal-syntax/src/Distribution/Types/BuildInfo.hs but I think ldOptions might contain any non-L flags so I'll play around with that first.
00:40:26 <Axman6> yeah I guess if it's just another linker option, then that would be fine
00:42:24 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 260 seconds)
00:43:02 <yin> should we expect much difference between `join . words` and `filter (not . isSpace)` ?
00:45:54 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
00:46:01 <haskellbridge> <zwro> hmm.. i wonder if `join.words` gets optimized in that way
00:46:08 <EvanR> well the first one logically rebuilds the list twice, while the second one once
00:46:19 <EvanR> but there's the reality of compilation
00:46:53 <yin> yes i'm assuming optimization. that's really my question
00:47:32 <yin> unfortunately i'm in no position to try it out at the moment
00:51:17 <yin> `join . words` feels more elegant
00:51:59 <yin> wonder if we can count on some type of "fusion" in this case
00:53:00 <EvanR> @src words
00:53:00 <lambdabot> words s = case dropWhile isSpace s of
00:53:00 <lambdabot> "" -> []
00:53:01 <lambdabot> s' -> w : words s'' where (w, s'') = break isSpace s'
00:53:09 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
00:53:15 <EvanR> @src filter
00:53:15 <lambdabot> filter _ [] = []
00:53:15 <lambdabot> filter p (x:xs)
00:53:15 <lambdabot> | p x = x : filter p xs
00:53:15 <lambdabot> | otherwise = filter p xs
00:53:41 <EvanR> not that that is the real source
00:53:56 <EvanR> but it's very similar
01:04:09 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
01:08:44 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
01:10:10 <d34df00d> Ugh.
01:10:16 <d34df00d> Since when `foo :: Bool -> Num a => a` is a legit haskell?
01:10:21 <d34df00d> (without any extensions enabled)
01:10:35 <EvanR> forever I think
01:10:49 <EvanR> it's the same as Bool -> (Num a => a)
01:10:58 <d34df00d> Hmm, ghc 9.0 gets upset: https://gcc.godbolt.org/z/8eGYYn1xv
01:11:07 <d34df00d> Yes, but it requires RankNTypes, just as ghc 9.0 correctly says.
01:11:38 <EvanR> that's a rank 1 type
01:11:57 <d34df00d> So I'm curious whether it's ghc 9.0 indeed correct, or whether it's actually allowed by Haskell 98/2010 since it's not really a rank-n.
01:11:58 <d34df00d> Yeah.
01:13:14 <d34df00d> Or, I shall say, it could be converted to a rank-1 type, to be more precise.
01:14:51 <d34df00d> EvanR: yep, if you try to define it as `foo = const 1`, you'll get "Couldn't match type ‘a0’ with ‘Num a => a’ // Expected: Bool -> Num a => a // Actual: Bool -> a0"
01:15:34 <d34df00d> `foo = undefined` also fails to unify unless I enable -XImpredicativeTypes.
01:15:36 <EvanR> const 1 obviously doesn't type check
01:15:58 <EvanR> er
01:16:01 <EvanR> :t const 1
01:16:02 <lambdabot> Num a => b -> a
01:16:25 <EvanR> yeah
01:16:33 <d34df00d> Is `Num a => b -> a` ~ `b -> Num a => a`?
01:17:35 <haskellbridge> <zwro> this is news to me
01:18:18 <EvanR> that can be asked by using a type equality GADT
01:18:24 <EvanR> with Refl as the constructor
01:18:41 <d34df00d> EvanR: the particular error message with `const 1` is "Cannot instantiate unification variable ‘a0’ with a type involving polytypes: Num a => a" which suggests to me that at least part of ghc considers this to be a rank-2.
01:19:19 <EvanR> it seems so, but you didn't put an explicit forall, in which case I want my money back
01:19:34 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
01:19:45 <d34df00d> That was kinda my original question tho :)
01:20:06 <EvanR> stuff can be higher rank without explicit forall? balderdash!
01:20:55 <d34df00d> Ok, I'm lazy, so I didn't do the GADT test and instead just `bar :: (b -> Num a => a) ~ (Num a => b -> a) => ()`
01:20:57 <d34df00d> This fails to typecheck.
01:23:12 <d34df00d> `foo :: forall a. Bool -> Num a => a` behaves funny too tho. `foo = const 1` still complains about polytypes, while `foo = undefined` now unifies.
01:23:14 <EvanR> yeah const 1 earlier also basically proved that
01:24:05 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
01:33:10 lol_ is now known as jcarpenter2
01:34:58 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
01:37:40 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
01:38:09 × Axman6 quits (~Axman6@user/axman6) (Ping timeout: 240 seconds)
01:39:05 × spew quits (~spew@201.141.99.170) (Quit: spew)
01:39:33 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds)
01:49:00 × troojg quits (~troojg@user/troojg) (Ping timeout: 276 seconds)
01:49:19 <lystra> Just decided to do runhaskell Setup.hs configure --ghc-options="-optl-Wl,-rpath,/path/to/lib" in the end. Seems to work.
01:50:25 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
01:56:05 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
02:06:47 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
02:11:09 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
02:17:24 × ZharMeny quits (~ZharMeny@user/ZharMeny) (Quit: \)
02:22:10 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
02:23:41 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 260 seconds)
02:29:09 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
02:39:54 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
02:44:23 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 255 seconds)
02:45:58 tabemann_ is now known as tabemann
02:55:19 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
02:59:05 ec joins (~ec@gateway/tor-sasl/ec)
03:00:08 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 272 seconds)
03:00:08 × td_ quits (~td@i53870918.versanet.de) (Ping timeout: 272 seconds)
03:01:50 td_ joins (~td@i5387090B.versanet.de)
03:10:45 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
03:12:40 aforemny_ joins (~aforemny@2001:9e8:6cc8:4500:8afd:cf35:f7f8:813a)
03:13:01 × aforemny quits (~aforemny@i59F516D8.versanet.de) (Ping timeout: 252 seconds)
03:15:13 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
03:20:59 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
03:24:17 Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
03:24:26 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 255 seconds)
03:25:37 Lord_of_Life_ is now known as Lord_of_Life
03:29:57 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
03:32:32 × ski quits (~ski@145.224.119.31) (Ping timeout: 255 seconds)
03:33:23 ski joins (~ski@217.65.136.250)
03:41:03 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
03:45:34 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
03:50:07 takuan joins (~takuan@178-116-218-225.access.telenet.be)
03:56:26 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
03:58:16 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 265 seconds)
04:00:42 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
04:10:26 Axman6 joins (~Axman6@user/axman6)
04:11:51 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
04:17:12 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds)
04:22:01 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
04:25:39 gmg joins (~user@user/gehmehgeh)
04:26:29 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
04:28:07 thegeekinside joins (~thegeekin@189.217.87.225)
04:30:02 × thegeekinside quits (~thegeekin@189.217.87.225) (Remote host closed the connection)
04:35:30 youthlic joins (~Thunderbi@user/youthlic)
04:42:00 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
04:43:06 neuroevolutus joins (~neuroevol@37.19.200.161)
04:45:49 × Ekho quits (~Ekho@user/ekho) (Quit: CORE ERROR, SYSTEM HALTED.)
04:46:32 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
04:52:00 × bliminse quits (~bliminse@user/bliminse) (Quit: leaving)
04:54:10 × youthlic quits (~Thunderbi@user/youthlic) (Ping timeout: 248 seconds)
04:57:12 Ekho joins (~Ekho@user/ekho)
04:57:26 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
05:01:20 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
05:02:03 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 245 seconds)
05:04:38 peterbecich1 joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
05:04:41 michalz joins (~michalz@185.246.207.197)
05:05:23 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 245 seconds)
05:05:39 peterbecich1 is now known as peterbecich
05:12:58 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
05:15:46 × euphores quits (~SASL_euph@user/euphores) (Quit: Leaving.)
05:17:19 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
05:22:58 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
05:27:19 euphores joins (~SASL_euph@user/euphores)
05:27:30 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
05:28:59 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
05:33:28 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
05:42:11 × neuroevolutus quits (~neuroevol@37.19.200.161) (Quit: Client closed)
05:51:30 bliminse joins (~bliminse@user/bliminse)
05:53:47 × bliminse quits (~bliminse@user/bliminse) (Client Quit)
05:55:23 bliminse joins (~bliminse@user/bliminse)
05:58:32 × bliminse quits (~bliminse@user/bliminse) (Client Quit)
05:59:41 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
06:01:59 oo_miguel joins (~Thunderbi@78.10.207.45)
06:02:18 esnos joins (~user@176.106.34.161)
06:03:50 bliminse joins (~bliminse@user/bliminse)
06:04:15 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
06:04:59 × bliminse quits (~bliminse@user/bliminse) (Client Quit)
06:05:05 × weary-traveler quits (~user@user/user363627) (Remote host closed the connection)
06:05:52 bliminse joins (~bliminse@user/bliminse)
06:07:14 <esnos> Hi, I'm on arch linux and I want to use package Control.Monad.Random. I installed it via haskell-monadrandom package, but after restarting emacs, emacs still can't find package. I also tried to cabal install it, but I got error `Warning: Couldn't figure out linker information!` which I think is specific to arch linux. Do you know what can I do to see this package?
06:15:06 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
06:16:52 <EvanR> create a new cabal project and list the package in the deps
06:17:06 <EvanR> the default is to download and install the packages per project
06:17:31 <EvanR> unless this is broken on arch linux for some reason
06:18:04 <esnos> I'm just doing last assigment from cis 194, is it possible to globaly download haskell package?
06:18:23 <c_wraith> ultimately, system package managers are really bad at managing haskell libraries. (and mostly they don't even try)
06:18:39 <EvanR> it is possible to install them globally but it's usually a bad idea
06:18:51 <esnos> Or haskell packages on linux are only for other program in extra repo, not for lsp?
06:19:28 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds)
06:19:50 <EvanR> doing an assignment for cis 194 is a good reason to make a project
06:19:59 <esnos> So something like cabal init cis_194, cabal update, cabal install MonadRandom would work?
06:20:34 divya joins (~user@202.170.201.250)
06:20:47 <esnos> EvanR: Should I have project for each assigment, or just one for all of them?
06:22:19 <EvanR> if there are no conflicts among any of the dependencies they could all be the same project
06:24:10 <c_wraith> note that if you're really doing small things (single module), cabal scripts have a lot less ceremony involved. https://cabal.readthedocs.io/en/stable/getting-started.html#running-a-single-file-haskell-script
06:24:28 <c_wraith> If they've got multiple modules, a full cabal project is easier to work with.
06:26:02 <EvanR> oh yeah, cabal script is good for 1 source file and you only need 1 dependency package
06:26:21 <EvanR> and you don't care about compile time
06:26:59 <c_wraith> if you've only got one source, *usually* compile times won't be bad.
06:28:00 dysthesis joins (~dysthesis@user/dysthesis)
06:30:04 <esnos> Didn't know about cabal scripts, can they replace python script?
06:30:32 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
06:30:35 <esnos> Also, now I have some problem with linker
06:30:40 <esnos> Love arch for haskell
06:32:11 × ft quits (~ft@p4fc2a393.dip0.t-ipconnect.de) (Quit: leaving)
06:32:22 <geekosaur> (a) you can specify more than one dependency (b) cabal since 3.8 caches compiled scripts
06:32:49 <mauke> doesn't arch package a ghc that uses dynamic libraries or something?
06:34:13 <geekosaur> you want `ghc-options: -dynamic` on Arch
06:34:51 <geekosaur> installing `ghc-static` will work for bootlibs, but if you install any other Haskell package via pacman you won't be able to get static libraries
06:35:00 <esnos> geekosaur: where I can set it?
06:35:10 rosco joins (~rosco@175.136.158.234)
06:35:18 <geekosaur> in the cabal file, in the library or executable stanza
06:35:39 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds)
06:35:39 <geekosaur> if you;'re using a cabal script, it goes in the cabal comment at the top
06:36:51 lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4)
06:38:58 CrunchyFlakes joins (~CrunchyFl@ip-109-42-115-64.web.vodafone.de)
06:41:59 <Inst> esnos still here?
06:42:38 <Inst> the mainstream haskell community has a feud with the maintainers of archlinux packages on Haskell
06:43:30 <Inst> because afaik esnows installed via pacman, right?
06:43:40 <geekosaur> yes
06:44:28 × CrunchyFlakes quits (~CrunchyFl@ip-109-42-115-64.web.vodafone.de) (Read error: Connection reset by peer)
06:45:56 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
06:46:59 <Inst> haskell arch linux seems to break standard Haskell tooling quite often
06:47:17 <esnos> Inst: Hi, yes
06:47:49 <Franciman> lol, do they still use dynamic linking for haskell?
06:47:56 <geekosaur> arch linux even breaks its own haskell packages somewhat regularly
06:48:22 <esnos> I now try to resolve this problem...
06:48:25 <geekosaur> they have lists of packages that need to be rebuilt when their dependencies change, but sometimes they miss one or two
06:48:29 <esnos> <no location info>: error:
06:48:29 <esnos> Warning: Couldn't figure out linker information!
06:48:29 <esnos> Make sure you're using GNU ld, GNU gold or the built in OS X linker, etc.
06:48:29 <esnos> collect2: fatal error: cannot find ‘ld’
06:48:33 <esnos> compilation terminated.
06:48:36 <esnos> `gcc' failed in phase `Linker'. (Exit code: 1)
06:48:59 <geekosaur> and then (for example) xmonad gets a bug report that turns out to be "arch forgot to rebuild xmonad-contrib after updating X11-xft or something"
06:49:28 <geekosaur> o.O that's definitely an arch linux issue
06:49:32 <Franciman> this is a point in favour of guix
06:49:34 <Inst> i strongly suggest you try to nuke your haskell arch linux toolchain and move to cabal or stack, preferably cabal since stack is on life support
06:49:40 <Franciman> declarative packages and build recipes
06:49:47 <Inst> https://www.haskell.org/ghcup/
06:49:49 <geekosaur> it's not even coming (directly) from ghc; `collect2` is an internal gcc tool
06:50:05 <Inst> ghcup, rather
06:50:29 <geekosaur> (ghc uses gcc to link, because it's pretty much impossible to work out what needs to be linked in for glibc to work right otherwise)
06:50:40 × xff0x quits (~xff0x@2405:6580:b080:900:136b:65b1:e5b:b9e1) (Ping timeout: 272 seconds)
06:50:49 <Franciman> geekosaur: does it use gcc both for static and dynamic linking mode?
06:50:49 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds)
06:50:54 <geekosaur> yes
06:50:56 <esnos> Franciman: I'm playing with guix on my second laptop, after I learn it I will probably migrate to it
06:51:14 <geekosaur> ld is only used directly when making shared libraries
06:51:26 <Franciman> i see
06:51:30 <geekosaur> and when merging objects
06:51:30 <Franciman> esnos: enjoy!
06:51:38 <Franciman> do you also tried nix, esnos?
06:52:10 <Franciman> have*
06:52:28 <esnos> Inst: I can nuke arch linux haskell, but how I should then install cabal and ghc? From curl, or install ghc from arch linux repo and then cabal
06:52:40 <Inst> do the ghcup instructions
06:52:51 <geekosaur> ghcup does both and you can get it as a precompiled binary
06:52:59 <Inst> sorry, i misspoke
06:53:20 <Inst> just do ghcup with cabal or stack, not cabal or stack on their own
06:53:59 <geekosaur> cabal won't install ghc for you, stack will but that is on life support and the ghcup stack hook is recommended instead
06:54:24 <mauke> but will that fix the gcc error?
06:54:25 <esnos> Franciman: I didn't tried nix, guix have much less packages, but I heard documentation is better, so I stick with it
06:54:41 <geekosaur> (I don't think stack itself is on life support, but its automatically installing ghcs itslef certainly is)
06:54:45 <Franciman> i find docs very clear, yes
06:54:58 <geekosaur> mpilgrem is working closely with cabal devs for example
06:55:35 <Inst> wait did nix finally get gui?
06:55:40 <geekosaur> sadly, I suspect it won't; that spunds like somehow gcc is installed but ld isn't
06:55:46 <Franciman> esnos: in a perfect scenario, cabal wouldn't exist, and you would use guix or nix for managing deps ^^
06:55:51 <Franciman> well cabal/cargo/pip/etc
06:55:58 <geekosaur> (I would have expected ld to be a dependenncy, but with Arch who knows?)
06:56:24 <sclv> guix or nix don't have solvers. we'll always need solvers for ad-hoc dep sets.
06:56:42 <esnos> Franciman: I also want to try to use guix for managing haskell packagess. Did you tried both guix and nix? If yes, how do you compare them?
06:56:46 <geekosaur> also I don't know if Arch has anything equivalent to Debian/Ubuntu build-essential that installs pretty much everything you need
06:56:56 <Franciman> esnos: no i just tried guix
06:57:21 <Franciman> sclv: would solvers be language dependent?
06:57:34 <geekosaur> guix is a sort of gnu clone of nix
06:57:35 <esnos> geekosaur: There is gcc and binutils in core, I have them both installed
06:57:37 <sclv> also we'd still use cabal/cargo etc to orchestrate _building_
06:57:39 <geekosaur> not "gui"
06:57:59 <Franciman> sclv: uhm orchestrate building can be done by guix/nix
06:58:09 <geekosaur> (more specifically, the "gu" comes from Guile and the "ix" from Nix)
06:58:27 JuanDaugherty joins (~juan@user/JuanDaugherty)
06:58:56 <Franciman> and they really should be doing it, if you want to guarantee reproducibility. In fact they use these build systems in very strange and unusual ways to obtain their goal
06:59:53 <sclv> currently, sadly, solvers are language dependent because they're package-format and conventions dependent, and we have different conventions and possibilities per language ecosystem -- different treatment of multiple versions, of feature flags, of cross-cutting compiler settings (prof builds, object builds), etc.
06:59:53 <sclv> there's some stray efforts to build a common solver core that's potentially language independent, but i don't think the approach scales to handle everything necessary yet, and there's not a cohesive vision to make the push.
07:00:15 <Franciman> yeah, makes sense
07:00:24 <esnos> So to summarise, I should delete all haskell things I have on my computer, Install ghc package from pacman, then ghcup tui install cabal and hls, then cabal update, cabal init folder, add MonadRandom to .cabal file?
07:00:35 <Franciman> no esnos
07:00:39 <Franciman> install ghc from ghcup too
07:01:12 <esnos> How can I have ghcup without ghc?
07:01:20 <Franciman> prebuild binaries
07:01:22 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
07:01:26 <sclv> ghcup is the _installer for ghc_
07:01:36 <Franciman> also isn't ghcup written in bash?
07:01:37 <esnos> Ok, I get it wrong
07:01:56 <sclv> just run the magic command line here on a clean system and it'll do everything for you https://www.haskell.org/ghcup/
07:02:08 <Franciman> sclv: so do you think there is room for avoiding duplication of work in packaging?
07:02:37 <Franciman> maybe cabal would produce a guix package definition
07:02:39 <sclv> ghcup isn't written in bash -- but the script that i linked is a bash script that wraps installing ghcup and its deps, then running it to get the basics going all at once.
07:02:46 <esnos> sclv: There is also package ghcup-hs-bin in aur, maybe this will be better because of arch
07:02:49 <Franciman> instead of dealing with all the build project itself
07:03:10 xff0x joins (~xff0x@2405:6580:b080:900:136b:65b1:e5b:b9e1)
07:03:46 <sclv> esnos: arch's treatment of ghc is the whole problem we're trying to get you past. it configures it in a way that is not suitable for development. the best thing on arch as a haskell developer (rather than consumer of programs) is sadly to bypass everything haskell related it provides
07:03:56 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
07:04:16 <Franciman> lol i once asked them why they did that and they answered: apparently haskell's ecosystem is super brittle
07:04:33 <Franciman> SO why are you doing it if it's so brittle
07:04:39 <Franciman> stick to what's working
07:05:19 <geekosaur> because people want pandoc
07:05:37 <esnos> sclv: Ok, I will then use ghcup from link
07:05:40 <sclv> Franciman: I don't think we have duplication of work in packaging. cabal manifests have a _lot_ more data than nix package descriptions. Nix _relies_ on that data to build packages -- it has to make use of the manifests itself. So we can't do away with language-specific files that describe how to build packages, which is what cabal files are.
07:05:47 <Franciman> no geekosaur i mean stick to the way haskell is known to work
07:06:14 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
07:06:28 <sclv> There are tools that extract a small fraction of the data in cabal files that is necessary for nix files, and do that autogen tho.
07:06:54 <Franciman> sclv: i think there is, because if i want to package an haskell lib or program i have to recursively do it for all deps
07:07:08 <sclv> Sure. but you can automate that too.
07:07:11 <Franciman> while cabal could do that for me
07:07:19 <JuanDaugherty> #archlinux said hs ecosys was brittle?
07:07:26 acidjnk_new joins (~acidjnk@p200300d6e72cfb704920adbe3bc2fb8d.dip0.t-ipconnect.de)
07:07:38 <Axman6> Arch have been pretty good at making it brittle =)
07:07:50 <sclv> I think what you're asking for isn't about cabal files, or even cabal the tool. You just want a tool to automatically recursively package haskell for nix, and I'm pretty sure those exist?
07:07:52 <Axman6> I remember when they broke basically everything to do with haskell
07:07:59 <Franciman> sclv: no wait
07:08:14 <Franciman> also i don't know about nix
07:08:18 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 245 seconds)
07:08:20 <Franciman> nix is less obsessed about reproducibility
07:08:20 <JuanDaugherty> they're whole schtick is the distribution mechanism, so figures
07:08:32 <JuanDaugherty> *their
07:08:34 <geekosaur> I think they mean things like cross-module inlining meaning that you can never simply replace a shared object, you have to rebuild everything that uses it
07:08:38 <haskellbridge> <sm> arch packagers and haskell devs don't talk to each other it seems
07:08:44 <geekosaur> and they have a hard rule that everything must use shared libs
07:08:52 <Axman6> I thought the main thing Nix cares about is reproducibility
07:09:09 <Franciman> Axman6: they care, they are not just obsessed with it to the level guix is
07:09:28 <davean> sm: Talk? Well it requires listening for the talking to do any good.
07:09:42 <Franciman> sclv: i agree on cabal files being necessary and cabal being available, but i don't see why cabal has to manage all the building process
07:09:49 <Franciman> rather than handing it to nix
07:10:10 <Franciman> there is the duplication. Cabal could just create package definitions and then let the package manager
07:10:16 <Axman6> Nix doesn't run on windows, afaik, so that's one reason isn't it?
07:10:16 <geekosaur> I thought cabal2nix did exactly that?
07:10:30 <geekosaur> converts a cabal file to a nix derivation
07:10:38 <sclv> here's an old post from an arch maintainer explaining their philosophy. it makes things easier for them, and its fine for application users, and they don't want to do anything harder to support devs well (in part because they're underresourced), so they don't https://www.reddit.com/r/linux/comments/9emwtu/comment/e5qssdz/?context=3
07:10:45 CrunchyFlakes joins (~CrunchyFl@ip-109-42-115-64.web.vodafone.de)
07:11:22 <Inst> and haskell community could do a lot more, but haskell community is also underresourced
07:11:25 <Inst> got bigger fish to fry
07:11:27 × CrunchyFlakes quits (~CrunchyFl@ip-109-42-115-64.web.vodafone.de) (Read error: Connection reset by peer)
07:11:28 <JuanDaugherty> can see how arch and ghc/hs ecosys r at x-purposes, three concurrent levels of the compiler and stuff
07:11:28 <Franciman> geekosaur: oh it also produces all the recusrive definitions?
07:11:32 <Inst> thanks sclv / sm etc for the hard work on cabal!
07:11:36 <Axman6> yeah I thought Nix had pretty good support for haskell packages, and could manage installing haskell packages that hadn't been explicitly converted to use nix?
07:11:54 JuanDaugherty was over nix a dozen ya
07:11:54 youthlic joins (~Thunderbi@user/youthlic)
07:12:08 <Franciman> Axman6: you mean install packages wiithout having them as nix apcakges?
07:12:10 <Franciman> packages*
07:12:12 <Axman6> I'm pretty sure if you install a random Haskell package with Nix, it will handle installing all the dependancies
07:12:14 <geekosaur> Franciman, see what Axman6 said
07:12:15 <Axman6> yes
07:12:25 <geekosaur> it just reruns cabal2nix on the deps that are missing
07:12:27 <Franciman> guix would disapprove
07:12:34 <Axman6> Nix knows enough cabal to recursivly install things
07:12:35 <Franciman> they need all dependencies packaged
07:12:39 <Franciman> to accept a package in the repos
07:12:52 <JuanDaugherty> https://eg.meansofproduction.biz/eg/index.php/NixOS
07:12:56 <sclv> Franciman: nix is a package manager, its not a builder! Nix uses language specific builders for every language that needs them afaik. "handing it to nix" would be nightmarish for nix devs, duplicate work, and likely get things wrong. If you look at how much work cabal does to build a single package, even when all deps already exist and are solved, there's a lot going on.
07:12:57 <Franciman> ok thanks
07:13:08 <Axman6> there's a difference between installing a haskell package with nix and a haskell package being in nixpkgs.
07:13:14 <Axman6> nix understands haskell packages
07:13:43 <Franciman> guix requires everything to be packaged
07:13:55 <Franciman> i mean it's not necessary to have a package, but to have it accepted in the repos
07:13:59 vpan joins (~vpan@212.117.1.172)
07:14:15 <Franciman> i see
07:14:19 <sclv> Right. But there's automated tooling that the nix people use for the haskell packages there, and I bet it could be adapted to guix
07:14:35 <Franciman> i see about being a package manager
07:14:43 <Axman6> Nix doesn't require that, but it can produce reproducible builds form hackage packages (or git repos I think, if you want that)
07:15:12 <JuanDaugherty> nix and hs are cognitively consonant on being declarative, but srs useful thing for hs, pointless gimmick for a problem of 20 ya in the other case
07:16:49 <JuanDaugherty> good thing there arent a lot of discerning ppl due to turnover or whatever
07:16:55 <sclv> the nix configuration language itself is from my experience with it an imperative macro system pretending to be a declarative language. but its still the best thing we have.
07:17:10 <haskellbridge> <sm> thanks Inst, but you might have meant someone else (I haven't worked hard on cabal.. except using & supporting)
07:17:10 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
07:17:16 <Franciman> sclv: guix is more declarative, tbh
07:17:21 <geekosaur> eh? take a look at how guix does it sometime
07:18:05 <davean> I find guix way easier to read. I use nix though. I wish we could have the best of both.
07:18:07 <Franciman> builders produce a gexp, which is roughly a s-expr representing a list of operations to make
07:18:14 <Franciman> on the store
07:18:22 CiaoSen joins (~Jura@2a05:5800:247:2000:ca4b:d6ff:fec1:99da)
07:18:31 <Franciman> and then guix runs the gexp it obtains from a package definition + input
07:18:45 <geekosaur> also, guix has something nix decidedly doesn't: standards for how derivations work and interact
07:18:51 <dminuoso> 07:11:36 Axman6 │ yeah I thought Nix had pretty good support for haskell packages, and could manage installing haskell packages that hadn't been explicitly converted to use nix?
07:18:54 <dminuoso> Check out haskell.nix
07:19:02 <davean> geekosaur: nix is *so inconsistent*
07:19:10 <geekosaur> exactly
07:19:11 <Franciman> geekosaur: maybe with flakes things have changed though
07:19:19 <Franciman> i'm not familiar with nix
07:19:46 <Inst> esnos: so, any progress on your issue?
07:20:01 <geekosaur> guix set out design guidelines and policies, having learned from nix
07:20:07 <dminuoso> nix has extremely poor UX, very poor standard libary, syntax that makes it hard to structure non-trivial code, uncontrollable evaluation order - and an ecosystem that ties errors into evaluation errors making any kind of error handling nightmarish to impossible.
07:20:26 <dminuoso> Yes we use it with NixOS to manage our entire infrastructure. So I'm entitled to rant about it.
07:20:35 <davean> dminuoso: I have a situation ATM with that I have no idea how to resolve
07:20:44 <Axman6> I haven't done a whole lot with nix, but that matches my experience too
07:20:47 <Franciman> dminuoso: and have you tried guix? Does it suffer from same problems or other problems?
07:20:59 <JuanDaugherty> true believers
07:21:09 <geekosaur> the big problem with guix is its ecosystem is tiny compared to nix
07:21:15 Franciman nods
07:21:21 <Franciman> it's getting better now
07:21:30 <Franciman> also nonguix has non-free stuff
07:21:31 <dminuoso> JuanDaugherty: Oh Im far from a believer. I'm not blinded about all the negative parts about it - it's just that for managing hundreds of servers, short of k8s there aren't any good alternatives.
07:21:35 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 255 seconds)
07:21:58 <dminuoso> Franciman: Have not tried it yet, and given how deep we are into NixOS already I don't think we will pull out of it any time soon.
07:22:05 <davean> dminuoso: its hilarious. when I set a path to "./file" it errors, claiming "./sub/dir/file" (where the nix file it is used from is) doesn't exist. If I set it to "./sub/dir/file" it gets further and then says "./sub/dir/sub/dir/file" doesn't exist. The errors both come from the same place of course.
07:22:07 <Franciman> i see
07:22:11 <dminuoso> From that ecosystem, NixOS is the good part honestly.
07:22:25 <davean> dminuoso: somewhere in the litterly 20k lines of trace I'm sure there is a meaningful difference.
07:22:29 <JuanDaugherty> dminuoso, i meant ur employer
07:22:43 <JuanDaugherty> and/or colleagues
07:22:54 <JuanDaugherty> them that bought the nix kool aid
07:23:00 <dminuoso> JuanDaugherty: I'm the singular cause for why we started adopting NixOS. I pushed for it.
07:23:09 <geekosaur> "oops"
07:23:12 <JuanDaugherty> ur bad
07:23:16 <dminuoso> And even in hindsight I still think its the right decision.
07:23:26 <dminuoso> Much rather deal with a bad nix ecosystem than with ansible, puppet or chef.
07:23:38 <dminuoso> k8s might have been a better choice perhaps who knows
07:24:01 <[exa]> depending on how long ago that was, k8s might have not been a usable choice back then
07:24:15 <geekosaur> from what I've heard from k8s users, you'd probably just be trading your current problems for different ones
07:24:24 <davean> dminuoso: k8s doesn't cover as much as nixos does, and with a lot more layers of complexity.
07:24:50 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
07:25:38 <dminuoso> davean: What you wrote with the path, sounds like a regular day with nix.
07:25:48 <esnos> Ok, I nuked everything with sudo pacman -Rcsn <big haskell packages>
07:25:52 <JuanDaugherty> well k8 is a specif thing, system app, comparing it to nix is a category error
07:25:57 cfricke joins (~cfricke@user/cfricke)
07:25:59 <JuanDaugherty> *specific
07:26:19 <dminuoso> JuanDaugherty: I noted that we adopted this for NixOS to maintain a fleet of hundreds of servers, that's our prime usecase.
07:26:24 <davean> JuanDaugherty: Its not a category error. They both can do some of the same jobs, specificly the relivent ones here.
07:26:27 <dminuoso> Which is why k8s is a suitable comparison.
07:26:36 <jackdk> dminuoso: I agree with all your frustrations re: Nix, and also own a mug that says "use Nix for literally everything".
07:26:38 <JuanDaugherty> k
07:27:00 <davean> I really wish we had nix with some of the engenering of guix
07:27:49 × CiaoSen quits (~Jura@2a05:5800:247:2000:ca4b:d6ff:fec1:99da) (Ping timeout: 248 seconds)
07:28:20 <davean> dminuoso: BTW, while we're at it, any idea about the path issue? ;)
07:28:40 <davean> I've no clue how to debug or fix it.
07:29:06 <jackdk> I need to look at guix more, but I'm frustrated by a package set which is both bootstrappable but fails to build openssl-1.1.1l because all of the certificates in the test suite have expired =S. But using a mature language and having proper functions for each type of build system are both really attractive to me.
07:29:33 <Franciman> jackdk: i think that is now solved
07:29:45 × JuanDaugherty quits (~juan@user/JuanDaugherty) (Quit: JuanDaugherty)
07:29:56 <Franciman> yeah guix can seem slow sometimes, because there is not much money and people, but that is also up to us
07:29:59 <Franciman> who keep preferring nix
07:30:25 <davean> I mean as long as guix is gnu rotted I kinda don't have a choice?
07:30:29 <dminuoso> For my personal computer I decided to give Qubes OS a try, because I'm a sucker for exotic ideas in operating systems. :-)
07:30:46 <Franciman> davean: wdym? There are "non-free" channels
07:30:49 <Franciman> like nonguix
07:30:54 <davean> Franciman: its nothing about the freeness
07:31:01 <Franciman> gnu rotten means?
07:31:02 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
07:31:30 <davean> Just the general issues gnu projects have about how they go about getting stuff done. I don't think man hours could solve guix
07:31:52 <probie> I ran Qubes for a while. It worked pretty well for most of my work workloads apart from watching videos
07:32:06 <probie> also was rather battery unfriendly
07:32:06 <Franciman> davean: can you explain a bit more?
07:32:31 <dminuoso> probie: Oh yeah, video playback is horrible - full fan speed every time, and jittery playback at 15-20fps!
07:32:34 <davean> Franciman: A lot of gnu projects are too focused on doing the cool thing in someone's head to ever deliver.
07:32:52 <davean> gnu has a VERY strong history of never delivering projects
07:32:54 <Franciman> davean: i think guix is more pragmatic
07:33:11 <Franciman> yes that is true, but guix is working, what is the problem is that they are sometimes slow in accepting packages
07:33:16 <Franciman> or fixing some non core issues
07:33:17 <dminuoso> davean: I hear Emacs is close to being finished!
07:33:22 <Franciman> because there are few people
07:33:37 <davean> Franciman: yet they do things like all the bootstrapping stuf
07:33:49 <Franciman> yet it works
07:34:01 <Franciman> bootstrappable stuff is cool, but that's not the only thing they do
07:34:30 <haskellbridge> <sm> davean: I’d say its history of delivering is a bit stronger!
07:35:33 <jackdk> Franciman: Alas, no. I still get the test error on `guix pull`.
07:35:49 <Franciman> what, jackdk. Let me try
07:35:55 <Franciman> what are your configs?
07:35:59 <Franciman> I also have openssl and it works
07:36:09 <Franciman> maybe a different version tho
07:36:53 <probie> GNU delivered GCC and Gnome. That's actually a pretty good result overall
07:36:55 <Franciman> i see there is openssl-1.1.1q
07:37:12 <Franciman> is it ok jackdk ?
07:37:44 <jackdk> Franciman: The main thing is that I have substituters turned off, and I'm building against the `d531237` commit of https://git.savannah.gnu.org/git/guix.git . I don't know if this is the absolute latest, but it's what a five-minute-old `guix pull` gave me
07:38:06 <Franciman> ah i can't afford to build everything from sources on this lappy
07:38:35 <davean> right but you'd only encounter that error on build?
07:38:48 <jackdk> Yeah the binary substitute is presumably fine, but I believe in the whole bootstrap thing, and am frustrated that they've done so much good work on that front but not disarmed the certificate timebombs.
07:39:34 <davean> I mean I believe the bootstrap thing is good. Just years spent on that while not dealing with the core product means the momentum is elsewhere.
07:39:51 <jackdk> Like, I'll randomly run nix commands with `--option substitute false` and file nixpkgs bugs/PRs against broken links etc
07:40:26 <davean> jackdk: really? I built with only my own subsituters all the time and haven't hit one yet. What are you building?
07:40:51 <davean> (I run into plenty of nixpkg errors, but not that one)
07:41:13 <davean> (More often changed hashes on sources withotu versioning for URLs themselves)
07:41:50 <davean> and ugh, nix's 5 ways of handling, or not being able to handle. ssh options.
07:43:09 <jackdk> davean: most recently https://github.com/NixOS/nixpkgs/pull/335793 , but I've seen random python packages push over the top of release tags, many fonts were broken for a while if you weren't substituting them because the function they were calling changed interface, and others
07:43:50 <davean> fun. Yah sounds like you're in a different area than I am
07:44:04 <davean> every subsystem of the nixpkgs ecosystem is its own jungle.
07:44:40 <jackdk> Yeah true. Sometimes it's fundamental stuff too: dhcpcd moved from self-hosted releases to github and nobody noticed because they got at least the source tarball from cache.nixos.org
07:44:55 ubert joins (~Thunderbi@178.165.175.79.wireless.dyn.drei.com)
07:45:02 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
07:45:06 × dysthesis quits (~dysthesis@user/dysthesis) (Ping timeout: 260 seconds)
07:45:36 <davean> I had an unprincipaled script that riped all the sources out and precached them. I wonder ...
07:45:45 <davean> it was unprincipled though.
07:47:02 dysthesis joins (~dysthesis@user/dysthesis)
07:51:17 mreh joins (~matthew@host86-160-168-12.range86-160.btcentralplus.com)
07:51:42 × youthlic quits (~Thunderbi@user/youthlic) (Ping timeout: 246 seconds)
07:52:05 <geekosaur> that makes it different from nix itself how? 😛
07:52:37 <esnos> Inst, Franciman, svcl, geekosaur, everything works! Thank you for your help, I apprecaite it
07:53:03 lxsameer joins (~lxsameer@Serene/lxsameer)
07:53:05 <dminuoso> davean: I think the biggest issue is not even that you have these disconnected jungles everywhere, but the fundamental lack of types or documentation. The disconencted jungles just mean you have to reverse engineer tens of thousands of lines of code over and over again.
07:53:27 <esnos> *sclv
07:53:29 <dminuoso> And while yes, documentation is slowly improving, it's far from `@hoogle void` and getting some instant response.
07:54:04 <davean> geekosaur: Its different because its not what they test again :)
07:55:06 kuribas joins (~user@ptr-17d51ep5b2wbec6a4va.18120a2.ip6.access.telenet.be)
07:55:08 <dminuoso> The code hierarchy is normal and just an artifact of `nixpkgs` not being exactly a singular project, but just a monorepo for several teams to colocate their code.
07:55:37 <dminuoso> (Mostly because nixpkgs did not come with any kind of dependency management
07:55:56 <dminuoso> So stuffing it all in a mono repo where you could just import from left to right is a natural consequence
07:56:27 <esnos> So for anyone else on arch having problem with building and ld, just nuke every haskell package, you can do it by first finding them with pacman -Qs haskell and then sudo pacman -Rcns big packages, install ghcup from link, ghcup tui everything, cabal init <folder> and in .cabal folder add every package you need.
07:56:33 <davean> 90% of my issues with nixos is the nix language
07:57:05 <dminuoso> davean: Yup. NixOS itself is arguably the better part precisely because it actually goes through the hoop of building an intermediate abstraction, an intermediate language with a separate evaluator.
07:57:23 <dminuoso> Now sadly the error handling is still tied to plain nix expressions which is why NixOS errors are mostly unreadable..
07:57:24 ash3en joins (~Thunderbi@2a02:3100:7fb9:6a00:1cf6:2c47:e97c:d5d1)
07:57:55 <geekosaur> seriously, go look at guix and see what could be
07:57:59 <davean> now now, my 20k line error is perfectly made of latin1 chars. I can see the chars just fine
07:58:05 <davean> geekosaur: We have?
07:58:14 <dminuoso> davean: heh :)
07:58:20 <geekosaur> mind, I have Issues with the FSF, but I recognize good design and quite frankly guix is what nix should have been
08:02:07 × Axman6 quits (~Axman6@user/axman6) (Remote host closed the connection)
08:07:15 <divya> So is guile a fine language. Integrates well with the system.
08:07:51 <geekosaur> guile is a good scheme implementation, with reasonably good integration with the system
08:08:29 × xff0x quits (~xff0x@2405:6580:b080:900:136b:65b1:e5b:b9e1) (Ping timeout: 260 seconds)
08:09:05 <davean> Scheme is not like what I'd have picked, but its fine?
08:10:02 <geekosaur> it's far better than the ad hoc mess nix uses
08:11:07 <davean> yep, its fine
08:11:18 <davean> There is nothing deeply, fundimentally, wrong with it
08:11:41 <probie> Scheme is very much a "maximum value for minimum effort" language
08:12:12 <probie> s/minimum effort/minimum implementation effort/
08:12:41 <divya> probie: Yep, exactly. I decided this year to replace my python scripts with Scheme (Chez, Racket) ones. It's much faster and easier to write.
08:13:07 <haskellbridge> <sm> Hey, fun
08:13:11 <davean> I feel like what you say is sorta true probie, but I also don't feel I can really invest in it to make things better in general.
08:13:32 <dminuoso> geekosaur: The sad thing is just, that ecosystem is in the end more important than usability of a language from a practical point of view.
08:13:38 <dminuoso> When you want to use it to maintain hundreds of servers.
08:13:47 <merijn> esnos: Ah, you fell victim to one of the classic blunders! The most famous of which is, 'never get involved in a land war in Asia,' but only slightly less well-known is this: 'Never try to use Arch's Haskell package!'
08:13:58 <davean> dminuoso: you know, I believed that, and I still do, but nix does try that theory pretty hard
08:14:27 <dminuoso> Oh it does.
08:15:01 <divya> merijn: I've had 3 package dependency hell situations in Arch this year alone because of haskell and python packages through pacman.
08:15:14 <dminuoso> Oh hello merijn, been a while since I've seen you.
08:15:25 <divya> I badly need to switch to guix, but I haven't been able to because I have 2600 packages and a tightly customized setup.
08:15:34 <merijn> divya: Personally I think the Haskell situation is most egregious, because they just intentionally ship a GHC/cabal that is broken in the default configuration
08:15:50 <merijn> dminuoso: Yeah, I got a new job and actually have to work during office hours now ;)
08:15:56 <divya> merijn: Yep, now I just use `ghcup` for everything.
08:16:05 <dminuoso> merijn: Neat, where do you work at?
08:16:14 <merijn> Small b2b company doing Scala
08:16:19 × ubert quits (~Thunderbi@178.165.175.79.wireless.dyn.drei.com) (Ping timeout: 264 seconds)
08:16:28 <divya> Also congrats on the new job merijn, at least someone's getting one. I'm having to switch and the dread is real.
08:16:41 <esnos> merijn: I won't make same mistake ever again
08:17:22 <merijn> the thing is they could even make the default Arch config "just work", IFF they simply patches GHC to use dynamic linking by default (rather than static as it normally does)
08:17:36 <merijn> but they refuse to do that too
08:17:52 <dminuoso> esnos: There's some interesting stories about why Arch Haskell favours dynamic linking that only demonstrate how Arch Linux is a tinker distribution, and I dont mean `tinker` in a good sense.
08:18:24 <divya> Arch got the meme status for a long time for no good reason, really.
08:18:44 <dminuoso> esnos: You know, it used to be that there was this one guy living somewhere in eastern Europe maintaining all of hackage. And he compiled the AUR packages on his personal computer, and because his internet was slow, he wanted to reduce the amount of bandwidth needed to upload AUR packages from his personal machine...
08:18:51 <dminuoso> Which is why its all dynamic linking.
08:19:10 <dminuoso> You'd think something like Arch would have build infrastructure from which AUR was built from, automatically...
08:20:04 ubert joins (~Thunderbi@178.165.175.79.wireless.dyn.drei.com)
08:21:42 <davean> dminuoso: I mean if it was actually the reason they could get a shell or use a CI system
08:21:49 CrunchyFlakes joins (~CrunchyFl@ip-109-42-115-64.web.vodafone.de)
08:24:04 × econo_ quits (uid147250@id-147250.tinside.irccloud.com) (Quit: Connection closed for inactivity)
08:25:04 <esnos> dminuoso: Wow, didn't expect that... when I learn guix I will transistion to it
08:25:27 × tzh quits (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz)
08:39:49 <albet70> can we use list comprehension to implememt "split" function?
08:40:24 <dminuoso> albet70: What do you expect `split` to do?
08:41:23 <dminuoso> `split :: Eq a => a -> [a] -> [[a]]` that breaks a list into sub-lists separated by its first argument?
08:41:32 <albet70> split something with something. like split "ab cd" with white space to ["ab" "cd"]
08:42:41 <dminuoso> I'm sure with some creativity you can come with an algorithm that uses a list-comprehension somewhere.
08:43:07 <dminuoso> The question is whether you forcibly want to use a list-comprehension, or just whether it lends itself in a trivial implementation
08:43:29 <dminuoso> If if its the latter, then no, you would not use a list comprehension.
08:44:53 <dminuoso> Since list comprehensions are just syntactic sugar around the [] instance of Monad, we could however generalize and find some other Monad to do it with.
08:48:53 <dminuoso> % split _ [] = []; split y xxs = x : split y (drop 1 xs) where (x,xs) = span (/= y) xxs
08:48:53 <yahb2> <no output>
08:49:03 <dminuoso> % split ' ' "foo bar"
08:49:03 <yahb2> ["foo","bar"]
08:49:11 youthlic joins (~Thunderbi@user/youthlic)
08:49:19 <dminuoso> I guess State would a possibility here
08:52:55 Axman6 joins (~Axman6@user/axman6)
08:53:24 <merijn> The real question would be "why would you want that"?
08:53:35 <merijn> Considering those functions already exist :p
08:53:39 × youthlic quits (~Thunderbi@user/youthlic) (Ping timeout: 252 seconds)
08:54:08 <dminuoso> On list?
08:54:31 <dminuoso> │ alinab
08:54:38 <merijn> split package has like billion split variations already
08:54:48 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
08:54:59 <dminuoso> merijn: Oh I dislike depending on a package just for a single use case. :/
08:55:06 <merijn> sure
08:55:11 <dminuoso> If anything a simple `splitOn` should be in base.
08:55:33 <merijn> but the question has no context on "why", so any answer is gonna be kinda pointless
08:56:00 <dminuoso> merijn: So are you happy with scala?
08:56:08 <merijn> Define happy :p
08:56:20 <dminuoso> Okay, define your emotional state for me, please.
08:56:28 <dminuoso> Or describe it.
08:56:31 <dminuoso> :-)
08:56:39 <merijn> dminuoso: how happily I depend on package is also a function of how much they pull in, split depends on nothing but base, so about as lightweight as it gets
08:57:19 <merijn> dminuoso: ADTs and functional ecosystem is nice, subtyping is absolutely terrible, and the fact that Scala 2 is still stuck in the Java/JVM mistake of "namespaces = objects" is kinda annoying
08:58:02 <merijn> most things being methods on objects kinda sucks, because of needing to keep implicit context of the object you call in mind
08:58:03 <dminuoso> merijn: Oh it just has lpad vibes to me.
08:58:16 <merijn> the type inference is ass and don't get me started on sbt
08:58:36 <dminuoso> Okay, you're complaining as usual - so I guess you're having fun at work?
08:58:37 <merijn> sbt is yet another in a long list of tools that make me ask "why does Haskell get so much shit for tooling?"
08:58:53 <Axman6> I was sup unhappy with scala it nearly made me quit the highest paying job I've ever had
08:59:00 <Axman6> so*
08:59:05 <merijn> dminuoso: I mean, it's still an order of magnitude better than python/java/ruby/javascript/whatever
08:59:15 <merijn> But it's no Haskell :)
08:59:20 <davean> merijn: because people aren't upset with tools, they're upset with having to learn things.
08:59:22 <merijn> Axman6: It's not that bad
08:59:30 <Axman6> The scala we were doing was
08:59:40 <merijn> davean: of course, that's why it annoys me
08:59:43 <Axman6> I spent literally three months trying to write one SQL query
08:59:45 <dminuoso> So it's not really scala but the software. There's some horrible Haskell software out there too.
08:59:53 <dminuoso> Axman6: Sounds like opaleye!
09:00:08 <merijn> cabal is, objectively, still one of the best tools I have *ever* used
09:00:16 <Axman6> and then I got taken off that, replaced with two developers, who developed the scala library we were using for writing SQL queries... and they took another three months to write it
09:00:32 <merijn> sbt takes *literally* 15+ seconds to open the shell
09:00:48 <merijn> "oh, but startup cost is unimportant, because you just keep the shell open as you work"
09:00:59 <Axman6> >:(
09:01:33 <davean> Axman6: what was so bad about the query?
09:01:40 <merijn> Wanna run 5 different commands in your CI to report things? Well, either 1) run them all in one big batch command with their input interleaved because sbt has no way to redirect output, or 2) eat 15s startup cost at every invocation
09:01:50 <merijn> Axman6: scalikejdbc?
09:03:21 <haskellbridge> <magic_rb> Dumb solution, but prefix every commands output with some market, like "command1> " and then split on it. That way you can launch them at the same time, let sbt be sbt and split it afterwards
09:04:01 <haskellbridge> <magic_rb> It may be possible to do all of that through gnu sed, at least the "prefixing" part is possible
09:04:30 <merijn> maggic_rb: That only works if I control the command output, which I don't
09:04:52 <haskellbridge> <magic_rb> Cant you pipe it?
09:05:02 <merijn> That means doing separate sbt invocations
09:05:24 <haskellbridge> <magic_rb> Command you mean literal shell lcommand or some sbt jargon
09:05:49 <merijn> the point is that you do either "sbt cmd1 cmd2 cmd3 cmd4" and get the output of everything or you do "sbt cm1; sbt cmd2; sbt cmd3; sbt cmd4"
09:06:05 <merijn> The former means all your output is together, the second means 15s startup cost every invocation
09:06:20 <merijn> So that's literally a minute of waiting for sbt to start in your build
09:06:21 <Axman6> I can't even remember which library it was now, we had a custom layer on top of it that just didn't do what it was supposed to, and it was all done in metaprogramming, so you had three levels where things could go wrong - template instantiation, compile time and runtime. The library was supposed to prevent all runtime errors but it did not (and loved making invalid queries)
09:07:39 <mauke> now that's what I call synergy
09:08:31 <Axman6> the library was quill, whose website seems to have disappeared, which is probably a good thing
09:08:38 × terrorjack4 quits (~terrorjac@2a01:4f8:c17:dc9f::) (Quit: The Lounge - https://thelounge.chat)
09:09:25 <Axman6> hmm, or it became some zio thing? who knows. I don't need this triggering tonight =)
09:09:39 terrorjack4 joins (~terrorjac@2a01:4f8:c17:dc9f::)
09:09:42 <merijn> I was about to say, scalikejdbc didn't seem that bad. I don't really like the DSL type stuff, I'd rather just write explicit SQL for each use case rather than trying to get DSLs to reuse them
09:10:45 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Quit: WeeChat 4.2.2)
09:11:54 <Axman6> davean: I think it was a join on a table with itself, with a relatively complex expression to match rows with each other
09:18:49 <davean> Axman6: I assume you had it written in raw SQL already
09:19:30 × esnos quits (~user@176.106.34.161) (Remote host closed the connection)
09:20:05 × rosco quits (~rosco@175.136.158.234) (Quit: Lost terminal)
09:20:44 __monty__ joins (~toonn@user/toonn)
09:22:47 <haskellbridge> <sm> Inst: "stack is on life support" ?
09:28:24 × CrunchyFlakes quits (~CrunchyFl@ip-109-42-115-64.web.vodafone.de) (Read error: Connection reset by peer)
09:28:56 × dysthesis quits (~dysthesis@user/dysthesis) (Ping timeout: 260 seconds)
09:31:24 <Inst> sm: well, I mean, there's a new maintainer for it
09:31:29 <Inst> but it's underresourced
09:31:44 CrunchyFlakes joins (~CrunchyFl@ip-109-42-115-64.web.vodafone.de)
09:33:56 <geekosaur> but so is pretty much everything else
09:35:06 Smiles joins (uid551636@id-551636.lymington.irccloud.com)
09:36:03 dysthesis joins (~dysthesis@user/dysthesis)
09:37:56 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 255 seconds)
09:38:05 × driib31 quits (~driib@vmi931078.contaboserver.net) (Quit: The Lounge - https://thelounge.chat)
09:38:40 driib31 joins (~driib@vmi931078.contaboserver.net)
09:39:44 <haskellbridge> <sm> I think it's doing better than many FOSS projects
09:40:02 × son0p quits (~ff@186.121.18.131) (Killed (NickServ (GHOST command used by son0p-!~ff@2800:e2:f80:ee7::3)))
09:40:37 <Franciman> the legendary guy from fpcomplete is not involved anymore in stack?
09:40:38 <haskellbridge> <sm> sometimes one active empowered maintainer can be more productive than a team
09:40:45 <Franciman> one of the rudest persons i have ever met
09:40:52 <haskellbridge> <sm> please..
09:40:59 son0p joins (~ff@186.121.18.131)
09:42:15 <geekosaur> you never worked with theo de raadt, I guess?
09:42:35 <Franciman> lol
09:43:00 <Rembane> I guess there are many rude people out there
09:43:34 <geekosaur> anyway yes, snoyman moved on
09:45:30 tcard_ joins (~tcard@2400:4051:5801:7500:1e90:74c3:2754:ce8a)
09:46:38 <haskellbridge> <sm> not that it matters, but I've found him always a pleasure to work with.
09:47:08 <Franciman> he did a lot of fights
09:47:18 <Franciman> with the Haskell Community to impose his point of view
09:47:53 <haskellbridge> <sm> I think we're not going to agree on anything like this, let's not go there
09:48:39 × tcard quits (~tcard@p3940165-ipxg22501hodogaya.kanagawa.ocn.ne.jp) (Ping timeout: 252 seconds)
09:51:42 youthlic joins (~Thunderbi@user/youthlic)
09:55:33 × mreh quits (~matthew@host86-160-168-12.range86-160.btcentralplus.com) (Ping timeout: 248 seconds)
09:57:55 <Franciman> ok
09:58:14 <Franciman> speaking of which, where is hvr?
09:58:23 rosco joins (~rosco@175.136.158.234)
09:58:23 × rosco quits (~rosco@175.136.158.234) (Client Quit)
09:59:06 × youthlic quits (~Thunderbi@user/youthlic) (Ping timeout: 276 seconds)
10:04:47 mreh joins (~matthew@host86-160-168-12.range86-160.btcentralplus.com)
10:06:38 × echoreply quits (~echoreply@45.32.163.16) (Ping timeout: 252 seconds)
10:07:02 echoreply joins (~echoreply@2001:19f0:9002:1f3b:5400:ff:fe6f:8b8d)
10:08:22 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
10:09:25 × lxsameer quits (~lxsameer@Serene/lxsameer) (Ping timeout: 248 seconds)
10:12:45 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
10:15:06 <haskellbridge> <sm> https://www.reddit.com/r/haskell/comments/1f2frrg/upgrading_from_ghc_810_to_ghc_96_an_experience/ has spawned quite an interesting discussion
10:22:50 sawilagar joins (~sawilagar@user/sawilagar)
10:23:49 Square2 joins (~Square4@user/square)
10:37:06 lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4)
10:39:33 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
10:39:52 ZharMeny joins (~ZharMeny@user/ZharMeny)
10:44:37 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
10:55:26 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
10:58:29 × cfricke quits (~cfricke@user/cfricke) (Ping timeout: 248 seconds)
11:00:01 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds)
11:00:32 Tuplanolla joins (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi)
11:09:57 rubin55 joins (sid666177@id-666177.lymington.irccloud.com)
11:11:03 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
11:11:32 × ftzm quits (~ftzm@085080243169.dynamic.telenor.dk) (Ping timeout: 255 seconds)
11:11:47 cfricke joins (~cfricke@user/cfricke)
11:16:34 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
11:17:31 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
11:18:14 × cfricke quits (~cfricke@user/cfricke) (Ping timeout: 260 seconds)
11:19:11 × dysthesis quits (~dysthesis@user/dysthesis) (Ping timeout: 260 seconds)
11:22:40 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
11:23:03 <absence> Is there a way to derive the obvious Bifunctor instance for this using deriving via or something? newtype ValidationNe e a = ValidationNe (Validation (NonEmpty e) a) deriving newtype (Functor, Applicative)
11:25:22 <merijn> I don't think GHC has anything like that, but there may be some TH/generics library that can?
11:25:42 <merijn> but, tbh, it'd probably be less work to implement the Bifunctor than finding a library for that
11:27:54 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Read error: Connection reset by peer)
11:28:03 merijn joins (~merijn@77.242.116.146)
11:29:55 rosco joins (~rosco@175.136.158.234)
11:31:43 cfricke joins (~cfricke@user/cfricke)
11:32:23 <absence> merijn: Yes, if it involves additional libraries, one line of boilerplate is probably easiest.
11:34:22 <lortabac> I wonder why 'second' is not 'fmap' by default
11:36:32 <ncf> because it's bimap id by default
11:37:16 <lortabac> 'fmap' would make more sense to me
11:37:33 × CrunchyFlakes quits (~CrunchyFl@ip-109-42-115-64.web.vodafone.de) (Read error: Connection reset by peer)
11:37:40 <lortabac> you'd be able to define an instance with 'first' only
11:38:13 <lortabac> and only define 'bimap' if there is a more efficient implementation
11:40:31 CrunchyFlakes joins (~CrunchyFl@ip-109-42-115-64.web.vodafone.de)
11:42:49 <absence> lortabac: Maybe for compatibility reasons? Functor wasn't originally a superclass.
11:43:15 <lortabac> maybe they didn't want to break existing unlawful instances
11:45:50 <absence> Or existing instances that implement Functor using second.
11:47:03 × statusbot quits (~statusbot@ec2-34-198-122-184.compute-1.amazonaws.com) (Remote host closed the connection)
11:47:18 statusbot joins (~statusbot@ec2-34-198-122-184.compute-1.amazonaws.com)
11:50:03 <lortabac> ah right, I didn't think about that
12:20:45 × CrunchyFlakes quits (~CrunchyFl@ip-109-42-115-64.web.vodafone.de) (Read error: Connection reset by peer)
12:21:02 CrunchyFlakes joins (~CrunchyFl@ip-109-42-115-64.web.vodafone.de)
12:21:03 ft joins (~ft@p4fc2a393.dip0.t-ipconnect.de)
12:23:58 CiaoSen joins (~Jura@2a05:5800:247:2000:ca4b:d6ff:fec1:99da)
12:29:15 × CiaoSen quits (~Jura@2a05:5800:247:2000:ca4b:d6ff:fec1:99da) (Ping timeout: 252 seconds)
12:30:28 xff0x joins (~xff0x@2405:6580:b080:900:6ee3:d4d7:e5a8:4661)
12:30:39 machinedgod joins (~machinedg@d50-99-47-73.abhsia.telus.net)
12:30:41 × Miroboru quits (~myrvoll@178-164-114.82.3p.ntebredband.no) (Ping timeout: 248 seconds)
12:32:46 Miroboru joins (~myrvoll@178-164-114.82.3p.ntebredband.no)
12:32:52 poxel joins (~lennart@user/poxel)
12:38:21 × ddellacosta quits (~ddellacos@ool-44c73c8f.dyn.optonline.net) (Ping timeout: 246 seconds)
12:47:52 × AlexZenon quits (~alzenon@178.34.150.250) (Quit: ;-)
12:52:02 × AlexNoo quits (~AlexNoo@178.34.150.250) (Quit: Leaving)
12:54:10 regev joins (~dararam@147.236.231.188)
13:00:00 JuanDaugherty joins (~juan@user/JuanDaugherty)
13:03:42 × cfricke quits (~cfricke@user/cfricke) (Ping timeout: 272 seconds)
13:12:35 × regev quits (~dararam@147.236.231.188) (Ping timeout: 255 seconds)
13:13:22 weary-traveler joins (~user@user/user363627)
13:14:42 regev joins (~dararam@147.236.231.188)
13:16:03 × mreh quits (~matthew@host86-160-168-12.range86-160.btcentralplus.com) (Ping timeout: 276 seconds)
13:17:40 × regev quits (~dararam@147.236.231.188) (Read error: Connection reset by peer)
13:20:38 AlexZenon joins (~alzenon@178.34.150.250)
13:20:55 AlexNoo joins (~AlexNoo@178.34.150.250)
13:25:11 × JuanDaugherty quits (~juan@user/JuanDaugherty) (Quit: JuanDaugherty)
13:25:58 Solution joins (~Solution@78-131-74-26.pool.digikabel.hu)
13:34:30 × ash3en quits (~Thunderbi@2a02:3100:7fb9:6a00:1cf6:2c47:e97c:d5d1) (Quit: ash3en)
13:35:33 × Blasius quits (~Blasius@5ec169d9.skybroadband.com) (Ping timeout: 276 seconds)
13:47:57 × Miroboru quits (~myrvoll@178-164-114.82.3p.ntebredband.no) (Quit: Lost terminal)
14:00:59 × xff0x quits (~xff0x@2405:6580:b080:900:6ee3:d4d7:e5a8:4661) (Ping timeout: 260 seconds)
14:01:36 xff0x joins (~xff0x@2405:6580:b080:900:15aa:6ce:9db7:891e)
14:10:02 comerijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
14:13:22 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 272 seconds)
14:13:31 Sgeo joins (~Sgeo@user/sgeo)
14:20:04 × comerijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
14:22:36 cfricke joins (~cfricke@user/cfricke)
14:24:07 × Smiles quits (uid551636@id-551636.lymington.irccloud.com) (Quit: Connection closed for inactivity)
14:31:52 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
14:38:54 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
14:49:55 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
14:50:27 oneeyedalien joins (~oneeyedal@user/oneeyedalien)
14:51:16 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Quit: WeeChat 4.2.2)
14:55:37 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds)
15:01:47 × oneeyedalien quits (~oneeyedal@user/oneeyedalien) (Ping timeout: 252 seconds)
15:02:41 × cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 4.2.2)
15:06:53 spew joins (~spew@201.141.99.170)
15:07:05 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
15:12:21 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
15:12:48 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
15:23:20 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
15:26:52 × rvalue quits (~rvalue@user/rvalue) (Read error: Connection reset by peer)
15:27:22 rvalue joins (~rvalue@user/rvalue)
15:28:06 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
15:39:08 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
15:40:44 ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207)
15:40:59 × ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Client Quit)
15:41:45 ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207)
15:44:15 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
15:44:33 srazkvt joins (~sarah_@2a01:e0a:483:6900:b6d5:d9cd:2f20:2e49)
15:50:24 oneeyedalien joins (~oneeyedal@user/oneeyedalien)
15:54:55 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
16:00:21 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
16:08:06 × ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Ping timeout: 265 seconds)
16:11:11 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
16:14:08 lxsameer joins (~lxsameer@Serene/lxsameer)
16:14:44 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
16:16:13 × athan_ quits (~athan@syn-098-153-145-140.biz.spectrum.com) (Quit: Konversation terminated!)
16:17:41 athan joins (~athan@syn-098-153-145-140.biz.spectrum.com)
16:18:04 × machinedgod quits (~machinedg@d50-99-47-73.abhsia.telus.net) (Ping timeout: 252 seconds)
16:22:09 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
16:24:54 <Inst> well, have to hope for snoyman's safety
16:30:00 <EvanR> say what
16:32:37 <Inst> sorry, reply to long-dead conversaton (iirc, Snoyman is in a warzone, it's just some polite thoughts)
16:34:40 <Inst> (his declared location is 10 km from the lebanon border)
16:34:52 <Inst> and i'll drop it
16:40:46 regev joins (~dararam@147.236.228.71)
16:42:50 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
16:43:04 <EvanR> sorry to hear that
16:43:35 Smiles joins (uid551636@id-551636.lymington.irccloud.com)
16:44:51 VictorHugenay joins (~VictorHug@user/VictorHugenay)
16:46:13 × ski quits (~ski@217.65.136.250) (Ping timeout: 248 seconds)
16:47:49 ski joins (~ski@217.65.136.250)
16:48:54 <regev> hey everyone, i have a begginer question about the Show typeclass.
16:49:34 <regev> i understand the type class Eq, and how type can automatically be part of it.
16:50:09 <regev> i cant understand how a type can automatically deriving of Show
16:50:37 <regev> Where can i find the implementation of it? or is it compiler internal?
16:51:22 <ncf> https://www.haskell.org/onlinereport/haskell2010/haskellch11.html#x18-18600011.4
16:51:36 <haskellbridge> <sm> basic types have simple show implementations, and more complex types are just lots of those combined
16:52:48 <haskellbridge> <sm> in my mind at least. ncf's link looks much more complicated
16:53:18 <EvanR> imagine that ADTs only have () as a leaf types and the show implementation is "()". Now extrapolate however you think Eq works using that at the base
16:54:04 <EvanR> the real thing is more complicated because of efficiency of building a big string = list of chars
16:54:08 <mauke> regev: yes, "deriving" is built into the compiler
16:55:05 <mauke> the compiler knows what your source code looks like, so it can construct a facsimile in string form
16:56:04 <regev> mauke: thanks, that was the clarification i needed
16:56:08 <EvanR> you can play similar games by using Generic
16:56:18 <EvanR> it gives you access to constructor names and field names for example
16:56:28 <mauke> or Data.Data.Data
16:56:46 <EvanR> triple Dat
16:57:02 <EvanR> I had totally forgotten about Data.Data
17:01:12 × dehsou^ quits (~dehsou@c-98-242-74-66.hsd1.ga.comcast.net) (Ping timeout: 246 seconds)
17:04:22 × spew quits (~spew@201.141.99.170) (Ping timeout: 272 seconds)
17:09:12 tzh joins (~tzh@c-76-115-131-146.hsd1.or.comcast.net)
17:10:56 spew joins (~spew@201.141.99.170)
17:11:55 L29Ah parts (~L29Ah@wikipedia/L29Ah) ()
17:16:15 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
17:17:52 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
17:19:20 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
17:22:06 Alleria joins (~Alleria@user/alleria)
17:22:55 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 264 seconds)
17:23:46 JuanDaugherty joins (~juan@user/JuanDaugherty)
17:26:37 × srazkvt quits (~sarah_@2a01:e0a:483:6900:b6d5:d9cd:2f20:2e49) (Quit: Leaving)
17:29:05 × vpan quits (~vpan@212.117.1.172) (Quit: Leaving.)
17:33:33 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
17:36:25 <monochrom> The presence of precedence levels and infix data constructors causes parenthesizing. That's the only complication.
17:38:18 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
17:39:16 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
17:39:27 × kuribas quits (~user@ptr-17d51ep5b2wbec6a4va.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 27.1))
17:40:33 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
17:41:28 × rosco quits (~rosco@175.136.158.234) (Quit: Lost terminal)
17:44:27 L29Ah joins (~L29Ah@wikipedia/L29Ah)
17:45:32 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 272 seconds)
17:49:19 ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207)
17:51:11 <ski> regev : generally, it generates a definition of `showsPrec' (*not* `show' !), which makes the definition (if written correctly) properly take precedences into account, inserting brackets, and which makes your `Show' instance properly compose and combine with instances coming from other code. (which is why it's generally a bad idea to make your `Show' instance do some custom pretty-printed thing. `Show' is
17:51:17 <ski> not for that)
17:52:33 <ski> .. if you want to hand-define a `Show' instance, then `showsPrec' (not `show') is also what you normally should define. for very simple cases (an enumeration type, with none of the data constructors taking any parameters / having any components), you can define `show' instead
17:53:20 <ski> e.g., let's say you define a type of binary trees :
17:53:28 <ski> data Tree a = Leaf a
17:53:43 <ski> | Branch (Tree a) (Tree a)
17:53:59 <ski> deriving (Eq,Show,Read)
17:54:15 <ski> then the generated `Show' instance would look something like
17:54:26 <ski> instance Show a => Show (Tree a)
17:54:28 <ski> where
17:55:16 <ski> showsPrec p (Leaf x) = showParen (p > 10)
17:55:37 <ski> $ showString "Leaf "
17:55:49 <ski> . showsPrec 11 x
17:56:07 <ski> showsPrec p (Branch l r) = showParen (p > 10)
17:56:12 × Alleria quits (~Alleria@user/alleria) (Ping timeout: 276 seconds)
17:56:16 <ski> $ showString "Branch "
17:56:22 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
17:56:23 <ski> . showsPrec 11 l
17:56:27 <ski> . showChar ' '
17:56:29 <ski> . showsPrec 11 r
17:57:13 <ski> (the calls to `showsPrec' on `l' and `r' are recursive calls. the call using `x' appeals to the `Show a' constraint, deferring to the `Show' instance of the element type)
17:57:24 × regev quits (~dararam@147.236.228.71) (Read error: Connection reset by peer)
17:58:43 <ski> `10' here is the precedence level of the (left associative) "invisible infix operator" of application (in `Leaf x', `Leaf' is applied to `x'; and in `Branch l r', `Branch' is applied to `l', and the result of that is applied to `r')
18:00:33 <ski> and `10' is the next precedence, which is used on the right hand side of the infix operator, because it is a left-associative operator (`f x y' means `(f x) y'). (if we didn't have `Leaf' to the left in `Leaf x', but an arbitrary expression, we'd have used `showsPrec 10' for showing that expression. but this doesn't happen with data constructors)
18:00:41 <ski> er .. `11' is the next precedence
18:02:36 <ski> (it would be possible to define a data type, with an infix data constructor, and declare a precedence and associativity for it. although, iirc, GHC's `Show' will ignore the associativity (even though it would be easy to take it into account), so if you want your `Show' to not insert brackets redundant due to associativity of your data constructor, you do need to manually write your `Show' instance)
18:03:37 regev joins (~dararam@147.236.228.71)
18:03:49 ski looks at regev
18:04:35 KicksonButt_ joins (~AdminUser@187.21.174.221)
18:07:20 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
18:09:23 KicksonButt joins (~KicksonBu@187.21.174.221)
18:09:43 <KicksonButt_> testing
18:11:04 <ski> testing failed
18:11:48 × KicksonButt quits (~KicksonBu@187.21.174.221) (Quit: Client closed)
18:12:17 <probie> apparently you should have said it succeeded
18:15:45 <dmj`> please insert more coins
18:18:48 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
18:19:59 × pikajude quits (~jude@2001:19f0:ac01:373:5400:2ff:fe86:3274) (Ping timeout: 260 seconds)
18:20:20 pikajude joins (~jude@149.28.207.64)
18:24:05 misterfish joins (~misterfis@84.53.85.146)
18:24:46 <monochrom> Did you know: IRC servers do not echo the messages you send. If you say "testing" then it is only your client, not the server, that displays your own "testing".
18:24:49 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
18:25:47 <EvanR> does anyone see this -- automatic yes
18:26:19 <monochrom> Boltzmann IRC client. >:)
18:27:33 × Digit quits (~user@user/digit) (Ping timeout: 248 seconds)
18:30:57 machinedgod joins (~machinedg@d50-99-47-73.abhsia.telus.net)
18:33:16 <KicksonButt_> Is it possible to reply to specific message in IRC?
18:33:43 <[exa]> KicksonButt_: not really, it simulates a real-life conversation where all speech is lost in the mess of history
18:35:24 <[exa]> (technically, the messages aren't stored anywhere for any longer period of time than necessary for distributing them to everyone concerned, so there's also no message identifiers which would allow you to implement this)
18:35:24 <KicksonButt_> At least it seems you can reply to specific user
18:35:33 <ski> typically people just mention the nickname of the recipient, or reference (or quote) part of the conversation (or both), KicksonButt_
18:36:11 <[exa]> KicksonButt_: well not even that, but most IRC clients will recognize if your own nickname is used in the message (esp in the beginning) and will blink/play a sound/do something sensible for that
18:36:35 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
18:36:37 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
18:37:12 <KicksonButt_> So you just had to type my nickname, the effects I got are from my client
18:37:19 <[exa]> yap
18:37:22 <KicksonButt_> Thanks
18:37:25 <[exa]> also most clients allow tabbing the nicknames
18:37:39 <KicksonButt_> [exa]: Oh ok
18:37:42 <[exa]> the `Nickname: ....messate...` is a kinda convention, yes
18:37:42 <ski> KicksonButt_ : there's also private messages (sending only to a particular user, rather than to all (current) members of some particular channel)
18:38:07 <ski> some people like typing a comma, rather than a colon
18:38:19 ski does both, although more commonly a colon
18:39:57 <[exa]> KicksonButt_: btw people nowadays tend to connect via matrix.org clients or something similar, there the features are a lil bit more rich, for the price that you have an intermediate server in the middle that stores your actions
18:39:58 <EvanR> if you're elitist you can use a semicolon
18:40:42 [exa] reaches for an em dash
18:40:52 <EvanR> lol
18:41:13 <[exa]> EvanR— not bad
18:41:45 <[exa]> ok so, back to why I came here
18:42:04 <monochrom> Did you know: IRC uses the same PRIVMSG message for both "private" and "public for channel" messages. The only difference is that the latter uses the channel name for "nickname".
18:42:47 <monochrom> I would actually love to rationalize that with "private to the channel" but it's clearly a stretch. >:)
18:43:11 <EvanR> economy of interface
18:43:22 <[exa]> there's `partition` which splits a list into 2 by a predicate. If I modify the 2 lists (with different mappy functions), is there a way to unpartition them back to get the same order as original?
18:43:46 <[exa]> Normally I'd just `map` different functions based on the predicate, but here I actually need to group a few monad actions specific to both groups
18:44:10 <monochrom> No, you will have to attach original order if you want to recover original order.
18:44:16 <monochrom> Entropy increases.
18:44:26 <[exa]> yeah that's expected
18:44:27 <EvanR> merging two sorted lists is a nice lazy thing
18:44:33 <monochrom> Information wants to be lost. Entropy wants to increase.
18:44:47 <EvanR> assuming your mapping doesn't alter the ordering
18:44:49 <[exa]> more like, is there some super nice representation for this order reconstruction?
18:44:53 Digit joins (~user@user/digit)
18:44:55 <ski> [exa] : `zip [0 ..]' ?
18:45:08 <[exa]> I could do 2 lists of integers or so but that sounds unfunny
18:45:39 <[exa]> oh wait I can just store the trues/falses from the predicate and glue it later
18:46:10 <EvanR> you already know which list was true and which was false... one is all true the other is all false
18:46:28 × sawilagar quits (~sawilagar@user/sawilagar) (Quit: Leaving)
18:46:40 <monochrom> You do not know ([1], [2]) came from [1,2] or [2,1].
18:46:52 <monochrom> s/came from/came from whether/
18:47:11 <EvanR> attaching the integers would let you do the merge two sorted lists to get sorted list thing
18:47:17 <EvanR> then you can drop the integers at the end
18:48:23 <[exa]> yeah but integers
18:48:31 <monochrom> Int is enough. >:)
18:48:42 <EvanR> good ol Int
18:48:50 <EvanR> tireless workhorse
18:49:06 <[exa]> ah yeah but it's linear so all OK there actually
18:49:25 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 248 seconds)
18:49:48 × weary-traveler quits (~user@user/user363627) (Remote host closed the connection)
18:50:21 <EvanR> partitioning a sorted list gives two sorted lists? of course it does, sure yeah
18:51:38 neuroevolutus joins (~neuroevol@37.19.200.161)
18:51:48 <EvanR> or write this one off thing
18:52:38 <EvanR> nvm you said it needs to be monaded (monoided?) before remerging
18:52:40 × Smiles quits (uid551636@id-551636.lymington.irccloud.com) (Quit: Connection closed for inactivity)
18:54:24 Square joins (~Square@user/square)
18:55:49 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
18:55:49 × regev quits (~dararam@147.236.228.71) (Read error: Connection reset by peer)
18:57:12 × Square2 quits (~Square4@user/square) (Ping timeout: 252 seconds)
18:58:50 × JuanDaugherty quits (~juan@user/JuanDaugherty) (Quit: JuanDaugherty)
18:59:00 jinsun joins (~jinsun@user/jinsun)
19:01:11 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
19:01:59 regev joins (~dararam@147.236.228.71)
19:03:43 troojg joins (~troojg@user/troojg)
19:05:00 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
19:06:17 × divya quits (~user@202.170.201.250) (Ping timeout: 255 seconds)
19:07:33 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
19:10:58 <[exa]> https://play.haskell.org/saved/t1TRaU2w <- ok this is kinda what I had in mind (cc EvanR monochrom )
19:11:01 <[exa]> thanks for hints!
19:11:13 × lxsameer quits (~lxsameer@Serene/lxsameer) (Ping timeout: 248 seconds)
19:11:22 <[exa]> (more hints welcome, esp how to hide the ugly zip/fst/snd)
19:14:55 <EvanR> that unpartition doesn't make sense to me
19:15:37 <EvanR> adding the Bool doesn't add any information
19:16:19 <EvanR> oh it doesn't add the bool, it's encoding the original structure
19:17:04 <ski> (it determines the combination chosen by the predicate, on the input list)
19:17:20 <[exa]> yeah it's literally for reconstructing the original after gore has been applied to both partitions in separation
19:17:21 <EvanR> I got a simplification
19:17:27 <[exa]> I just got here:
19:17:29 <EvanR> traverse print [1..10]
19:17:40 <[exa]> https://play.haskell.org/saved/qIEMWImC
19:18:14 sawilagar joins (~sawilagar@user/sawilagar)
19:18:29 <tomsmeding> [exa]: does the previous paste even do what you want?
19:18:37 <tomsmeding> oh wait it does, I cannot read
19:18:39 <[exa]> yes
19:18:53 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 255 seconds)
19:19:20 L29Ah parts (~L29Ah@wikipedia/L29Ah) ()
19:19:40 × regev quits (~dararam@147.236.228.71) (Read error: Connection reset by peer)
19:19:46 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
19:20:35 <[exa]> basically the use case is that I have X items and algorithm that is processing them, and all of them choose between 2 paths of starting the algorithm, so it's very useful to just do the step once and re-use the result in the whole subgroup
19:20:42 <[exa]> (and this gets repeated recursively)
19:20:50 <[exa]> (it's a kinda tree traversal but reading the tree is pricey)
19:21:01 <[exa]> s/traversal/search/
19:22:08 <[exa]> (so here instead of e.g. going through the root once for each item, I can group the items and hopefully only process the root twice)
19:23:43 <tomsmeding> [exa]: if you s/otherwise/let/ the two cases of partitionR align
19:24:06 <[exa]> O_o
19:24:12 × neuroevolutus quits (~neuroevol@37.19.200.161) (Quit: Client closed)
19:24:16 <[exa]> how come that works?!
19:24:22 <tomsmeding> (glguy discovered (?) (mentioned, in any case) this yesterday)
19:24:26 <tomsmeding> it's an empty let block
19:24:29 <tomsmeding> > let in 7
19:24:29 regev joins (~dararam@147.236.228.71)
19:24:31 <lambdabot> 7
19:24:46 <c_wraith> that came up when we were breaking microhaskell
19:25:02 <c_wraith> (actually, any let block seems to break it. But that was a funny minimal test case)
19:25:09 <tomsmeding> https://ircbrowse.tomsmeding.com/day/lchaskell/2024/08/29?id=1342911#trid1342911
19:25:17 <[exa]> first that `do` parsing thing and now this :D
19:25:23 <[exa]> cool find though, thanks
19:25:24 <EvanR> let out "dogs"
19:25:30 <EvanR> "woof, woof"
19:25:31 <tomsmeding> > let in "dogs"
19:25:32 <lambdabot> "dogs"
19:25:45 weary-traveler joins (~user@user/user363627)
19:25:54 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
19:26:45 × ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Ping timeout: 265 seconds)
19:27:43 × euphores quits (~SASL_euph@user/euphores) (Quit: Leaving.)
19:27:51 JuanDaugherty joins (~juan@user/JuanDaugherty)
19:27:52 <ski> can't recall if a(n empty) `let' pattern guard has been mentioned in here before, but a(n empty) `let' list comprehension guard definitely has, since years ago
19:28:28 <[exa]> an empty `let` in `do` syntax is okay as well, right?
19:28:33 <tomsmeding> these things tend to come back when new people (re)discover them
19:28:40 <tomsmeding> > do { let; 7 }
19:28:42 <lambdabot> <hint>:1:13: error: parse error on input ‘}’
19:28:53 <tomsmeding> > do { let {}; 7 }
19:28:54 <lambdabot> 7
19:29:12 <EvanR> do 7 is also known as a dolet
19:29:15 <[exa]> it's okay with blocks
19:29:31 <[exa]> (ie. in indented `do` you don't need the {}s)
19:29:43 <tomsmeding> the fact that `let in _` is allowed is handy when programming with HLS, because `let` is a parse error in an expression, and GHC refuses to do anything else when there is a syntax error in the file
19:30:03 <tomsmeding> [exa]: I know :)
19:31:03 <[exa]> HLS doesn't have a pause button?
19:31:32 <tomsmeding> well, having a parse error in the file is a very effective pause button
19:31:43 <tomsmeding> but I likely want HLS feedback while writing the bindings of the `let` :p
19:33:19 × oneeyedalien quits (~oneeyedal@user/oneeyedalien) (Quit: Leaving)
19:35:01 × poxel quits (~lennart@user/poxel) (Quit: WeeChat 4.4.1)
19:37:15 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
19:42:59 euphores joins (~SASL_euph@user/euphores)
19:46:55 × regev quits (~dararam@147.236.228.71) (Ping timeout: 264 seconds)
19:48:47 regev joins (~dararam@147.236.228.71)
19:49:04 × mrmr155334346318 quits (~mrmr@user/mrmr) (Ping timeout: 260 seconds)
19:51:44 <[exa]> oh wow onPartitions is too good
19:52:07 <[exa]> literally `onPartitions (< fetchedKey) (go left) (go right)`
19:55:03 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
19:56:31 <tomsmeding> [exa]: I generalised it to an arbitrary traversable https://play.haskell.org/saved/b8CeDQRZ
19:56:39 <tomsmeding> it also got cursed
19:57:32 <tomsmeding> oh the `head`s should have been back in the `gets`s
19:57:47 <tomsmeding> ah State.Strict also works
19:58:08 <tomsmeding> (artifacts of messing around)
19:58:56 <[exa]> cursed as in "by mfix" ?
19:59:01 <tomsmeding> yes
19:59:14 <tomsmeding> as in, the two [b] arguments to partitionR are not "arguments", really
19:59:36 <tomsmeding> you're not supposed to have them yet when calling partitionR :p
19:59:37 <[exa]> mfix is little price for the tremendous clarity that this brought to this side-side-side-project
20:00:00 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
20:00:10 × spew quits (~spew@201.141.99.170) (Quit: spew)
20:00:27 <tomsmeding> the mfix is there to traverse the input only once
20:01:32 pavonia joins (~user@user/siracusa)
20:02:00 <tomsmeding> what is also cursed is that `first (second _)` and `snd . fst` point to the same part of the state
20:02:27 <tomsmeding> cue Axman6 with "you should have used lens", probably
20:03:16 <[exa]> oic you let the stuff generate itself to the arguments so that you can spew it right out from the traverse
20:03:20 <[exa]> ok nice
20:03:29 <tomsmeding> yes
20:05:09 <[exa]> actually seems better because it's less likely to explode in weird ways (as opposed to the chain of selector thunks that the other thing will generate)
20:05:10 × regev quits (~dararam@147.236.228.71) (Read error: Connection reset by peer)
20:05:45 <[exa]> (better w.r.t. to the actual mfix used)
20:05:50 <ski> tomsmeding's TyingTheKnot
20:05:58 <tomsmeding> inspired by https://ics-websites.science.uu.nl/docs/vakken/fp/2024/exercises/lazy.html number 2 :p
20:06:11 <tomsmeding> [exa]: what is "the other thing"?
20:06:27 <[exa]> my version of partitionR
20:06:27 <ski> @wiki Tying the Knot
20:06:27 <lambdabot> https://wiki.haskell.org/Tying_the_Knot
20:06:37 <tomsmeding> indeed
20:07:04 <tomsmeding> oh do you mean that your partitionR thing was too lazy?
20:07:12 <tomsmeding> I'm not sure if this is any better :D
20:10:27 regev joins (~dararam@147.236.228.71)
20:13:06 × misterfish quits (~misterfis@84.53.85.146) (Ping timeout: 272 seconds)
20:13:18 <[exa]> where's my STG simulator when I need it :D
20:13:54 neuroevolutus joins (~neuroevol@37.19.200.161)
20:14:12 × regev quits (~dararam@147.236.228.71) (Read error: Connection reset by peer)
20:15:16 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
20:15:49 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
20:16:01 <[exa]> ( anyway yeah it's probably same-ish, I thought that it would create a loooooong thunk line out of the `rep`s pointing to each other but that one can be consumed iteratively just as well, the main difference is likely that it might hold the spine of the (,,)'s in memory )
20:16:32 tomsmeding gave up thinking about this
20:17:28 × szkl quits (uid110435@id-110435.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
20:18:47 regev joins (~dararam@147.236.228.71)
20:28:08 × regev quits (~dararam@147.236.228.71) (Ping timeout: 265 seconds)
20:30:06 regev joins (~dararam@147.236.228.71)
20:30:42 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Ping timeout: 252 seconds)
20:35:46 <dmj`> [exa]: simulator?
20:37:37 lxsameer joins (~lxsameer@Serene/lxsameer)
20:37:58 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
20:43:10 × regev quits (~dararam@147.236.228.71) (Ping timeout: 252 seconds)
20:45:27 regev joins (~dararam@147.236.228.71)
20:51:14 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds)
20:52:21 × athan quits (~athan@syn-098-153-145-140.biz.spectrum.com) (Quit: Konversation terminated!)
20:55:22 × regev quits (~dararam@147.236.228.71) (Read error: Connection reset by peer)
20:56:44 × KicksonButt_ quits (~AdminUser@187.21.174.221) (Ping timeout: 252 seconds)
20:57:37 L29Ah joins (~L29Ah@wikipedia/L29Ah)
20:57:51 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
21:00:47 regev joins (~dararam@147.236.228.71)
21:01:52 × kimiamania2 quits (~65804703@user/kimiamania) (Quit: PegeLinux)
21:02:00 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
21:02:14 kimiamania2 joins (~65804703@user/kimiamania)
21:03:19 × CrunchyFlakes quits (~CrunchyFl@ip-109-42-115-64.web.vodafone.de) (Read error: Connection reset by peer)
21:06:46 × regev quits (~dararam@147.236.228.71) (Read error: Connection reset by peer)
21:10:14 athan joins (~athan@syn-098-153-145-140.biz.spectrum.com)
21:10:55 × AlexZenon quits (~alzenon@178.34.150.250) (Ping timeout: 264 seconds)
21:12:04 regev joins (~dararam@147.236.228.71)
21:15:19 × regev quits (~dararam@147.236.228.71) (Read error: Connection reset by peer)
21:20:14 × michalz quits (~michalz@185.246.207.197) (Remote host closed the connection)
21:21:39 regev joins (~dararam@147.236.228.71)
21:21:49 × troojg quits (~troojg@user/troojg) (Ping timeout: 260 seconds)
21:22:34 AlexZenon joins (~alzenon@178.34.150.250)
21:28:59 × regev quits (~dararam@147.236.228.71) (Ping timeout: 252 seconds)
21:34:12 × oo_miguel quits (~Thunderbi@78.10.207.45) (Ping timeout: 246 seconds)
21:34:21 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
21:36:19 × AlexZenon quits (~alzenon@178.34.150.250) (Ping timeout: 252 seconds)
21:36:41 regev joins (~dararam@147.236.228.71)
21:40:00 × lxsameer quits (~lxsameer@Serene/lxsameer) (Ping timeout: 252 seconds)
21:40:31 AlexZenon joins (~alzenon@178.34.150.250)
21:52:43 × neuroevolutus quits (~neuroevol@37.19.200.161) (Ping timeout: 256 seconds)
22:02:23 × regev quits (~dararam@147.236.228.71) (Ping timeout: 265 seconds)
22:10:14 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 260 seconds)
22:30:04 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
22:42:27 neuroevolutus joins (~neuroevol@37.19.200.161)
22:45:36 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
23:02:05 × gmg quits (~user@user/gehmehgeh) (Quit: Leaving)
23:04:40 × Tuplanolla quits (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) (Quit: Leaving.)
23:07:31 × neuroevolutus quits (~neuroevol@37.19.200.161) (Ping timeout: 256 seconds)
23:16:05 × sawilagar quits (~sawilagar@user/sawilagar) (Ping timeout: 248 seconds)
23:22:10 × Square quits (~Square@user/square) (Ping timeout: 260 seconds)
23:25:51 × AlexZenon quits (~alzenon@178.34.150.250) (Ping timeout: 246 seconds)
23:30:51 AlexZenon joins (~alzenon@178.34.150.250)
23:32:30 × machinedgod quits (~machinedg@d50-99-47-73.abhsia.telus.net) (Ping timeout: 246 seconds)
23:36:00 × acidjnk_new quits (~acidjnk@p200300d6e72cfb704920adbe3bc2fb8d.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
23:42:42 × masterbuilder quits (~quassel@user/masterbuilder) (Remote host closed the connection)
23:43:55 masterbuilder joins (~quassel@user/masterbuilder)
23:44:41 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
23:49:09 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
23:49:23 emmanuelux joins (~emmanuelu@user/emmanuelux)
23:57:27 Guest|9 joins (~Guest|9@181.165.251.187)
23:57:36 <Guest|9> hola!
23:58:01 × Guest|9 quits (~Guest|9@181.165.251.187) (Client Quit)
23:58:11 ski blinks

All times are in UTC on 2024-08-30.