2024/08/08

2024-08-08 00:00:10 +0000Tuplanolla(~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) (Quit: Leaving.)
2024-08-08 00:07:44 +0000tabaqui(~root@87.200.123.114) (Ping timeout: 260 seconds)
2024-08-08 00:07:59 +0000tabemann(~tabemann@172-13-49-137.lightspeed.milwwi.sbcglobal.net)
2024-08-08 00:09:07 +0000peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 264 seconds)
2024-08-08 00:22:13 +0000falafel(~falafel@2a0c:5a87:3104:4c01::bfe0) (Ping timeout: 248 seconds)
2024-08-08 00:48:41 +0000anpad(~pandeyan@user/anpad) (Quit: ZNC 1.8.2 - https://znc.in)
2024-08-08 00:50:02 +0000anpad(~pandeyan@user/anpad)
2024-08-08 00:58:47 +0000shoggouth(uid607148@user/shoggouth) (Quit: Connection closed for inactivity)
2024-08-08 01:02:52 +0000bitdex(~bitdex@gateway/tor-sasl/bitdex)
2024-08-08 01:11:38 +0000oo_miguel(~Thunderbi@78.10.207.46) (Ping timeout: 245 seconds)
2024-08-08 01:14:37 +0000euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
2024-08-08 01:16:00 +0000euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
2024-08-08 01:22:04 +0000xff0x(~xff0x@2405:6580:b080:900:bb9f:ea83:5088:5a06) (Ping timeout: 265 seconds)
2024-08-08 01:22:55 +0000joeyadams(~joeyadams@2603:6010:5100:2ed:3050:6687:6772:1195)
2024-08-08 01:24:35 +0000nunggu(~q@user/nunggu)
2024-08-08 01:26:35 +0000tomku(~tomku@user/tomku) (Ping timeout: 244 seconds)
2024-08-08 01:32:11 +0000peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com)
2024-08-08 01:58:37 +0000waleee(~waleee@h-176-10-144-38.NA.cust.bahnhof.se) (Ping timeout: 244 seconds)
2024-08-08 01:58:58 +0000ZharMeny(~user@user/ZharMeny) (Quit: Fatal error 11: Segmentation fault)
2024-08-08 02:10:02 +0000xff0x(~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp)
2024-08-08 02:10:19 +0000whatsupdoc(uid509081@id-509081.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
2024-08-08 02:11:15 +0000euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Remote host closed the connection)
2024-08-08 02:11:29 +0000euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
2024-08-08 02:14:51 +0000gentauro(~gentauro@user/gentauro) (Read error: Connection reset by peer)
2024-08-08 02:18:30 +0000peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds)
2024-08-08 02:20:58 +0000gentauro(~gentauro@user/gentauro)
2024-08-08 02:30:39 +0000td_(~td@i5387090B.versanet.de) (Ping timeout: 260 seconds)
2024-08-08 02:32:06 +0000td_(~td@i53870904.versanet.de)
2024-08-08 02:51:46 +0000joeyadams(~joeyadams@2603:6010:5100:2ed:3050:6687:6772:1195) (Quit: Leaving)
2024-08-08 03:03:43 +0000aforemny(~aforemny@2001:9e8:6cc6:2f00:b85e:457c:6740:c35) (Ping timeout: 244 seconds)
2024-08-08 03:04:35 +0000aforemny(~aforemny@i59F516DA.versanet.de)
2024-08-08 03:08:45 +0000tomku(~tomku@user/tomku)
2024-08-08 03:09:30 +0000peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com)
2024-08-08 03:10:33 +0000Lord_of_Life_(~Lord@user/lord-of-life/x-2819915)
2024-08-08 03:10:57 +0000Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 244 seconds)
2024-08-08 03:11:56 +0000Lord_of_Life_Lord_of_Life
2024-08-08 03:34:49 +0000CrunchyFlakes(~CrunchyFl@ip92348280.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
2024-08-08 03:37:14 +0000CrunchyFlakes(~CrunchyFl@146.52.130.128)
2024-08-08 03:52:23 +0000peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 265 seconds)
2024-08-08 04:01:55 +0000aforemny_(~aforemny@2001:9e8:6cec:9200:56df:dd94:8882:31ea)
2024-08-08 04:03:08 +0000aforemny(~aforemny@i59F516DA.versanet.de) (Ping timeout: 255 seconds)
2024-08-08 04:10:55 +0000sawilagar(~sawilagar@user/sawilagar)
2024-08-08 04:26:57 +0000famubu(~julinuser@user/famubu)
2024-08-08 04:27:33 +0000 <famubu> Hi. I wished to use a package from hackage which provides a command invokable from the terminal. How can I install such a package?
2024-08-08 04:28:06 +0000 <famubu> I only know how to install with cabal, but that seems to work only when the package is added to a particular project?
2024-08-08 04:28:25 +0000 <famubu> Would `cabal get package-name` be the way to go?
2024-08-08 04:29:04 +0000 <Axman6> cabal install foo will install the executables that that package defines
2024-08-08 04:29:39 +0000 <haskellbridge> <bdub> but I believe the best way is too just insert as a dep in your .cabal rather than use cabal install correct me if I am wrong
2024-08-08 04:30:08 +0000 <geekosaur> it's an executable, not a library
2024-08-08 04:30:10 +0000 <Axman6> so `cabal install stylish-haskell` will install the stylish-haskell executable in ~/.cabal/bin/
2024-08-08 04:30:18 +0000 <geekosaur> `cabal install pkgname` is the right thing to do
2024-08-08 04:31:41 +0000 <geekosaur> just make sure it's installing somewhere on your $PATH. if you're using old-style paths then it installs to ~/.cabal/bin; if XDG, it'll be ~/.local/bin
2024-08-08 04:31:53 +0000 <geekosaur> you can change both of these in the cabal config file
2024-08-08 04:32:10 +0000 <geekosaur> (~/.cabal/config or ~/.config/cabal/config)
2024-08-08 04:32:25 +0000danse-nr3(~danse-nr3@user/danse-nr3)
2024-08-08 04:36:18 +0000 <famubu> Thanks.
2024-08-08 04:37:03 +0000 <famubu> I was trying to install this package: regex-genex. But cabal shows error when building one of its dependencies (stream-monad-0.3). I guess there's nothing to be done to fix that.
2024-08-08 04:38:08 +0000 <famubu> This was the error: https://bpa.st/FGDA
2024-08-08 04:38:10 +0000 <haskellbridge> <bdub> Never give into despair, the compiler is your friend
2024-08-08 04:38:40 +0000 <haskellbridge> <bdub> I am new myself to Haskell but sounds like a build error with versions of what your trying to work with
2024-08-08 04:39:16 +0000sawilagar(~sawilagar@user/sawilagar) (Ping timeout: 265 seconds)
2024-08-08 04:40:04 +0000 <famubu> Oh..
2024-08-08 04:40:43 +0000 <haskellbridge> <bdub> I am new myself so take that with a grain of salt
2024-08-08 04:40:50 +0000 <mauke> oh, that's some old code
2024-08-08 04:42:10 +0000 <geekosaur> yeh, it needs to be updated for MonadFail
2024-08-08 04:42:49 +0000 <geekosaur> https://hackage.haskell.org/package/base-4.20.0.1/docs/Control-Monad-Fail.html
2024-08-08 04:43:28 +0000 <danse-nr3> or switch to a different library famubu
2024-08-08 04:43:38 +0000 <danse-nr3> good morning all o/
2024-08-08 04:43:49 +0000 <mauke> not exactly hard, but sucks if you're only trying to use some other package that has it as a dependency
2024-08-08 04:45:08 +0000 <mauke> alternatively, get a ghc version 8.6 or older (?)
2024-08-08 04:47:29 +0000 <danse-nr3> that seems an old version of regex-genex
2024-08-08 04:47:56 +0000 <danse-nr3> 0.6.1
2024-08-08 04:48:46 +0000 <danse-nr3> well, not that old, but there is 0.7
2024-08-08 04:49:15 +0000 <danse-nr3> checking reverse dependencies on hackage and your list of packages to install, i guess you are depending on it directly
2024-08-08 04:49:16 +0000 <famubu> Does anyone know of a similar library? I am looking for a way to generate strings corresponding a given regex.
2024-08-08 04:52:05 +0000 <danse-nr3> hmm version 0.7 on github imports stream-monad without bounds https://github.com/audreyt/regex-genex/blob/master/regex-genex.cabal#L23
2024-08-08 04:53:40 +0000 <danse-nr3> but also last version of stream monad seems to derive monad fail without using MonadFail https://github.com/sebfisch/stream-monad/blob/master/src/Control/Monad/Stream.hs
2024-08-08 04:54:33 +0000 <danse-nr3> issues from ten years ago https://github.com/sebfisch/stream-monad/issues?q=is%3Aopen+is%3Aissue
2024-08-08 04:55:07 +0000 <danse-nr3> yeah different library i guess, but i cannot recommend one off the top of my head
2024-08-08 05:00:36 +0000 <famubu> Found this list: https://stackoverflow.com/questions/274011/random-text-generator-based-on-regex/43377488#43377488
2024-08-08 05:00:43 +0000 <famubu> Going to try few of them.
2024-08-08 05:03:31 +0000 <danse-nr3> corresponding category on hackage doesn't seem very promising https://hackage.haskell.org/packages/#cat:Regex
2024-08-08 05:03:35 +0000michalz(~michalz@185.246.207.217)
2024-08-08 05:04:58 +0000down200(~down200@shell.lug.mtu.edu) (Ping timeout: 245 seconds)
2024-08-08 05:05:17 +0000down200(~down200@shell.lug.mtu.edu)
2024-08-08 05:10:00 +0000 <probie> Intrusive thought of the day, why write the verbose `foo x = let baz = bar x in quux baz` when you can just write `foo x|baz<-bar x=quux baz`
2024-08-08 05:11:54 +0000 <mauke> foo (bar -> baz) =
2024-08-08 05:12:19 +0000 <danse-nr3> foo = quux . bar
2024-08-08 05:12:51 +0000 <mauke> map f ((f -> x) : (map f -> xs)) = x : xs
2024-08-08 05:13:32 +0000 <haskellbridge> <bdub> f = q . b
2024-08-08 05:13:33 +0000 <haskellbridge> <bdub> lol I have no idea wtf is going on LOL
2024-08-08 05:13:34 +0000 <haskellbridge> <bdub> and I just said lol twice, that means its bedtime
2024-08-08 05:13:44 +0000 <danse-nr3> you sure the first is the same as the second probie?
2024-08-08 05:14:10 +0000 <danse-nr3> sleep well bdub
2024-08-08 05:15:12 +0000 <Axman6> foo(bar->(quux->x))=x
2024-08-08 05:16:03 +0000 <Axman6> C or Haskell? We'll never know
2024-08-08 05:16:06 +0000chexum(~quassel@gateway/tor-sasl/chexum) (Ping timeout: 260 seconds)
2024-08-08 05:16:07 +0000 <probie> % p = pure
2024-08-08 05:16:07 +0000 <yahb2> <no output>
2024-08-08 05:16:22 +0000 <danse-nr3> % :t pure
2024-08-08 05:16:22 +0000 <yahb2> pure :: Applicative f => a -> f a
2024-08-08 05:16:27 +0000 <probie> % do{n<-(+1);m<-(+2);p$n*m}$2
2024-08-08 05:16:27 +0000 <yahb2> 12
2024-08-08 05:16:46 +0000chexum(~quassel@gateway/tor-sasl/chexum)
2024-08-08 05:17:14 +0000 <probie> % k = const
2024-08-08 05:17:14 +0000 <yahb2> <no output>
2024-08-08 05:18:19 +0000 <probie> % do{n<-(+1);m<-(+2);a<-k$42;k$42+n*m}$2
2024-08-08 05:18:19 +0000 <yahb2> 54
2024-08-08 05:19:27 +0000 <probie> I think I've been writing Haskell wrong this whole time
2024-08-08 05:19:41 +0000 <danse-nr3> yeah (-> a)'s monadic instance, but it's frowned upon by many
2024-08-08 05:20:43 +0000 <danse-nr3> personally i kind of like it
2024-08-08 05:21:22 +0000 <haskellbridge> <bdub> Just a newbie trying to learn.. why is it frowned upon by other haskellers?
2024-08-08 05:21:56 +0000 <danse-nr3> (-> a) being a monad. Not something you want to wrap your head around as a beginner i guess, may find it confusing
2024-08-08 05:22:56 +0000 <haskellbridge> <bdub> I get it.. ill stay in my little corner.... for now
2024-08-08 05:22:58 +0000 <probie> If you see an expression like `(*)<$>(+1)<*>(+2)` and haven't seen the idiom before, what do you do? You probably ask for the types of `(<$>)` and `(<*>)`, but what's returned doesn't tell you what is going on
2024-08-08 05:23:28 +0000 <danse-nr3> so
2024-08-08 05:24:01 +0000 <probie> and the correct response upon seeing it is to wonder how caleskell ended up in base
2024-08-08 05:24:16 +0000 <Axman6> I wrote some code the other day that looked like Foo (_brField <$> bar) (_barField2 <$> bar) (_barField3 <$> bar) and I was sure there must be a nice way to write it as something like Foo <$> _barField <*> _barField2 <*> _barField3 but I couldn't figur it out (though I think I have now... just needs to be passed to <$> bar)
2024-08-08 05:24:18 +0000krei-se(~krei-se@p57af2b6c.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2024-08-08 05:24:37 +0000 <danse-nr3> % :t \c -> && <$> (=='a') <*> (=='b')
2024-08-08 05:24:37 +0000 <yahb2> <interactive>:1:7: error: parse error on input ‘&&’
2024-08-08 05:24:45 +0000 <danse-nr3> % :t \c -> (&&) <$> (=='a') <*> (=='b')
2024-08-08 05:24:45 +0000 <yahb2> \c -> (&&) <$> (=='a') <*> (=='b') :: p -> Char -> Bool
2024-08-08 05:24:49 +0000 <haskellbridge> <bdub> Isnt this called Penetrating?
2024-08-08 05:24:53 +0000 <danse-nr3> is the same as
2024-08-08 05:24:59 +0000 <danse-nr3> uh i wouldn't say so
2024-08-08 05:24:59 +0000 <Axman6> Hmmm, it could have been quite nice as bar <&> liftA3 Foo _f1 _f2 _f3
2024-08-08 05:25:08 +0000 <danse-nr3> is the same as
2024-08-08 05:25:30 +0000 <danse-nr3> % :t \c -> c == 'a' && c=='b'
2024-08-08 05:25:30 +0000 <yahb2> \c -> c == 'a' && c=='b' :: Char -> Bool
2024-08-08 05:25:44 +0000 <Axman6> % data Foo = Foo {_f1 :: Bool, _f2 :: String, _f3 :: Int}
2024-08-08 05:25:44 +0000 <yahb2> <no output>
2024-08-08 05:25:44 +0000 <danse-nr3> in this case the latter is more readable
2024-08-08 05:26:06 +0000krei-se(~krei-se@p57af2d39.dip0.t-ipconnect.de)
2024-08-08 05:26:07 +0000 <Axman6> % :t liftA3 (,,) _f1 _f2 _f3
2024-08-08 05:26:07 +0000 <yahb2> <interactive>:1:1: error: ; Variable not in scope: ; liftA3 ; :: (a0 -> b0 -> c0 -> (a0, b0, c0)) ; -> (Foo -> Bool) -> (Foo -> String) -> (Foo -> Int) -> t
2024-08-08 05:26:09 +0000 <danse-nr3> but when composing functions, using the instance can often be more readable in my opinion
2024-08-08 05:26:16 +0000 <probie> The most readable version is
2024-08-08 05:26:20 +0000 <danse-nr3> caleskell?
2024-08-08 05:26:28 +0000 <Axman6> % import Control.Applicative
2024-08-08 05:26:28 +0000 <yahb2> <no output>
2024-08-08 05:26:29 +0000 <Axman6> % :t liftA3 (,,) _f1 _f2 _f3
2024-08-08 05:26:29 +0000 <yahb2> liftA3 (,,) _f1 _f2 _f3 :: Foo -> (Bool, String, Int)
2024-08-08 05:26:42 +0000rvalue(~rvalue@user/rvalue) (Read error: Connection reset by peer)
2024-08-08 05:27:13 +0000 <Axman6> Turns out what I really wanted was barbies though, and came across some code that was doing the same thing I was trying to, and it was beautiful
2024-08-08 05:27:17 +0000rvalue(~rvalue@user/rvalue)
2024-08-08 05:27:49 +0000 <jackdk> TraversableB or something, Axman6 ?
2024-08-08 05:28:54 +0000 <danse-nr3> % :t TraversableB
2024-08-08 05:28:54 +0000 <yahb2> <interactive>:1:1: error: ; Data constructor not in scope: TraversableB
2024-08-08 05:28:56 +0000 <probie> danse-nr3: once upon a time, base didn't have the `((->) r)` monad instance, but lambdabot did (I think it also had `Num` instances for functions). The person who maintained lambdabot at the time was called Cale (I think).
2024-08-08 05:29:24 +0000 <danse-nr3> oh i see. I gather you are amongst the (-> a) frowners (:
2024-08-08 05:29:28 +0000 <probie> https://hackage.haskell.org/package/barbies-2.1.1.0/docs/Data-Functor-Barbie.html#t:TraversableB
2024-08-08 05:29:46 +0000 <Axman6> jackdk: yeah. This was working in clash, where I wanted to be able to talk about a structure of signals, or a single of the structure
2024-08-08 05:29:57 +0000 <danse-nr3> not sure why barbie never sounded appealing to me
2024-08-08 05:29:59 +0000absence_(torgeihe@hildring.pvv.ntnu.no) (Ping timeout: 255 seconds)
2024-08-08 05:30:39 +0000 <haskellbridge> <bdub> Who maintains the bot now? I am HEAVY into automation probie
2024-08-08 05:31:05 +0000 <Axman6> it's a pretty cool library, solves a lot of problems in quite an elegant way. Being able to talk about things like database tables using the type the contain is very nice
2024-08-08 05:31:21 +0000 <geekosaur> bdub: int-e
2024-08-08 05:31:57 +0000absence(~absence@hildring.pvv.ntnu.no)
2024-08-08 05:33:43 +0000 <probie> I'm not against `((->) r)` being a `Monad` at all. I'm even only slightly against preferring `f <$> g <*> h` over `\x -> f (g x) (h x)`
2024-08-08 05:34:33 +0000 <danse-nr3> oh your example looks better than mine probie
2024-08-08 05:36:08 +0000 <danse-nr3> but you said it was a mistake to have calaskell in base? Anyways i was also confused by your very first point about foo bar etcetera. Well sounds like i'm struggling to follow this chan lately
2024-08-08 05:38:58 +0000 <geekosaur> use of ((->) e) tends to be very hard to follow
2024-08-08 05:40:16 +0000 <probie> If I'm being completely serious for a moment, I don't think it's a mistake to have. It is a sane, sometimes useful monad instance and to exclude it would just cause orphan instances. However, I'm not keen on it being (ab)used extensively in normal Haskell code
2024-08-08 05:40:43 +0000danse-nr3(~danse-nr3@user/danse-nr3) (Read error: Connection reset by peer)
2024-08-08 05:41:46 +0000 <Axman6> Apropos of nothing, I am so glad the C preprocessor is a functional language.
2024-08-08 05:41:47 +0000danse-nr3(~danse-nr3@user/danse-nr3)
2024-08-08 05:41:50 +0000 <Axman6> or at least higher order
2024-08-08 05:43:49 +0000 <probie> After reading through so much "Whitney C" recently, I feel inspired to write my Haskell in a similar fashion
2024-08-08 05:44:00 +0000 <danse-nr3> i find (-> e) easier than, for instance, monad transformers
2024-08-08 05:45:56 +0000 <mauke> I find (e ->) easier
2024-08-08 05:51:57 +0000rosco(~rosco@175.136.158.234)
2024-08-08 05:55:50 +0000machinedgod(~machinedg@d50-99-47-73.abhsia.telus.net) (Ping timeout: 252 seconds)
2024-08-08 05:58:07 +0000tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2024-08-08 05:59:32 +0000 <probie> % f=foldr;c=flip;i=id
2024-08-08 05:59:32 +0000 <yahb2> <no output>
2024-08-08 05:59:45 +0000 <probie> % ([]&).f(c(.).(:))i$[1..5]
2024-08-08 05:59:45 +0000 <yahb2> <interactive>:69:2: error: ; Variable not in scope: (&) :: [a0] -> ([a1] -> [a1]) -> c
2024-08-08 05:59:55 +0000 <probie> % import Data.Function ((&))
2024-08-08 05:59:55 +0000 <yahb2> <no output>
2024-08-08 06:00:03 +0000 <probie> % ([]&).f(c(.).(:))i$[1..5]
2024-08-08 06:00:03 +0000 <yahb2> [5,4,3,2,1]
2024-08-08 06:00:27 +0000 <Axman6> I'm quite proud of myself for thinking "Hmm, that's probably reverse"
2024-08-08 06:00:39 +0000 <danse-nr3> are you in the mood for showing us how haskell can get ugly probie?
2024-08-08 06:01:18 +0000 <probie> I think you mean "beautiful"
2024-08-08 06:01:38 +0000 <danse-nr3> well degustibus
2024-08-08 06:03:05 +0000 <probie> No Haskell can ever approach the beauty of BQN `+´∘((⌈`⌊(⌈`⌾⌽))-⊣)` or K `+/{((|\x)&||\|x)-x}`
2024-08-08 06:03:07 +0000CiaoSen(~Jura@2a05:5800:22f:a900:e6b9:7aff:fe80:3d03)
2024-08-08 06:04:12 +0000 <danse-nr3> expressive power /= beauty, but those look intriguing
2024-08-08 06:05:35 +0000jle`(~jle`@2603:8001:3b02:84d4:c4d5:25f2:175c:b94c) (Ping timeout: 244 seconds)
2024-08-08 06:06:33 +0000jle`(~jle`@2603:8001:3b02:84d4:ef66:1aba:fea9:c83b)
2024-08-08 06:06:35 +0000 <probie> Those code snippets solve https://www.geeksforgeeks.org/trapping-rain-water/
2024-08-08 06:09:14 +0000famubu(~julinuser@user/famubu) (Quit: leaving)
2024-08-08 06:10:42 +0000 <probie> I don't think I can ever make Haskell that terse, but there's definitely room for improvement over the idiomatic style
2024-08-08 06:13:14 +0000 <haskellbridge> <bdub> Officially out! Catch all you B E A utiful people in a few hours
2024-08-08 06:14:28 +0000 <danse-nr3> geeksforgeeks doesn't seem to imply single-letter variables nor lack of spaces
2024-08-08 06:15:25 +0000 <danse-nr3> well see you later
2024-08-08 06:15:30 +0000danse-nr3(~danse-nr3@user/danse-nr3) (Quit: on the move)
2024-08-08 06:18:33 +0000euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 252 seconds)
2024-08-08 06:19:15 +0000euleritian(~euleritia@dynamic-176-006-128-219.176.6.pool.telefonica.de)
2024-08-08 06:20:57 +0000 <probie> For those who are curious, the K implementation is roughly `sum . (\x -> zipWith (-) (zipWith min (scanl1 max x) (reverse (scanl1 max (reverse x)))) x)`
2024-08-08 06:22:44 +0000 <Axman6> The guy who does the Code Report youtube channel has some great videos on BQN and other array langs
2024-08-08 06:23:15 +0000 <Axman6> and he's done quite a few conference talks on them too
2024-08-08 06:26:31 +0000ft(~ft@p4fc2aa15.dip0.t-ipconnect.de) (Quit: leaving)
2024-08-08 06:29:03 +0000lortabac(~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4)
2024-08-08 06:29:34 +0000dsrt^(dsrt@c-98-242-74-66.hsd1.ga.comcast.net)
2024-08-08 06:30:07 +0000 <probie> Someone's currently writing a simple interpreter for a dialect of APL in Haskell https://github.com/RubenVerg/tinyapl (it's not particularly fast since it uses lists, nor is it particularly usable, since is still missing some "core" functionality)
2024-08-08 06:35:38 +0000 <Axman6> Oh man, I forgot how much there was to define
2024-08-08 06:37:22 +0000 <Axman6> I wonder how much changing from list to Vector would change performance. Not even sure if it would help
2024-08-08 06:37:59 +0000 <dminuoso> I wouldnt be too quicky to put the blame on lists until I was staring at profiling data.
2024-08-08 06:39:57 +0000Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2024-08-08 06:40:00 +0000 <probie> It depends on the operation. It has obvious implications on uses of `⌷` (pronounced "squad") which is roughly like `!!`
2024-08-08 06:41:17 +0000 <probie> On the other hand, something like `+/⍳100` (`sum [1..100]`) probably benefits compared to using `Vector`, since it can run in constant space without ever making the entire array
2024-08-08 06:43:26 +0000 <mauke> I was fined, but later I was defined
2024-08-08 06:43:36 +0000 <mauke> unfortunately, in the end I was undefined
2024-08-08 06:44:00 +0000sord937(~sord937@gateway/tor-sasl/sord937)
2024-08-08 06:44:48 +0000 <Axman6> I wonder if you could have a type somewhat similar to what repa does. so something like [1..100] would be represented internally as (Int -> a)
2024-08-08 06:44:50 +0000sawilagar(~sawilagar@user/sawilagar)
2024-08-08 06:48:53 +0000 <Axman6> I guess repa gets benefits from this from being able to inline things, a la stream fusion (and making calls to these functions in parallel)
2024-08-08 06:51:38 +0000JuanDaugherty(~juan@user/JuanDaugherty)
2024-08-08 07:01:35 +0000tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2024-08-08 07:05:31 +0000peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com)
2024-08-08 07:07:52 +0000Inst(~Inst@user/Inst)
2024-08-08 07:09:05 +0000sawilagar(~sawilagar@user/sawilagar) (Ping timeout: 248 seconds)
2024-08-08 07:09:09 +0000oo_miguel(~Thunderbi@78.10.207.46)
2024-08-08 07:10:07 +0000sawilagar(~sawilagar@user/sawilagar)
2024-08-08 07:20:47 +0000sawilagar(~sawilagar@user/sawilagar) (Remote host closed the connection)
2024-08-08 07:21:10 +0000sawilagar(~sawilagar@user/sawilagar)
2024-08-08 07:21:30 +0000kuribas(~user@2a02:1808:82:77e4:3737:2793:e72d:ca1e)
2024-08-08 07:21:43 +0000peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 264 seconds)
2024-08-08 07:23:08 +0000 <Cale> probie: true, it was me, haha
2024-08-08 07:25:25 +0000hayk(~hayk@37.252.90.243)
2024-08-08 07:28:05 +0000 <lortabac> Is there a way to test compilation errors? I made a typechecker plugin that forbids certain constraint combinations and would like to write automated tests for it
2024-08-08 07:28:59 +0000 <c_wraith> yes, though it's sort of hacky
2024-08-08 07:29:27 +0000 <c_wraith> well, specifically for type errors.
2024-08-08 07:29:49 +0000 <c_wraith> You can compile the test with -fdefer-type-errors, and ensure that the test raises the appropriate runtime exception
2024-08-08 07:29:52 +0000 <probie> Run GHC with `-fdefer-type-errors` and then catch them?
2024-08-08 07:30:03 +0000 <probie> rip, I'm too slow
2024-08-08 07:30:24 +0000 <lortabac> that was my first idea but it doesn't seem to work on my specific case
2024-08-08 07:30:59 +0000 <c_wraith> I'm not sure how deferring type errors interacts with typechecker plugins
2024-08-08 07:32:05 +0000kuribas(~user@2a02:1808:82:77e4:3737:2793:e72d:ca1e) (Ping timeout: 248 seconds)
2024-08-08 07:32:13 +0000 <lortabac> ah wait it probably works
2024-08-08 07:32:57 +0000 <lortabac> for some reason it didn't work in GHCI but if I set -fdefer-type-errors in cabal I see the errors appearing as warnings
2024-08-08 07:33:42 +0000 <c_wraith> setting it in ghci only affects code you type into ghci, not modules it loads
2024-08-08 07:33:59 +0000 <c_wraith> Ideally you'd use an OPTIONS_GHC pragma to enable it only in the module that needs it
2024-08-08 07:34:02 +0000 <lortabac> ok clear
2024-08-08 07:34:24 +0000 <lortabac> yes thanks for your suggestions
2024-08-08 07:44:12 +0000 <lortabac> actually I'm afraid I can't use this technique
2024-08-08 07:44:46 +0000 <lortabac> because no runtime error happens
2024-08-08 07:44:58 +0000danse-nr3(~danse-nr3@user/danse-nr3)
2024-08-08 07:45:40 +0000 <lortabac> my plugin only adds extra restrictions to an otherwise valid Haskell program
2024-08-08 07:46:24 +0000 <lortabac> I guess I need to test these cases externally
2024-08-08 07:47:12 +0000 <lortabac> by compiling them in individual scripts and checking GHC's exit code
2024-08-08 07:47:20 +0000 <haskellbridge> <sm> seems easiest. shelltestrunner ?
2024-08-08 07:47:53 +0000euleritian(~euleritia@dynamic-176-006-128-219.176.6.pool.telefonica.de) (Read error: Connection reset by peer)
2024-08-08 07:48:15 +0000euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
2024-08-08 07:48:39 +0000 <lortabac> thanks, shelltestrunner looks like a good option
2024-08-08 07:52:23 +0000kuribas(~user@ip-188-118-57-242.reverse.destiny.be)
2024-08-08 07:56:11 +0000machinedgod(~machinedg@d50-99-47-73.abhsia.telus.net)
2024-08-08 07:57:33 +0000hgolden(~hgolden@2603:8000:9d00:3ed1:1ee4:1b7c:94a7:8fa7) (Ping timeout: 252 seconds)
2024-08-08 07:57:44 +0000euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 260 seconds)
2024-08-08 07:59:42 +0000hgolden(~hgolden@2603:8000:9d00:3ed1:1ee4:1b7c:94a7:8fa7)
2024-08-08 08:00:40 +0000JuanDaugherty(~juan@user/JuanDaugherty) (Quit: JuanDaugherty)
2024-08-08 08:04:23 +0000acidjnk_new(~acidjnk@p200300d6e72cfb06d8fe89eabbea3551.dip0.t-ipconnect.de)
2024-08-08 08:06:13 +0000sawilagar(~sawilagar@user/sawilagar) (Ping timeout: 248 seconds)
2024-08-08 08:11:22 +0000euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
2024-08-08 08:11:38 +0000tcard_(~tcard@2400:4051:5801:7500:1e90:74c3:2754:ce8a) (Read error: Connection reset by peer)
2024-08-08 08:11:48 +0000tcard_(~tcard@2400:4051:5801:7500:1e90:74c3:2754:ce8a)
2024-08-08 08:12:06 +0000Square(~Square@user/square)
2024-08-08 08:12:34 +0000sawilagar(~sawilagar@user/sawilagar)
2024-08-08 08:13:41 +0000tcard_(~tcard@2400:4051:5801:7500:1e90:74c3:2754:ce8a) (Read error: Connection reset by peer)
2024-08-08 08:13:48 +0000tcard_(~tcard@2400:4051:5801:7500:1e90:74c3:2754:ce8a)
2024-08-08 08:15:17 +0000mesaoptimizer(~mesaoptim@user/PapuaHardyNet) (Quit: mesaoptimizer)
2024-08-08 08:15:27 +0000mesaoptimizer(~mesaoptim@user/PapuaHardyNet)
2024-08-08 08:28:45 +0000tabaqui(~root@87.200.123.114)
2024-08-08 08:29:36 +0000econo_(uid147250@id-147250.tinside.irccloud.com) (Quit: Connection closed for inactivity)
2024-08-08 08:32:19 +0000sawilagar(~sawilagar@user/sawilagar) (Ping timeout: 244 seconds)
2024-08-08 08:32:32 +0000_d0t(~{-d0t-}@user/-d0t-/x-7915216) (Remote host closed the connection)
2024-08-08 08:33:22 +0000_d0t(~{-d0t-}@user/-d0t-/x-7915216)
2024-08-08 08:33:40 +0000 <probie> My attempt at "Whitney Haskell" is less revolting than I expected https://paste.tomsmeding.com/fyoq8LlH
2024-08-08 08:36:05 +0000 <danse-nr3> what is that referencing? Only found en.wikipedia.org/wiki/whitney_topologies
2024-08-08 08:38:53 +0000 <probie> Look at the style of C used in https://codeberg.org/ngn/k or https://github.com/kevinlawler/kona
2024-08-08 08:39:31 +0000 <danse-nr3> why "whitney" though? Well i'll peek at one of those
2024-08-08 08:39:52 +0000sawilagar(~sawilagar@user/sawilagar)
2024-08-08 08:40:09 +0000 <danse-nr3> oh it's the single-letter, no spaces you were showcasing before
2024-08-08 08:40:24 +0000 <danse-nr3> basically, obfuscation
2024-08-08 08:40:35 +0000 <probie> Named for Arthur Whitney, the creator of K
2024-08-08 08:40:40 +0000 <Franciman> K
2024-08-08 08:40:43 +0000 <Franciman> ops sorry
2024-08-08 08:40:45 +0000 <danse-nr3> oh, interesting
2024-08-08 08:40:48 +0000 <danse-nr3> hey Franciman
2024-08-08 08:40:55 +0000 <Franciman> \o
2024-08-08 08:42:57 +0000 <probie> it's also not obfuscated per se, it's just a style that prioritises fitting as much on the screen at once as possible
2024-08-08 08:43:17 +0000 <xerox> coding with a broken spacebar
2024-08-08 08:43:24 +0000 <danse-nr3> :P
2024-08-08 08:43:43 +0000 <danse-nr3> sounds a bit radical probie
2024-08-08 08:55:03 +0000cfricke(~cfricke@user/cfricke)
2024-08-08 08:55:44 +0000Patternm1ster(~georg@vmi1645272.contaboserver.net) (Quit: leaving)
2024-08-08 08:58:28 +0000JuanDaugherty(~juan@user/JuanDaugherty)
2024-08-08 08:59:08 +0000CiaoSen(~Jura@2a05:5800:22f:a900:e6b9:7aff:fe80:3d03) (Ping timeout: 245 seconds)
2024-08-08 08:59:47 +0000Patternmaster(~georg@user/Patternmaster)
2024-08-08 09:02:41 +0000ubert(~Thunderbi@2001:871:263:7b9b:9162:639d:781d:48b5)
2024-08-08 09:03:55 +0000 <haskellbridge> <sm> probie: like it! You can see some of this in the haskell tiny games jam too
2024-08-08 09:04:24 +0000FinnElija(~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
2024-08-08 09:09:07 +0000gmg(~user@user/gehmehgeh)
2024-08-08 09:09:36 +0000 <danse-nr3> might be of user for demoscene? I think they only care about size of compiled there though
2024-08-08 09:09:40 +0000 <danse-nr3> *of use
2024-08-08 09:11:59 +0000xff0x(~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 252 seconds)
2024-08-08 09:12:12 +0000FinnElija(~finn_elij@user/finn-elija/x-0085643)
2024-08-08 09:14:03 +0000JuanDaugherty(~juan@user/JuanDaugherty) (Quit: JuanDaugherty)
2024-08-08 09:14:33 +0000falafel(~falafel@2a0c:5a87:3104:4c01::bfe0)
2024-08-08 09:15:15 +0000tzh(~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz)
2024-08-08 09:41:38 +0000dans48005(~danse-nr3@user/danse-nr3)
2024-08-08 09:43:47 +0000danse-nr3(~danse-nr3@user/danse-nr3) (Ping timeout: 255 seconds)
2024-08-08 09:45:40 +0000tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2024-08-08 09:50:51 +0000FinnElija(~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 260 seconds)
2024-08-08 09:51:33 +0000FinnElija(~finn_elij@user/finn-elija/x-0085643)
2024-08-08 10:08:25 +0000sawilagar(~sawilagar@user/sawilagar) (Ping timeout: 265 seconds)
2024-08-08 10:15:28 +0000sawilagar(~sawilagar@user/sawilagar)
2024-08-08 10:17:43 +0000falafel(~falafel@2a0c:5a87:3104:4c01::bfe0) (Ping timeout: 244 seconds)
2024-08-08 10:21:06 +0000xff0x(~xff0x@2405:6580:b080:900:465e:7eef:8460:d9d2)
2024-08-08 10:24:45 +0000sawilagar(~sawilagar@user/sawilagar) (Ping timeout: 276 seconds)
2024-08-08 10:39:00 +0000lortabac(~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Quit: WeeChat 4.2.2)
2024-08-08 10:39:30 +0000sawilagar(~sawilagar@user/sawilagar)
2024-08-08 10:46:21 +0000gmg(~user@user/gehmehgeh) (Remote host closed the connection)
2024-08-08 10:47:04 +0000gmg(~user@user/gehmehgeh)
2024-08-08 10:50:33 +0000Digitteknohippie(~user@user/digit)
2024-08-08 10:51:09 +0000Digit(~user@user/digit) (Ping timeout: 260 seconds)
2024-08-08 11:11:49 +0000remedan(~remedan@ip-62-245-108-153.bb.vodafone.cz) (Ping timeout: 248 seconds)
2024-08-08 11:14:35 +0000ZharMeny(~user@user/ZharMeny)
2024-08-08 11:18:53 +0000hayk(~hayk@37.252.90.243) (Quit: hayk)
2024-08-08 11:21:16 +0000stiell(~stiell@gateway/tor-sasl/stiell) (Ping timeout: 260 seconds)
2024-08-08 11:22:05 +0000JuanDaugherty(~juan@user/JuanDaugherty)
2024-08-08 11:27:22 +0000dans48005(~danse-nr3@user/danse-nr3) (Quit: meal)
2024-08-08 11:31:16 +0000CiaoSen(~Jura@2a05:5800:22f:a900:e6b9:7aff:fe80:3d03)
2024-08-08 11:34:37 +0000tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2024-08-08 11:34:53 +0000TMA(tma@twin.jikos.cz) (Remote host closed the connection)
2024-08-08 11:37:09 +0000stiell(~stiell@gateway/tor-sasl/stiell)
2024-08-08 11:37:25 +0000TMA(tma@twin.jikos.cz)
2024-08-08 11:41:41 +0000TMA(tma@twin.jikos.cz) (Ping timeout: 248 seconds)
2024-08-08 11:48:09 +0000stiell_(~stiell@gateway/tor-sasl/stiell)
2024-08-08 11:51:30 +0000TMA(tma@twin.jikos.cz)
2024-08-08 11:51:36 +0000stiell(~stiell@gateway/tor-sasl/stiell) (Ping timeout: 260 seconds)
2024-08-08 12:03:12 +0000tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2024-08-08 12:06:07 +0000danse-nr3(~danse-nr3@user/danse-nr3)
2024-08-08 12:11:01 +0000sawilagar(~sawilagar@user/sawilagar) (Ping timeout: 248 seconds)
2024-08-08 12:27:50 +0000JuanDaugherty(~juan@user/JuanDaugherty) (Quit: JuanDaugherty)
2024-08-08 12:47:14 +0000Miroboru(~myrvoll@178-164-114.82.3p.ntebredband.no)
2024-08-08 12:51:37 +0000ddellacosta(~ddellacos@ool-44c73d29.dyn.optonline.net) (Ping timeout: 252 seconds)
2024-08-08 12:54:49 +0000rosco(~rosco@175.136.158.234) (Quit: Lost terminal)
2024-08-08 13:03:15 +0000bitdex(~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
2024-08-08 13:05:05 +0000picnoir(~picnoir@about/aquilenet/vodoo/NinjaTrappeur) (Quit: WeeChat 4.3.5)
2024-08-08 13:06:51 +0000picnoir(~picnoir@about/aquilenet/vodoo/NinjaTrappeur)
2024-08-08 13:12:48 +0000rosco(~rosco@175.136.158.234)
2024-08-08 13:22:11 +0000ddellacosta(~ddellacos@ool-44c73d29.dyn.optonline.net)
2024-08-08 13:24:11 +0000hayk(~hayk@37.252.90.243)
2024-08-08 13:24:33 +0000ZharMeny(~user@user/ZharMeny) (Ping timeout: 252 seconds)
2024-08-08 13:33:26 +0000acidjnk_new3(~acidjnk@p200300d6e72cfb069cd6142dbab03153.dip0.t-ipconnect.de)
2024-08-08 13:33:54 +0000acidjnk_new(~acidjnk@p200300d6e72cfb06d8fe89eabbea3551.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2024-08-08 13:34:15 +0000sawilagar(~sawilagar@user/sawilagar)
2024-08-08 13:35:40 +0000YoungFrog(~youngfrog@39.129-180-91.adsl-dyn.isp.belgacom.be) (Quit: ZNC 1.7.x-git-3-96481995 - https://znc.in)
2024-08-08 13:41:52 +0000dans39187(~danse-nr3@user/danse-nr3)
2024-08-08 13:42:11 +0000alexherbo2(~alexherbo@2a02-8440-3314-ca9a-0563-f5c7-288c-8691.rev.sfr.net)
2024-08-08 13:44:05 +0000danse-nr3(~danse-nr3@user/danse-nr3) (Ping timeout: 255 seconds)
2024-08-08 13:44:11 +0000slac21088(~slack1256@2803:c600:5111:8029:469f:21dd:e308:1389) (Remote host closed the connection)
2024-08-08 13:44:48 +0000slack1256(~slack1256@179.60.70.224)
2024-08-08 13:54:00 +0000tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Read error: Connection reset by peer)
2024-08-08 13:57:32 +0000YoungFrog(~youngfrog@2a02:a03f:c9db:fc00:b4ad:7d6f:2694:3c32)
2024-08-08 14:01:01 +0000zerozzz
2024-08-08 14:11:02 +0000dans39187(~danse-nr3@user/danse-nr3) (Remote host closed the connection)
2024-08-08 14:11:17 +0000danse-nr3(~danse-nr3@user/danse-nr3)
2024-08-08 14:14:26 +0000ThePenguin(~ThePengui@cust-95-80-24-166.csbnet.se) (Remote host closed the connection)
2024-08-08 14:14:42 +0000slack1256(~slack1256@179.60.70.224) (Read error: Connection reset by peer)
2024-08-08 14:15:01 +0000ThePenguin(~ThePengui@cust-95-80-24-166.csbnet.se)
2024-08-08 14:15:13 +0000slack1256(~slack1256@2803:c600:5111:8029:44f4:5d68:3d8e:eb90)
2024-08-08 14:16:19 +0000sawilagar(~sawilagar@user/sawilagar) (Ping timeout: 252 seconds)
2024-08-08 14:19:50 +0000ZharMeny(~user@user/ZharMeny)
2024-08-08 14:20:50 +0000tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2024-08-08 14:23:41 +0000Sgeo(~Sgeo@user/sgeo)
2024-08-08 14:28:37 +0000cfricke(~cfricke@user/cfricke) (Ping timeout: 248 seconds)
2024-08-08 14:38:08 +0000tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2024-08-08 14:38:26 +0000 <danse-nr3> Cannot use record selector ‘constructor’ as a function due to escaped type variables
2024-08-08 14:38:41 +0000 <danse-nr3> first existential clumsy steps
2024-08-08 14:39:49 +0000CiaoSen(~Jura@2a05:5800:22f:a900:e6b9:7aff:fe80:3d03) (Ping timeout: 248 seconds)
2024-08-08 14:39:52 +0000 <EvanR> it used to say "my brain just exploded"
2024-08-08 14:40:14 +0000 <EvanR> I'm not sure which message is better
2024-08-08 14:40:51 +0000 <danse-nr3> my brain is still dumbly staring at that
2024-08-08 14:41:09 +0000 <danse-nr3> it will probably explode after any understanding
2024-08-08 14:41:17 +0000 <danse-nr3> *possibly
2024-08-08 14:42:08 +0000 <EvanR> the record contains something of some type but you don't know which
2024-08-08 14:42:36 +0000 <EvanR> the type system can't tell if you know what you're doing
2024-08-08 14:44:29 +0000 <Leary> danse-nr3: Haskell existentials have some limitations. When in doubt, use case-of.
2024-08-08 14:44:58 +0000 <danse-nr3> cheers!
2024-08-08 14:56:20 +0000sawilagar(~sawilagar@user/sawilagar)
2024-08-08 14:56:41 +0000cfricke(~cfricke@user/cfricke)
2024-08-08 14:57:04 +0000 <Leary> (we only have the /forall/ quantifier, no /exists/, so we can only deal with existentials in ways that can be typed with foralls. `MkEx :: forall a. a -> Ex` and `withEx :: forall a r. Ex -> (a -> r) -> r` are fine, but `unEx :: exists a. Ex -> a` isn't supported)
2024-08-08 15:00:50 +0000danse-nr3crosses her fingers for /exists/ to eventually exist
2024-08-08 15:01:33 +0000DigitteknohippieDigit
2024-08-08 15:03:38 +0000remedan(~remedan@ip-62-245-108-153.bb.vodafone.cz)
2024-08-08 15:04:42 +0000 <Leary> Err, `withEx :: forall r. Ex -> (forall a. a -> r) -> r`*
2024-08-08 15:07:14 +0000ubert(~Thunderbi@2001:871:263:7b9b:9162:639d:781d:48b5) (Ping timeout: 272 seconds)
2024-08-08 15:13:02 +0000JuanDaugherty(~juan@user/JuanDaugherty)
2024-08-08 15:17:42 +0000ft(~ft@p4fc2aa15.dip0.t-ipconnect.de)
2024-08-08 15:25:20 +0000tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2024-08-08 15:33:15 +0000tzh(~tzh@c-76-115-131-146.hsd1.or.comcast.net)
2024-08-08 15:35:27 +0000peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com)
2024-08-08 15:38:27 +0000 <EvanR> poor man's module system
2024-08-08 15:38:54 +0000 <dminuoso> I wonder, is there a deeper reason for exists not existing?
2024-08-08 15:39:36 +0000 <dminuoso> I guess it would require some kind of modification of the Gen rule in Damas Milner?
2024-08-08 15:42:30 +0000 <c_wraith> I think the biggest reason is that it's really unclear what useful thing it would add.
2024-08-08 15:43:13 +0000 <EvanR> what does it add while costing a new keyword
2024-08-08 15:43:49 +0000 <danse-nr3> maybe i am biased by use in math that makes it seem important
2024-08-08 15:44:43 +0000 <dminuoso> EvanR: I think the keyword is the smallest problem. Happy has full monad support, so at best we could demote it to a type-level keyword `exists`.
2024-08-08 15:45:09 +0000 <EvanR> the use in math is terrible. The banach-tarski paradox has a mapping That Exists (tm)
2024-08-08 15:45:32 +0000 <EvanR> that merely exists, in the language of HoTT
2024-08-08 15:45:43 +0000 <c_wraith> Like, most of the cases where I use existentials are packing together related values. I can already do that with the way GHC supports the universal/existential duality
2024-08-08 15:46:13 +0000 <c_wraith> I don't even see how it'd be less code with an exists keyword
2024-08-08 15:46:41 +0000 <EvanR> my brain just operations on foralls sorry, to paraphrase OOP fans
2024-08-08 15:46:44 +0000 <EvanR> operates
2024-08-08 15:47:08 +0000peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 272 seconds)
2024-08-08 15:48:40 +0000 <c_wraith> I suppose in theory an exists keyword would allow me to replace the custom data type with an existentially-quantified tuple, but custom types for custom purposes is a good habit anyway
2024-08-08 15:49:32 +0000 <dminuoso> Also there is a bunch of places where an explicit `exists` would seem like a better distinction than moving `forall` one place to the lext
2024-08-08 15:49:45 +0000 <dminuoso> e.g. existential quantification in data types.
2024-08-08 15:50:04 +0000 <EvanR> the syntax for existential quantification in data types doesn't kind of make no sense
2024-08-08 15:50:25 +0000EvanRbreaks the not gate on all their messages
2024-08-08 15:50:33 +0000 <dminuoso> I mean next you know, writing `data X Int forall x. = X ...` carries some meaning too, just to save ourselves some other keyword.
2024-08-08 15:50:39 +0000 <c_wraith> I only ever use existential quantification in data types with GADT syntax. It makes a lot more sense there.
2024-08-08 15:50:59 +0000 <dminuoso> Oh yeah, GADTSyntax is definitely the way it should have been from the beginning.
2024-08-08 15:51:21 +0000 <EvanR> +1
2024-08-08 15:52:03 +0000 <int-e> let's have an existential crisis for all (scnr)
2024-08-08 15:54:51 +0000waleee(~waleee@h-176-10-144-38.NA.cust.bahnhof.se)
2024-08-08 15:58:03 +0000yaroot_(~yaroot@2400:4052:ac0:d901:1cf4:2aff:fe51:c04c)
2024-08-08 15:58:37 +0000skyesoss(~Thunderbi@128.135.204.35)
2024-08-08 15:59:00 +0000Ram-Z_(~Ram-Z@li1814-254.members.linode.com)
2024-08-08 15:59:12 +0000xnbya2(~xnbya@2a01:4f8:c17:cbdd::1)
2024-08-08 16:00:06 +0000rvalue(~rvalue@user/rvalue) (Ping timeout: 252 seconds)
2024-08-08 16:00:06 +0000rvalue-(~rvalue@user/rvalue)
2024-08-08 16:00:47 +0000yaroot(~yaroot@2400:4052:ac0:d901:1cf4:2aff:fe51:c04c) (Ping timeout: 246 seconds)
2024-08-08 16:00:47 +0000xnbya(~xnbya@2a01:4f8:c17:cbdd::1) (Quit: No Ping reply in 180 seconds.)
2024-08-08 16:00:48 +0000jocke-l(jocke-l@a.x0.is) (Ping timeout: 246 seconds)
2024-08-08 16:00:48 +0000yaroot_yaroot
2024-08-08 16:00:48 +0000Ram-Z(Ram-Z@2a01:7e01::f03c:91ff:fe57:d2df) (Ping timeout: 246 seconds)
2024-08-08 16:02:05 +0000 <haskellbridge> <Bowuigi> Technically you can solve the unex problem by adopting the dependent exists
2024-08-08 16:03:22 +0000 <haskellbridge> <Bowuigi> So "unEx :: forall t. Ex t -> t" is the same as sigma's "snd"
2024-08-08 16:04:18 +0000rvalue-rvalue
2024-08-08 16:04:42 +0000sawilagar(~sawilagar@user/sawilagar) (Ping timeout: 276 seconds)
2024-08-08 16:04:53 +0000 <haskellbridge> <Bowuigi> Sigma's "fst"*
2024-08-08 16:05:08 +0000sawilagar(~sawilagar@user/sawilagar)
2024-08-08 16:06:05 +0000ephilalethes(~noumenon@113.51-175-156.customer.lyse.net) (Read error: Connection reset by peer)
2024-08-08 16:06:16 +0000 <EvanR> I think this issue is you have something like Sigma t (something involving t), and the problematic operation is snd
2024-08-08 16:07:32 +0000noumenon(~noumenon@113.51-175-156.customer.lyse.net)
2024-08-08 16:08:02 +0000kuribas(~user@ip-188-118-57-242.reverse.destiny.be) (Remote host closed the connection)
2024-08-08 16:12:59 +0000 <haskellbridge> <Bowuigi> Yeah plugging that modified version of Ex into mkEx leaves us with at Identity (or a weird GADT that has at least Identity capabilities, idk)
2024-08-08 16:13:46 +0000jocke-l(jocke-l@a.x0.is)
2024-08-08 16:17:50 +0000danse-nr3(~danse-nr3@user/danse-nr3) (Quit: going for a walk)
2024-08-08 16:21:06 +0000L29Ah(~L29Ah@wikipedia/L29Ah) ()
2024-08-08 16:21:13 +0000 <dolio> Σ isn't exists, though, really.
2024-08-08 16:21:39 +0000ubert(~Thunderbi@2001:871:263:7b9b:33b7:13f4:a3fd:d5f4)
2024-08-08 16:24:35 +0000alexherbo2(~alexherbo@2a02-8440-3314-ca9a-0563-f5c7-288c-8691.rev.sfr.net) (Remote host closed the connection)
2024-08-08 16:25:53 +0000ubert(~Thunderbi@2001:871:263:7b9b:33b7:13f4:a3fd:d5f4) (Ping timeout: 248 seconds)
2024-08-08 16:29:30 +0000sawilagar(~sawilagar@user/sawilagar) (Ping timeout: 260 seconds)
2024-08-08 16:36:57 +0000rosco(~rosco@175.136.158.234) (Quit: Lost terminal)
2024-08-08 16:41:10 +0000waleee(~waleee@h-176-10-144-38.NA.cust.bahnhof.se) (Ping timeout: 252 seconds)
2024-08-08 16:44:34 +0000danse-nr3(~danse-nr3@user/danse-nr3)
2024-08-08 16:51:56 +0000ubert(~Thunderbi@2001:871:263:7b9b:6d29:aa3c:7687:9089)
2024-08-08 16:54:07 +0000chexum(~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
2024-08-08 16:54:23 +0000chexum(~quassel@gateway/tor-sasl/chexum)
2024-08-08 16:56:00 +0000sawilagar(~sawilagar@user/sawilagar)
2024-08-08 16:56:01 +0000 <danse-nr3> :/ can't use forall because i need a constraint
2024-08-08 16:56:19 +0000 <danse-nr3> (in a `data`)
2024-08-08 16:56:31 +0000 <EvanR> GADT it is
2024-08-08 16:56:48 +0000 <danse-nr3> huh i'll look that up, cheers
2024-08-08 16:56:48 +0000ubert(~Thunderbi@2001:871:263:7b9b:6d29:aa3c:7687:9089) (Ping timeout: 272 seconds)
2024-08-08 16:57:57 +0000 <EvanR> https://wiki.haskell.org/Data_declaration_with_constraint
2024-08-08 16:58:45 +0000 <danse-nr3> cheers, i was on https://wiki.haskell.org/GADTs_for_dummies :P
2024-08-08 17:02:51 +0000econo_(uid147250@id-147250.tinside.irccloud.com)
2024-08-08 17:03:32 +0000hseg(~gesh@46.120.21.97)
2024-08-08 17:04:03 +0000 <hseg> Hi. Is there any way to (using stack) decouple building tests from running them?
2024-08-08 17:04:41 +0000 <hseg> (the packaging system I'm targetting likes to have these phases be separate)
2024-08-08 17:05:49 +0000 <hseg> ... actually, rereading docs that may be inaccurate
2024-08-08 17:06:04 +0000 <danse-nr3> stack test --no-run-tests
2024-08-08 17:06:23 +0000 <hseg> sure, but then a subsequent stack test will try rebuilding the tests
2024-08-08 17:06:45 +0000 <danse-nr3> hmm it should not i think
2024-08-08 17:07:20 +0000 <danse-nr3> oh i see what you mean
2024-08-08 17:07:21 +0000 <hseg> (what lead me down this rabbithole is that stack build; stack test seemed to recompile the whole project twice (for different profiles?) whereas stack build --test --no-run-tests; stack test at least gave the impression of rebuilding the tests)
2024-08-08 17:07:42 +0000 <danse-nr3> huh ...
2024-08-08 17:07:44 +0000ubert(~Thunderbi@2001:871:263:7b9b:ad71:28a9:46a4:a88e)
2024-08-08 17:07:54 +0000 <danse-nr3> mine is stack test --no-run-tests
2024-08-08 17:08:09 +0000 <hseg> yeah, because stack aliases test = build --test
2024-08-08 17:08:14 +0000 <danse-nr3> oh yeah but i guess that's the same as stack build --...
2024-08-08 17:08:16 +0000 <danse-nr3> exactly
2024-08-08 17:09:08 +0000 <danse-nr3> well works for me, one builds the other runs, although i have stack building unexpectedly at time... not sure whether my lack of understanding or any error in stack
2024-08-08 17:09:17 +0000 <danse-nr3> *at times
2024-08-08 17:10:01 +0000ubert(~Thunderbi@2001:871:263:7b9b:ad71:28a9:46a4:a88e) (Remote host closed the connection)
2024-08-08 17:10:05 +0000 <hseg> yeah. reading the stack docs, it seems like its sacrificing correctness over convenience here. understandable, but annoying in this niche circumstance
2024-08-08 17:10:20 +0000ubert(~Thunderbi@2001:871:263:7b9b:f884:5c80:acff:c71d)
2024-08-08 17:10:31 +0000 <danse-nr3> "here" where?
2024-08-08 17:10:51 +0000 <hseg> with the aliasing
2024-08-08 17:10:53 +0000 <danse-nr3> no i wasn't referring to anything documented
2024-08-08 17:11:25 +0000 <danse-nr3> don't see how correctness is sacrificed by the aliasing either
2024-08-08 17:11:42 +0000 <hseg> having packaged some python stuff as well, it surprises me stack build / stack test is not analogous to python -m build / python -m pytest
2024-08-08 17:12:04 +0000 <danse-nr3> but anyways, --no-run-tests just builds, without it runs. Erratic behaviour may happen
2024-08-08 17:12:04 +0000 <hseg> (then again, what's correct in my eyes might not be correct in others' eyes
2024-08-08 17:12:21 +0000 <hseg> and vice versa)
2024-08-08 17:13:38 +0000 <hseg> right -- main source of unpredictability here would be if between the --no-run-tests and the actual stack test the state changes enough to get stack to recompile the test suite
2024-08-08 17:14:13 +0000 <hseg> also, just found https://discourse.haskell.org/t/recompilation-issue-with-stack-test/10120
2024-08-08 17:14:36 +0000 <hseg> which gives the stack side of things some more legitimacy here
2024-08-08 17:14:49 +0000 <danse-nr3> well if in between the source changes, than it should predictably rebuild
2024-08-08 17:15:08 +0000 <danse-nr3> is this the right way to use generic types with forall? https://paste.tomsmeding.com/dTgtBQbk
2024-08-08 17:15:49 +0000 <danse-nr3> syntax error
2024-08-08 17:16:16 +0000 <hseg> You probably want to write ... where Summand (forall ...)
2024-08-08 17:16:51 +0000g00gler(uid125351@id-125351.uxbridge.irccloud.com)
2024-08-08 17:17:55 +0000 <Leary> danse-nr3: You're mixing up the old existential syntax and the GADT syntax that subsumes it. Either `data Summand f = forall ...` or `data Summand f where { Summand :: forall ... }`.
2024-08-08 17:18:28 +0000 <danse-nr3> huh fancy
2024-08-08 17:18:39 +0000 <danse-nr3> well in the fist i can't add a constraint
2024-08-08 17:18:54 +0000 <danse-nr3> while in the second ... hmm i'll try
2024-08-08 17:19:36 +0000 <danse-nr3> looks really wrong... compiling...
2024-08-08 17:19:45 +0000 <danse-nr3> nah
2024-08-08 17:19:54 +0000 <danse-nr3> i probably got you wrong
2024-08-08 17:20:17 +0000 <danse-nr3> this was my interpretation https://paste.tomsmeding.com/EoXyYjxh
2024-08-08 17:20:58 +0000 <Leary> % data Ex c = forall a. c a => MkEx a
2024-08-08 17:20:58 +0000 <yahb2> <no output>
2024-08-08 17:21:10 +0000 <danse-nr3> wait i also had to move the forall
2024-08-08 17:21:24 +0000 <Leary> % data Ex2 c where MkEx2 :: forall a. c a => Ex2 c
2024-08-08 17:21:24 +0000 <yahb2> <interactive>:81:37: error: Not in scope: type variable ‘c’ ; ; <interactive>:81:48: error: Not in scope: type variable ‘c’
2024-08-08 17:21:42 +0000 <Leary> % data Ex2 c where MkEx2 :: forall c a. c a => Ex2 c
2024-08-08 17:21:42 +0000 <yahb2> <interactive>:83:18: error: ; • Could not deduce (c a0) ; from the context: c a ; bound by the type of the constructor ‘MkEx2’: ; forall {k1} (c :: k1 -> Constr...
2024-08-08 17:22:16 +0000 <Leary> % data Ex2 c where MkEx2 :: forall c a. c a => a -> Ex2 c
2024-08-08 17:22:16 +0000 <yahb2> <no output>
2024-08-08 17:22:26 +0000 <Leary> Got blind.
2024-08-08 17:22:37 +0000 <danse-nr3> well it's late
2024-08-08 17:22:47 +0000 <danse-nr3> but ... no constraint in there?
2024-08-08 17:23:06 +0000 <Leary> There is? `c a` in both cases.
2024-08-08 17:23:12 +0000 <danse-nr3> oh
2024-08-08 17:23:29 +0000 <danse-nr3> isn't that a parameter?
2024-08-08 17:24:17 +0000 <danse-nr3> maybe generic data type semantics that i haven't understood yet
2024-08-08 17:24:49 +0000 <Leary> % :k Ex2
2024-08-08 17:24:49 +0000 <yahb2> Ex2 :: (* -> Constraint) -> *
2024-08-08 17:25:42 +0000 <haskellbridge> <sm> @hseg: interesting discussion still ongoing on this old issue.. it's pretty annoying alright
2024-08-08 17:26:08 +0000 <danse-nr3> thanks but i give up. I'll just expose the type and add the constraint in callers
2024-08-08 17:28:04 +0000 <danse-nr3> huh nope i can't ^^;
2024-08-08 17:28:15 +0000 <hseg> sm: yeah, the motivating case brought up in the discourse (where the test profile differs from the production profile) does not sound like good testing practice
2024-08-08 17:28:19 +0000 <danse-nr3> well i'll bump my head on this, thanks anyway
2024-08-08 17:28:31 +0000 <hseg> though tbf, it does seem to be a common issue
2024-08-08 17:30:17 +0000ubert(~Thunderbi@2001:871:263:7b9b:f884:5c80:acff:c71d) (Ping timeout: 252 seconds)
2024-08-08 17:31:39 +0000cfricke(~cfricke@user/cfricke) (Quit: WeeChat 4.2.2)
2024-08-08 17:38:48 +0000 <danse-nr3> upon reanalising and adding a type annotation, problem fixed. Had wrongly interpreted an error
2024-08-08 17:39:17 +0000 <danse-nr3> (no need to add constraints)
2024-08-08 17:41:21 +0000danse-nr3(~danse-nr3@user/danse-nr3) (Read error: Connection reset by peer)
2024-08-08 17:42:14 +0000danse-nr3(~danse-nr3@user/danse-nr3)
2024-08-08 17:42:50 +0000tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2024-08-08 17:44:15 +0000waleee(~waleee@h-176-10-144-38.NA.cust.bahnhof.se)
2024-08-08 17:45:32 +0000 <haskellbridge> <sm> hseg: very. I'm going to stare at my cabal (yaml) files again
2024-08-08 17:46:52 +0000 <monochrom> hegs: Car manufacturers and graphics cards device driver writers beg to differ. >:)
2024-08-08 17:47:15 +0000oneeyedalien(~oneeyedal@user/oneeyedalien)
2024-08-08 17:47:41 +0000 <monochrom> Remember that scandal when some car engines had a test mode for passing emission tests and a real mode for daily driving?
2024-08-08 17:48:39 +0000 <monochrom> Remember that other scandal when graphics cards device drivers also had a test mode for passing Microsoft should-not-crash tests and a real mode for daily usage?
2024-08-08 17:55:35 +0000 <danse-nr3> huh i lost how that relates :P
2024-08-08 17:55:39 +0000 <danse-nr3> *missed
2024-08-08 17:56:21 +0000 <monochrom> Having a test profile that differs from the production profile.
2024-08-08 17:56:28 +0000 <danse-nr3> oh right
2024-08-08 17:56:41 +0000 <monochrom> In the case of the scandals, maliciously intentionally differ.
2024-08-08 17:57:09 +0000JuanDaugherty(~juan@user/JuanDaugherty) (Quit: JuanDaugherty)
2024-08-08 17:57:24 +0000 <monochrom> Sad to say that "this is what real engineers do". I lost my faith in humanity.
2024-08-08 17:58:10 +0000 <danse-nr3> weeell... i wouldn't generalise
2024-08-08 17:58:34 +0000oneeyedalien(~oneeyedal@user/oneeyedalien) (Ping timeout: 260 seconds)
2024-08-08 18:01:02 +0000 <dolio> Graphcis card drivers seem like 90% hacks.
2024-08-08 18:01:27 +0000 <dolio> Like, every application is broken, and the driver contains all the workarounds.
2024-08-08 18:02:37 +0000 <dolio> At least, that's the sort of thing I've heard.
2024-08-08 18:02:49 +0000 <danse-nr3> i didn't follow the graphic cards one but the WV scandal was quite an international blow. That shows such behaviour is not acceptable
2024-08-08 18:03:50 +0000hc(~hc@2407:d200:d002:43:229:85:195:3) (Quit: leaving)
2024-08-08 18:04:14 +0000hc(~hc@mail.hce.li)
2024-08-08 18:04:18 +0000 <dolio> So, like, renaming an executable can cause problems, because the driver is checking for the executable name to implement application-specific, incorrect behavior that the application expects. :þ
2024-08-08 18:04:56 +0000 <danse-nr3> huh you mean ... the driver patches the app?
2024-08-08 18:04:58 +0000 <dolio> Or replacing broken shaders or whatever.
2024-08-08 18:05:36 +0000 <dolio> Effectively. That's what I've heard is the general state of graphics drivers (on Windows, at least).
2024-08-08 18:06:57 +0000 <danse-nr3> sounds like a crazy amount of fragile work considering apps are not open-source
2024-08-08 18:11:02 +0000 <dolio> Someone less 'altruistically,' I think the GPU manufacturer will sometimes help write non-conforming code that their driver successfully works around (but not their competitor's).
2024-08-08 18:13:26 +0000 <danse-nr3> oh that sounds more realistic
2024-08-08 18:15:30 +0000machinedgod(~machinedg@d50-99-47-73.abhsia.telus.net) (Ping timeout: 252 seconds)
2024-08-08 18:17:05 +0000oneeyedalien(~oneeyedal@user/oneeyedalien)
2024-08-08 18:20:30 +0000 <EvanR> thisExecutablesName :: String
2024-08-08 18:20:56 +0000 <EvanR> a very useful global
2024-08-08 18:21:53 +0000 <meejah> dolio: yes, GPU drivers are _mostly_ such workaround code, from my understand (experience is now dated, but I doubt that practice changed)
2024-08-08 18:28:33 +0000Ellenor(~Ellenor@invictus.wa.us.umbrellix.net) (Ping timeout: 244 seconds)
2024-08-08 18:30:31 +0000sord937(~sord937@gateway/tor-sasl/sord937) (Quit: sord937)
2024-08-08 18:30:35 +0000chiselfuse(~chiselfus@user/chiselfuse) (Remote host closed the connection)
2024-08-08 18:31:37 +0000chiselfuse(~chiselfus@user/chiselfuse)
2024-08-08 18:33:16 +0000 <danse-nr3> all my afternoon's sweat resulted in ... huh ... 29 lines of code, but i'm really happy about them -_-;
2024-08-08 18:34:44 +0000 <EvanR> that's amazing
2024-08-08 18:35:03 +0000 <EvanR> maybe tomorrow you can get it down to 20 or 15
2024-08-08 18:35:08 +0000 <meejah> that's like 300 lines in a less-concise language, right? ;)
2024-08-08 18:36:05 +0000thailigur(~thailigur@172.86.68.44)
2024-08-08 18:37:47 +0000 <danse-nr3> dunno, comparing makes little sense to me. I don't even aim for having less lines, it just happens. But i look at them and they are great. Years in, haskell keeps surprising me
2024-08-08 18:42:41 +0000slack1256(~slack1256@2803:c600:5111:8029:44f4:5d68:3d8e:eb90) (Remote host closed the connection)
2024-08-08 18:44:14 +0000thailigur(~thailigur@172.86.68.44) (Remote host closed the connection)
2024-08-08 18:50:27 +0000sawilagar(~sawilagar@user/sawilagar) (Ping timeout: 276 seconds)
2024-08-08 18:51:59 +0000CiaoSen(~Jura@2a05:5800:22f:a900:e6b9:7aff:fe80:3d03)
2024-08-08 18:52:42 +0000danse-nr3(~danse-nr3@user/danse-nr3) (Quit: good night)
2024-08-08 19:02:41 +0000sawilagar(~sawilagar@user/sawilagar)
2024-08-08 19:07:32 +0000Tuplanolla(~Tuplanoll@91-159-69-59.elisa-laajakaista.fi)
2024-08-08 19:15:59 +0000Inst(~Inst@user/Inst) (Remote host closed the connection)
2024-08-08 19:16:18 +0000Inst(~Inst@user/Inst)
2024-08-08 19:19:57 +0000pavonia(~user@user/siracusa) (Quit: Bye!)
2024-08-08 19:27:44 +0000igorra(~igorra@185.211.158.66)
2024-08-08 19:28:46 +0000igorra(~igorra@185.211.158.66) (Client Quit)
2024-08-08 19:33:27 +0000tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2024-08-08 19:34:35 +0000sawilagar(~sawilagar@user/sawilagar) (Ping timeout: 252 seconds)
2024-08-08 19:53:11 +0000kupi(uid212005@id-212005.hampstead.irccloud.com)
2024-08-08 19:54:17 +0000JuanDaugherty(~juan@user/JuanDaugherty)
2024-08-08 20:03:56 +0000hseg(~gesh@46.120.21.97) (Ping timeout: 252 seconds)
2024-08-08 20:08:46 +0000machinedgod(~machinedg@d50-99-47-73.abhsia.telus.net)
2024-08-08 20:11:04 +0000oneeyedalien(~oneeyedal@user/oneeyedalien) (Quit: Leaving)
2024-08-08 20:12:08 +0000Sgeo_(~Sgeo@user/sgeo)
2024-08-08 20:12:17 +0000Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2024-08-08 20:14:21 +0000euphores(~SASL_euph@user/euphores) (Quit: Leaving.)
2024-08-08 20:16:25 +0000halloy5409(~halloy540@147.235.212.157)
2024-08-08 20:16:43 +0000 <halloy5409> > sum [1,2,3]
2024-08-08 20:16:45 +0000 <lambdabot> 6
2024-08-08 20:17:47 +0000target_i(~target_i@user/target-i/x-6023099)
2024-08-08 20:20:24 +0000peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com)
2024-08-08 20:21:46 +0000sawilagar(~sawilagar@user/sawilagar)
2024-08-08 20:21:55 +0000euphores(~SASL_euph@user/euphores)
2024-08-08 20:25:41 +0000JuanDaugherty(~juan@user/JuanDaugherty) (Quit: JuanDaugherty)
2024-08-08 20:26:37 +0000 <halloy5409> i want to try to implement `choices` function which give me back all the lists it can retrieve from a given list, so for example if i type: choices [1,2], i'll get back [[], [1], [2], [1,2], [2,1]]. i don't have a clue on how to implement it, and i need advice of how to get started. maybe i need to implement a helper function(s) that solve more simple problem and use it inside the `choices` function. if so, what a simple function should i implement
2024-08-08 20:27:56 +0000 <ncf> > subsequences [1,2] >>= permutations
2024-08-08 20:27:58 +0000 <lambdabot> [[],[1],[2],[1,2],[2,1]]
2024-08-08 20:28:58 +0000 <sprout> > subsequences [1,2]
2024-08-08 20:29:00 +0000 <lambdabot> [[],[1],[2],[1,2]]
2024-08-08 20:29:43 +0000 <halloy5409> i dont want the solution. i want to write it my self without using those build in functions.
2024-08-08 20:30:12 +0000 <mauke> @src subsequences
2024-08-08 20:30:12 +0000 <lambdabot> Source not found. Do you think like you type?
2024-08-08 20:30:28 +0000 <mauke> > filterM (return [True,False]) [1,2]
2024-08-08 20:30:30 +0000 <lambdabot> [[1,2],[1],[2],[]]
2024-08-08 20:30:42 +0000 <halloy5409> o rmaybe can you guide me on how to think about it?
2024-08-08 20:30:47 +0000 <halloy5409> *or maybe
2024-08-08 20:32:54 +0000L29Ah(~L29Ah@wikipedia/L29Ah)
2024-08-08 20:33:03 +0000 <sprout> you need a recurrence relation
2024-08-08 20:33:25 +0000peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 248 seconds)
2024-08-08 20:39:16 +0000 <halloy5409> @type >>=
2024-08-08 20:39:17 +0000 <lambdabot> error: parse error on input ‘>>=’
2024-08-08 20:39:26 +0000 <halloy5409> @type (>>=)
2024-08-08 20:39:27 +0000 <lambdabot> Monad m => m a -> (a -> m b) -> m b
2024-08-08 20:39:47 +0000 <halloy5409> sprout: thanks
2024-08-08 20:42:35 +0000 <mauke> > concatMap permutations (subsequences [1,2])
2024-08-08 20:42:36 +0000 <lambdabot> [[],[1],[2],[1,2],[2,1]]
2024-08-08 20:42:46 +0000zetef(~quassel@2a02:2f00:5202:1200:3fa2:e908:b522:fa2f)
2024-08-08 20:42:48 +0000Square(~Square@user/square) (Ping timeout: 252 seconds)
2024-08-08 20:42:49 +0000zetef(~quassel@2a02:2f00:5202:1200:3fa2:e908:b522:fa2f) (Client Quit)
2024-08-08 20:42:55 +0000 <mauke> :t concatMap
2024-08-08 20:42:56 +0000 <lambdabot> Foldable t => (a -> [b]) -> t a -> [b]
2024-08-08 20:43:17 +0000 <mauke> :t (>>=) `asTypeOf` concatMap
2024-08-08 20:43:19 +0000 <lambdabot> error:
2024-08-08 20:43:19 +0000 <lambdabot> • Couldn't match type ‘[b] -> [b]’ with ‘[a]’
2024-08-08 20:43:19 +0000 <lambdabot> Expected type: [a] -> (a -> [b]) -> [b]
2024-08-08 20:43:31 +0000 <ncf> > subsequences [1,1] >>= permutations
2024-08-08 20:43:32 +0000 <lambdabot> [[],[1],[1],[1,1],[1,1]]
2024-08-08 20:43:33 +0000 <mauke> right
2024-08-08 20:43:39 +0000 <mauke> :t flip (>>=) `asTypeOf` concatMap
2024-08-08 20:43:40 +0000 <lambdabot> (a -> [b]) -> [a] -> [b]
2024-08-08 20:43:57 +0000 <ncf> the first step is to specify what you want mathematically: should the above be [[],[1],[1,1]]?
2024-08-08 20:47:52 +0000tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Read error: Connection reset by peer)
2024-08-08 20:54:10 +0000sawilagar(~sawilagar@user/sawilagar) (Ping timeout: 248 seconds)
2024-08-08 20:57:21 +0000 <zzz> halloy5409: this is not the function you want, but it's one that returns the subsets of a list. i think it can serve as inspiration: https://gist.githubusercontent.com/jrvieira/2820b46856ba1ec89453946557b0f427/raw/a1f2a794459a564f5…
2024-08-08 20:58:10 +0000 <zzz> here you get multiple implementations, at different levels of abstraction
2024-08-08 20:59:06 +0000 <zzz> bonus: you can see from the comments which run more time-efficiently
2024-08-08 21:01:33 +0000michalz(~michalz@185.246.207.217) (Remote host closed the connection)
2024-08-08 21:08:28 +0000 <zzz> here's one more: https://paste.jrvieira.com/1723151276523
2024-08-08 21:11:09 +0000 <zzz> fun exercise
2024-08-08 21:11:48 +0000ksqsf(~user@2a02:2454:8758:c800:85c3:bb5a:c725:a7e6)
2024-08-08 21:15:14 +0000 <zzz> why is fold implemented in terms of foldMap?
2024-08-08 21:15:54 +0000 <zzz> seems odd to me
2024-08-08 21:16:54 +0000 <zzz> why not `fold = foldr mappend mempty` instead of `fold = foldMap id` ?
2024-08-08 21:18:00 +0000machinedgod(~machinedg@d50-99-47-73.abhsia.telus.net) (Ping timeout: 276 seconds)
2024-08-08 21:20:12 +0000skyesoss(~Thunderbi@128.135.204.35) (Ping timeout: 252 seconds)
2024-08-08 21:20:19 +0000 <halloy5409> zzz: thanks
2024-08-08 21:21:14 +0000 <zzz> halloy5409: yw
2024-08-08 21:21:41 +0000 <halloy5409> ncf: i realy dont know. this exercise is more a lecture of Graham Hutton and he just gave the example i started with. i don't know happens where there is a list with the same number
2024-08-08 21:21:56 +0000 <halloy5409> mor e= from
2024-08-08 21:22:04 +0000 <halloy5409> *more
2024-08-08 21:22:21 +0000 <halloy5409> *what happens
2024-08-08 21:26:44 +0000 <monochrom> zzz: I prefer foldMap id.
2024-08-08 21:29:58 +0000 <monochrom> foldMap and fold commit to no bias. foldr commits to a bias. I consider a more biased thing to be less fundamental.
2024-08-08 21:35:09 +0000 <halloy5409> lambdabot: > sum [1,2,3]
2024-08-08 21:35:27 +0000 <mauke> > 6
2024-08-08 21:35:28 +0000 <lambdabot> 6
2024-08-08 21:36:13 +0000 <zzz> monochrom: foldMap uses foldr
2024-08-08 21:36:21 +0000 <zzz> otherwise i would agree with you
2024-08-08 21:37:15 +0000 <monochrom> foldr uses foldMap.
2024-08-08 21:37:54 +0000 <zzz> oh no
2024-08-08 21:38:15 +0000 <monochrom> This is what's wrong with confirmation bias.
2024-08-08 21:39:24 +0000terrorjack4(~terrorjac@static.163.82.63.178.clients.your-server.de) (Quit: The Lounge - https://thelounge.chat)
2024-08-08 21:40:16 +0000 <zzz> touche
2024-08-08 21:41:28 +0000terrorjack4(~terrorjac@static.163.82.63.178.clients.your-server.de)
2024-08-08 21:42:44 +0000ksqsf(~user@2a02:2454:8758:c800:85c3:bb5a:c725:a7e6) (ERC 5.6.0.30.1 (IRC client for GNU Emacs 30.0.60))
2024-08-08 21:49:43 +0000hayk(~hayk@37.252.90.243) (Quit: hayk)
2024-08-08 21:53:13 +0000 <zzz> ok so foldMap is more general but it still commits to the "right" bias
2024-08-08 21:53:16 +0000raehik(~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net)
2024-08-08 21:54:02 +0000 <monochrom> No, that's not what it means. Have you seen the definition of the Eq class?
2024-08-08 21:58:08 +0000 <zzz> yes. although i'm familiar with the "no /= in Eq" proposal
2024-08-08 21:58:20 +0000 <zzz> but i understand your point
2024-08-08 21:59:21 +0000 <zzz> i'm not familiar with the Endo stuff so i'm reading up on it
2024-08-08 21:59:51 +0000 <monochrom> In an ideal language, foldMap would have like 3 default implementations, one using foldr, one using foldl, one using fold.
2024-08-08 22:00:14 +0000 <monochrom> In Haskell, someone has to choose one of them.
2024-08-08 22:00:31 +0000 <zzz> is the fact that foldr and foldl can be defined in terms of eachother relevant to the argument you're making?
2024-08-08 22:01:50 +0000 <EvanR> can they?
2024-08-08 22:02:24 +0000 <EvanR> (specifically for list)
2024-08-08 22:03:56 +0000 <monochrom> We can assume finite data structures for this context.
2024-08-08 22:04:37 +0000 <zzz> yes, i admit some handwaving
2024-08-08 22:04:40 +0000 <monochrom> Actually, 4 default implementations: foldr, foldl, fold, toList.
2024-08-08 22:05:31 +0000 <EvanR> reducing a tree seems to have many possible strategies not just 4
2024-08-08 22:07:18 +0000 <zzz> trees are inherently something, right? like lists are inherently right fold by the way the data type is defined
2024-08-08 22:07:48 +0000 <EvanR> you might say a list is a right leaning tree and a snoc list is left leaning
2024-08-08 22:07:51 +0000 <zzz> i may not be expressing myself with the best words
2024-08-08 22:07:57 +0000 <monochrom> trees are inherently trees.
2024-08-08 22:08:08 +0000 <sprout> say it like it is
2024-08-08 22:08:47 +0000 <probie> <unhelpful>`foldl` is just a special case of `foldr` for lists</unhelpful>
2024-08-08 22:09:17 +0000 <monochrom> or you could say "branching left right and centre" if you're still looking for metaphors.
2024-08-08 22:10:56 +0000 <zzz> can an argument be made that foldr should be just called fold?
2024-08-08 22:11:20 +0000 <EvanR> :t fold
2024-08-08 22:11:21 +0000 <lambdabot> (Foldable t, Monoid m) => t m -> m
2024-08-08 22:11:37 +0000 <EvanR> see, that one is interesting because it doesn't matter how you reduce the tree, it comes out the same
2024-08-08 22:11:45 +0000 <EvanR> because monoidness
2024-08-08 22:12:20 +0000 <zzz> i want to understand this better
2024-08-08 22:12:21 +0000 <EvanR> foldl and foldr meanwhile rely on narratives
2024-08-08 22:12:40 +0000 <monochrom> I am not sure what's the use of such an argument, but yes. Because an argument can be made that X sshould be called Y, for all X and Y.
2024-08-08 22:13:20 +0000 <monochrom> OK I know what's the use. Some people enjoy power trips obtained from controlling and/or changing terminology.
2024-08-08 22:13:27 +0000 <EvanR> foldl and foldr appeal you specific reductions in situations where the order might matter
2024-08-08 22:13:33 +0000 <EvanR> appeal to*
2024-08-08 22:13:58 +0000 <EvanR> so some semblance of specificity is tacked onto the name
2024-08-08 22:14:07 +0000 <zzz> agree
2024-08-08 22:14:21 +0000 <zzz> but foldr is the "natural" one, isn't it
2024-08-08 22:14:32 +0000 <probie> `foldr` (on lists, not `Foldable` in general) doesn't rely on a narrative at all, and is _the_ fold for lists. If I was making the standard library (and didn't have a `Foldable` typeclass), I'd have just called it fold
2024-08-08 22:14:45 +0000 <zzz> the more fundamental one, using monochrome's terminology
2024-08-08 22:14:49 +0000 <EvanR> foldl is "natural" for snoc lists?
2024-08-08 22:15:16 +0000 <probie> Sure, but "snoc lists" aren't "lists", you've just moved the conversation from lists back to `Foldable`
2024-08-08 22:15:17 +0000 <monochrom> This is why I don't say "fold" I say "catamorphism".
2024-08-08 22:15:26 +0000 <EvanR> fold = foldr for lists makes sense because performance
2024-08-08 22:15:45 +0000 <zzz> monochrom: catar / catal :p
2024-08-08 22:15:52 +0000 <EvanR> doing it in another order would get the same answer but be silly
2024-08-08 22:16:41 +0000 <EvanR> fold = foldr in general I don't know about that
2024-08-08 22:17:05 +0000 <zzz> EvanR: silly is a strong word
2024-08-08 22:17:11 +0000 <EvanR> yeah catamorphism is something else
2024-08-08 22:17:32 +0000 <EvanR> which is a transformation rather than a reduction
2024-08-08 22:17:33 +0000 <probie> monochrom: if I say {cata,ana,hylo}morphism instead of {∅,un,re}fold, I get in trouble for being elitist
2024-08-08 22:17:39 +0000 <EvanR> but you can implement one with the other
2024-08-08 22:19:19 +0000CiaoSen(~Jura@2a05:5800:22f:a900:e6b9:7aff:fe80:3d03) (Ping timeout: 264 seconds)
2024-08-08 22:19:27 +0000 <zzz> i think i get it. thanks
2024-08-08 22:22:05 +0000 <probie> EvanR: I don't think you're right about them being different. In "Functional Programming with Bananas, Lenses, Envelopes and Barbed Wire" there's the line "Without special notations pinpointing cata such as (|_|) or foldr"
2024-08-08 22:22:38 +0000 <probie> The people who brought the term "catamorphism" to the "mainstream", think that `foldr` is a catamorphism
2024-08-08 22:22:41 +0000 <EvanR> that doesn't prove I'm not right it proves what people mean by foldr isn't universal
2024-08-08 22:23:12 +0000AlexNoo_(~AlexNoo@94.233.240.239)
2024-08-08 22:23:32 +0000 <monochrom> I would simply leave communities that think that "catamorphism" is elitist.
2024-08-08 22:24:19 +0000 <monochrom> And circling back, perhaps they do so for power trips.
2024-08-08 22:24:45 +0000 <Rembane> +1
2024-08-08 22:25:20 +0000 <EvanR> I never understood elitist-as-derogatory from any perspective
2024-08-08 22:25:34 +0000 <monochrom> Accusing other people of "watering down" is a power trip, but so is accusing other people of "elitist", generally accusing anything at all.
2024-08-08 22:26:06 +0000 <monochrom> Generally accusing other people of "being different from me".
2024-08-08 22:26:19 +0000halloy5409(~halloy540@147.235.212.157) (Remote host closed the connection)
2024-08-08 22:26:33 +0000AlexNoo(~AlexNoo@94.233.241.125) (Ping timeout: 252 seconds)
2024-08-08 22:26:46 +0000AlexZenon(~alzenon@94.233.241.125) (Ping timeout: 272 seconds)
2024-08-08 22:27:42 +0000 <EvanR> let code do the talking xD
2024-08-08 22:27:54 +0000 <EvanR> WildlyPopularProfitableMMO here we go
2024-08-08 22:28:14 +0000 <EvanR> it will be called Elite: Dangerist
2024-08-08 22:30:08 +0000 <Rembane> I first thought WildlyPopularProfitableMMO was a language extension... took me a while to realize that it's not.
2024-08-08 22:30:35 +0000 <zzz> i wonder if APL-type languages have arguments about which symbol makes more sense for a given function
2024-08-08 22:30:51 +0000 <Rembane> zzz: IIRC they do
2024-08-08 22:30:56 +0000 <EvanR> it's a type synonym for an outlandishly detailed dependent type for elon's AI to solve for
2024-08-08 22:31:01 +0000 <Rembane> zzz: It's a selling point
2024-08-08 22:31:19 +0000 <zzz> i'm not surprised at all :D
2024-08-08 22:31:27 +0000 <Rembane> EvanR: But does it do Blockchain?
2024-08-08 22:32:28 +0000 <EvanR> but is it webscale? but will it blend?
2024-08-08 22:32:51 +0000 <Rembane> And how well does it do microservices?
2024-08-08 22:33:05 +0000 <EvanR> vom
2024-08-08 22:33:24 +0000ystael(~ystael@user/ystael) (Ping timeout: 276 seconds)
2024-08-08 22:33:28 +0000zetef(~quassel@2a02:2f00:5202:1200:3fa2:e908:b522:fa2f)
2024-08-08 22:33:44 +0000zetef(~quassel@2a02:2f00:5202:1200:3fa2:e908:b522:fa2f) (Client Quit)
2024-08-08 22:34:04 +0000 <Rembane> Can almost quit from vom
2024-08-08 22:34:04 +0000AlexZenon(~alzenon@94.233.240.239)
2024-08-08 22:37:33 +0000infinity0(~infinity0@pwned.gg) (Ping timeout: 252 seconds)
2024-08-08 22:38:41 +0000 <zzz> elite and niche are different concepts imo, i'm not sure which one would apply better here
2024-08-08 22:39:54 +0000 <EvanR> elite is effective and useful while niche isn't? xD
2024-08-08 22:41:55 +0000 <zzz> what would be effecrive and useful i suspect is content-addressable code
2024-08-08 22:42:08 +0000 <zzz> like in Unison
2024-08-08 22:42:12 +0000 <Rembane> Elite content-addressable code!
2024-08-08 22:42:39 +0000 <EvanR> Elite: Content-Addressable
2024-08-08 22:42:51 +0000 <Rembane> Good DLC that one
2024-08-08 22:45:33 +0000 <zzz> anyways, thank you for making me understand Foldable better
2024-08-08 22:50:12 +0000 <raehik> I have a `Text -> m ByteString` parser where I know the maximum length the result can be from the length of the Text. I could use the `createUpToN` bytestring primitives to only allocate once. however, one could write "malicious" inputs that have a long max length, but a short parsed length
2024-08-08 22:51:04 +0000 <raehik> is this sort of thing still a good idea? I'm never quite sure. I can always do a regular growing buffer which is likely hardly worse performance
2024-08-08 22:52:03 +0000ddellacosta(~ddellacos@ool-44c73d29.dyn.optonline.net) (Ping timeout: 245 seconds)
2024-08-08 22:56:21 +0000 <raehik> (also, what's the word compsci ppl use for "malicious" there, worst-case inputs? begins with P I swear)
2024-08-08 22:56:35 +0000 <c_wraith> pathological
2024-08-08 22:56:42 +0000 <raehik> c_wraith: ahhhh yes thanks :)
2024-08-08 22:56:47 +0000 <raehik> knew it was medical
2024-08-08 22:58:07 +0000 <EvanR> is the final ByteString built up from chunks? produce a list of chunks then join it all
2024-08-08 22:58:25 +0000 <EvanR> or better yet, produce a lazy bytestring from it
2024-08-08 22:58:34 +0000infinity0(~infinity0@pwned.gg)
2024-08-08 22:59:33 +0000 <raehik> ah I tend to only think in terms of strict bytestrings
2024-08-08 23:00:27 +0000 <EvanR> or just work with the list of smaller strict ByteStrings which is effectively the same thing
2024-08-08 23:01:07 +0000 <EvanR> depends what you will do with it
2024-08-08 23:01:08 +0000 <raehik> how would I chunk in this situation? or are you suggesting not to do the `createUpToN` idea
2024-08-08 23:01:31 +0000 <raehik> the output will be written directly to memory or disk somewhere
2024-08-08 23:01:43 +0000 <raehik> (if used)
2024-08-08 23:01:48 +0000 <EvanR> are you proposing to allocate N then mutate the bytes later?
2024-08-08 23:01:54 +0000 <EvanR> I'd avoid that
2024-08-08 23:01:59 +0000 <raehik> https://hackage.haskell.org/package/bytestring-0.12.1.0/docs/Data-ByteString-Internal.html#v:creat…
2024-08-08 23:02:14 +0000 <EvanR> IO :(
2024-08-08 23:02:32 +0000 <raehik> not sure what's wrong with that
2024-08-08 23:02:45 +0000 <EvanR> well then your parser needs IO
2024-08-08 23:03:02 +0000 <raehik> I have a library that hides all this haha https://hackage.haskell.org/package/bytezap
2024-08-08 23:03:10 +0000 <EvanR> you kind of can't hide IO
2024-08-08 23:03:33 +0000 <EvanR> ok, unsafePerformIO ... which is getting fishy fast
2024-08-08 23:04:36 +0000 <raehik> bytestring provides unsafeCreateUptoN as well which handles the IO unwrapping for us
2024-08-08 23:04:43 +0000target_i(~target_i@user/target-i/x-6023099) (Quit: leaving)
2024-08-08 23:04:58 +0000 <raehik> this is how most low-level bytestring manipulation is performed
2024-08-08 23:06:11 +0000 <EvanR> ok but why do you want to do it xD
2024-08-08 23:06:41 +0000 <EvanR> don't you like your programs to not segfault
2024-08-08 23:07:09 +0000 <EvanR> with zero explanation of when or why
2024-08-08 23:07:21 +0000 <raehik> my original point was that `createUptoN` lets me do a single allocation for all inputs without having to grow a buffer or do other stuff, which is fast
2024-08-08 23:07:43 +0000 <EvanR> my suggestion didn't involve an IO based growing buffer or mutators
2024-08-08 23:07:44 +0000 <raehik> but you can pass pathological inputs which could waste lots of memory
2024-08-08 23:08:07 +0000 <raehik> oh sorry I don't think I understood properly then
2024-08-08 23:08:30 +0000 <EvanR> a follow up was if your output is based on many small bytestring chunks logically glued together
2024-08-08 23:08:45 +0000 <EvanR> or more complicated than that
2024-08-08 23:09:17 +0000 <raehik> no the output is used as-is, not plugged together to more bytestrings
2024-08-08 23:09:50 +0000 <EvanR> no...
2024-08-08 23:12:05 +0000 <raehik> do you mean can the output be chunked conveniently during parsing? It can with a bit of bookkeeping
2024-08-08 23:12:49 +0000 <raehik> but the single ByteString output isn't manipulated afterwards
2024-08-08 23:12:54 +0000 <EvanR> I was wondering if you generate the output as simple chunks one after the other, not if you will later concat the output onto something else
2024-08-08 23:13:07 +0000brettgilio(~brettgili@154.3.237.18) (Quit: The Lounge - https://thelounge.chat)
2024-08-08 23:13:10 +0000 <EvanR> generate vs consume
2024-08-08 23:13:36 +0000 <raehik> ah no assume it's not being used in a chunking context
2024-08-08 23:13:49 +0000 <EvanR> that... is not what
2024-08-08 23:14:10 +0000 <EvanR> not asking about how you consume it
2024-08-08 23:14:45 +0000 <raehik> I assumed you asked if the parsing is called sequentially on a large input, chunking as required
2024-08-08 23:14:59 +0000rvalue-(~rvalue@user/rvalue)
2024-08-08 23:15:05 +0000 <raehik> it isn't. was that not what you were asking
2024-08-08 23:15:19 +0000 <raehik> (sry for the misunderstandings)
2024-08-08 23:15:20 +0000rvalue(~rvalue@user/rvalue) (Ping timeout: 252 seconds)
2024-08-08 23:16:52 +0000 <EvanR> nope not talking about consume input either
2024-08-08 23:17:05 +0000 <EvanR> or consuming anything at all, oh well!
2024-08-08 23:19:00 +0000rvalue-rvalue
2024-08-08 23:19:00 +0000gmg(~user@user/gehmehgeh) (Quit: Leaving)
2024-08-08 23:19:27 +0000 <probie> zzz: I've not seen many arguments in the APL community around the choice of symbols. The only one that comes to mind is that from time to time, people suggest replacing `/` for either reduce or replicate
2024-08-08 23:19:29 +0000 <raehik> I'm sorry I haven't understood your questions properly. I'd like to think it's the text medium's fault rather than either of ours
2024-08-08 23:24:13 +0000pavonia(~user@user/siracusa)
2024-08-08 23:32:51 +0000Tuplanolla(~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) (Quit: Leaving.)
2024-08-08 23:51:04 +0000acidjnk_new3(~acidjnk@p200300d6e72cfb069cd6142dbab03153.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2024-08-08 23:53:11 +0000 <zzz> probie: oh no
2024-08-08 23:53:27 +0000bitdex(~bitdex@gateway/tor-sasl/bitdex)
2024-08-08 23:54:44 +0000zzzzero
2024-08-08 23:58:43 +0000waleee(~waleee@h-176-10-144-38.NA.cust.bahnhof.se) (Ping timeout: 245 seconds)