Home liberachat/#haskell: Logs Calendar

Logs on 2022-04-08 (liberachat/#haskell)

00:00:39 frost joins (~frost@user/frost)
00:08:25 × TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Ping timeout: 248 seconds)
00:10:15 yauhsien joins (~yauhsien@61-231-21-149.dynamic-ip.hinet.net)
00:11:10 TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker)
00:11:13 × machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 256 seconds)
00:11:22 Guest2753 joins (~Guest27@2601:281:d47f:1590::a504)
00:13:29 × gurkenglas quits (~gurkengla@dslb-178-012-018-212.178.012.pools.vodafone-ip.de) (Ping timeout: 256 seconds)
00:15:21 × lavaman quits (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Ping timeout: 248 seconds)
00:16:25 × DNH quits (~DNH@2a02:8108:1100:16d8:c8af:4307:df41:9668) (Quit: My MacBook has gone to sleep. ZZZzzz…)
00:16:38 <energizer> what is the relationship between ($) and (.) ?
00:17:06 <geekosaur> they're completely different
00:17:16 <dons> :t (.)
00:17:17 <lambdabot> (b -> c) -> (a -> b) -> a -> c
00:17:18 <dons> :t ($)
00:17:19 <lambdabot> (a -> b) -> a -> b
00:17:34 <geekosaur> (.) composes two functions. ($) is function application made visible (and lowest precedence instead of highest)
00:17:54 <geekosaur> @src (.)
00:17:54 <lambdabot> (f . g) x = f (g x)
00:17:58 <geekosaur> @src($)
00:17:59 <lambdabot> Unknown command, try @list
00:18:02 <geekosaur> @src ($)
00:18:02 <lambdabot> f $ x = f x
00:18:33 <dons> $ is a haskell-specific precedence trick, so we can write things like mapM foo $ \x -> do ... long chunk -- without parens
00:18:43 <dons> while (.) is fundamental function composition going back to lambda calculus :)
00:18:49 <dons> no ($) in lambda calc
00:19:09 <dons> ($) is a poke at lisp i think, from the 90s guys working on the parser :D
00:19:45 <dons> (question: when was $ introduced ? is it in the pre-Haskell lazy languages?)
00:20:02 × Guest2753 quits (~Guest27@2601:281:d47f:1590::a504) (Ping timeout: 250 seconds)
00:20:03 <dolio> In a way, ($) does go way back to the early lambda calculus era.
00:20:11 <energizer> app is fundamental
00:20:41 <dolio> It's similar to how people invented notational hacks for avoiding parentheses in logical sentences.
00:21:00 <energizer> :info (.)
00:21:26 <dons> infixr 0 $
00:21:32 <dons> infixr 9 .
00:21:51 <energizer> they should have algebraic properties, where are they?
00:22:03 <dolio> Like, people would write `P ⊃ Q .⊃. P ⊃ Q` instead of `(P ⊃ Q) ⊃ (P ⊃ Q)`.
00:22:11 <dons> -- | Application operator. This operator is redundant, since ordinary
00:22:11 <dons> -- application @(f x)@ means the same as @(f '$' x)@. However, '$' has
00:22:11 <dons> -- low, right-associative binding precedence, so it sometimes allows
00:22:11 <dons> -- parentheses to be omitted; for example:
00:22:11 <dons> --
00:22:13 <dons> -- > f $ g $ h x = f (g (h x))
00:22:18 × lagash quits (lagash@lagash.shelltalk.net) (Quit: ZNC - https://znc.in)
00:22:18 × feliix42 quits (~felix@gibbs.uberspace.de) (Quit: ZNC 1.8.2 - https://znc.in)
00:22:29 <dolio> And that's why you write `λx. body` instead of `λx(body)`.
00:22:30 feliix42 joins (~felix@gibbs.uberspace.de)
00:22:32 <dons> map ($ x) ys -- also useful sometimes
00:22:34 lagash joins (lagash@lagash.shelltalk.net)
00:22:52 <dons> btw its amazing to me how different the type is now than 10-15 years ago, {-# INLINE ($) #-}
00:22:55 <dons> ($) :: forall r a (b :: TYPE r). (a -> b) -> a -> b
00:22:57 <dons> f $ x = f x
00:23:03 <dolio> The . lowers the precedence. of the binder.
00:23:15 <energizer> can you write $ in terms of . or vice versa?
00:23:28 <dons> (.) :: (b -> c) -> (a -> b) -> a -> c
00:23:29 <dons> (.) f g = \x -> f (g x)
00:23:39 <dons> they're not really related.
00:23:52 <dons> composition and application are different concepts
00:23:57 × AWizzArd quits (~code@gehrels.uberspace.de) (Ping timeout: 250 seconds)
00:24:43 AWizzArd joins (~code@gehrels.uberspace.de)
00:24:49 × Guest89 quits (~Guest89@2a01:41e1:440f:2c00:f9ba:f616:34ce:27bb) (Quit: Client closed)
00:24:55 <dons> (.) f g = \x -> f $ g x -- doesn't really help you , you still need the lambda to abstract. you just put some syntax in for the f (g x) application
00:26:38 rawley joins (~rawley@216-197-141-102.nbfr.hsdb.sasknet.sk.ca)
00:27:21 <energizer> is "(.) f g = \x -> f $ g x" true?
00:27:38 <dons> :t \x -> f $ g x
00:27:39 <lambdabot> error:
00:27:39 <lambdabot> • Could not deduce (Show t0) arising from a use of ‘f’
00:27:39 <lambdabot> from the context: (Show t, FromExpr t1)
00:27:53 <dons> :t \f g -> \x -> f $ g x
00:27:54 <lambdabot> (t1 -> t2) -> (t3 -> t1) -> t3 -> t2
00:27:59 <dons> :t (.)
00:28:00 <lambdabot> (b -> c) -> (a -> b) -> a -> c
00:28:13 × unyu quits (~pyon@user/pyon) (Quit: WeeChat 3.4.1)
00:28:21 <dons> true.
00:28:44 <energizer> so it is also true that: f . g = \x -> f $ g x
00:29:05 <monochrom> Yes.
00:29:21 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
00:29:21 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
00:29:21 wroathe joins (~wroathe@user/wroathe)
00:30:00 <monochrom> But let's go overboard with \x -> f $ (g $ x)
00:30:28 <monochrom> In fact let's go mad scientist with ((.) $ f) $ g = \x -> f $ (g $ x), too.
00:30:30 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
00:30:54 <dons> you can prove it by "equational reasoning". just subsitute the definition of ($) wherever you see a ($)
00:30:57 <dons> f . g = \x -> f $ g x
00:31:00 <dons> f . g = \x -> f (g x) -- by definition of ($), f $ x = f x
00:31:09 <energizer> `f . g = \x -> f $ (g $ x)` i think is the answer i was lokoing for
00:31:41 zero is now known as zzz
00:34:34 <energizer> is it possible to write the right-hand side point-free while retaining the same idea?
00:34:49 <Axman6> energizer: not really the question that you asked, but while it's possible to write f $ g $ h $ x, we tend to opt for f . g . h $ x stylistically (though these days I generally prefer f . g $ h x)
00:35:03 <monochrom> Yes. f . g = f . g
00:35:21 <energizer> not the same idea, missing application
00:35:35 <monochrom> This is serious. The whole point is that f . g is already the pointfree form of \x -> f (g x)
00:36:20 <monochrom> Unless you decide to troll yourself and say no no you want to see flip (flip (flip (flip (.))) f g
00:36:35 <Axman6> can (.) be written using ap?
00:37:05 Guest2755 joins (~Guest27@2601:281:d47f:1590::a504)
00:37:14 <Axman6> % :t ap @((->) r)
00:37:14 <yahb> Axman6: ; <interactive>:1:11: error: Not in scope: type variable `r'
00:37:52 <monochrom> Yes. (.) = fmap = \f -> ap (pure f) = ap . pure
00:38:54 <energizer> can i say something like `f . g = ($ f) $ ($ g)`?
00:39:08 <monochrom> Have you proved it?
00:39:47 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
00:40:08 <energizer> i have proved that it isn't true by trying it
00:40:49 <energizer> but someone who has more experience would say "you probably mean suchnsuch"
00:41:21 <monochrom> Yes. You probably mean f . g
00:41:34 × xff0x quits (~xff0x@i121-117-52-147.s41.a013.ap.plala.or.jp) (Ping timeout: 268 seconds)
00:42:43 lavaman joins (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net)
00:42:54 <hpc> energizer: unrelated to your questions about (.), but ($ x) is fairly interesting on its own
00:42:57 <hpc> :t ($ x)
00:42:58 <lambdabot> (Expr -> b) -> b
00:43:18 <hpc> :t ($ undefined) -- maybe a better representation of its type
00:43:20 <lambdabot> (a -> b) -> b
00:43:30 <monochrom> Yes. [f x, g x, h x] = map ($ x) [f, g, h] is an application.
00:43:51 <hpc> back in the day, lambdabot had extra-polymorphic definitions of some common prelude stuff
00:43:54 <hpc> and one of them was
00:44:22 <dons> ?pointful ($ f) $ ($ g)
00:44:22 <lambdabot> (f g)
00:44:33 <hpc> hmm, can't find it
00:44:46 <hpc> but it had to do with fmap and ($)
00:44:48 <hpc> :t fmap ($)
00:44:50 <lambdabot> Functor f => f (a -> b) -> f (a -> b)
00:44:51 <hpc> :t flip
00:44:52 <lambdabot> (a -> b -> c) -> b -> a -> c
00:44:53 <monochrom> You had (.) = fmap in mind?
00:45:29 <hpc> @djinn (a -> f c) -> f (a -> c)
00:45:29 <lambdabot> -- f cannot be realized.
00:46:25 sub0 joins (~bc8147f2@cerf.good1.com)
00:46:26 <hpc> or i just remembered, i can say "it's an exercise for the reader"
00:47:35 <energizer> "(Expr -> b) -> b" is that Expr a meta-level term?
00:47:52 <energizer> s/a/the type of a/
00:48:03 <geekosaur> no, that's noise from simple-reflect
00:48:06 <hpc> :t \fs x -> fmap ($x) fs -- this is it
00:48:08 <lambdabot> Functor f => f (a -> b) -> a -> f b
00:48:27 <sub0> does this work in newer versions of ghci? I don't know how to check in lambdabot
00:48:28 <hpc> @let flip' fs x = fmap ($x) fs
00:48:30 <lambdabot> Defined.
00:48:32 <sub0> > read "2022-01-01 00:00:00.00 Central European Daylight Time" :: ZonedTime
00:48:33 <lambdabot> error:
00:48:33 <lambdabot> Not in scope: type constructor or class ‘ZonedTime’
00:48:40 <hpc> > flip' [(*2), (+10)] 100
00:48:40 <geekosaur> maybe we should be doing this in yahb so simple-reflect won't get confused with it
00:48:42 <lambdabot> [200,110]
00:49:09 <hpc> > flip' (/) 5 2
00:49:11 <lambdabot> 0.4
00:49:16 <hpc> and it still works like regular flip
00:49:27 <hpc> also, \x -> ($ x) is pure for Cont
00:49:32 <sub0> % read "2022-01-01 00:00:00.00 Central European Daylight Time" :: ZonedTime
00:49:32 <yahb> sub0: *** Exception: Prelude.read: no parse
00:49:41 <sub0> is this worth reporting as a bug? it works with some other timezones
00:49:52 <dragestil> Hi just wondering whether there's the source of GHC docs I can download. here I only find html https://downloads.haskell.org/~ghc/latest/docs/
00:50:36 <dons> i'm not sure how kosher the Read methods for zonedtime are. i suspect you need to use CEDT or something?
00:50:51 <dons> worth checking whcih iso std that long form is permitted in
00:51:06 <dons> there are timezone parser libs that do do the proper stuff, i'd be wary of using 'read'
00:51:17 <sub0> dons, I have passed to read what show <$> getZonedTime returns
00:51:25 <dons> interesting
00:51:44 <sub0> % getZonedTime
00:51:44 <yahb> sub0: 2022-04-08 00:51:44.504928224 UTC
00:52:11 <sub0> % read "2022-04-08 00:51:44.504928224 UTC" :: ZonedTime
00:52:11 <yahb> sub0: 2022-04-08 00:51:44.504928224 UTC
00:52:14 <sub0> see, this works
00:52:36 <hpc> you may want to just use https://hackage.haskell.org/package/time-1.13/docs/Data-Time-Format.html
00:52:40 <hpc> ParseTime and FormatTime
00:53:14 <hpc> also looks like this limitation is documented - https://hackage.haskell.org/package/time-1.13/docs/Data-Time-LocalTime.html#t:ZonedTime
00:54:01 <sub0> I'll take a look. but still, it seems that Read instance of ZonedTime was meant to work with Show instance as input. it just doesn't work for all timezones
00:55:43 <dons> Prelude Data.Time.LocalTime> read "2022-04-08 00:52:41 UTC" :: ZonedTime
00:55:43 <dons> 2022-04-08 00:52:41 UTC
00:55:43 <dons> Prelude Data.Time.LocalTime> read "2022-04-08 00:52:41 CDT" :: ZonedTime
00:55:43 <dons> 2022-04-08 00:52:41 CDT
00:55:43 <dons> Prelude Data.Time.LocalTime> read "2022-04-08 00:52:41 CET" :: ZonedTime
00:55:45 <dons> *** Exception: Prelude.read: no parse
00:55:47 × yauhsien quits (~yauhsien@61-231-21-149.dynamic-ip.hinet.net) (Remote host closed the connection)
00:55:48 <dons> i wonder if its a locode/locale/ thing?
00:56:03 <hpc> look at the comment for the Read instance on link 2, it's a known issue
00:56:21 yauhsien joins (~yauhsien@61-231-21-149.dynamic-ip.hinet.net)
00:56:31 <dons> anyway, don't use read for this. its way to hairy/error prone. you need a TZ db and proper zonenifo suport or there will be bugs
00:57:24 <hpc> in the source it deconstructs the ZonedTime into its LocalTime and TimeZone, and does read on each of those
00:57:43 <hpc> LocalTime is parsed via "%Y-%m-%d %H:%M:%S%Q"
00:57:59 <hpc> TimeZone is parsed via defaultLocale and "%Z"
00:58:36 × Guest2755 quits (~Guest27@2601:281:d47f:1590::a504) (Ping timeout: 250 seconds)
00:58:39 <sub0> hpc ok I see. so they are aware of this, no need to report it
00:59:00 <sub0> I'll check alternative methods
00:59:15 <hpc> defaultTimeLocale is a record with a knownTimeZones field, https://hackage.haskell.org/package/time-1.13/docs/src/Data.Time.Format.Locale.html#defaultTimeLocale
00:59:24 <hpc> so maybe you could alter that locale based on tzdata
00:59:30 <hpc> but then you're definitely not using read anyway
00:59:54 × Guest53 quits (~Guest53@190.192.80.102) (Ping timeout: 250 seconds)
01:01:28 <hpc> even that list may end up changing soon
01:01:39 × yauhsien quits (~yauhsien@61-231-21-149.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
01:06:58 vysn joins (~vysn@user/vysn)
01:07:11 <abastro[m]> IIRC time library is biased towards US and Western Europe
01:07:17 asocialblade joins (~qsl@static.16.62.161.5.clients.your-server.de)
01:07:17 × asocialblade quits (~qsl@static.16.62.161.5.clients.your-server.de) (Changing host)
01:07:17 asocialblade joins (~qsl@user/asocialblade)
01:07:58 <abastro[m]> Western Eu or entire Europe, I don't recall that part
01:10:38 × asocialblade quits (~qsl@user/asocialblade) (Client Quit)
01:10:45 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
01:11:16 <hpc> i would say the opposite, that Read instance masks errors that someone in the US won't notice until it's too late
01:11:21 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 248 seconds)
01:11:31 <dons> yes its a trap
01:11:40 <dons> all bugs are calendar or timezone bugs ;)
01:12:35 × sub0 quits (~bc8147f2@cerf.good1.com) (Quit: CGI:IRC (Ping timeout))
01:13:00 sub0 joins (~bc8147f2@cerf.good1.com)
01:13:35 <Axman6> All bugs are written at some time, therefore all buggs are time bugs. QED
01:13:37 <dolio> At least you can't put in 18 for the month and have it wrap around to the next year, or something.
01:13:41 <Axman6> s/gg/g
01:13:41 <sub0> not entire Europe as it does not work with at least CET/CEST
01:13:43 <abastro[m]> Interesting
01:13:51 <sub0> dons, what timezone parsing library were you thinking about? I found timezone-olson, which parses binary olson files, and tz, for time zone handling
01:14:20 <abastro[m]> I wonder why time library comes with ghc
01:14:27 <abastro[m]> AND it contains Read instance
01:14:32 <abastro[m]> Like wh
01:15:11 xff0x joins (~xff0x@125x102x200x106.ap125.ftth.ucom.ne.jp)
01:16:51 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
01:18:02 <Axman6> the time library is "Good Enough" for most people. though in the past I've used Thyme (which was made by someone where I was working)
01:18:53 <Axman6> definitely worth looking into if you're working with time. it was written to be fast, we were using it in HFT
01:19:00 × bezmuth quits (~bezmuth@2a00:23c4:8a8f:5900:daa0:b5b1:cd63:bdb7) (Ping timeout: 240 seconds)
01:19:12 <abastro[m]> Good enough, eh
01:19:28 <abastro[m]> Do ppl use the Read instance then?
01:19:55 <Axman6> there's a whole parsing module for a reason
01:20:52 × lavaman quits (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Ping timeout: 272 seconds)
01:21:15 <sub0> it gets even weirder.. any arbitrary string after time parses.
01:21:39 × TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Ping timeout: 268 seconds)
01:21:41 <sub0> % read "2022-04-08 00:52:41 ASDF" :: ZonedTime
01:21:41 <yahb> sub0: *** Exception: Prelude.read: no parse
01:21:59 <sub0> hmm, it worked for me in ghci
01:23:24 <Axman6> why are you using the read instance?
01:23:47 TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker)
01:23:58 <Axman6> like, https://hackage.haskell.org/package/time-1.12.1/docs/Data-Time-Format.html#g:2 exists for exactly this reason; there's no universally accepted time format (even if that should be ISO8601)
01:25:03 <sub0> Axman6, because it worked for me in the past, with different timezones, and writing Show instance to a file and reading it back was the simplest
01:25:12 <sub0> solution
01:25:30 <sub0> if Read instance is broken/incomplete it probably shouldn't even exist
01:25:48 <Axman6> how could it possibly be complete?
01:26:05 <Axman6> if read.show isn't id, then something wrong, is that the problem?
01:26:22 <sub0> yes. it can't read what show returns for some timezones
01:26:41 <sub0> they documented this as well, so there doesn't seem to be any desire to fix it
01:27:13 <sub0> Read instance handles only a handful of timezones
01:28:19 <abastro[m]> I wonder why `Read` instance even exists here
01:28:46 abastro joins (~abab9579@220.75.216.63)
01:29:15 <dolio> It's useful for really simple, non-serious programs.
01:29:26 <Axman6> well, my advice is to use the Data.Time.Format module always when serialising times, otherwise you have no idea what you'll actually get. define the format once, and use it for Read and Show
01:29:36 <sub0> both instances are odd. they give the impression that you can write them to human-readable files, and read them back, but it doesn't work for most timezones. and for debugging purposes, I'd prefer the view of haskell structure.
01:29:39 <Axman6> yeah, it's useful when you need to `print time`
01:30:49 <sub0> well I guess ZonedTime Show instance is more useful as it is, but TimeZone instance would be more useful as a haskell structure with all the fields
01:31:27 yauhsien joins (~yauhsien@61-231-21-149.dynamic-ip.hinet.net)
01:31:54 <abastro> `Show` instance is useful here, hands down
01:31:58 <abastro> Though, `Read` instance?
01:32:04 <abastro> Which is biased towards certain regions
01:32:25 <Zemyla> Axman6: Shouldn't it be show.read = id? read.show gets rid of spaces and such.
01:32:27 <sub0> yeah you're right, Read is the problematic instance.
01:33:15 <Axman6> Zemyla: read.show :: Time -> Time, show.read :: String -> String, I meant the former
01:33:41 × TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Ping timeout: 246 seconds)
01:34:04 <Zemyla> Oh, I got confused as which way the dots go.
01:34:19 <Axman6> time is an open source project, I would hope that submitting a patch that makes read.show = id would be appreciated
01:34:41 <Axman6> I have a feeling this probably hasn't been done because it is A Hard Problem(tm) to get right
01:35:53 <abastro> I mean, what is the reason to have broken Read instance biased towards certain regions
01:36:19 TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker)
01:36:32 <dolio> Why answer questions if they're just going to get repeated over and over?
01:39:51 <abastro> Well I see, I can conclude that ghc is biased for unfortunate reasons. Reveals as elitist language, somewhat
01:40:16 <Axman6> or, perhaps, limited developer resources. got you do like to complain don't you
01:40:20 <Axman6> god*
01:41:15 <abastro> Tbh you know that this kind of topic could easily go very sensitive
01:41:57 <sub0> not including a Read instance would require even less effort
01:42:21 <Axman6> the default instances don't cover my timezone either, but I'm not complaining. if you want to fix it, submit a patch, if you're not willing to do anything but complain about it, you can do that elsewhere because it has negative productivity for the channel
01:43:26 <Axman6> actually, even supporting read.show = id is impossible, because it can't be done without having access to all possible TimeZone definitions, including ones made up by the user
01:43:43 <abastro> Inclusion/Exclusion of region-based stuff is bound to be sensitive. Btw I am not submitting the patch as clearly it would not easily be changing
01:44:17 <abastro> Imho proper answer could have been "backwards compatibility", once you have it this way, it is hard to fix.
01:45:00 <Axman6> IMO it should only support UTC and +HHMM formats, everything else is changable by factors outside our control
01:45:34 × yauhsien quits (~yauhsien@61-231-21-149.dynamic-ip.hinet.net) (Ping timeout: 272 seconds)
01:45:42 <abastro> I also wish it had that behavior, but we already have this now
01:46:10 <monochrom> At some point "patches welcome" needs to be brought up again.
01:46:41 <Axman6> I think I've brought it up three times now, but I guess complaining is much more fun than actually fixing problems
01:46:48 <monochrom> Err oops it's already brought up.
01:47:03 yauhsien joins (~yauhsien@61-231-21-149.dynamic-ip.hinet.net)
01:47:23 <monochrom> OK I should stick to playing video games. :)
01:47:28 <Axman6> https://github.com/haskell/time/issues/191
01:47:53 <Axman6> "show @TimeZone isn't injective, that is, the output String doesn't represent all the information in the input TimeZone, so there's no way to make read @TimeZone a retraction."
01:49:11 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
01:49:11 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
01:49:11 wroathe joins (~wroathe@user/wroathe)
01:49:31 <Axman6> the addition of some time zones is there as a convenience for, what was at the time, the majority of developers. I would bet that whoever added the US time zones was in the US, and the european zones were in europe. Perhaps if people in Asia and Africa also wanted that convenience, someone from those regions should add them.
01:50:24 <Axman6> adding features to a library where you don't have the expertise in the specifics of those features is likely to introduce subtle, actual bugs.
01:50:32 <abastro> https://github.com/haskell/time/issues/28
01:51:18 <abastro> So it was indeed brought up, and was closed simply by adding the documentation.
01:52:14 <abastro> Ofc it was brought up as issue long time ago, and it was closed as kind of "wontfix'
01:52:18 <Axman6> yes, because, if you read the thread, doing this properly is impossible
01:52:58 <abastro> There is no discussion as to why `Read` instance is not removed though.
01:53:13 <redb> Hi got another noob question. I have a computation which produces a Result(Text) and I'd like to print it with writeFile. I tried fmap and liftM but neither worked, how should I unwrap this Result() wrapper assuming I don't care about errors?
01:53:13 <abastro> Ofc with presence of `Read` instance, this cannot be properly done.
01:53:30 <Axman6> so, if you have a solution, submit a patch, but claiming there's some global racist conspiracy when it's clear what the reasons for the behaviour are, helps absolutely no one
01:54:20 <Axman6> redb: case myReadText of Err e -> error e; Ok theText -> TextIO.writeFile "fileName" theText
01:54:41 <Axman6> uh, myResultText would have been a better name, getting discussions mixed up
01:54:42 <abastro> It's not conspiracy, it is reality. It is neither about global something, it just implies the unfortunate reality that which regions get more exposure and inclusions while which doesn't.
01:55:28 <abastro> One could also say this is not really racism after all. Just unfortunate inequality.
01:55:29 <Axman6> abastro: sometimes, people have to learn to help themselves, but you're clearly yet to learn that. stop attributing malice where none exists
01:56:01 <abastro> I am not saying that it's malice exposed in any sense. This is more implicit
01:57:01 <Axman6> then fix it
01:57:18 <abastro> As in most cases, such inequality is implicit and goes without intention, as typically subconscious perspective is underlining it.
01:57:25 bitmapper joins (uid464869@id-464869.lymington.irccloud.com)
01:57:25 <abastro> Well I cannot fix people.
01:59:20 <abastro> For practical aspect, removing Read instance or some of its behavior could also be massive breaking change
01:59:33 <abastro> Which is likely not worthy to implement.
02:01:06 <sub0> you could argue it would be a good breaking change. how many programmers use it without realizing it is broken for most timezones in the world
02:01:54 <sub0> and that timezone Read instance is particularly egregious. reading just the timezone name and defaulting 0 as UTC offset..
02:02:16 <abastro> sub0: Hmm, good point. ..wait, reading just timezone name and defaulting 0 as UTC offset?
02:02:19 pavonia joins (~user@user/siracusa)
02:02:41 <sub0> according to this: https://github.com/haskell/time/issues/28
02:03:06 × sub0 quits (~bc8147f2@cerf.good1.com) (Quit: CGI:IRC (Error))
02:03:31 sub0 joins (~bc8147f2@cerf.good1.com)
02:03:36 <abastro> Oh, you meant for those not in `knownTimeZones`
02:04:54 <abastro> Let me post an issue then!
02:07:19 lavaman joins (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net)
02:09:59 alp_ joins (~alp@user/alp)
02:10:35 × ubert quits (~Thunderbi@p200300ecdf15885c99f35b3e45127b02.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
02:10:54 ubert joins (~Thunderbi@p200300ecdf1588f2bfd6f68985df9e03.dip0.t-ipconnect.de)
02:16:27 <sub0> adding UTC offset to the Show instance would be an easy fix. and Read instance could read both old and new format
02:20:29 <sub0> this would only be required for timezones without built-in support. supported ones could remain as they are now
02:21:46 <abastro> Thank you, let me summarize these suggestions in an issue
02:22:29 <sub0> for complete support, timeZoneSummerOnly field should be added to Show instance as well in some form or another
02:25:37 AlexNoo_ joins (~AlexNoo@94.233.241.39)
02:27:15 × Alex_test quits (~al_test@178.34.163.99) (Ping timeout: 250 seconds)
02:27:31 × alp_ quits (~alp@user/alp) (Remote host closed the connection)
02:27:50 alp_ joins (~alp@user/alp)
02:28:07 × AlexZenon quits (~alzenon@178.34.163.99) (Ping timeout: 250 seconds)
02:29:16 × AlexNoo quits (~AlexNoo@178.34.163.99) (Ping timeout: 272 seconds)
02:29:46 <energizer> why does haskell distinguish between functions and constructors?
02:30:01 <energizer> (it does, right?)
02:31:03 <c_wraith> sort of. Constructors are functions, but not all functions are constructors
02:31:10 Alex_test joins (~al_test@94.233.241.39)
02:31:27 <sub0> you can pattern match on Constructors
02:31:30 <c_wraith> This is done because you can pattern match on a constructor, but pattern-matching on a function doesn't even mean anything
02:31:53 <abastro> `PatternSynonyms` btw
02:32:25 AlexZenon joins (~alzenon@94.233.241.39)
02:32:52 <c_wraith> (also, to clarify - constructors that take arguments are functions. nullary constructors simply exist)
02:33:29 × benin quits (~benin@183.82.204.110) (Quit: The Lounge - https://thelounge.chat)
02:35:07 <c_wraith> abastro: I assure you, Pattern synonyms are nothing like matching on a function. they're cool, but they have a much more precise definition than that. Also, they're still quite limited in comparison to what functions can do.
02:35:51 benin joins (~benin@183.82.204.110)
02:36:45 <c_wraith> (for one, functions can take values as arguments. pattern synonyms can only take patterns, which they then match recursively)
02:37:35 <abastro> Oh, I was simply suggesting that pattern synonym expaans from constructors
02:37:38 <abastro> They are not functions, ofc
02:39:03 <energizer> given an integer why can't i pattern match on (succ n)?
02:39:16 <c_wraith> energizer: because that's not what pattern match syntax *means*
02:39:30 <energizer> why doesnt it mean that?
02:39:44 <c_wraith> to make implementing it trivial
02:39:53 × alp_ quits (~alp@user/alp) (Ping timeout: 248 seconds)
02:40:01 <c_wraith> and understanding it when you read it, for that matter
02:40:49 <c_wraith> A lowercase token in a pattern match always means "bind a value to this name"
02:40:54 <abastro> Perhaps you can pattern match against `n+1`
02:40:56 <c_wraith> always. 100% of the time
02:41:05 <c_wraith> it really helps to not have special cases
02:41:07 <abastro> sub0: https://github.com/haskell/time/issues/203 any further opinions?
02:43:32 <sub0> abastro, I like it, but I'd put more emphasis on adding UTC offset and summerOnly to Show instance, as that is more likely to be accepted. it is completely backward compatible if Show/Read instances of supported timezones remain the same, and Read instance for other (most) timezones becomes useful
02:44:10 <energizer> that's not how 'dearth' is supposed to be used
02:44:54 <abastro> <del>It was there to emphasize that I am unfamiliar with English</del> Well yea I should fix it asap
02:48:00 × benin quits (~benin@183.82.204.110) (Quit: The Lounge - https://thelounge.chat)
02:48:18 <energizer> i guess the alternative would be to have a sigil for binders
02:48:20 <c_wraith> energizer: generally when you want to compare an argument to the output of a function, guards are the way to go.
02:49:05 <abastro> sub0: Hm, I do think problem statement should come first. I have put the suggestion of changing Show instance before removing Read instance suggestion.
02:49:23 <abastro> Hopefully boldface there would attract more attention.
02:49:53 × lavaman quits (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Ping timeout: 256 seconds)
02:50:47 <energizer> c_wraith: could that work?
02:50:49 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
02:51:23 × TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Ping timeout: 246 seconds)
02:51:29 <c_wraith> energizer: sure. foo x | x == succ n = whatever
02:52:35 <energizer> c_wraith: i mean | succ 'n -> 99
02:52:59 ellie joins (~ellie@user/ellie)
02:53:00 benin joins (~benin@183.82.204.110)
02:53:10 <c_wraith> a guard needs to have type Bool
02:54:15 <sub0> abastro looks good.can you paste the link to the issue when you post it
02:54:17 <c_wraith> (there are also pattern guards, but they won't help you here. they mostly exist to pattern-match on the output of functions of the input)
02:54:52 <abastro> Well, the issue is already posted there!
02:55:29 TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker)
02:55:40 <sub0> oh, heh! for some reason I thought that was your own github page
02:56:40 <abastro> XD
03:11:15 × yauhsien quits (~yauhsien@61-231-21-149.dynamic-ip.hinet.net) (Remote host closed the connection)
03:12:04 yauhsien joins (~yauhsien@61-231-21-149.dynamic-ip.hinet.net)
03:13:13 <energizer> how come (.) and ($) aren't in any type classes?
03:15:07 <energizer> maybe that's only for types and those aren't types?
03:15:47 <abastro> Lots of functions are not in any typeclasses
03:16:03 <energizer> are some functions in any type classes?
03:16:07 <dons> they're functions. they appear in instances in some classes. they'er not abstracted themselves (there are other things that are more generalized versions of (.) for examlpe)
03:16:10 <dons> instance MonadReader r ((->) r) where ask = id local f m = m . f
03:16:25 <dons> e.g. (.) is the implementation of 'ask' in the Reader monad for (-> r) types
03:16:26 mbuf joins (~Shakthi@122.164.195.88)
03:16:45 × Midjak quits (~Midjak@10.233.130.77.rev.sfr.net) (Quit: This computer has gone to sleep)
03:17:05 × yauhsien quits (~yauhsien@61-231-21-149.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
03:18:21 <dons> there are generalized forms of composition and application that have their own names, where (.) or ($) are just specific forms. see e.g. https://hackage.haskell.org/package/base-4.16.1.0/docs/Control-Applicative.html#t:Applicative
03:19:10 <dons> i.e. more generic $ , https://hackage.haskell.org/package/base-4.16.1.0/docs/Prelude.html#v:-60--36--62-
03:20:02 <energizer> and <*> is more generic (.) ?
03:20:34 × benin quits (~benin@183.82.204.110) (Quit: The Lounge - https://thelounge.chat)
03:20:37 <dons> that's a bit different, if you look at the types
03:20:39 <dons> :t (.)
03:20:40 <lambdabot> (b -> c) -> (a -> b) -> a -> c
03:20:43 <dons> :t (<*>)
03:20:44 <lambdabot> Applicative f => f (a -> b) -> f a -> f b
03:21:10 × frost quits (~frost@user/frost) (Ping timeout: 250 seconds)
03:21:28 <dons> i guess my point is that sometimes these ideas, like composition or application, have more generic forms. and those get put into libraries and other type classes. the core of the language is mostly about combining simple functions to build programs
03:21:54 fef joins (~thedawn@user/thedawn)
03:23:50 <energizer> maybe the more generic (.) is (,) ?
03:23:51 × redb quits (~nmh@136.49.49.211) (Ping timeout: 260 seconds)
03:24:10 <dons> :t (,)
03:24:11 <lambdabot> a -> b -> (a, b)
03:24:24 <energizer> :i (,)
03:24:27 × TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Ping timeout: 256 seconds)
03:24:31 <energizer> it seems weird that (,) is in a bunch of classes but (.) isn't
03:25:34 <dons> to figure this stuff out, look at the types . try to undertand what the type says. "a -> b -> (a,b)" is really doing something very different to (b -> c) -> (a -> b) -> a -> c
03:25:37 redb joins (~nmh@136.49.49.211)
03:25:49 <dons> completely different lego pieces
03:27:26 × abastro quits (~abab9579@220.75.216.63) (Ping timeout: 246 seconds)
03:27:53 <energizer> Prelude> (times10 . plus3 . plus7) 5 -> 150; Prelude> ((times10 . plus3) . plus7) 5 -> 150
03:28:06 <energizer> (.) should have Monoid
03:30:07 × redb quits (~nmh@136.49.49.211) (Ping timeout: 256 seconds)
03:30:11 <energizer> ...or, what is it that i mean to say
03:30:36 redb joins (~nmh@136.49.49.211)
03:30:58 <zzz> composition is associative?
03:32:36 <zzz> also maybe you meant (times10 . (plus3 . plus7)) 5
03:32:40 TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker)
03:32:43 <zzz> both your examples are equivalent
03:32:44 <abastro[m]> :i Endo
03:33:07 <abastro[m]> Hm
03:33:39 <abastro[m]> @ :i Endo
03:33:57 <abastro[m]> % :i Endo
03:33:57 <yahb> abastro[m]: type Endo :: * -> *; newtype Endo a = Endo {appEndo :: a -> a}; -- Defined in `base-4.15.0.0:Data.Semigroup.Internal'; instance Monoid (Endo a) -- Defined in `base-4.15.0.0:Data.Semigroup.Internal'; instance Semigroup (Endo a) -- Defined in `base-4.15.0.0:Data.Semigroup.Internal'; instance (t ~ Endo b) => Rewrapped (Endo a) t -- Defined in `Control.Lens.Wrapped'; instance Wrapped (Endo a) -- Defined
03:34:05 <abastro[m]> Finally
03:35:28 × zaquest quits (~notzaques@5.130.79.72) (Ping timeout: 268 seconds)
03:37:33 × xkuru quits (~xkuru@user/xkuru) (Read error: Connection reset by peer)
03:37:46 <energizer> is it possible to say `instance Monoid $ where`
03:37:48 mikoto-chan joins (~mikoto-ch@213.177.151.239)
03:38:04 <zzz> no
03:38:17 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 246 seconds)
03:38:25 <zzz> $ is not a type
03:39:12 coot joins (~coot@213.134.190.95)
03:43:05 × waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 252 seconds)
03:44:24 deadmarshal_ joins (~deadmarsh@95.38.116.104)
03:44:31 × rawley quits (~rawley@216-197-141-102.nbfr.hsdb.sasknet.sk.ca) (Remote host closed the connection)
03:44:51 rawley joins (~rawley@216-197-141-102.nbfr.hsdb.sasknet.sk.ca)
03:46:21 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 246 seconds)
03:46:26 zaquest joins (~notzaques@5.130.79.72)
03:46:33 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 248 seconds)
03:50:10 <dsal> energizer: what are you trying to do with that?
03:50:37 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
03:51:24 × mvk quits (~mvk@2607:fea8:5ce3:8500::9d5a) (Ping timeout: 240 seconds)
03:51:28 seydar joins (~seydar@154-27-113-252.starry-inc.net)
03:52:38 × rawley quits (~rawley@216-197-141-102.nbfr.hsdb.sasknet.sk.ca) (Ping timeout: 246 seconds)
03:53:11 <sub0> abastro, btw, I am not sure that the instance is unlawful. AFAIK there are no laws for Read instance, or law requiring that read . show = id, even though it is desirable
03:53:49 <Axman6> energizer: you seem to be confused about the difference between types and values. (.) is a value. (,) uis both a type, which has kind Type -> Type -> Type, and a value, which is a function with type a -> b -> (a,b)
03:53:55 <sub0> someone correct me if I'm wrong
03:53:58 <jackdk> > :i Endo -- abastro[m]: if you prefer lambdabot
03:54:00 <lambdabot> <hint>:1:1: error: parse error on input ‘:’
03:54:06 <jackdk> =(
03:54:08 <Axman6> there is no such thing as (.) at the type level (at least not with that syntax, arguable Compose does that
03:55:19 <Axman6> type classes take types as arguments, and ($) and (.) are not types, but they do _have_ types, namely (b -> c) -> (a -> b) -> (a -> c) and (a -> b) -> a -> b
03:55:54 <Axman6> It's also not really true to say that (.) isn't in any type classes, because it is the implementation of fmap for the function Functor
03:56:00 <Axman6> :t fmap
03:56:01 <lambdabot> Functor f => (a -> b) -> f a -> f b
03:56:14 <Axman6> % :t fmap @((->) r)
03:56:14 <yahb> Axman6: ; <interactive>:1:13: error: Not in scope: type variable `r'
03:56:18 <Axman6> % :t fmap @((->) Int)
03:56:18 <yahb> Axman6: (a -> b) -> (Int -> a) -> Int -> b
03:57:13 <Axman6> it is also in the Category class, which defines a function called (.) (of which Prelude.(.) is the implementation of the instance for (->))
03:57:31 <Axman6> % :t Control.Category.(.)
03:57:31 <yahb> Axman6: ; <interactive>:1:1: error:; Not in scope: data constructor `Control.Category'; No module named `Control' is imported.
03:57:43 <Axman6> @hoogle (.)
03:57:43 <lambdabot> Prelude (.) :: (b -> c) -> (a -> b) -> a -> c
03:57:43 <lambdabot> Data.Function (.) :: (b -> c) -> (a -> b) -> a -> c
03:57:43 <lambdabot> Control.Category (.) :: Category cat => cat b c -> cat a b -> cat a c
04:02:01 × califax quits (~califax@user/califx) (Remote host closed the connection)
04:02:18 califax joins (~califax@user/califx)
04:02:25 lavaman joins (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net)
04:03:09 benin joins (~benin@183.82.204.110)
04:07:18 × califax quits (~califax@user/califx) (Remote host closed the connection)
04:07:31 califax joins (~califax@user/califx)
04:12:16 × zebrag quits (~chris@user/zebrag) (Quit: Konversation terminated!)
04:12:28 kaph_ joins (~kaph@dynamic-adsl-78-12-162-98.clienti.tiscali.it)
04:14:42 × kaph quits (~kaph@dynamic-adsl-78-12-162-98.clienti.tiscali.it) (Ping timeout: 246 seconds)
04:14:44 Topsi joins (~Tobias@dyndsl-095-033-089-233.ewe-ip-backbone.de)
04:16:10 yauhsien joins (~yauhsien@61-231-21-149.dynamic-ip.hinet.net)
04:16:39 Unicorn_Princess joins (~Unicorn_P@93-103-228-248.dynamic.t-2.net)
04:18:47 <abastro[m]> So lambdabot dislikes :i
04:19:04 <Axman6> lambdabot doesn't really have :info
04:19:14 <Axman6> @info Bool
04:19:14 <lambdabot> Bool
04:19:46 <Axman6> it actually in that case attempts to correct your typo of "@echo"
04:19:56 × mikoto-chan quits (~mikoto-ch@213.177.151.239) (Ping timeout: 246 seconds)
04:20:45 <abastro[m]> Lambdabot needs updates perhaps
04:21:02 <Axman6> we already have yahb
04:21:15 <abastro[m]> Hm
04:36:23 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 246 seconds)
04:39:21 × deadmarshal_ quits (~deadmarsh@95.38.116.104) (Ping timeout: 248 seconds)
04:41:00 × bontaq quits (~user@ool-45779fe5.dyn.optonline.net) (Ping timeout: 272 seconds)
04:41:58 seydar joins (~seydar@154-27-113-252.starry-inc.net)
04:42:20 <vaibhavsagar[m]> does anyone have a link to the most recent ghc proposal for multiple case alternatives in a single clause?
04:43:15 <vaibhavsagar[m]> I wouldn't mind the lack of this feature so much if the pattern coverage checker could handle it correctly
04:45:30 <Axman6> like case foo of (Left x | Right x) -> x?
04:45:41 <vaibhavsagar[m]> yeah
04:46:32 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 246 seconds)
04:46:53 <vaibhavsagar[m]> the pattern match coverage checker as of 8.10 complains when you do case x of y | y == AltA || y == AltB || y == AltC -> someValue even when all cases are handled
04:47:12 <vaibhavsagar[m]> maybe 9.0 onwards are better here after all the Lower Your Guards stuff
04:47:42 <abastro[m]> Well why would you have such function
04:47:46 <abastro[m]> What would be the reasoning?
04:48:01 <vaibhavsagar[m]> multiple cases are no-ops
04:48:48 <vaibhavsagar[m]> and it's IMO better to handle all the cases than use a wildcard pattern match, which would hide problems when the data type is extended
04:49:04 <abastro[m]> Ehh
04:49:25 <vaibhavsagar[m]> my personal suggestion was to duplicate the code and have the same RHS for each alternative
04:49:34 <abastro[m]> You need to design your datatype to avoid such duplicate cases
04:49:37 <vaibhavsagar[m]> no, it's not that simple
04:49:52 <abastro[m]> Also iirc most or patterns in many languages does not allow binders on both branches
04:50:56 <vaibhavsagar[m]> https://wiki.haskell.org/MultiCase is a long-standing feature request
04:52:00 <vaibhavsagar[m]> oh I see what you mean about the binders
04:52:06 seydar joins (~seydar@154-27-113-252.starry-inc.net)
04:52:09 <vaibhavsagar[m]> that's totally fine for my use case here
04:52:24 <abastro[m]> Long-standing feature request, that sounds like there are multitude of reasons why it is not yet accepted
04:52:30 <vaibhavsagar[m]> not really
04:52:35 <abastro[m]> That is, it is a bad idea for many reasons
04:52:46 <vaibhavsagar[m]> the discussion I remember seeing was basically that nobody could be bothered to implement it
04:52:46 <dibblego> use a traversal
04:53:09 <vaibhavsagar[m]> I don't see how a traversal would help here
04:53:11 <abastro[m]> Yea, nobody bothers because it is not really necessary or convenient
04:53:34 <abastro[m]> When even LambdaCase and MultiWayIf is implemented
04:55:18 <monochrom> No no, @info is corrected to:
04:55:27 <vaibhavsagar[m]> also the syntax is confusing
04:55:29 <monochrom> @info do { x <- foo; bar x; }
04:55:30 <lambdabot> foo >>= \ x -> bar x
04:55:33 <vaibhavsagar[m]> i.e. what the syntax should be
04:55:37 <abastro[m]> Wdym syntax is confusing
04:56:11 <vaibhavsagar[m]> whether it should be a pipe (already used), a comma (already used), some other combination of characters that is less ambiguous (unknown)
04:56:28 <dibblego> vaibhavsagar[m]: https://gist.github.com/tonymorris/6fcd16b4e3dc7b9abc071056a0417d4b
04:56:52 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 268 seconds)
04:57:49 <abastro[m]> Oh right, optics are useful here too
04:58:00 <abastro[m]> Now that obviates need of Or patterns
04:58:02 <vaibhavsagar[m]> oh cool
04:58:24 <vaibhavsagar[m]> we probably don't want to use Lens in this codebase though
04:58:34 <dibblego> then why get out of bed?
04:58:50 <abastro[m]> Hahahaha
04:58:58 <dibblego> I'm just kidding; that's ^^ what I would do, regardless of any fancy syntax
04:59:06 <dibblego> and I wouldn't write code without lens
04:59:13 <abastro[m]> Well if you dislike lens, you could use optics
04:59:22 <sm> what's this.. 24 hours later and it's still about lens... :)
04:59:35 <abastro[m]> Lmao we have gone through full circle
04:59:43 <abastro[m]> But this time lens is a good guy
04:59:48 <monochrom> I couldn't sleep so I got out of bed.
04:59:55 <abastro[m]> Oh no
05:00:13 <dibblego> I don't mean lens specifically, more like, "a prelude like it's the 2000s"
05:00:23 <geekosaur> at least we're not still trying to derive (.) from ($)
05:00:27 cdman joins (~dcm@user/dmc/x-4369397)
05:00:42 geekosaur couldn't sleep either. will pay for this tomorrow…
05:02:39 Topsi1 joins (~Tobias@dyndsl-095-033-091-154.ewe-ip-backbone.de)
05:02:41 <monochrom> Bed is for reading. Desk is for sleeping. Work or school is for IRC.
05:03:02 <monochrom> The ideal work-life balance >:)
05:03:07 <abastro[m]> >.>
05:03:29 × benin quits (~benin@183.82.204.110) (Quit: The Lounge - https://thelounge.chat)
05:04:09 <dibblego> there is an ideal lens library, which produces the Iso for your data type, and so that ^^ Prism comes for free — rather than writing one for each combination of constructors
05:04:23 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 246 seconds)
05:04:26 × Topsi quits (~Tobias@dyndsl-095-033-089-233.ewe-ip-backbone.de) (Ping timeout: 272 seconds)
05:05:03 <abastro[m]> I guess you could implement sth like that without lens dependency, ye
05:06:32 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
05:06:39 rish joins (~rishikesh@128.90.143.237)
05:06:48 × rish quits (~rishikesh@128.90.143.237) (Client Quit)
05:06:52 seydar joins (~seydar@154-27-113-252.starry-inc.net)
05:07:19 deadmarshal_ joins (~deadmarsh@95.38.116.104)
05:07:23 × rekahsoft quits (~rekahsoft@cpe001b21a2fd89-cm64777ddc63a0.cpe.net.cable.rogers.com) (Remote host closed the connection)
05:07:49 rekahsoft joins (~rekahsoft@cpe001b21a2fd89-cm64777ddc63a0.cpe.net.cable.rogers.com)
05:08:14 benin joins (~benin@183.82.204.110)
05:10:37 × rekahsoft quits (~rekahsoft@cpe001b21a2fd89-cm64777ddc63a0.cpe.net.cable.rogers.com) (Remote host closed the connection)
05:10:59 rekahsoft joins (~rekahsoft@cpe001b21a2fd89-cm64777ddc63a0.cpe.net.cable.rogers.com)
05:11:21 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 248 seconds)
05:11:22 × yauhsien quits (~yauhsien@61-231-21-149.dynamic-ip.hinet.net) (Remote host closed the connection)
05:11:43 × rekahsoft quits (~rekahsoft@cpe001b21a2fd89-cm64777ddc63a0.cpe.net.cable.rogers.com) (Remote host closed the connection)
05:11:57 yauhsien joins (~yauhsien@61-231-21-149.dynamic-ip.hinet.net)
05:12:05 rekahsoft joins (~rekahsoft@cpe001b21a2fd89-cm64777ddc63a0.cpe.net.cable.rogers.com)
05:12:17 × deadmarshal_ quits (~deadmarsh@95.38.116.104) (Ping timeout: 268 seconds)
05:12:26 × motherfsck quits (~motherfsc@user/motherfsck) (Ping timeout: 246 seconds)
05:13:43 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
05:15:26 geekosaur joins (~geekosaur@xmonad/geekosaur)
05:16:46 seydar joins (~seydar@154-27-113-252.starry-inc.net)
05:21:11 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 246 seconds)
05:21:30 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
05:24:37 × Topsi1 quits (~Tobias@dyndsl-095-033-091-154.ewe-ip-backbone.de) (Ping timeout: 268 seconds)
05:24:40 × liz quits (~liz@host109-151-125-217.range109-151.btcentralplus.com) (Quit: Lost terminal)
05:24:49 Topsi joins (~Tobias@dyndsl-095-033-091-154.ewe-ip-backbone.de)
05:25:14 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 268 seconds)
05:26:51 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
05:26:56 seydar joins (~seydar@154-27-113-252.starry-inc.net)
05:31:20 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 246 seconds)
05:33:10 Topsi1 joins (~Tobias@dyndsl-095-033-091-154.ewe-ip-backbone.de)
05:34:08 × Topsi quits (~Tobias@dyndsl-095-033-091-154.ewe-ip-backbone.de) (Ping timeout: 246 seconds)
05:34:39 × rekahsoft quits (~rekahsoft@cpe001b21a2fd89-cm64777ddc63a0.cpe.net.cable.rogers.com) (Remote host closed the connection)
05:36:57 × euandreh quits (~euandreh@2804:14c:33:9fe5:676f:8485:4af0:d43b) (Ping timeout: 268 seconds)
05:37:03 seydar joins (~seydar@154-27-113-252.starry-inc.net)
05:37:07 rekahsoft joins (~rekahsoft@cpe001b21a2fd89-cm64777ddc63a0.cpe.net.cable.rogers.com)
05:37:38 euandreh joins (~euandreh@2804:14c:33:9fe5:7d1a:acbd:2bb4:f)
05:37:59 × rekahsoft quits (~rekahsoft@cpe001b21a2fd89-cm64777ddc63a0.cpe.net.cable.rogers.com) (Remote host closed the connection)
05:38:23 rekahsoft joins (~rekahsoft@cpe001b21a2fd89-cm64777ddc63a0.cpe.net.cable.rogers.com)
05:39:05 × rekahsoft quits (~rekahsoft@cpe001b21a2fd89-cm64777ddc63a0.cpe.net.cable.rogers.com) (Remote host closed the connection)
05:39:24 × yauhsien quits (~yauhsien@61-231-21-149.dynamic-ip.hinet.net) (Remote host closed the connection)
05:39:25 rekahsoft joins (~rekahsoft@cpe001b21a2fd89-cm64777ddc63a0.cpe.net.cable.rogers.com)
05:41:35 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 256 seconds)
05:42:09 yauhsien joins (~yauhsien@61-231-21-149.dynamic-ip.hinet.net)
05:46:07 × rekahsoft quits (~rekahsoft@cpe001b21a2fd89-cm64777ddc63a0.cpe.net.cable.rogers.com) (Ping timeout: 256 seconds)
05:46:39 × pera quits (~pera@user/pera) (Ping timeout: 260 seconds)
05:46:44 × yauhsien quits (~yauhsien@61-231-21-149.dynamic-ip.hinet.net) (Ping timeout: 246 seconds)
05:49:08 mncheck joins (~mncheck@193.224.205.254)
05:53:46 × wyrd quits (~wyrd@gateway/tor-sasl/wyrd) (Quit: leaving)
05:54:05 wyrd joins (~wyrd@gateway/tor-sasl/wyrd)
05:56:04 ygrn joins (~Guest50@c-24-23-216-62.hsd1.ca.comcast.net)
05:58:29 acidjnk joins (~acidjnk@p200300d0c7049f91e010d86dcc64fbcb.dip0.t-ipconnect.de)
06:00:49 takuan joins (~takuan@178-116-218-225.access.telenet.be)
06:04:07 jonathanx_ joins (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
06:06:21 pera joins (~pera@90.208.230.100)
06:06:44 pera is now known as Guest2498
06:07:08 × jonathanx quits (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Ping timeout: 272 seconds)
06:13:49 <Athas> What's the most efficient list-ish type for concatenation-heavy workloads? DList? Seq?
06:14:29 <Athas> It's right-nested appends in case it matters.
06:14:38 <monochrom> I would bet on DList.
06:14:55 <Axman6> depends if you you're using it as a queue or just appending
06:14:58 <Athas> Yeah, reading the docs this looks like a DList problem.
06:15:01 <Athas> Just appending.
06:15:05 <Axman6> then DList
06:15:16 <Athas> I want to append a bunch of lists and then turn the result into a normal list.
06:15:31 <Axman6> or STArray with exponential resizing >_>
06:15:47 <monochrom> What is right-nested appends? Is it like foldr (++)? Is it like foldl (++)?
06:16:44 <Athas> foldl (++)
06:16:57 <monochrom> But I guess DList is the safe bet because it's good for both. :)
06:17:09 <monochrom> But [] does fine with foldr (++).
06:17:18 <Athas> Yeah, and it's not super performance sensitive what I'm writing. I just don't want unpleasant surprises later.
06:19:57 <Axman6> DList is great if you do lots of appending and very little consuming (consume once) If you do need to read from it a t multiple points, Seq might be a better option, but definitely sounds like DList problem
06:20:42 <Athas> DList it is.
06:22:00 zeenk joins (~zeenk@2a02:2f04:a313:d600:8d26:ec9f:3ff6:fc94)
06:25:46 lortabac joins (~lortabac@2a01:e0a:541:b8f0:10cd:909d:df46:ee8c)
06:26:53 × bitmapper quits (uid464869@id-464869.lymington.irccloud.com) (Quit: Connection closed for inactivity)
06:35:41 × Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
06:38:20 Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
06:39:14 epolanski joins (uid312403@id-312403.helmsley.irccloud.com)
06:39:53 odnes joins (~odnes@5-203-246-201.pat.nym.cosmote.net)
06:40:39 fvr joins (uid503686@id-503686.uxbridge.irccloud.com)
06:41:42 × fvr quits (uid503686@id-503686.uxbridge.irccloud.com) (Client Quit)
06:41:53 fvr joins (uid503686@id-503686.uxbridge.irccloud.com)
06:45:48 × lavaman quits (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Remote host closed the connection)
06:46:37 <energizer> :t Compose
06:46:38 <lambdabot> error:
06:46:38 <lambdabot> • Data constructor not in scope: Compose
06:46:38 <lambdabot> • Perhaps you meant variable ‘icompose’ (imported from Control.Lens)
06:49:07 deadmarshal_ joins (~deadmarsh@95.38.116.104)
06:50:04 <abastro[m]> Whh
06:50:32 <abastro[m]> Btw why does scala not have `DList`
06:57:18 dextaa_54 is now known as dextaa
07:01:10 alp_ joins (~alp@user/alp)
07:01:18 <Axman6> if you can write functions of the type [a] -> [a] then it does, that's all DLists are - functions which accept an argument which represents the end of the list
07:01:47 × Guest2498 quits (~pera@90.208.230.100) (Quit: leaving)
07:01:56 <Axman6> :t \rest -> 'H':'e':'l':'l':'o':rest
07:01:57 <lambdabot> [Char] -> [Char]
07:02:26 <Axman6> > let myDList = \rest -> 'H':'e':'l':'l':'o':rest in myDList ", world!"
07:02:27 <lambdabot> "Hello, world!"
07:03:14 <energizer> how can i make a type that's like compose?
07:03:35 <Axman6> > let hello = \rest -> 'H':'e':'l':'l':'o':rest; commaSpace = \rest -> ',':' ':rest in hello . commaSpace $ "world!"
07:03:37 <lambdabot> "Hello, world!"
07:03:45 <Axman6> energizer: "like" in what way?
07:04:41 <energizer> you were saying (.) isn't a type so it can't be instance Monoid, so i want to make a compose that is instance Monoid
07:04:50 <abastro[m]> Scala doesn't have monoids, Axman6
07:05:14 <abastro[m]> energizer: use Endo
07:05:23 <abastro[m]> % :i Endo
07:05:23 <yahb> abastro[m]: type Endo :: * -> *; newtype Endo a = Endo {appEndo :: a -> a}; -- Defined in `base-4.15.0.0:Data.Semigroup.Internal'; instance Monoid (Endo a) -- Defined in `base-4.15.0.0:Data.Semigroup.Internal'; instance Semigroup (Endo a) -- Defined in `base-4.15.0.0:Data.Semigroup.Internal'; instance (t ~ Endo b) => Rewrapped (Endo a) t -- Defined in `Control.Lens.Wrapped'; instance Wrapped (Endo a) -- Defined
07:05:34 <abastro[m]> ^
07:05:58 <Axman6> having instance Monoid (Compose f g a) means having something of type (<>) :: Compose f g a -> Compose f g a -> Compose f g a
07:06:34 <abastro[m]> Oh
07:06:35 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds)
07:06:58 <Axman6> energizer: I'm not sure the questions you're asking make sense though, it still feels like you're confused about the difference between functions and types, but I don't understand what you actually want well enough to tell where you're getting stuck
07:07:05 <abastro[m]> Uhm does that makes sense?
07:07:26 <Axman6> Scala definitely does have monoids btw
07:07:46 <abastro[m]> Eh, where? I could not find it in stdlib
07:08:06 <Axman6> it probably has some dumb name like additive
07:08:21 <Axman6> but it might not be in the stdlib
07:08:26 <energizer> Axman6: what is `a` doing there?
07:08:29 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
07:08:41 <Axman6> % :info Compose
07:08:41 <yahb> Axman6: ; <interactive>:1:1: error: Not in scope: `Compose'
07:08:45 <abastro[m]> Parameter of the generics
07:08:48 <Axman6> @hoogle Compose
07:08:48 <lambdabot> module Data.Functor.Compose
07:08:48 <lambdabot> Data.Functor.Compose newtype Compose f g a
07:08:48 <lambdabot> Data.Functor.Compose Compose :: f (g a) -> Compose f g a
07:09:32 <Axman6> Data.Functor.Compose defined newtype Compose f g a = Compose (f (g a)) -- it is the composition of two functors, which is also always functor
07:09:43 <Axman6> % import Data.Functor.Compose
07:09:43 <yahb> Axman6:
07:09:47 <Axman6> % :info Compose
07:09:47 <yahb> Axman6: type role Compose representational nominal nominal; type Compose :: forall {k} {k1}. (k -> *) -> (k1 -> k) -> k1 -> *; newtype Compose f g a = Compose {getCompose :: f (g a)}; -- Defined in `Data.Functor.Compose'; infixr 9 `Compose`; instance (Alternative f, Applicative g) => Alternative (Compose f g) -- Defined in `Data.Functor.Compose'; instance (Applicative f, Applicative g) => Applicative (Compos
07:10:08 <Axman6> % fmap show $ Compose [Just 1]
07:10:08 <yahb> Axman6: Compose [Just "1"]
07:10:26 <Axman6> % fmap show $ Compose (Compose [Just (True,1)]
07:10:26 <yahb> Axman6: ; <interactive>:88:45: error: parse error (possibly incorrect indentation or mismatched brackets)
07:10:34 <Axman6> % fmap show $ Compose (Compose [Just (True,1)])
07:10:34 <yahb> Axman6: Compose (Compose [Just (True,"1")])
07:10:48 yauhsien joins (~yauhsien@61-231-21-149.dynamic-ip.hinet.net)
07:11:18 × deadmarshal_ quits (~deadmarsh@95.38.116.104) (Ping timeout: 268 seconds)
07:11:21 <abastro[m]> % Compose [Just 1] <> Compose [Nothing]
07:11:21 <yahb> abastro[m]: ; <interactive>:90:1: error:; * No instance for (Semigroup (Compose [] Maybe Integer)) arising from a use of `it'; * In the first argument of `print', namely `it'; In a stmt of an interactive GHCi command: print it
07:11:27 <energizer> i dont really know what that's saying
07:11:31 <abastro[m]> Noo
07:11:49 <abastro[m]> Well `Compose` type is indeed a complex one
07:12:27 <abastro[m]> You need to understand haskell generics before trying on Compose
07:14:08 <Axman6> % :t Compose (Compose [Just (True,"1")])
07:14:08 <yahb> Axman6: Compose (Compose [] Maybe) ((,) Bool) String
07:14:23 <Axman6> that's the composition of three functors
07:14:45 <Axman6> which isn't really related to the composition of functions (except that functions are functors, but that's another issue)
07:14:56 <Axman6> it does sound like you migth be looking for Endo?
07:15:56 <energizer> ok i'll just leave it for now. thank you.
07:16:15 <Axman6> an endomorphism is just a function with type a -> a, newtype Endo a = Endo (a -> a). it _does_ have a monoid instance, because you can define mempty = Endo id :: Endo a; and mappend (Endo f) (Endo g) = Endo (f . g)
07:17:07 <Axman6> so the idea of combining functions of the type a -> a is represented by Endo, and lots of instances can be defined for that type
07:20:11 × Akiva quits (~Akiva@user/Akiva) (Ping timeout: 246 seconds)
07:22:33 cfricke joins (~cfricke@user/cfricke)
07:22:47 × vysn quits (~vysn@user/vysn) (Quit: WeeChat 3.4)
07:22:51 gehmehgeh joins (~user@user/gehmehgeh)
07:23:55 × yauhsien quits (~yauhsien@61-231-21-149.dynamic-ip.hinet.net) (Remote host closed the connection)
07:24:40 yauhsien joins (~yauhsien@61-231-21-149.dynamic-ip.hinet.net)
07:27:16 michalz joins (~michalz@185.246.204.122)
07:27:33 × shriekingnoise quits (~shrieking@201.231.16.156) (Quit: Quit)
07:29:42 × ygrn quits (~Guest50@c-24-23-216-62.hsd1.ca.comcast.net) (Quit: Client closed)
07:31:28 dhouthoo joins (~dhouthoo@178-117-36-167.access.telenet.be)
07:38:38 seydar joins (~seydar@154-27-113-252.starry-inc.net)
07:46:15 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 256 seconds)
07:48:17 dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net)
07:48:40 machinedgod joins (~machinedg@24.105.81.50)
07:51:03 × tzh quits (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz)
07:51:36 seydar joins (~seydar@154-27-113-252.starry-inc.net)
07:52:18 <abastro[m]> Oh right
07:52:31 <abastro[m]> Higher associativity of (.) is encoded in Category
07:52:56 <abastro[m]> I hate Category tho
07:54:26 frost joins (~frost@user/frost)
07:56:09 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 248 seconds)
07:56:56 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 268 seconds)
07:58:51 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
08:00:26 merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
08:00:56 deadmarshal_ joins (~deadmarsh@95.38.116.104)
08:01:07 ccntrq joins (~Thunderbi@2a01:e34:eccb:b060:3869:aeec:4353:22a7)
08:01:47 seydar joins (~seydar@154-27-113-252.starry-inc.net)
08:03:41 × machinedgod quits (~machinedg@24.105.81.50) (Remote host closed the connection)
08:04:11 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
08:04:33 AlexNoo_ is now known as AlexNoo
08:05:23 chele joins (~chele@user/chele)
08:06:03 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 246 seconds)
08:08:59 mncheckm joins (~mncheck@193.224.205.254)
08:09:45 machinedgod joins (~machinedg@24.105.81.50)
08:11:17 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
08:23:45 ccntrq1 joins (~Thunderbi@2a01:e34:eccb:b060:3869:aeec:4353:22a7)
08:23:50 × ccntrq quits (~Thunderbi@2a01:e34:eccb:b060:3869:aeec:4353:22a7) (Read error: Connection reset by peer)
08:23:51 ccntrq1 is now known as ccntrq
08:24:09 mikoto-chan joins (~mikoto-ch@213.177.151.239)
08:31:24 × _________ quits (~nobody@user/noodly) (Ping timeout: 240 seconds)
08:33:14 × niko quits (~niko@libera/staff/niko) (Quit: Reconnecting)
08:33:33 niko joins (~niko@libera/staff/niko)
08:34:11 × niko quits (~niko@libera/staff/niko) (Client Quit)
08:34:45 o joins (~niko@libera/staff/niko)
08:35:15 × littlebobeep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
08:36:51 × coot quits (~coot@213.134.190.95) (Quit: coot)
08:43:33 × cdman quits (~dcm@user/dmc/x-4369397) (Quit: Leaving)
08:44:05 MajorBiscuit joins (~MajorBisc@wlan-145-94-161-127.wlan.tudelft.nl)
08:45:39 <energizer> w
08:46:46 littlebobeep joins (~alMalsamo@gateway/tor-sasl/almalsamo)
08:46:58 <energizer> what is the relationship between multiplication and application? would it make any difference if they were the same operator?
08:48:04 <tomsmeding> why would it make sense for them to be the same operator?
08:48:38 <tomsmeding> multiplication takes two values of the same type, application does not, so in any case the types don't match
08:48:38 cdman joins (~dcm@27.2.217.240)
08:48:38 × cdman quits (~dcm@27.2.217.240) (Changing host)
08:48:38 cdman joins (~dcm@user/dmc/x-4369397)
08:49:35 <energizer> multiplication hopefully supports vector * scalar
08:49:54 <tomsmeding> :t (*)
08:49:55 <lambdabot> Num a => a -> a -> a
08:50:00 × fvr quits (uid503686@id-503686.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
08:50:01 <tomsmeding> though I guess you could generalise that
08:50:01 <energizer> oh that's dumb
08:50:20 <tomsmeding> I guess the question is: what would be the type of the generalised operator
08:51:39 <energizer> hm i guess that actually demonstrates a counterexample
08:52:07 DNH joins (~DNH@2a02:8108:1100:16d8:c02d:dd64:a284:8819)
08:52:18 <tomsmeding> for vector-scalar multiplication, you can kind of achieve that by lifting the scalar to a vector first and then performing element-wise multiplication
08:52:41 <tomsmeding> if the scalar is a literal, that lifting can even be done invisibly using fromInteger/fromRational
08:52:42 <energizer> [10,20,30] $ 2 would give 30 but [10,20,30] * 2 would give [20,40,60]
08:52:49 <tomsmeding> right
08:53:04 <tomsmeding> > [10,20,30] $ 2
08:53:06 <lambdabot> error:
08:53:06 <lambdabot> • Couldn't match expected type ‘t0 -> t’ with actual type ‘[a0]’
08:53:06 <lambdabot> • The first argument of ($) takes one argument,
08:53:11 <tomsmeding> not sure what the meaning of that would be though
08:53:33 <energizer> it would be getindex, whatever that's called in haskell, maybe !!
08:53:44 <tomsmeding> ah I see, seeing an array as a function from index to value
08:53:56 × sub0 quits (~bc8147f2@cerf.good1.com) (Quit: CGI:IRC (Session timeout))
08:54:06 <energizer> ya
08:54:08 CiaoSen joins (~Jura@p200300c9572d40002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
08:54:21 <tomsmeding> but yeah, you'll get conflicts, as you see
09:00:55 _________ joins (~nobody@user/noodly)
09:02:32 Pickchea joins (~private@user/pickchea)
09:03:48 × dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Quit: WeeChat 3.4.1)
09:06:01 × _________ quits (~nobody@user/noodly) (Ping timeout: 248 seconds)
09:07:07 _________ joins (~nobody@user/noodly)
09:12:19 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
09:14:56 haskellberryfinn joins (~nut@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
09:16:45 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 246 seconds)
09:16:55 pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
09:28:09 gurkenglas joins (~gurkengla@dslb-178-012-018-212.178.012.pools.vodafone-ip.de)
09:28:30 × chenqisu1 quits (~chenqisu1@183.217.200.239) (Quit: Leaving)
09:39:49 × DNH quits (~DNH@2a02:8108:1100:16d8:c02d:dd64:a284:8819) (Quit: My MacBook has gone to sleep. ZZZzzz…)
09:40:21 Guest89 joins (~Guest89@2a01:41e1:4454:c00:c143:656:2260:f5bd)
09:50:20 vpan joins (~0@212.117.1.172)
09:50:49 sprout_ joins (~quassel@2a02:a467:ccd6:1:cc9d:606d:275:46cf)
09:51:07 <haskellberryfinn> does Haskell have undefined behavior like in C? Such as in C, 1 << -1 is undefined
09:52:57 × sprout quits (~quassel@2a02:a467:ccd6:1:70be:3437:d6be:b5ae) (Ping timeout: 248 seconds)
10:00:53 × CiaoSen quits (~Jura@p200300c9572d40002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
10:02:15 DNH joins (~DNH@2a02:8108:1100:16d8:c02d:dd64:a284:8819)
10:02:37 seydar joins (~seydar@154-27-113-252.starry-inc.net)
10:05:32 <abastro[m]> I don't think haskell have undefined behavior
10:05:53 <abastro[m]> Eliminating those unknown behaviors, I think that's the point of type system
10:09:01 × epolanski quits (uid312403@id-312403.helmsley.irccloud.com) (Quit: Connection closed for inactivity)
10:09:42 × xff0x quits (~xff0x@125x102x200x106.ap125.ftth.ucom.ne.jp) (Ping timeout: 272 seconds)
10:11:00 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 246 seconds)
10:13:11 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
10:16:59 <lortabac> AFAIK Haskell doesn't have a notion of undefined behavior, but it can run into unpredictable behavior when you use the unsafe* functions
10:17:09 seydar joins (~seydar@154-27-113-252.starry-inc.net)
10:17:56 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 272 seconds)
10:18:09 <lortabac> by "unpredictable" I mean behavior that is hard to predict and can vary when optimizations are on
10:19:50 uncomfy joins (~uncomfy@27.110.174.130)
10:21:09 <abastro[m]> Right, unsafe functions are exceptions to this. Meh
10:21:10 <abastro[m]> Momentarily forgot about them
10:21:37 × benin quits (~benin@183.82.204.110) (Quit: The Lounge - https://thelounge.chat)
10:21:56 <abastro[m]> Well also, evaluation order is kind of not concretely defined for nearly everything in haskell
10:22:22 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 272 seconds)
10:25:09 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
10:25:42 × gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving)
10:25:48 × cdman quits (~dcm@user/dmc/x-4369397) (Quit: Leaving)
10:25:52 <dibblego> > head []
10:25:54 <lambdabot> *Exception: Prelude.head: empty list
10:26:41 cdman joins (~dcm@27.2.217.240)
10:26:41 × cdman quits (~dcm@27.2.217.240) (Changing host)
10:26:41 cdman joins (~dcm@user/dmc/x-4369397)
10:27:18 seydar joins (~seydar@154-27-113-252.starry-inc.net)
10:30:04 <abastro[m]> I thought that behavior is predictable
10:31:32 chddr joins (~Thunderbi@91.226.35.164)
10:32:13 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 260 seconds)
10:33:08 × kaph_ quits (~kaph@dynamic-adsl-78-12-162-98.clienti.tiscali.it) (Ping timeout: 272 seconds)
10:35:15 gehmehgeh joins (~user@user/gehmehgeh)
10:37:27 seydar joins (~seydar@154-27-113-252.starry-inc.net)
10:38:37 jakalx joins (~jakalx@base.jakalx.net)
10:38:49 × merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 248 seconds)
10:41:55 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 256 seconds)
10:42:42 benin joins (~benin@183.82.204.110)
10:44:00 <haskellberryfinn> lortabac: can we ask GHC to protect a region in the source code not to optimize them?
10:45:01 <tomsmeding> why would you want that
10:45:32 <lortabac> haskellberryfinn: yes, you can do it at module level with a pragma
10:46:12 <tomsmeding> I guess you'd also need to annotate the exported functions from that module with NOINLINE, else they might get inlined somewhere else and subsequently optimised?
10:46:45 <lortabac> in fact I had to do it once because of a GHC bug that was triggered by a particular optimization
10:46:56 <tomsmeding> right, bugs are a reason
10:47:38 × gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving)
10:47:39 seydar joins (~seydar@154-27-113-252.starry-inc.net)
10:48:07 × cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.4.1)
10:49:18 <haskellberryfinn> tomsmeding: no particular reason, just want to understand GHC's behavior
10:49:20 <tomsmeding> HLS question: I have a multi-component cabal file (library, testsuite and benchmark), and each have different dependencies, but HLS gets confused: opening bench/Main.hs is fine, but if I then also open test/Main.hs, suddenly a bench-only dependency X is unavailable in bench/Main.hs. Is this a known issue?
10:51:47 gehmehgeh joins (~user@user/gehmehgeh)
10:51:57 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 246 seconds)
10:56:53 ccntrq1 joins (~Thunderbi@imx92-1-78-204-187-6.fbx.proxad.net)
10:57:33 × ccntrq quits (~Thunderbi@2a01:e34:eccb:b060:3869:aeec:4353:22a7) (Read error: Connection reset by peer)
10:57:33 ccntrq1 is now known as ccntrq
10:57:46 seydar joins (~seydar@154-27-113-252.starry-inc.net)
10:57:55 × acidjnk quits (~acidjnk@p200300d0c7049f91e010d86dcc64fbcb.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
11:00:57 × hololeap_ quits (~hololeap@user/hololeap) (Remote host closed the connection)
11:01:13 × simeon quits (~pi@dslb-090-186-003-168.090.186.pools.vodafone-ip.de) (Ping timeout: 248 seconds)
11:02:12 × Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
11:02:19 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 256 seconds)
11:02:23 hololeap_ joins (~hololeap@user/hololeap)
11:02:25 Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
11:02:44 simeon joins (~pi@dslb-002-202-026-141.002.202.pools.vodafone-ip.de)
11:06:27 × econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity)
11:07:17 × Guest89 quits (~Guest89@2a01:41e1:4454:c00:c143:656:2260:f5bd) (Quit: Client closed)
11:07:56 seydar joins (~seydar@154-27-113-252.starry-inc.net)
11:09:13 shriekingnoise joins (~shrieking@201.231.16.156)
11:11:28 liz joins (~liz@host109-151-125-217.range109-151.btcentralplus.com)
11:12:57 <abastro[m]> Well I experienced it being confused with ghc-options field, but never with the dependencies
11:13:23 <abastro[m]> Different dependencies for multiple components were fine to be actually
11:13:25 jgeerds joins (~jgeerds@d5364b87.access.ecotel.net)
11:13:30 <abastro[m]> So I wonder why your case is happening
11:13:39 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 256 seconds)
11:16:52 merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
11:17:36 ub joins (~Thunderbi@p200300ecdf1588f29c6b5cc0b4490e88.dip0.t-ipconnect.de)
11:18:40 <tomsmeding> maybe ghc 9.2.1 is too new?
11:22:12 × ub quits (~Thunderbi@p200300ecdf1588f29c6b5cc0b4490e88.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
11:24:26 × merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 272 seconds)
11:27:21 × ccntrq quits (~Thunderbi@imx92-1-78-204-187-6.fbx.proxad.net) (Ping timeout: 248 seconds)
11:28:29 <pavonia> Debugging a parser exception "Maybe.fromJust: Nothing" in a 6MB data file, yay
11:28:45 <tomsmeding> HasCallStack all the things
11:29:48 <pavonia> It just tells me the function producing the error, but no information about the input
11:30:54 × glguy quits (x@libera/staff/glguy) (Read error: Connection reset by peer)
11:31:05 × haskellberryfinn quits (~nut@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 248 seconds)
11:32:35 glguy joins (x@libera/staff/glguy)
11:34:01 <abastro[m]> tomsmeding: I am using ghc 9.2.2
11:34:13 <abastro[m]> It works well.. with HLS 1.6.1.1
11:34:19 <abastro[m]> Wait, are you using 1.6.1.0?
11:34:49 <tomsmeding> yes, but self-compiled
11:34:51 × tabemann quits (~travisb@2600:1700:7990:24e0:77bc:a0c0:b3f2:8f7c) (Remote host closed the connection)
11:35:04 tabemann joins (~travisb@2600:1700:7990:24e0:da3f:51e6:d535:6e76)
11:35:10 <tomsmeding> I can retry using ghc 9.2.2
11:37:39 <abastro[m]> 1.6.1.0 doesn't work on ghc 9.2+ tomsmeding
11:37:51 <tomsmeding> oh crap sorry
11:37:54 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
11:37:55 <tomsmeding> I'm running HLS HEAD
11:37:56 <abastro[m]> Oh you mean you are using 1.6.1.1?
11:38:01 <tomsmeding> because otherwise it doesn't compile on 9.2.2
11:38:01 <abastro[m]> I see
11:38:15 jakalx joins (~jakalx@base.jakalx.net)
11:38:18 <tomsmeding> no the only difference between 1.6.1.1 and 1.6.1.0 is the addition of a cabal flag for compiling dynamically linked
11:38:18 <abastro[m]> Hmm yeah, I forgot that lol
11:38:30 <tomsmeding> so that's irrelevant here if I self-compile
11:39:02 <abastro[m]> Well I mean, 1.6.1.0 did not recognize the `with-compiler:` field of cabal.project
11:39:14 <tomsmeding> wa-
11:39:21 <abastro[m]> I recommend you to do try 9.2.2 for good measure
11:39:57 <tomsmeding> $ git diff 1.6.1.0..1.6.1.1 --stat -> .github/... ; ChangeLog.md ; docs/troubleshooting.md ; haskell-language-server.cabal
11:40:12 <tomsmeding> and the diff in the .cabal is literally the addition of a flag
11:41:54 <tomsmeding> 9.2.2 seems to work...?
11:43:22 <tomsmeding> the command-line test invocation completely fails with a bunch of internal errors, but in the editor as LSP server it seems to work
11:43:23 <tomsmeding> ¯\_(ツ)_/¯
11:53:39 xff0x joins (~xff0x@i121-117-52-147.s41.a013.ap.plala.or.jp)
11:54:28 × aeka quits (~aeka@user/hiruji) (Ping timeout: 260 seconds)
11:58:29 merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
11:59:47 × littlebobeep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Quit: leaving)
12:00:05 littlebobeep joins (~alMalsamo@gateway/tor-sasl/almalsamo)
12:02:08 × DNH quits (~DNH@2a02:8108:1100:16d8:c02d:dd64:a284:8819) (Quit: My MacBook has gone to sleep. ZZZzzz…)
12:02:08 aeka joins (~aeka@2606:6080:1001:13:a777:ff73:dfdc:3ab0)
12:04:24 × MajorBiscuit quits (~MajorBisc@wlan-145-94-161-127.wlan.tudelft.nl) (Ping timeout: 246 seconds)
12:05:45 DNH joins (~DNH@2a02:8108:1100:16d8:c02d:dd64:a284:8819)
12:05:55 MajorBiscuit joins (~MajorBisc@wlan-145-94-161-127.wlan.tudelft.nl)
12:06:23 × yauhsien quits (~yauhsien@61-231-21-149.dynamic-ip.hinet.net) (Remote host closed the connection)
12:07:04 yauhsien joins (~yauhsien@61-231-21-149.dynamic-ip.hinet.net)
12:10:15 × FragByte quits (~christian@user/fragbyte) (Quit: Quit)
12:12:13 FragByte joins (~christian@user/fragbyte)
12:13:47 krappix joins (~krappix@nat-eduroam-76-gw-01-lne.lille.inria.fr)
12:17:34 × frost quits (~frost@user/frost) (Quit: Client closed)
12:19:01 <abastro[m]> Oh meh
12:19:18 <abastro[m]> Idk why cabal.project reading in 1.6.1.0 did not work for me hmm
12:23:45 cfricke joins (~cfricke@user/cfricke)
12:24:34 × MajorBiscuit quits (~MajorBisc@wlan-145-94-161-127.wlan.tudelft.nl) (Ping timeout: 268 seconds)
12:24:48 × dextaa quits (~dextaa@user/dextaa) (Remote host closed the connection)
12:26:52 <maerwald[m]> <tomsmeding> "the command-line test invocation..." <- typecheck?
12:26:53 <tomsmeding> that particular part did work for me :p
12:27:16 <tomsmeding> maerwald[m]: what I meant is running 'haskell-language-server-9.2.2' in my shell
12:27:20 <tomsmeding> not sure what you're asking
12:27:22 __monty__ joins (~toonn@user/toonn)
12:27:42 coot joins (~coot@213.134.190.95)
12:28:08 <maerwald[m]> There are subcommands
12:28:45 <tomsmeding> TIL
12:28:52 <tomsmeding> seems the default is 'typecheck'
12:29:18 dextaa joins (~dextaa@user/dextaa)
12:30:42 <krappix> Hello all I want to understand how this project `fortran-src` write the output when I use it to get an AST `fortran-src stop_message.f`. `stop_message.f`obtained from here https://people.sc.fsu.edu/~jburkardt/f77_src/f77/stop_message.f . The output is something like this https://dpaste.org/PzXfd/raw and the project is
12:30:42 <krappix> https://github.com/camfort/fortran-src . My question is how I can change this output in XML if Haskell can do that ?
12:41:42 × jgeerds quits (~jgeerds@d5364b87.access.ecotel.net) (Ping timeout: 272 seconds)
12:42:24 fr33domlover joins (~fr33@5.102.204.220)
12:42:50 Guest89 joins (~Guest89@2a01:41e1:4454:c00:c143:656:2260:f5bd)
12:50:33 × Pickchea quits (~private@user/pickchea) (Ping timeout: 248 seconds)
12:56:27 × dextaa quits (~dextaa@user/dextaa) (Remote host closed the connection)
12:56:27 × gentauro quits (~gentauro@user/gentauro) (Read error: Connection reset by peer)
13:00:40 × mikoto-chan quits (~mikoto-ch@213.177.151.239) (Ping timeout: 260 seconds)
13:02:05 gentauro joins (~gentauro@user/gentauro)
13:02:31 mikoto-chan joins (~mikoto-ch@213.177.151.239)
13:03:11 × krappix quits (~krappix@nat-eduroam-76-gw-01-lne.lille.inria.fr) (Quit: Client closed)
13:03:25 × Neuromancer quits (~Neuromanc@user/neuromancer) (Ping timeout: 240 seconds)
13:03:52 × cosimone quits (~user@93-47-228-79.ip115.fastwebnet.it) (Remote host closed the connection)
13:06:20 krappix joins (~krappix@nat-eduroam-76-gw-01-lne.lille.inria.fr)
13:07:15 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
13:07:41 xkuru joins (~xkuru@user/xkuru)
13:08:08 jgeerds joins (~jgeerds@d5364b87.access.ecotel.net)
13:08:46 seydar joins (~seydar@154-27-113-252.starry-inc.net)
13:09:35 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds)
13:11:30 × liz quits (~liz@host109-151-125-217.range109-151.btcentralplus.com) (Quit: Lost terminal)
13:12:36 azimut joins (~azimut@gateway/tor-sasl/azimut)
13:13:47 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 256 seconds)
13:14:17 frost joins (~frost@user/frost)
13:15:39 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
13:17:11 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 256 seconds)
13:19:57 ystael joins (~ystael@user/ystael)
13:20:00 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 246 seconds)
13:21:36 × jgeerds quits (~jgeerds@d5364b87.access.ecotel.net) (Ping timeout: 272 seconds)
13:22:34 seydar joins (~seydar@154-27-113-252.starry-inc.net)
13:22:57 dextaa joins (~dextaa@user/dextaa)
13:23:09 × _________ quits (~nobody@user/noodly) (Ping timeout: 268 seconds)
13:25:59 × gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving)
13:27:18 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 272 seconds)
13:27:18 × cheater quits (~Username@user/cheater) (Ping timeout: 272 seconds)
13:30:45 goepsilongo joins (~chacho@2603-7000-ab00-62ed-0000-0000-0000-0bd0.res6.spectrum.com)
13:31:44 zebrag joins (~chris@user/zebrag)
13:32:57 × deadmarshal_ quits (~deadmarsh@95.38.116.104) (Ping timeout: 246 seconds)
13:34:28 Guest|59 joins (~Guest|59@wf0460.dip.tu-dresden.de)
13:36:58 seydar joins (~seydar@154-27-113-252.starry-inc.net)
13:38:41 haskellberryfinn joins (~nut@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
13:41:21 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 246 seconds)
13:42:55 cheater joins (~Username@user/cheater)
13:46:21 × frost quits (~frost@user/frost) (Quit: Client closed)
13:46:39 × Guest|59 quits (~Guest|59@wf0460.dip.tu-dresden.de) (Quit: Connection closed)
13:47:07 seydar joins (~seydar@154-27-113-252.starry-inc.net)
13:48:19 abastro joins (~abab9579@220.75.216.63)
13:52:00 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 272 seconds)
13:53:50 × abastro quits (~abab9579@220.75.216.63) (Remote host closed the connection)
13:55:25 × yauhsien quits (~yauhsien@61-231-21-149.dynamic-ip.hinet.net) (Remote host closed the connection)
13:55:59 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Quit: Leaving)
13:56:32 biberu\ joins (~biberu@user/biberu)
13:57:25 yauhsien joins (~yauhsien@61-231-21-149.dynamic-ip.hinet.net)
13:57:35 geekosaur joins (~geekosaur@xmonad/geekosaur)
13:59:24 × biberu quits (~biberu@user/biberu) (Ping timeout: 240 seconds)
14:00:35 biberu joins (~biberu@user/biberu)
14:00:49 × biberu\ quits (~biberu@user/biberu) (Ping timeout: 256 seconds)
14:01:23 Sgeo joins (~Sgeo@user/sgeo)
14:01:38 seydar joins (~seydar@154-27-113-252.starry-inc.net)
14:02:06 × krappix quits (~krappix@nat-eduroam-76-gw-01-lne.lille.inria.fr) (Quit: Client closed)
14:02:37 × yauhsien quits (~yauhsien@61-231-21-149.dynamic-ip.hinet.net) (Ping timeout: 268 seconds)
14:03:24 bontaq joins (~user@ool-45779fe5.dyn.optonline.net)
14:05:02 CiaoSen joins (~Jura@p200300c9572d40002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
14:06:17 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 248 seconds)
14:06:49 razetime joins (~quassel@117.254.34.143)
14:09:08 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:10cd:909d:df46:ee8c) (Quit: WeeChat 2.8)
14:12:39 motherfsck joins (~motherfsc@user/motherfsck)
14:15:39 MajorBiscuit joins (~MajorBisc@wlan-145-94-161-127.wlan.tudelft.nl)
14:16:21 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
14:17:41 Akiva joins (~Akiva@user/Akiva)
14:21:07 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 268 seconds)
14:21:57 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Quit: WeeChat 3.4.1)
14:22:01 cosimone joins (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20)
14:23:40 jpds joins (~jpds@gateway/tor-sasl/jpds)
14:23:51 <lechner> Hi, what are package registration files, please? https://cabal.readthedocs.io/en/3.4/setup-commands.html#cmdoption-runhaskell-Setup.hs-register-gen-pkg-config
14:24:49 <geekosaur> they look a lot like cabal files. go look inside any package database to see what one looks like
14:27:02 <geekosaur> they contain all the information needed by the package database for a package. you normally manipulate them with `ghc-pkg`
14:27:45 hololeap_ is now known as hololeap
14:32:01 × razetime quits (~quassel@117.254.34.143) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
14:32:47 × benin quits (~benin@183.82.204.110) (Quit: The Lounge - https://thelounge.chat)
14:32:57 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 248 seconds)
14:35:01 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
14:36:19 nun13 joins (~nun@61.140.162.8)
14:37:09 × merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 268 seconds)
14:37:37 merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
14:40:37 × mncheckm quits (~mncheck@193.224.205.254) (Remote host closed the connection)
14:40:37 × mncheck quits (~mncheck@193.224.205.254) (Remote host closed the connection)
14:40:51 × haskellberryfinn quits (~nut@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 246 seconds)
14:42:45 × merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
14:43:10 merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
14:48:25 × merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
14:48:44 merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
14:52:29 × zaquest quits (~notzaques@5.130.79.72) (Remote host closed the connection)
14:53:44 zaquest joins (~notzaques@5.130.79.72)
14:55:34 gehmehgeh joins (~user@user/gehmehgeh)
14:56:53 × pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Ping timeout: 268 seconds)
14:57:21 pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
14:57:25 deadmarshal_ joins (~deadmarsh@95.38.116.104)
14:58:37 × merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
15:02:18 × deadmarshal_ quits (~deadmarsh@95.38.116.104) (Ping timeout: 272 seconds)
15:02:39 × Guest89 quits (~Guest89@2a01:41e1:4454:c00:c143:656:2260:f5bd) (Quit: Client closed)
15:03:23 × lambdabot quits (~lambdabot@haskell/bot/lambdabot) (Ping timeout: 260 seconds)
15:04:43 jumper149 joins (~jumper149@base.felixspringer.xyz)
15:04:53 <jumper149> Is the package search on Hackage broken for anyone else?
15:06:04 <geekosaur> worked for melast night. it just works differently now
15:06:33 × pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Ping timeout: 256 seconds)
15:06:33 <geekosaur> it used to load the whole package database into your browser and search as you typed, now you have to hit return and the backend does the search
15:07:31 <jumper149> Ah, firefox works.
15:08:00 <geekosaur> I used chrome
15:08:19 <jumper149> I guess there is some problem with qutebrowser/QtWebEngine
15:09:07 edro is now known as edr
15:10:29 × cdman quits (~dcm@user/dmc/x-4369397) (Quit: Leaving)
15:10:44 <janus> jumper149: i am the one who did these changes
15:10:57 yauhsien joins (~yauhsien@61-231-21-149.dynamic-ip.hinet.net)
15:11:01 <janus> jumper149: probably it breaks in qutebrower because i used top-level await
15:11:35 <janus> jumper149: i could try and adapt it to working on older browsers, what kinda configuration are you exactly using?
15:11:37 waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
15:11:48 <jumper149> janus: Should I open an issue for qutebrowser?
15:12:10 Guest89 joins (~Guest89@2a01:41e1:4454:c00:c143:656:2260:f5bd)
15:12:12 napping joins (~brandon@65.128.49.110)
15:12:25 <jumper149> janus: https://github.com/jumper149/dotfiles/tree/master/.config/qutebrowser
15:12:42 <janus> i think the qutebrowser people are already aware that they are lagging behind.. i was just not realizing how many people browse hackage with weird browsers
15:13:00 <janus> just had a user complain that it doesn't work on Elinks, so i am working on a patch such that it will
15:13:37 <jumper149> janus: Actually Hackage was one of my favorite sites to browse with qutebrowser :D
15:13:57 <janus> so essentially, i am planning to have a separate /packages/noscript-search endpoint, then that would be compatible with every single weird browser out there
15:14:09 <jumper149> Almost everything is(was?) simple HTML and also Haddock's HTML is very straightforward
15:14:24 <geekosaur> mm, /packages still works (if somewhat annoyingly)
15:14:40 <geekosaur> thyat is, the ancient interface, which *really* doesn't scale to hackage's current size
15:15:09 <janus> the /packages endpoint wasn't changed, i only worked on browse/search
15:15:51 × yauhsien quits (~yauhsien@61-231-21-149.dynamic-ip.hinet.net) (Ping timeout: 246 seconds)
15:16:12 <geekosaur> right, I'm just pointing to it as an alternative that works now if people need it
15:16:37 lortabac joins (~lortabac@2a01:e0a:541:b8f0:9916:58c:9a05:3071)
15:16:52 kaph_ joins (~kaph@dynamic-adsl-78-12-162-98.clienti.tiscali.it)
15:16:56 <napping> hypertypes looks maybe nice for handling mutually recursive AST types. Any comments before I try it out?
15:17:19 <janus> jumper149: the issue with the old browse/search pages is that it was rendering the full list of 19k packages on the server, and then sending that to the client for pagination on the client
15:18:08 <janus> jumper149: for people with no javascript, it degraded decently, into a giant table. a server side rendered giant table is what i am to provide with /packages/noscript-search
15:18:15 <geekosaur> my poor little laptop was less than amused
15:18:24 <jumper149> janus: Ah yeah, I noticed that :D I guess that really did need the improvement
15:21:20 <janus> jumper149: so here is what i have been working on last night, as you can see it is just a plain multi-part form with no js: https://github.com/ysangkok/hackage-server/commit/5cd00fdcdfad53ac984d6f2237ae5255276f12f8?w=1#diff-9959c6367bd8024b3f095b5b2ab0e689f726b40564bc1128a35db00e0f6c2a87
15:22:02 <janus> and it uses <select> to configure the sorting options, which works great in Elinks
15:22:07 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
15:23:25 <jumper149> janus: I'm not sure what is happening on elinks, but maybe I should clarify.
15:23:47 <janus> sure, i'd be happy to hear any suggestions
15:23:48 <jumper149> janus: On qutebrowser, when I do a search I don't get a single hit.
15:24:38 <janus> right, and it is probably because the javascript i have written is a bit too new. Mikolaj (ManOfLetters) had a problem like this
15:25:14 <jumper149> Oh, I was just making sure, that got across ^^
15:25:34 <janus> so i realize you don't fall into the 'noscript' bucket, i am just trying to explain how i will make sure nobody gets left behind at all. because we had a bug report from a blind user that uses Elinks
15:27:18 <janus> it would probably be worthwhile to avoid top-level await too, if that is the only feature that is too new. it only has 84% penetration: https://caniuse.com/?search=top%20level%20await
15:27:35 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
15:27:41 × DNH quits (~DNH@2a02:8108:1100:16d8:c02d:dd64:a284:8819) (Quit: My MacBook has gone to sleep. ZZZzzz…)
15:27:53 <jumper149> I can confirm, that the "Advanced Options" also don't currently work on qutebrowser.
15:28:38 <jumper149> But I guess the change you mentioned takes care of that.
15:29:26 <janus> i think what is happening is that qutebrowser rejects all of browse.js once it sees the top-level await, which is a new syntactical construct
15:30:01 × jmct_ quits (sid160793@id-160793.tinside.irccloud.com) ()
15:30:20 jmct joins (sid160793@id-160793.tinside.irccloud.com)
15:32:13 DNH joins (~DNH@2a02:8108:1100:16d8:c02d:dd64:a284:8819)
15:35:56 razetime joins (~quassel@117.207.16.47)
15:39:01 lambdabot joins (~lambdabot@silicon.int-e.eu)
15:39:01 × lambdabot quits (~lambdabot@silicon.int-e.eu) (Changing host)
15:39:01 lambdabot joins (~lambdabot@haskell/bot/lambdabot)
15:40:30 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:9916:58c:9a05:3071) (Quit: WeeChat 2.8)
15:41:08 _________ joins (~nobody@user/noodly)
15:45:36 × jumper149 quits (~jumper149@base.felixspringer.xyz) (Ping timeout: 268 seconds)
15:46:22 jumper149 joins (~jumper149@base.felixspringer.xyz)
15:48:49 × jinsun quits (~jinsun@user/jinsun) (Read error: Connection reset by peer)
15:50:08 × foul_owl quits (~kerry@23.82.193.88) (Ping timeout: 260 seconds)
15:50:49 _ht joins (~quassel@231-169-21-31.ftth.glasoperator.nl)
15:51:19 jinsun joins (~jinsun@user/jinsun)
15:52:47 × coot quits (~coot@213.134.190.95) (Quit: coot)
15:53:30 × jumper149 quits (~jumper149@base.felixspringer.xyz) (Quit: WeeChat 3.3)
15:57:27 Guest5 joins (~Guest5@ppp079166066114.access.hol.gr)
15:57:29 jumper149 joins (~jumper149@base.felixspringer.xyz)
15:57:39 <shapr> Anyone know enough about hpc to know if I can call it from any old Haskell program and use the results to possibly call it again?
15:57:58 <shapr> I want to try hooking code coverage into QuickCheck / Hedgehog
15:58:35 × Guest89 quits (~Guest89@2a01:41e1:4454:c00:c143:656:2260:f5bd) (Quit: Client closed)
15:59:10 × bontaq quits (~user@ool-45779fe5.dyn.optonline.net) (Remote host closed the connection)
16:00:59 ec joins (~ec@gateway/tor-sasl/ec)
16:02:29 seydar joins (~seydar@154-27-113-252.starry-inc.net)
16:03:35 × CiaoSen quits (~Jura@p200300c9572d40002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
16:04:40 lortabac joins (~lortabac@2a01:e0a:541:b8f0:908b:fdde:9e41:1717)
16:04:46 <dsal> Like coverage-oriented fuzzing? That'd be my dream. :)
16:05:50 foul_owl joins (~kerry@23.82.193.88)
16:05:57 × cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.4.1)
16:07:12 <shapr> dsal: yes, last night I was reading https://danluu.com/testing/ and thought it'd be fun to try qc+coverage
16:07:36 <shapr> I'll move this to #haskell-in-depth
16:09:43 × odnes quits (~odnes@5-203-246-201.pat.nym.cosmote.net) (Quit: Leaving)
16:11:20 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 272 seconds)
16:14:35 × alp_ quits (~alp@user/alp) (Ping timeout: 268 seconds)
16:16:14 × Guest5 quits (~Guest5@ppp079166066114.access.hol.gr) (Quit: Client closed)
16:17:04 seydar joins (~seydar@154-27-113-252.starry-inc.net)
16:18:25 merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
16:21:55 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 240 seconds)
16:21:59 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 268 seconds)
16:22:15 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
16:24:07 jpds joins (~jpds@gateway/tor-sasl/jpds)
16:24:59 ec joins (~ec@gateway/tor-sasl/ec)
16:25:44 alp_ joins (~alp@user/alp)
16:29:17 × merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
16:30:44 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
16:31:23 × rembo10 quits (~rembo10@main.remulis.com) (Quit: ZNC 1.8.2 - https://znc.in)
16:32:17 rembo10 joins (~rembo10@main.remulis.com)
16:32:46 × DNH quits (~DNH@2a02:8108:1100:16d8:c02d:dd64:a284:8819) (Quit: My MacBook has gone to sleep. ZZZzzz…)
16:33:15 × fef quits (~thedawn@user/thedawn) (Ping timeout: 240 seconds)
16:33:27 × ehammarstrom quits (~ehammarst@62-20-203-39-no182.tbcn.telia.com) (Ping timeout: 260 seconds)
16:36:55 cfricke joins (~cfricke@user/cfricke)
16:39:53 merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
16:39:53 × uncomfy quits (~uncomfy@27.110.174.130) (Remote host closed the connection)
16:43:50 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:908b:fdde:9e41:1717) (Quit: WeeChat 2.8)
16:44:11 × MajorBiscuit quits (~MajorBisc@wlan-145-94-161-127.wlan.tudelft.nl) (Ping timeout: 268 seconds)
16:46:01 fef joins (~thedawn@user/thedawn)
16:47:28 × mikoto-chan quits (~mikoto-ch@213.177.151.239) (Read error: Connection reset by peer)
16:48:00 mikoto-chan joins (~mikoto-ch@213.177.151.239)
16:49:03 × merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 260 seconds)
16:58:59 × theproffesor quits (~theprofff@user/theproffesor) (Ping timeout: 268 seconds)
17:01:55 × fef quits (~thedawn@user/thedawn) (Ping timeout: 240 seconds)
17:04:43 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
17:09:14 econo joins (uid147250@user/econo)
17:12:33 × raym quits (~raym@user/raym) (Ping timeout: 268 seconds)
17:14:00 × razetime quits (~quassel@117.207.16.47) (Remote host closed the connection)
17:14:11 × sander quits (~sander@user/sander) (Quit: So long! :))
17:14:28 × mbuf quits (~Shakthi@122.164.195.88) (Quit: Leaving)
17:14:40 jakalx parts (~jakalx@base.jakalx.net) ()
17:14:48 fef joins (~thedawn@user/thedawn)
17:15:49 tzh joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net)
17:16:07 sander joins (~sander@user/sander)
17:16:07 jakalx joins (~jakalx@base.jakalx.net)
17:18:45 pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
17:19:40 × zeenk quits (~zeenk@2a02:2f04:a313:d600:8d26:ec9f:3ff6:fc94) (Quit: Konversation terminated!)
17:20:56 × cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.4.1)
17:22:37 Inst joins (~Liam@c-98-208-218-119.hsd1.fl.comcast.net)
17:24:51 × sander quits (~sander@user/sander) (Quit: So long! :))
17:28:19 sander joins (~sander@user/sander)
17:40:42 abhixec joins (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net)
17:56:30 chddr1 joins (~Thunderbi@91.226.34.187)
17:57:30 raym joins (~raym@user/raym)
17:58:24 <Inst> i finally made my first haskell program that does anything!
17:58:28 × chddr quits (~Thunderbi@91.226.35.164) (Ping timeout: 260 seconds)
17:58:28 chddr1 is now known as chddr
17:58:37 <Inst> converts a lined wordlist to a 6^6 diceware
18:00:14 <Franciman> i'm trying to outperform haskell, instead
18:00:17 <Franciman> it's a breeze to do
18:01:39 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
18:01:45 × vpan quits (~0@212.117.1.172) (Quit: Leaving.)
18:06:38 × chele quits (~chele@user/chele) (Remote host closed the connection)
18:09:19 seydar joins (~seydar@154-27-113-252.starry-inc.net)
18:10:04 [_] joins (~itchyjunk@user/itchyjunk/x-7353470)
18:10:07 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer)
18:11:05 [_] is now known as [itchyjunk]
18:11:35 × fef quits (~thedawn@user/thedawn) (Ping timeout: 240 seconds)
18:12:15 × redb quits (~nmh@136.49.49.211) (Ping timeout: 246 seconds)
18:12:37 ub joins (~Thunderbi@p200300ecdf1588f2984ffad2347eabc0.dip0.t-ipconnect.de)
18:12:41 fef joins (~thedawn@user/thedawn)
18:13:12 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
18:13:40 <maerwald> what
18:14:24 <monochrom> I think the idea is that it is trivial to get better performance by hating laziness.
18:14:32 <Inst> haskell isn't high performance
18:14:37 <Inst> it's high correctness and high productivity
18:14:47 <maerwald> monochrom: hate?
18:14:59 <maerwald> ah, you mean *negative production experience*
18:15:04 <maerwald> :P
18:15:10 <monochrom> discriminating against. refusing to support. or support but second class. etc.
18:15:25 <maerwald> well, Idris and Mu work fine with strictness
18:15:44 <Inst> btw, maerwald, any thoughts on selling Haskell to middle management?
18:15:54 <maerwald> Inst: I never sell haskell to anyone
18:16:02 <maerwald> because you need to be all in
18:16:03 <Inst> Mu is the best example since Barclays or Standard Chartered (can't remember which) trained all their traders in Haskell
18:16:09 <maerwald> they either are already or they are not
18:16:22 <Inst> "Control your IT: Haskell for Management" in the business section of a bookstore
18:16:51 <maerwald> yes, Standard Charterted talked to GHC devs before they came up with their own compiler
18:16:52 <monochrom> Do you know of a way to implement immutable FIFO queue with O(1)-time operations without laziness?
18:17:03 <Inst> iirc mu is strict by default
18:17:06 <maerwald> it appears there wasn't enough overlap
18:17:23 <maerwald> and GHC wasn't able to deliver their needs
18:17:53 <maerwald> Inst: https://www.youtube.com/watch?v=A70SN7vFsKU
18:17:54 <monochrom> I may jump ship and start to prefer eagerness (in the context of purity) if I know how to do that.
18:18:15 <Inst> laziness is just an awesome language feature
18:18:20 <Inst> it's not just very practical
18:18:45 <maerwald> Inst: some people argue laziness is more interesting for compiler optimization than it is for end-users
18:18:46 <Inst> Xie Ningning is cute
18:19:11 <maerwald> as a reasoning platform, I agree that laziness can be quite awful beyond simplistic teaching snippets
18:19:30 <maerwald> but the topic is somewhat complicated as a whole
18:20:06 <Franciman> next time somebody shows me how to have an elegant fix in strict languages
18:20:07 <maerwald> I'm not sure eagerness by default is a better choice for a *general purpose* language. But for certain use cases, it very much is.
18:20:14 <Franciman> i may start to prefer eagerness
18:20:48 <Inst> i'm more wondering if if you roll an educational prelude, whether you'd set up strict
18:20:55 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 256 seconds)
18:21:10 <maerwald> Inst: laziness issues usually happen in complex code, not in small examples
18:21:25 <Inst> laziness issues: exploitation of laziness?
18:21:35 <maerwald> you don't have complex code when you teach Haskell
18:21:36 <Franciman> i mean, fix f = let x = f x in x
18:21:45 <Inst> i mean, i get the feeling it'd be better, if you had an educational prelude, to set strict by default, then drop it once you start teaching laziness
18:22:14 <Inst> you're saying laziness wouldn't provide an issue
18:22:16 <Franciman> i dare you to do better in an eager language
18:22:32 <maerwald> laziness is probably much better for teaching... as a high-level concept it's quite cool. It breaks down once you have complex programs and you need to reason about the *exact* behavior (the allocations)
18:23:32 <Franciman> as a whole, i probably like optimal evaluation more. I mean, the whole concept of laziness is sparing the useless computations right?
18:23:38 <Franciman> well optimal evaluation does it better
18:23:38 <maerwald> naive debugging won't help you much there
18:23:46 <Franciman> but, optimal evaluation is DAYUMN HARD
18:24:03 <monochrom> All of "laziness is easier for beginners", "eagerness is easier for beginners", "no no no, call-by-name is easier for beginners" are prejudiced.
18:24:28 <maerwald> but hey, we're complaining on a high-level here. We want haskell to do everything: abstract nonsense and performant complex applications. Shows how much Haskell has spoiled us ;)
18:24:47 <Franciman> i wonder if you can have monochrom's favourite task in optimal evaluation
18:24:53 <Franciman> O(1)-time operations on a fifo queue
18:25:13 <dolio> Doesn't optimal save strictly more work than lazy?
18:25:21 <monochrom> An absolute beginner (one without any previous programming exposure) is equally likely to prefer any of the three.
18:25:36 <Franciman> dolio: would the same implementation work, hence?
18:25:51 <dolio> Presumably.
18:25:53 <Franciman> it may trigger different computations
18:25:53 <monochrom> And a Haskell beginner who is not a programming beginner is necessarily prejudiced towards whatever the previous language does.
18:26:04 <Franciman> yeah
18:26:11 <Franciman> it should work
18:26:17 <Franciman> maybe it becomes O(0)
18:26:19 <Franciman> XD
18:26:25 <dolio> If it doesn't avoid unnecessary work, then it's not saving strictly more work.
18:26:37 <Franciman> because we don't have an optimal evaluation implementation
18:26:42 <Franciman> so it's impossible to implement it
18:26:43 <dolio> Or, unnecessary under lazy evaluation.
18:26:58 seydar joins (~seydar@154-27-113-252.starry-inc.net)
18:27:11 <Franciman> wait we have HVM.
18:27:32 <monochrom> How do I do optimal evaluation?
18:27:54 <Franciman> there is a book by asperti on the subject
18:28:04 <monochrom> Yikes. OK.
18:28:07 <Franciman> and it hints that optimal evaluation is linked to linear logic
18:29:25 <Franciman> http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.465.2149&rep=rep1&type=pdf
18:29:41 <monochrom> Thanks.
18:29:52 <dolio> It's not terribly clear that there are non-gimmick examples where it's actually meaningfully better.
18:29:56 <Franciman> this is an implementation
18:30:07 <Franciman> i can't find the book hmm
18:30:34 <monochrom> I probably won't be reading the book either.
18:30:49 <Franciman> monochrom: https://www.cambridge.org/catalogue/catalogue.asp?isbn=9780521621120
18:31:38 <Franciman> ah ok
18:31:55 <monochrom> Oh, CUP books are very affordable though.
18:31:56 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 272 seconds)
18:32:00 <Franciman> supercombinators
18:32:34 coot joins (~coot@213.134.190.95)
18:32:48 <Franciman> as dolio says, it's a controversial subject
18:33:42 <dolio> Like, it's good if you want to lambda-encode every data type. However, that's just fixing something you decided to do for philosophical reasons or something.
18:34:23 <dolio> In a considerably more complicated way.
18:34:45 <Franciman> it would be good for system f to be practically used
18:34:47 <Franciman> yes
18:35:54 <napping> strictness collapses in a total language. Not sure Idris is good for beginners, but perhaps?
18:36:10 DNH joins (~DNH@2a02:8108:1100:16d8:c02d:dd64:a284:8819)
18:37:36 <Franciman> dolio: would proof search benefit from it tho?
18:37:46 <monochrom> Wait, what does "strictness collapses" mean?
18:37:48 <Franciman> i don't think so. So it's not relevant for Theorem Provers either
18:38:08 <napping> I mean you can't observe different results between strict and lazy evaluation in a total language
18:38:12 <dolio> I don't see the connection.
18:38:25 × ub quits (~Thunderbi@p200300ecdf1588f2984ffad2347eabc0.dip0.t-ipconnect.de) (Quit: ub)
18:38:33 <monochrom> Ah right, but people start to observe time and space consumptions...
18:38:47 ub joins (~Thunderbi@p200300ecdf1588f2984ffad2347eabc0.dip0.t-ipconnect.de)
18:39:12 <Franciman> the nice thing about laziness is that it allows you to decide wether to mention or to use a term
18:39:13 <dolio> Right, that's exactly why it's simplistic to say that 'data' should be eager and 'codata' is for lazy stuff.
18:39:35 <Franciman> so you can mention infinitely looping things
18:39:42 <Franciman> and evaluate just a bit of them
18:39:56 <napping> If you postulate beginning programs wouldn't have a preference, your beginners are writing small enough programs to not care about such operational concerns
18:39:58 <Franciman> that's intriguing... Composing infinitely looping things, in a way that actually won't loop forever
18:40:36 <Franciman> o1lo0lol1o[m]: why is it a simplistic view?
18:40:38 <Franciman> ops
18:40:39 <monochrom> OK yeah. I don't think Idris is difficult for beginners.
18:40:40 <Franciman> sorry
18:40:42 <Franciman> dolio: ^
18:41:17 <dolio> Because just because something is finite doesn't mean it's best for it to be barfed into memory in its entirety immediately.
18:41:35 <o1lo0lol1o[m]> Franciman: Pff, who you calling simplistic!
18:41:42 <monochrom> haha
18:41:45 <Franciman> :)
18:41:49 redb joins (~nmh@136.49.49.211)
18:42:17 <napping> yes, 2^2^2^2^2^2^2^2 is trivially total, but you shouldn't eagerly evaluate it
18:42:18 theproffesor joins (~theprofff@user/theproffesor)
18:42:28 <Franciman> dolio: but categorical semantics are cleaner that way
18:42:41 <Franciman> i mean that's where the simpistic view is coming from
18:43:03 × fr33domlover quits (~fr33@5.102.204.220) (Ping timeout: 246 seconds)
18:43:20 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
18:43:35 <Franciman> well. I'll be leaving for the night
18:43:39 <Franciman> have a nice lazy time!
18:44:54 <dolio> No, it comes from people conflating data in total languages with superficially similar definitions in eager partial languages, and similarly with codata.
18:45:00 <napping> and sometimes a useful trick in total programming - "no, don't evaluate *forever*, just check if it returns a result before 2^2^2^2^2^2^2^2 steps"
18:45:40 × ub quits (~Thunderbi@p200300ecdf1588f2984ffad2347eabc0.dip0.t-ipconnect.de) (Quit: ub)
18:46:12 × redb quits (~nmh@136.49.49.211) (Ping timeout: 246 seconds)
18:46:50 geranim0 joins (~geranim0@modemcable242.171-178-173.mc.videotron.ca)
18:46:50 bob joins (~geranim0@modemcable242.171-178-173.mc.videotron.ca)
18:47:06 × bob quits (~geranim0@modemcable242.171-178-173.mc.videotron.ca) (Read error: Connection reset by peer)
18:47:36 <monochrom> "Example 3: Suppose to represent an array as a function, considering the index as an argument. The following code contains a mergesort algorithm for this representation of arrays." :(
18:48:17 <monochrom> (It's from the technical report on optimal evaluation, "The Bologna Optimal Higher-order Machine".
18:49:07 <monochrom> So yeah gimmick example that presupposes a very stubborn philosophy...
18:49:23 <dolio> Yeah.
18:49:58 redb joins (~nmh@136.49.49.211)
18:54:55 × redb quits (~nmh@136.49.49.211) (Ping timeout: 268 seconds)
18:56:05 <dolio> That's a common thing to fixate on. Minimizataion of the number of building blocks to the exclusion of all else.
19:00:01 <dolio> Like the complaints people with a Python philosophy make here, where there are two (or more) ways to write something, and you need to choose which is nicest in each case.
19:00:21 <monochrom> Even Turing recognized "no no of course you'd better build special hardware adders instead of a Turing adder machine"...
19:06:53 <monochrom> "Tartaglia’s triangle (also and improperly known as Pascal’s triangle)." Haha, sounds like the Italians are reminding us "this was an Italian achievement, not a French achievement!"
19:07:47 seydar joins (~seydar@154-27-113-252.starry-inc.net)
19:08:10 <monochrom> But more seriously, "We just remark the use of the function “eval” to “force” the explicit evaluation of each row. This is needed in order to share this computation at later steps." You know what, I heard of a dual issue or two in lazy evaluation...
19:11:09 redb joins (~nmh@136.49.49.211)
19:12:12 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 240 seconds)
19:12:15 epolanski joins (uid312403@id-312403.helmsley.irccloud.com)
19:12:29 Henson joins (~kvirc@107-179-133-201.cpe.teksavvy.com)
19:12:56 <monochrom> The overall thesis being that, for each evaluation order, there is a use case, even in toy examples, that requires hand annotation to nudge the computer away from dumb work. None is fully automatic.
19:15:15 × redb quits (~nmh@136.49.49.211) (Ping timeout: 246 seconds)
19:17:25 seydar joins (~seydar@154-27-113-252.starry-inc.net)
19:18:05 <dolio> Yeah, my "production experience" is that you don't get something good from not thinking about the problem, regardless of default evaluation order.
19:23:17 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 268 seconds)
19:27:58 seydar joins (~seydar@154-27-113-252.starry-inc.net)
19:31:46 redb joins (~nmh@136.49.49.211)
19:32:03 × nun13 quits (~nun@61.140.162.8) (Ping timeout: 246 seconds)
19:32:41 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 248 seconds)
19:41:55 × fef quits (~thedawn@user/thedawn) (Ping timeout: 240 seconds)
19:42:17 seydar joins (~seydar@154-27-113-252.starry-inc.net)
19:42:53 vicfred joins (~vicfred@user/vicfred)
19:43:26 × vicfred quits (~vicfred@user/vicfred) (Remote host closed the connection)
19:44:26 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
19:45:01 vicfred joins (~vicfred@user/vicfred)
19:47:20 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 268 seconds)
19:47:56 × Unicorn_Princess quits (~Unicorn_P@93-103-228-248.dynamic.t-2.net) (Ping timeout: 272 seconds)
19:48:43 phma_ joins (~phma@2001:5b0:210d:6f38:47d2:1a57:a8ac:4c26)
19:48:45 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds)
19:50:03 × phma quits (~phma@2001:5b0:210d:afb8:c88d:676:78f3:7b6d) (Read error: Connection reset by peer)
19:50:44 × Topsi1 quits (~Tobias@dyndsl-095-033-091-154.ewe-ip-backbone.de) (Read error: Connection reset by peer)
19:52:29 seydar joins (~seydar@154-27-113-252.starry-inc.net)
19:52:43 Unicorn_Princess joins (~Unicorn_P@93-103-228-248.dynamic.t-2.net)
19:52:53 × redb quits (~nmh@136.49.49.211) (Ping timeout: 268 seconds)
19:55:53 × Henson quits (~kvirc@107-179-133-201.cpe.teksavvy.com) (Quit: KVIrc 5.0.0 Aria http://www.kvirc.net/)
19:55:53 <maerwald> dolio: lazy evaulation is harder to reason about in complex cases
19:56:13 <maerwald> I don't know many who disagree with that
19:56:54 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 246 seconds)
19:57:35 rekahsoft joins (~rekahsoft@cpe001b21a2fd89-cm64777ddc63a0.cpe.net.cable.rogers.com)
19:58:04 <maerwald> https://docs.idris-lang.org/en/v0.9.18.1/faq/faq.html#why-does-idris-use-eager-evaluation-rather-than-lazy
20:00:08 acidjnk joins (~acidjnk@p200300d0c7049f91e010d86dcc64fbcb.dip0.t-ipconnect.de)
20:02:21 × rekahsoft quits (~rekahsoft@cpe001b21a2fd89-cm64777ddc63a0.cpe.net.cable.rogers.com) (Remote host closed the connection)
20:02:43 rekahsoft joins (~rekahsoft@cpe001b21a2fd89-cm64777ddc63a0.cpe.net.cable.rogers.com)
20:03:06 × _ht quits (~quassel@231-169-21-31.ftth.glasoperator.nl) (Remote host closed the connection)
20:05:38 × cosimone quits (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Remote host closed the connection)
20:06:13 × chddr quits (~Thunderbi@91.226.34.187) (Ping timeout: 240 seconds)
20:06:32 seydar joins (~seydar@154-27-113-252.starry-inc.net)
20:09:27 redb joins (~nmh@136.49.49.211)
20:10:54 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 246 seconds)
20:13:21 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 246 seconds)
20:13:42 × redb quits (~nmh@136.49.49.211) (Ping timeout: 246 seconds)
20:15:20 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
20:15:21 slack1256 joins (~slack1256@191.125.227.86)
20:17:05 seydar joins (~seydar@154-27-113-252.starry-inc.net)
20:18:41 <slack1256> Is there a haskell-cafe like for stack and stack lts?
20:19:59 Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
20:21:12 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 260 seconds)
20:21:37 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 256 seconds)
20:22:44 Lord_of_Life_ is now known as Lord_of_Life
20:25:14 dextaa7 joins (~dextaa@user/dextaa)
20:25:22 redb joins (~nmh@136.49.49.211)
20:28:41 × dextaa quits (~dextaa@user/dextaa) (Ping timeout: 248 seconds)
20:28:41 dextaa7 is now known as dextaa
20:29:45 × redb quits (~nmh@136.49.49.211) (Ping timeout: 248 seconds)
20:31:08 redb joins (~nmh@136.49.49.211)
20:32:02 × gabriel_sevecek quits (~gabriel@188-167-229-200.dynamic.chello.sk) (Quit: WeeChat 3.5)
20:33:03 Guest27 joins (~Guest27@2601:281:d47f:1590::a504)
20:34:27 <Guest27> Trying to get `cabal v2-install` to dynamically link. `cabal v2-build` does it successfully but passing `--enable-executable-dynamic` to `install` still results in a static executable being built and symlinked
20:35:21 <sclv> known bug with install iirc
20:35:37 × redb quits (~nmh@136.49.49.211) (Ping timeout: 248 seconds)
20:35:41 <sclv> treats those flags as not applying properly
20:36:34 <Guest27> Is there another way to get them to apply? Having a `<pkg>.cabal` and `cabal.project` file in the root directory seems to break cabal
20:37:04 <sclv> just use build and symlink by hand?
20:37:24 <Guest27> Yee I'll just do that
20:37:30 gabriel_sevecek joins (~gabriel@188-167-229-200.dynamic.chello.sk)
20:38:33 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 246 seconds)
20:39:04 <jumper149> In the base Haddock it says, that `Word` has the same size as `Int`. So I guess they should be coercible? How can I cast one to the other?
20:40:01 × ubert quits (~Thunderbi@p200300ecdf1588f2bfd6f68985df9e03.dip0.t-ipconnect.de) (Remote host closed the connection)
20:40:14 × michalz quits (~michalz@185.246.204.122) (Remote host closed the connection)
20:40:17 <geekosaur> :t fromIntegral
20:40:18 <lambdabot> (Integral a, Num b) => a -> b
20:40:40 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
20:42:22 lavaman joins (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net)
20:42:52 <jumper149> geekosaur: That does work :) Do you know why this works, but `toEnum` doesn't?
20:44:17 [_] joins (~itchyjunk@user/itchyjunk/x-7353470)
20:44:53 <geekosaur> not offhand
20:44:56 <Guest27> :t toEnum
20:44:57 <lambdabot> Enum a => Int -> a
20:45:09 <geekosaur> toEnum does have restrictions though
20:45:35 <geekosaur> you'd use fromEnum to go the other way
20:45:57 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer)
20:46:57 <geekosaur> or did you mean something other than a type error for "doesn't"?
20:47:13 deadmarshal_ joins (~deadmarsh@95.38.116.104)
20:49:20 redb joins (~nmh@136.49.49.211)
20:51:39 × deadmarshal_ quits (~deadmarsh@95.38.116.104) (Ping timeout: 256 seconds)
20:51:56 <geekosaur> (also note that de facto Int is one bit shorter than Word)
20:51:56 <geekosaur> > 2^63 :: Int
20:51:56 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
20:51:58 <lambdabot> -9223372036854775808
20:53:35 <int-e> > Seq.length $ iterate (\a -> a <> a) (Seq.singleton ()) !! 63
20:53:37 <lambdabot> -9223372036854775808
20:53:41 geekosaur joins (~geekosaur@xmonad/geekosaur)
20:53:45 <monochrom> toEnum probably has bound checks that fromIntegral doesn't.
20:54:01 <monochrom> To a large extent Enum requires bound checks.
20:54:34 <monochrom> Also note that "same size" means same number of bits, therefore ironically not range-safe.
20:55:45 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Excess Flood)
20:55:47 allbery_b joins (~geekosaur@xmonad/geekosaur)
20:55:50 allbery_b is now known as geekosaur
20:57:39 phma_ is now known as phma
21:00:09 × machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 256 seconds)
21:01:06 × dextaa quits (~dextaa@user/dextaa) (Read error: Connection reset by peer)
21:03:14 dextaa joins (~dextaa@user/dextaa)
21:05:20 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
21:05:27 hgolden joins (~hgolden2@cpe-172-251-233-141.socal.res.rr.com)
21:06:27 × redb quits (~nmh@136.49.49.211) (Ping timeout: 260 seconds)
21:08:02 × Guest27 quits (~Guest27@2601:281:d47f:1590::a504) (Ping timeout: 250 seconds)
21:09:21 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 268 seconds)
21:10:58 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
21:14:55 × lavaman quits (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Remote host closed the connection)
21:17:52 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 272 seconds)
21:21:51 × DNH quits (~DNH@2a02:8108:1100:16d8:c02d:dd64:a284:8819) (Quit: My MacBook has gone to sleep. ZZZzzz…)
21:23:29 redb joins (~nmh@136.49.49.211)
21:23:43 × coot quits (~coot@213.134.190.95) (Ping timeout: 260 seconds)
21:25:51 neurocyte8614492 joins (~neurocyte@IP-212232093103.dynamic.medianet-world.de)
21:25:51 × neurocyte8614492 quits (~neurocyte@IP-212232093103.dynamic.medianet-world.de) (Changing host)
21:25:51 neurocyte8614492 joins (~neurocyte@user/neurocyte)
21:27:36 DNH joins (~DNH@2a02:8108:1100:16d8:c02d:dd64:a284:8819)
21:29:26 seydar joins (~seydar@154-27-113-252.starry-inc.net)
21:31:33 × redb quits (~nmh@136.49.49.211) (Ping timeout: 268 seconds)
21:39:38 lavaman joins (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net)
21:39:42 × lavaman quits (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Remote host closed the connection)
21:40:14 lavaman joins (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net)
21:41:54 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 246 seconds)
21:43:09 deadmarshal_ joins (~deadmarsh@95.38.117.122)
21:43:15 × wyrd quits (~wyrd@gateway/tor-sasl/wyrd) (Ping timeout: 240 seconds)
21:44:55 × lavaman quits (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Ping timeout: 256 seconds)
21:46:01 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
21:46:08 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
21:46:29 jpds joins (~jpds@gateway/tor-sasl/jpds)
21:48:16 × deadmarshal_ quits (~deadmarsh@95.38.117.122) (Ping timeout: 272 seconds)
21:50:03 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 268 seconds)
21:50:10 wyrd joins (~wyrd@gateway/tor-sasl/wyrd)
21:50:35 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds)
21:51:28 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
21:53:07 × acidjnk quits (~acidjnk@p200300d0c7049f91e010d86dcc64fbcb.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
21:53:23 sander is now known as sndr
21:53:29 × pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.5)
21:56:17 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
21:59:53 redb joins (~nmh@136.49.49.211)
22:04:20 × redb quits (~nmh@136.49.49.211) (Ping timeout: 260 seconds)
22:04:51 × juri_ quits (~juri@178.63.35.222) (Ping timeout: 268 seconds)
22:08:08 <o1lo0lol1o[m]> I (finally) have a problem that I need to optimize with `ad` (doesn't contain billions of parameters) and I'm finding it very difficult to pass `gradientDescent` a function it can use. Effectively, I have a single scalar representing a cost and I have a Map of parameters. These were more-or-less nicely manipulated in a State monad that I use to formulate a the constraints I'm looking to optimize.
22:08:40 × dhouthoo quits (~dhouthoo@178-117-36-167.access.telenet.be) (Quit: WeeChat 3.5)
22:09:43 <o1lo0lol1o[m]> Unfortunately, I cannot run the state monad with AD parameters because of the quantification involved ( it needs something with Num and Fractional, but has to pass in `(forall s. Reifies s Tape => [Reverse s a] -> Reverse s a)` and my state environment has no easy way to convert the `a` to a ` Reverse s a`.
22:11:26 juri_ joins (~juri@178.63.35.222)
22:12:37 <o1lo0lol1o[m]> So I did a complicated thing: I rewrote the whole `State` logic to build up a single computation `[a] -> (Map Foo a, a)` where the second parameter is the calculation of the cost and the first is the map of parameters I need to access things. now I run the state computation outside the scope of `gradientDescent... (full message at https://libera.ems.host/_matrix/media/r0/download/libera.chat/3f3114e5a785f00dd2f3e71b6be28b276653d01e)
22:15:34 <o1lo0lol1o[m]> I must be totally stupid, what's going on?
22:18:00 lavaman joins (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net)
22:18:05 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
22:18:16 redb joins (~nmh@136.49.49.211)
22:19:15 × xpika quits (~alan@n175-34-18-168.sun1.vic.optusnet.com.au) (Ping timeout: 260 seconds)
22:21:12 <jumper149> > (fromIntegral :: Int -> Word) (-2)
22:21:14 <lambdabot> 18446744073709551614
22:21:21 <jumper149> > (toEnum :: Int -> Word) (-2)
22:21:22 <lambdabot> *Exception: Enum.toEnum{Word}: tag (-2) is outside of bounds (0,184467440737...
22:21:52 <jumper149> geekosaur: monochrom: This was the actual problem I mentioned.
22:22:16 <geekosaur> well, yes
22:22:31 × mikoto-chan quits (~mikoto-ch@213.177.151.239) (Ping timeout: 260 seconds)
22:22:39 <geekosaur> make sure you actually want that kind of wraparound
22:22:51 <geekosaur> most people consider it an unpleasant surprise
22:23:04 <jumper149> Yes I want it :)
22:23:27 × redb quits (~nmh@136.49.49.211) (Ping timeout: 256 seconds)
22:23:50 <jumper149> I was still surprised, that this isn't mentioned anywhere in the `base` documentation
22:24:01 <hpc> > floor (0/0) :: Integer -- and just for fun
22:24:03 <lambdabot> -269653970229347386159395778618353710042696546841345985910145121736599013708...
22:24:21 <geekosaur> jumper149, pretty sure it's in the Report
22:24:32 <geekosaur> at least, the interaction between Enum and Bounded is
22:25:40 <jumper149> It wouldn't hurt to have a `Coercible Int Word` instance though :(
22:26:00 <geekosaur> Coercible doesn't work that way
22:26:07 <geekosaur> it only coerces through newtypes
22:26:29 <geekosaur> not types with the same RuntimeRep
22:26:32 <jumper149> > (coerce :: Int -> Word) (-2)
22:26:33 <lambdabot> error:
22:26:33 <lambdabot> • Variable not in scope: coerce :: Int -> Word
22:26:33 <lambdabot> • Perhaps you meant ‘coerced’ (imported from Control.Lens)
22:26:40 <jumper149> > import Data.Coerce
22:26:42 <lambdabot> <hint>:1:1: error: parse error on input ‘import’
22:26:56 <geekosaur> % import Data.Coerce
22:26:56 <yahb> geekosaur:
22:27:08 <jumper149> > (coerce :: Int -> Word) (-2)
22:27:09 <lambdabot> error:
22:27:09 <lambdabot> • Variable not in scope: coerce :: Int -> Word
22:27:09 <lambdabot> • Perhaps you meant ‘coerced’ (imported from Control.Lens)
22:27:12 <geekosaur> % (coerce :: Int -> Word) (-2)
22:27:12 <yahb> geekosaur: ; <interactive>:93:2: error:; * Couldn't match representation of type `Int' with that of `Word' arising from a use of `coerce'; * In the expression: coerce :: Int -> Word; In the expression: (coerce :: Int -> Word) (- 2); In an equation for `it': it = (coerce :: Int -> Word) (- 2)
22:27:33 <jumper149> > (unsafeCoerce :: Int -> Word) (-2)
22:27:35 <lambdabot> error:
22:27:35 <lambdabot> Variable not in scope: unsafeCoerce :: Int -> Word
22:27:53 <jumper149> % import Unsafe.Coerce
22:27:53 <yahb> jumper149:
22:28:00 <jumper149> % (unsafeCoerce :: Int -> Word) (-2)
22:28:00 <yahb> jumper149: 18446744073709551614
22:29:02 <monochrom> I would worry that unsafeCoerce for this purpose would cause a crash down the road.
22:30:32 <jumper149> monochrom: Understandable.
22:31:30 × gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving)
22:31:54 jumper141 joins (~jumper149@mue-88-130-59-247.dsl.tropolys.de)
22:32:00 × jumper149 quits (~jumper149@base.felixspringer.xyz) (Quit: WeeChat 3.4.1)
22:32:21 jumper149 joins (~jumper149@base.felixspringer.xyz)
22:33:39 × DNH quits (~DNH@2a02:8108:1100:16d8:c02d:dd64:a284:8819) (Quit: My MacBook has gone to sleep. ZZZzzz…)
22:34:11 xpika joins (~alan@n122-110-60-225.sun2.vic.optusnet.com.au)
22:36:09 × jumper141 quits (~jumper149@mue-88-130-59-247.dsl.tropolys.de) (Ping timeout: 248 seconds)
22:38:23 × chomwitt quits (~chomwitt@2a02:587:dc0e:4f00:e2a4:4df9:d340:7660) (Ping timeout: 260 seconds)
22:44:25 × eaii^ quits (~eaii@c-24-99-107-170.hsd1.ga.comcast.net) (Remote host closed the connection)
22:44:45 redb joins (~nmh@136.49.49.211)
22:46:31 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
22:47:01 cosimone joins (~user@93-47-228-79.ip115.fastwebnet.it)
22:49:33 × redb quits (~nmh@136.49.49.211) (Ping timeout: 260 seconds)
22:50:24 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
22:51:05 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 248 seconds)
22:54:21 seydar joins (~seydar@154-27-113-252.starry-inc.net)
22:56:46 <hololeap> what are some introduction points to learn how to get FFI to talk to python libs?
22:58:52 × jumper149 quits (~jumper149@base.felixspringer.xyz) (Quit: WeeChat 3.4.1)
23:00:37 × alp_ quits (~alp@user/alp) (Ping timeout: 240 seconds)
23:01:47 Guest84 joins (~Guest84@23.191.80.16)
23:02:14 × Guest84 quits (~Guest84@23.191.80.16) (Client Quit)
23:02:18 Guest8439 joins (~Guest84@23.191.80.16)
23:02:52 unyu joins (~pyon@user/pyon)
23:03:00 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 272 seconds)
23:04:03 × lavaman quits (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Ping timeout: 268 seconds)
23:04:57 redb joins (~nmh@136.49.49.211)
23:06:30 × Guest8439 quits (~Guest84@23.191.80.16) (Client Quit)
23:07:52 Guest912 joins (~Guest91@123203025126.ctinets.com)
23:08:34 seydar joins (~seydar@154-27-113-252.starry-inc.net)
23:09:03 × redb quits (~nmh@136.49.49.211) (Ping timeout: 246 seconds)
23:09:42 <hpc> hololeap: do you want links/guides or just an overview of what's required?
23:09:59 <hpc> ultimately you just need haskell and python to meet in the middle at the C ABI
23:10:23 <hpc> so you have python's foreign export mechanism, maybe some way to get headers out of that, and then haskell ffi import
23:10:38 <hpc> (or maybe the other way around)
23:10:53 <abastro[m]> % unsafeCoerce [1, 2] :: Int
23:10:53 <yahb> abastro[m]: -9223371488887405004
23:11:53 × zyklotomic quits (~ethan@res380d-128-61-81-124.res.gatech.edu) (Ping timeout: 248 seconds)
23:12:54 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 246 seconds)
23:13:01 × Guest912 quits (~Guest91@123203025126.ctinets.com) (Quit: Client closed)
23:13:02 <jackdk> hololeap: I am about to run out the door but if I were to try something like this it'd be by embedding a python interpreter in a Haskell progam, and using python's C bindings to puppet the embedded interpreter. Then you tell your embedded interpreter to import whatever lib you're actually using
23:13:38 <jackdk> hololeap: IIRC there are a bunch of variadic functions in the python interpreter interface, so remember to use `foreign import "capi"` to get an architecture-safe wrapper around them
23:14:07 <jackdk> hololeap: but this all sounds really cursed, and python is cursed enough as is.
23:14:09 zyklotomic joins (~ethan@res388d-128-61-94-65.res.gatech.edu)
23:14:27 <jackdk> (in Australia, it is common wisdom that if you leave the snake alone, it won't hurt you)
23:16:46 <hololeap> hm, yeah I'm not really sure where to begin. I'm not sure if I really need FFI or if I can just get a python script to emit some json as a common interface
23:17:19 <hololeap> anyway, just wondering if anyone had tried this before
23:17:36 <geekosaur> MissingPy used to be a thing
23:17:40 <geekosaur> it'slong bitrotted
23:18:41 seydar joins (~seydar@154-27-113-252.starry-inc.net)
23:19:42 × avpx quits (~nick@ec2-54-214-223-1.us-west-2.compute.amazonaws.com) (Quit: ZNC 1.8.2 - https://znc.in)
23:21:54 × xff0x quits (~xff0x@i121-117-52-147.s41.a013.ap.plala.or.jp) (Quit: xff0x)
23:23:54 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 272 seconds)
23:28:47 × geranim0 quits (~geranim0@modemcable242.171-178-173.mc.videotron.ca) (Remote host closed the connection)
23:28:54 seydar joins (~seydar@154-27-113-252.starry-inc.net)
23:30:57 lavaman joins (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net)
23:32:14 avpx joins (~nick@ec2-54-214-223-1.us-west-2.compute.amazonaws.com)
23:32:29 × avpx quits (~nick@ec2-54-214-223-1.us-west-2.compute.amazonaws.com) (Client Quit)
23:33:12 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 246 seconds)
23:33:52 yauhsien joins (~yauhsien@61-231-21-149.dynamic-ip.hinet.net)
23:35:25 redb joins (~nmh@136.49.49.211)
23:35:31 avpx joins (~nick@ec2-54-214-223-1.us-west-2.compute.amazonaws.com)
23:35:58 × avpx quits (~nick@ec2-54-214-223-1.us-west-2.compute.amazonaws.com) (Client Quit)
23:36:19 avpx joins (~nick@ec2-54-214-223-1.us-west-2.compute.amazonaws.com)
23:37:14 × avpx quits (~nick@ec2-54-214-223-1.us-west-2.compute.amazonaws.com) (Client Quit)
23:37:21 × Akiva quits (~Akiva@user/Akiva) (Ping timeout: 268 seconds)
23:38:38 ornxka joins (~ornxka@user/ornxka)
23:38:47 <ornxka> is there a graph lib/representation somewhere in base?
23:39:00 seydar joins (~seydar@154-27-113-252.starry-inc.net)
23:39:30 × redb quits (~nmh@136.49.49.211) (Ping timeout: 246 seconds)
23:40:26 × yauhsien quits (~yauhsien@61-231-21-149.dynamic-ip.hinet.net) (Ping timeout: 268 seconds)
23:40:31 sammelweis_ joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
23:41:12 <geekosaur> I don't think so. The usual recommendation is fgl
23:41:40 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Read error: Connection reset by peer)
23:42:18 <ornxka> i see, ty
23:42:40 <ornxka> incidentally that is the lib i am already using but was wondering if there was something that didnt require any extra libs
23:42:59 <geekosaur> base is not "batteries included"
23:43:21 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 248 seconds)
23:43:29 avpx joins (~nick@ec2-54-214-223-1.us-west-2.compute.amazonaws.com)
23:43:57 <ornxka> so it seems
23:44:02 <geekosaur> we try to minimize the stuff in base because the only way to upgrade it is to upgrade the compiler
23:44:35 redb joins (~nmh@136.49.49.211)
23:47:05 <hpc> in any event, depending on haskell packages isn't as scary as in other languages
23:47:23 <hololeap> what does Cabal use for its dependency tree calculations? I don't think fgl is a dependency
23:47:52 <sclv> it rolls its own tree and traversals and solver
23:48:38 <sclv> everythings packaged right here, its pretty straightforward to read https://github.com/haskell/cabal/tree/master/cabal-install-solver
23:49:09 seydar joins (~seydar@154-27-113-252.starry-inc.net)
23:49:18 <sclv> you should look at the Modular subdirectory in particular. the tree type is https://github.com/haskell/cabal/blob/master/cabal-install-solver/src/Distribution/Solver/Modular/Tree.hs
23:49:41 × redb quits (~nmh@136.49.49.211) (Ping timeout: 268 seconds)
23:51:16 <hololeap> cool
23:52:00 × avpx quits (~nick@ec2-54-214-223-1.us-west-2.compute.amazonaws.com) (Quit: ZNC 1.8.2 - https://znc.in)
23:52:38 avpx joins (~nick@ec2-54-214-223-1.us-west-2.compute.amazonaws.com)
23:54:00 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Ping timeout: 268 seconds)
23:54:49 mvk joins (~mvk@2607:fea8:5ce3:8500::9d5a)
23:59:20 seydar joins (~seydar@154-27-113-252.starry-inc.net)

All times are in UTC on 2022-04-08.