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.