2021/10/21

2021-10-21 00:01:01 +0200ArtVandelayer(~ArtVandel@ip174-68-147-20.lv.lv.cox.net)
2021-10-21 00:01:56 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Quit: FinnElija)
2021-10-21 00:05:35 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643)
2021-10-21 00:08:38 +0200rekahsoft(~rekahsoft@cpe0008a20f982f-cm64777d666260.cpe.net.cable.rogers.com)
2021-10-21 00:11:31 +0200sedeki(~textual@user/sedeki)
2021-10-21 00:20:55 +0200urdh(~urdh@user/urdh) (Quit: Boom!)
2021-10-21 00:22:43 +0200jonatan(~nate@h85-8-60-194.cust.a3fiber.se) (Ping timeout: 252 seconds)
2021-10-21 00:22:56 +0200jonatan(~nate@h85-8-60-194.cust.a3fiber.se)
2021-10-21 00:23:24 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-10-21 00:23:24 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-10-21 00:23:24 +0200wroathe(~wroathe@user/wroathe)
2021-10-21 00:24:13 +0200urdh(~urdh@user/urdh)
2021-10-21 00:26:29 +0200off^(~off@68.101.53.15) (Remote host closed the connection)
2021-10-21 00:33:40 +0200betelgeuse(~betelgeus@94-225-47-8.access.telenet.be) (Quit: The Lounge - https://thelounge.chat)
2021-10-21 00:36:31 +0200jushur(~human@user/jushur)
2021-10-21 00:43:14 +0200 <zzz> %s/ or just s/ ?
2021-10-21 00:43:40 +0200 <zzz> i mean, /g ?
2021-10-21 00:43:53 +0200 <awpr> I only see one match
2021-10-21 00:44:18 +0200 <zzz> my bad
2021-10-21 00:45:00 +0200Gurkenglas(~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 258 seconds)
2021-10-21 00:45:15 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:9105:355e:98db:81cc) (Remote host closed the connection)
2021-10-21 00:45:39 +0200Skyfire(~pyon@user/pyon)
2021-10-21 00:47:14 +0200meltedbrain_y2k(~tekserf@94.73.36.197) ()
2021-10-21 00:49:00 +0200 <ManofLetters[m]> John Ericson: hi! could you have a look at https://github.com/simonmar/happy/issues/211? Just in case it's not only my CIs that died... :)
2021-10-21 00:49:45 +0200 <ericson2314> Man of Letters: it's in the readme
2021-10-21 00:49:53 +0200 <ericson2314> you want -bootstrap propably
2021-10-21 00:50:04 +0200 <ericson2314> I suspect I am going to get a lot of these questions :/
2021-10-21 00:50:16 +0200 <ericson2314> I had mixed feelings about cutting this release
2021-10-21 00:50:26 +0200hyiltiz(~quassel@31.220.5.250) (Ping timeout: 260 seconds)
2021-10-21 00:50:33 +0200 <ManofLetters[m]> yeah, because it's not my direct dep; something else depends on it
2021-10-21 00:50:39 +0200 <ManofLetters[m]> can I still mitigate the issue?
2021-10-21 00:50:41 +0200 <ericson2314> deps don't specify flags
2021-10-21 00:50:45 +0200 <ericson2314> cabal projet files do
2021-10-21 00:50:48 +0200 <ericson2314> so yes you can
2021-10-21 00:51:00 +0200 <ericson2314> (probably also stack.yaml, but I do not know details)
2021-10-21 00:51:23 +0200myShoggoth(~myShoggot@97-120-85-195.ptld.qwest.net) (Ping timeout: 264 seconds)
2021-10-21 00:51:36 +0200 <ManofLetters[m]> `git grep happy` in my project turns out nothing
2021-10-21 00:51:50 +0200 <ericson2314> are you using cabal or stack?
2021-10-21 00:51:53 +0200 <ManofLetters[m]> cabal
2021-10-21 00:52:05 +0200 <ManofLetters[m]> tried with 3.4 and with master branch
2021-10-21 00:52:15 +0200hyiltiz(~quassel@31.220.5.250)
2021-10-21 00:52:16 +0200myShoggoth(~myShoggot@97-120-85-195.ptld.qwest.net)
2021-10-21 00:52:52 +0200 <ericson2314> Man of Letters: see https://github.com/simonmar/happy/issues/211
2021-10-21 00:52:56 +0200 <ericson2314> you want
2021-10-21 00:53:12 +0200acidjnk_new3(~acidjnk@p200300d0c703cb958d78f02b280dc416.dip0.t-ipconnect.de)
2021-10-21 00:53:18 +0200 <ericson2314> package: happy
2021-10-21 00:53:18 +0200 <ericson2314> flags: -bootstrap
2021-10-21 00:53:24 +0200 <ericson2314> I will extend redame
2021-10-21 00:53:54 +0200hiruji`(~hiruji@2606:6080:1002:8:3285:30e:de43:8809) (Quit: ZNC 1.8.2 - https://znc.in)
2021-10-21 00:54:10 +0200 <ManofLetters[m]> ok, I will do that, but I'm afraid you will get many of those :) take care!
2021-10-21 00:54:24 +0200 <ericson2314> Man of Letters: ohhhhh yes I will
2021-10-21 00:54:40 +0200 <ericson2314> maybe I will make issue "put all your new bootstaapping hate here"
2021-10-21 00:55:28 +0200noidedsuper(~manjaro-u@2601:280:5a81:520::f8be)
2021-10-21 00:55:42 +0200 <ericson2314> Man of Letters: can you let me know if adding that to cabal project file worked?
2021-10-21 00:55:58 +0200 <sm> you probably know it, but FWIW "have alex and happy in PATH" has long been a requirement for building lots of haskell things. including happy I guess
2021-10-21 00:56:18 +0200 <ericson2314> sm: happy hacked up sdist to contain pregenerated files before
2021-10-21 00:56:36 +0200 <ericson2314> also did other hacks in sdist
2021-10-21 00:56:46 +0200 <ericson2314> we got rid of all those and boostrap with parser combinators
2021-10-21 00:56:53 +0200acidjnk_new(~acidjnk@p200300d0c703cb959894c42690fc4f0f.dip0.t-ipconnect.de) (Ping timeout: 258 seconds)
2021-10-21 00:57:03 +0200 <ericson2314> ....but you gotta actually do the bootstrap if you want attribute grammars
2021-10-21 00:57:09 +0200 <sm> I see. a bit unfortunate for used either way isn't it
2021-10-21 00:57:15 +0200 <sm> users
2021-10-21 00:57:26 +0200 <ericson2314> sm: I opened a cabal issue
2021-10-21 00:57:36 +0200 <ericson2314> it should understand bootstrapping enough to be able to do it right
2021-10-21 00:57:43 +0200 <ericson2314> with `build-tool-depends: happy`
2021-10-21 00:58:07 +0200 <ericson2314> because tool deps are "qualified goals" that allow new flag assigments
2021-10-21 00:58:23 +0200 <ericson2314> but it bails out with a error to pessimistically
2021-10-21 01:00:39 +0200 <sm> I'm happy (!) to know happy is getting some maintenance. If building requires a cabal fix, that problem is going to be with us for a long time (people use older cabals basically forever)
2021-10-21 01:01:12 +0200 <ManofLetters[m]> I tried this... (full message at https://libera.ems.host/_matrix/media/r0/download/libera.chat/60ffef66b3a76616b488f8b2e2e6c7224cad…)
2021-10-21 01:01:20 +0200 <ericson2314> well, we are going to drop support for old GHCs when we do some TH stuff I htink
2021-10-21 01:01:33 +0200 <ericson2314> Man of Letters: is your thing open source
2021-10-21 01:01:42 +0200 <ManofLetters[m]> yes
2021-10-21 01:02:01 +0200 <ericson2314> with the old GHCs maybe old cabals will be less of an issue
2021-10-21 01:02:10 +0200kong4ndrew(~kong4ndre@199.247.111.247)
2021-10-21 01:02:18 +0200 <ericson2314> I can bump the cabal version as a close-enough proxy for cabal-install version I guess
2021-10-21 01:02:25 +0200 <ericson2314> Man of Letters: url?
2021-10-21 01:02:30 +0200 <ManofLetters[m]> and I waited for this moment of fame all my life: https://github.com/LambdaHack/LambdaHack
2021-10-21 01:02:31 +0200 <noidedsuper> Hey, would it be appropriate for me to drop a link to a super-alpha library I've been working on in here? Basic idea is to use Applicative/Divisible to write JSON parsers/serializers that can also generate documentation automatically (and avoid intermediate data structures like maps)
2021-10-21 01:02:34 +0200 <ericson2314> I should just get it working myself to inform readme
2021-10-21 01:03:56 +0200 <monochrom> Yes it's OK to drop a link here.
2021-10-21 01:04:33 +0200 <noidedsuper> https://github.com/AnthonySuper/jordan
2021-10-21 01:06:14 +0200sedeki(~textual@user/sedeki) (Quit: Textual IRC Client: www.textualapp.com)
2021-10-21 01:07:09 +0200alzgh(~alzgh@user/alzgh) (Remote host closed the connection)
2021-10-21 01:08:48 +0200xlei(znc@pool-68-129-84-118.nycmny.fios.verizon.net) (Read error: Connection reset by peer)
2021-10-21 01:09:46 +0200 <janus> noidedsuper: but if you start replacing aeson with something that can also generate documentation, why not make sure the keys in the From and To instance correspond
2021-10-21 01:10:01 +0200 <janus> the instances could be derived from a Schema type
2021-10-21 01:10:12 +0200 <dsal> noidedsuper: your README has an incorrect link to `divisible`
2021-10-21 01:11:11 +0200hyiltiz(~quassel@31.220.5.250) (Ping timeout: 264 seconds)
2021-10-21 01:11:41 +0200xlei(znc@pool-68-129-84-118.nycmny.fios.verizon.net)
2021-10-21 01:11:52 +0200 <dsal> I like this part of the hlint config:
2021-10-21 01:11:52 +0200 <dsal> # This is up to personal preference, but 80 is the right answer.
2021-10-21 01:11:52 +0200 <dsal> columns: 120
2021-10-21 01:12:15 +0200max22-(~maxime@2a01cb0883359800fe2c7b136063d78c.ipv6.abo.wanadoo.fr) (Remote host closed the connection)
2021-10-21 01:12:23 +0200 <janus> lol, people post a new library, first thing to check is to see if they have good taste in hlint o_O :P
2021-10-21 01:13:13 +0200tremon(~tremon@217-63-61-89.cable.dynamic.v4.ziggo.nl) (Quit: getting boxed in)
2021-10-21 01:13:23 +0200hyiltiz(~quassel@31.220.5.250)
2021-10-21 01:13:58 +0200 <dsal> Haha. Yeah. If I don't like your line length, your code can't be useful.
2021-10-21 01:15:10 +0200 <janus> noidedsuper: if `parseField "name"` and writeField "name"` could be derived from a Field type that also contained the documentation, fields could be reused with their docs in different objects
2021-10-21 01:15:45 +0200 <janus> and when you compile to OpenAPI, the naive compilation would repeat the docs string, but you could ideally compile it to a yaml $ref or something
2021-10-21 01:16:03 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-10-21 01:17:12 +0200 <janus> alternatively it could be typeclass based, but people use Ints for so many things. but if you feel strongly about forcing people to make newtypes ... ;)
2021-10-21 01:20:09 +0200 <ericson2314> Man of Letters: per https://github.com/haskell/cabal/issues/3502 I think the situation is fucked
2021-10-21 01:20:21 +0200takuan(~takuan@178-116-218-225.access.telenet.be)
2021-10-21 01:20:23 +0200 <ericson2314> I am going to pull the release
2021-10-21 01:20:33 +0200 <ManofLetters[m]> :<
2021-10-21 01:21:20 +0200 <noidedsuper> Janus: the keys for From and To are different because you could theoretically support different ways to serialize and deserialize a type
2021-10-21 01:21:38 +0200tafa(~tafa@2a04:52c0:101:85c::1)
2021-10-21 01:21:39 +0200 <noidedsuper> And I actually have such things at work
2021-10-21 01:21:52 +0200 <janus> noidedsuper: but if you want to support different ways , how can it be typeclass based? shouldn't the encoder/decoder just be values then?
2021-10-21 01:22:18 +0200 <noidedsuper> dsal: I keep that comment in there as a cheeky joke since it's the default one. I used to be a hardcore 80 character person myself even so
2021-10-21 01:22:29 +0200 <janus> noidedsuper: but i'd like to point out that the common case it to have only one encoder/decoder! so if that is convenient, it would make sense.
2021-10-21 01:22:58 +0200 <dsal> noidedsuper: yep, right with you
2021-10-21 01:22:59 +0200 <janus> noidedsuper: note how quickcheck for purescript allows both the typeclass and the value-based (hedgehog) approach. you can do the same
2021-10-21 01:23:49 +0200 <noidedsuper> janus: the ToJSON and FromJSON typeclass are supposed to represent "canonical" ways of encoding/decoding, respectively. You can also generate JSONParser/JSONSerializer values and do stuff with them if you want.
2021-10-21 01:24:22 +0200 <noidedsuper> So it kinda already does the "You can use a typeclass but values are also fine" thing, just without you having to type import Jordan.ToJSON (intToJson, doubleToJson) every time you want to serialize an int and a double
2021-10-21 01:24:24 +0200 <ericson2314> Man of Letters: tyr again
2021-10-21 01:24:27 +0200 <ericson2314> do a `cabal update`
2021-10-21 01:24:29 +0200 <ericson2314> and reconfigure
2021-10-21 01:24:32 +0200 <ericson2314> it should use cabal 1.20
2021-10-21 01:24:39 +0200 <ericson2314> and there should be no issue
2021-10-21 01:24:54 +0200wyrd(~wyrd@gateway/tor-sasl/wyrd) (Remote host closed the connection)
2021-10-21 01:25:00 +0200 <Axman6> ericson2314: please refrain from using the enter key for punctuation :)
2021-10-21 01:25:16 +0200 <ManofLetters[m]> John Ericson: what do you mean by "reconfigure"?
2021-10-21 01:25:27 +0200 <janus> noidedsuper: ok, good, that is nice. i think the point about a single encoder/decoder being the common case still stands. you can still support the odd cases.
2021-10-21 01:25:30 +0200 <ericson2314> Axman6: sorry
2021-10-21 01:25:41 +0200 <ericson2314> Man of Letters: `cabal configure`
2021-10-21 01:26:00 +0200 <ManofLetters[m]> nope, with new cabals you don't need to do that
2021-10-21 01:26:06 +0200 <janus> similar to how some people will wanna use Generic, but you don't have to
2021-10-21 01:26:21 +0200 <ManofLetters[m]> and you probably mean happy 1.20, right?
2021-10-21 01:26:26 +0200 <ericson2314> yeah
2021-10-21 01:26:26 +0200 <Axman6> pretty sure cabal new-configure exists for a reason...
2021-10-21 01:26:40 +0200 <ericson2314> well you can do that and then check the plan.json
2021-10-21 01:26:47 +0200 <ManofLetters[m]> oh, I see
2021-10-21 01:26:49 +0200 <ericson2314> that is what I did, to make sure the deprecation worked
2021-10-21 01:26:56 +0200 <ManofLetters[m]> yes, for checking it's useful
2021-10-21 01:27:11 +0200 <noidedsuper> If you use the generic representations they do currently generate identical formats, so I think the separation is probably fine? Since like 90% of the time you're just gonna write `deriving anyclass (ToJSON, FromJSON)` anyway
2021-10-21 01:27:30 +0200guydb89(~guy@98.198.128.24) (Ping timeout: 260 seconds)
2021-10-21 01:27:42 +0200 <ManofLetters[m]> Axman6: it's actually a leftover and a miunderstanding; on branch master it mostly writes to `cabal.project.local` and let's you check plan, etc.
2021-10-21 01:27:43 +0200 <janus> right but you can't derive docs anyway, so the FromJSON/ToJSON should be derived from the schema, which also has the docs
2021-10-21 01:27:56 +0200 <ManofLetters[m]> but not needed for `cabal build` or anything
2021-10-21 01:28:08 +0200 <ManofLetters[m]> John Ericson: it works, thank you!
2021-10-21 01:28:15 +0200 <ManofLetters[m]> and I'm sorry :)
2021-10-21 01:28:25 +0200 <janus> noidedsuper: just because you have "jsonSerializerFromSchema" doesn't mean you can't enable people to write their own JSONSerializer
2021-10-21 01:28:53 +0200 <noidedsuper> Actually with this library you can derive docs! Since we only use typeclasses that are "inspectable", every `JSONParser` and `JSONSerializer` can be turned into OpenAPI V3 documentation
2021-10-21 01:29:04 +0200guydb89(~guy@98.200.9.228)
2021-10-21 01:29:18 +0200 <Axman6> I should learn how to use modern cabal...
2021-10-21 01:29:20 +0200 <noidedsuper> I think some kinda type-level "define a more robust document type and we'll generate a serializer/deserializer for you" thing could be cool but that much type-level programming might hurt me
2021-10-21 01:29:39 +0200frosky(~froskyarr@59.41.160.207)
2021-10-21 01:29:47 +0200 <janus> noidedsuper: what makes you think it would be a lot of type-level programming?
2021-10-21 01:29:56 +0200frosky(~froskyarr@59.41.160.207) (Client Quit)
2021-10-21 01:30:10 +0200wyrd(~wyrd@gateway/tor-sasl/wyrd)
2021-10-21 01:30:11 +0200 <noidedsuper> I guess you could also do something where the Schema things are just values, yeah
2021-10-21 01:30:13 +0200ph88(~ph88@2a02:8109:9e00:7e5c::3d56) (Quit: Leaving)
2021-10-21 01:30:35 +0200 <ManofLetters[m]> Axman6: easy, `cabal build`, `cabal list-bin exe:you_exe`, that's it
2021-10-21 01:30:51 +0200 <janus> noidedsuper: i know that you can derive docs from the serializer/parser, but that is the problem, why do i have to choose between those? when i write a haskell record with haddocks, the docs covers both construction and deconstruction
2021-10-21 01:31:09 +0200 <ManofLetters[m]> or `$(cabal list-bin exe:your_exe) --your_params`
2021-10-21 01:31:19 +0200 <janus> noidedsuper: i am trying to convince you that the serializer/deserializer should be derived from the schema, since i don't see a schema in your library
2021-10-21 01:31:30 +0200 <noidedsuper> I know you could use an `Iso` to implement mapping over fields in both directions, but I'm not sure how to put `f (a -> b) -> f a -> f b` and `a -> (b, c) -> f b -> f c -> f a` into the same type.
2021-10-21 01:31:48 +0200frosky(~froskyarr@59.41.160.207)
2021-10-21 01:31:52 +0200 <noidedsuper> janus: it might help if you provided an example of what "a schema" might look like
2021-10-21 01:32:02 +0200 <noidedsuper> Because I'm a bit confused I think
2021-10-21 01:32:11 +0200froskyFroskyArr
2021-10-21 01:32:23 +0200 <ManofLetters[m]> Axman6: and no more cabal hell: all versions and flags coexist like a happy family and are re-used if possible
2021-10-21 01:33:05 +0200 <ManofLetters[m]> and we totally need volunteers to keep cabal this way and fix lots of technical debt
2021-10-21 01:33:17 +0200 <ManofLetters[m]> e.g., the one that has just bitten `happy`
2021-10-21 01:33:23 +0200myShoggoth(~myShoggot@97-120-85-195.ptld.qwest.net) (Ping timeout: 264 seconds)
2021-10-21 01:33:59 +0200acidjnk_new3(~acidjnk@p200300d0c703cb958d78f02b280dc416.dip0.t-ipconnect.de) (Ping timeout: 264 seconds)
2021-10-21 01:35:05 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 260 seconds)
2021-10-21 01:35:13 +0200MQ-17J(~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Ping timeout: 258 seconds)
2021-10-21 01:37:13 +0200myShoggoth(~myShoggot@97-120-85-195.ptld.qwest.net)
2021-10-21 01:37:31 +0200 <janus> noidedsuper: you know how you can define aeson Parsers using applicative style
2021-10-21 01:37:44 +0200 <janus> noidedsuper: here is another example with a database library: https://github.com/flipstone/orville/blob/master/orville-postgresql/sample-project/Example/Schema/…
2021-10-21 01:37:54 +0200 <janus> (disclaimer i work for flipstone)
2021-10-21 01:38:28 +0200 <janus> with aeson it is `Person <$> o .: "name" <*> o .: "age"`
2021-10-21 01:39:04 +0200MQ-17J(~MQ-17J@8.21.10.23)
2021-10-21 01:39:07 +0200 <noidedsuper> I think where I'm struggling is how to turn that around so you can generate a serializer as well
2021-10-21 01:40:46 +0200 <noidedsuper> IE, if I run `(,) <$> o .: "name" <*> o .: "age"`, the compiler only sees `f (a -> b) <*> (f b)` for the last step. It doesn't know that `(,) <$> o .: "name"` is part of a constructor with two arguments, it just becomes an opaque function - for all I know it could be `(,) . (* 10)` or whatever
2021-10-21 01:41:38 +0200 <noidedsuper> which is why the current library separates them - the serialization version of `Applicative` is `Divisible`, where we *do* know that we're "breaking something into parts"
2021-10-21 01:41:49 +0200hiruji(~hiruji@user/hiruji)
2021-10-21 01:43:36 +0200burnside_(~burnsides@client-8-85.eduroam.oxuni.org.uk)
2021-10-21 01:43:37 +0200burnsidesLlama(~burnsides@dhcp168-039.wadham.ox.ac.uk) (Remote host closed the connection)
2021-10-21 01:45:00 +0200tommd(~tommd@75-164-130-101.ptld.qwest.net) (Ping timeout: 260 seconds)
2021-10-21 01:45:08 +0200 <janus> noidedsuper: you can tell each combinator (e.g. like (.:)) the name of the serialized key, and you can tell it how to extract that value from your record (the record field selector)
2021-10-21 01:45:43 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:b5c0:69fb:2ebc:745e)
2021-10-21 01:45:45 +0200 <noidedsuper> Hmmm
2021-10-21 01:45:47 +0200 <janus> noidedsuper: so that can be transformed into a function that adds a key to an object
2021-10-21 01:46:18 +0200 <janus> noidedsuper: then, if you compose all these functions, and call it on the empty json object, you have a function that generates a filled json object from a haskell record
2021-10-21 01:46:34 +0200 <noidedsuper> I'll play around with that idea
2021-10-21 01:47:14 +0200 <janus> noidedsuper: i think you may need type-level lists if you want to do sum types, but you can just rule that out to start with
2021-10-21 01:47:33 +0200 <janus> noidedsuper: of course, you can still do sum types if you rely on the user to write some boilerplate...
2021-10-21 01:48:09 +0200frosky_(~froskyarr@59.41.160.207)
2021-10-21 01:49:25 +0200unit73e(~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291) (Quit: Leaving)
2021-10-21 01:49:26 +0200 <janus> noidedsuper: aeson doesn't have the "optional" key setter, i believe. but argonaut has it: https://github.com/purescript-contrib/purescript-argonaut/blob/main/examples/Examples/Data/Argonau…
2021-10-21 01:50:11 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:b5c0:69fb:2ebc:745e) (Ping timeout: 264 seconds)
2021-10-21 01:50:22 +0200 <janus> noidedsuper: you can have the same, then it is possible to leave out a json key if the value is a maybe. you can argue that that makes it harder to infer the schema by looking at the value, but some would argue that you should already know the schema when looking at a value :P
2021-10-21 01:50:31 +0200 <noidedsuper> Yeah
2021-10-21 01:50:33 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 258 seconds)
2021-10-21 01:51:04 +0200 <noidedsuper> I dunno, I'm not sure I agree that this would be super useful but I'll see if I can do it I guess
2021-10-21 01:51:19 +0200FroskyArr(~froskyarr@59.41.160.207) (Ping timeout: 258 seconds)
2021-10-21 01:51:26 +0200 <janus> yeah it just saves a few bytes. just wanted to mention it
2021-10-21 01:53:25 +0200Midjak(~Midjak@82-65-111-221.subs.proxad.net) (Quit: This computer has gone to sleep)
2021-10-21 01:56:33 +0200Null_A(~null_a@2601:645:8700:2290:a94b:e46c:6690:e477) (Remote host closed the connection)
2021-10-21 01:59:34 +0200 <noidedsuper> So you can do this but I think it would be sorta easy to write "incorrect" stuff with it, since you'd need to remember that you can't use fmap without also applying the inverse of `f` to the key-extractor function thing
2021-10-21 02:00:25 +0200 <noidedsuper> https://gist.github.com/AnthonySuper/7c8fcab8f31ad3d2ab4911c323294fdf
2021-10-21 02:03:48 +0200 <janus> noidedsuper: what would be an example of incorrect use?
2021-10-21 02:06:18 +0200tommd(~tommd@75-164-130-101.ptld.qwest.net)
2021-10-21 02:06:35 +0200jgeerds(~jgeerds@55d4da80.access.ecotel.net) (Ping timeout: 260 seconds)
2021-10-21 02:07:04 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:b5c0:69fb:2ebc:745e)
2021-10-21 02:09:13 +0200 <janus> "the inverse of `f`". the f is the record field selector here? it's inverse would be the record field value, we already have the key name
2021-10-21 02:10:22 +0200 <janus> in my head, BothSides would contain a list of Fields. the serializer and deserializer are derivable from that list.
2021-10-21 02:11:02 +0200 <noidedsuper> https://gist.github.com/AnthonySuper/a51be1414a9f63305fdcc9ec334f6299
2021-10-21 02:11:12 +0200 <noidedsuper> problem 1 already exists if you screw up and give it the wrong object key I suppose
2021-10-21 02:11:48 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Read error: Connection reset by peer)
2021-10-21 02:12:11 +0200 <janus> i don't think problem 1 is solvable... if people are worried about things like that, they must use generics and have the key names autoderived, such that they will always correspond
2021-10-21 02:12:18 +0200 <noidedsuper> I dunno, I might be overthinking the scope of the issue here I suppose lol
2021-10-21 02:14:19 +0200 <janus> hmm well i don't think people should be fmapping into the fields. just like you can't fmap into a lens
2021-10-21 02:14:37 +0200 <noidedsuper> fmap is a superclass of applicative though
2021-10-21 02:14:39 +0200abrantesasf(~abrantesa@187.36.170.211)
2021-10-21 02:14:49 +0200 <noidedsuper> I guess I coudl say "don't use it pls"
2021-10-21 02:15:24 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915)
2021-10-21 02:15:39 +0200 <janus> you could also just not use applicative, use some other thing. i dunno
2021-10-21 02:15:55 +0200mcglk(~mcglk@131.191.49.120) (Read error: Connection reset by peer)
2021-10-21 02:16:07 +0200 <janus> but one more thing: each combinator could reference a child schema, and there could be schemas provided for common types like strings or datetime
2021-10-21 02:16:09 +0200mcglk_(~mcglk@131.191.49.120)
2021-10-21 02:16:55 +0200 <janus> and there could be a "schemaWithDocString :: String -> Schema -> Schema"
2021-10-21 02:17:44 +0200 <noidedsuper> Yeah the docs part is difficult
2021-10-21 02:17:46 +0200 <noidedsuper> actually
2021-10-21 02:18:03 +0200 <noidedsuper> Hmmmm. Maybe it isn't.
2021-10-21 02:18:08 +0200 <janus> such that you can do `personGivenName = schemaWithDocString "The given name of a person, not the family name. Mentioned last in china" stringSchema`
2021-10-21 02:18:27 +0200econo(uid147250@user/econo) (Quit: Connection closed for inactivity)
2021-10-21 02:18:55 +0200 <janus> which would have type `Schema String` such that it fits with the "firstName :: String" in the record
2021-10-21 02:20:14 +0200off^(~off@wsip-68-227-92-38.mc.at.cox.net)
2021-10-21 02:24:40 +0200myShoggoth(~myShoggot@97-120-85-195.ptld.qwest.net) (Ping timeout: 260 seconds)
2021-10-21 02:25:10 +0200tommd(~tommd@75-164-130-101.ptld.qwest.net) (Ping timeout: 260 seconds)
2021-10-21 02:30:33 +0200frosky_(~froskyarr@59.41.160.207) (Quit: Leaving)
2021-10-21 02:36:59 +0200InstX1(~delicacie@c-98-208-218-119.hsd1.fl.comcast.net) (Ping timeout: 264 seconds)
2021-10-21 02:38:56 +0200 <janus> noidedsuper: if we have a sum type `data Foo = A | B` we could have `tag2 :: Schema a -> Schema b -> Key -> String -> String` where the first string is the tag for the first case, and the second string is the tag for the second case. and the Key would be the key used to store the tag in the JSON
2021-10-21 02:39:48 +0200 <janus> ah, it would also need the constructors for the two cases and the "reverse constructor"
2021-10-21 02:40:14 +0200jespada(~jespada@2803:9800:9842:7a62:5d33:6404:2aef:9813) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-10-21 02:41:43 +0200 <janus> the tricky thing is the reverse constructor which must decide which serializer to use. in the case of 2, it could return an "Either a b"
2021-10-21 02:42:01 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2021-10-21 02:42:03 +0200 <noidedsuper> That's what `Selectable` gets ya
2021-10-21 02:42:05 +0200 <noidedsuper> which is nice
2021-10-21 02:42:12 +0200 <janus> ah ok
2021-10-21 02:42:21 +0200 <janus> but it would be boiler-platey right?
2021-10-21 02:43:43 +0200 <janus> oops tag2 should of course return "Schema (Either a b)", i forgot that
2021-10-21 02:44:51 +0200 <janus> but the definition of Foo is too boring, it should be "A String | B Int"
2021-10-21 02:45:40 +0200MQ-17J(~MQ-17J@8.21.10.23) (Ping timeout: 260 seconds)
2021-10-21 02:47:20 +0200 <janus> then the call would be `tag2 stringSchema intSchema "tag" "a" "b" (\case A str -> Left str; B int -> Right int) :: Schema Foo)`... but now i forgot that it would also need A and B passed to it such that it can also construct a Foo...
2021-10-21 02:48:14 +0200lavaman(~lavaman@98.38.249.169)
2021-10-21 02:48:24 +0200MQ-17J(~MQ-17J@8.6.144.186)
2021-10-21 02:49:18 +0200 <janus> i wonder how it looks with selectable with more than two cases
2021-10-21 02:51:10 +0200lbseale_(~lbseale@user/ep1ctetus) (Read error: Connection reset by peer)
2021-10-21 02:52:40 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 260 seconds)
2021-10-21 02:53:30 +0200pavonia(~user@user/siracusa)
2021-10-21 02:58:18 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 260 seconds)
2021-10-21 03:00:08 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2021-10-21 03:01:26 +0200aa(~douglasco@200.146.85.128.static.gvt.net.br) (Read error: Connection reset by peer)
2021-10-21 03:01:35 +0200aa(~douglasco@200.146.85.128.static.gvt.net.br)
2021-10-21 03:01:54 +0200 <noidedsuper> It's basically just nesting I think
2021-10-21 03:02:31 +0200betelgeuse(~betelgeus@94-225-47-8.access.telenet.be)
2021-10-21 03:06:40 +0200kupi(uid212005@id-212005.hampstead.irccloud.com) (Ping timeout: 260 seconds)
2021-10-21 03:07:11 +0200Boarders(sid425905@id-425905.lymington.irccloud.com) (Ping timeout: 245 seconds)
2021-10-21 03:07:36 +0200hnOsmium0001(uid453710@id-453710.hampstead.irccloud.com) (Ping timeout: 245 seconds)
2021-10-21 03:07:54 +0200myShoggoth(~myShoggot@97-120-85-195.ptld.qwest.net)
2021-10-21 03:07:59 +0200sclv(sid39734@haskell/developer/sclv) (Ping timeout: 258 seconds)
2021-10-21 03:09:25 +0200truckasaurus(sid457088@helmsley.irccloud.com) (Ping timeout: 252 seconds)
2021-10-21 03:09:31 +0200elvishjerricco(sid237756@helmsley.irccloud.com) (Ping timeout: 258 seconds)
2021-10-21 03:09:46 +0200gaze___(sid387101@helmsley.irccloud.com) (Ping timeout: 268 seconds)
2021-10-21 03:10:10 +0200grfn(sid449115@helmsley.irccloud.com) (Ping timeout: 260 seconds)
2021-10-21 03:11:53 +0200elvishjerricco(sid237756@helmsley.irccloud.com)
2021-10-21 03:11:57 +0200truckasaurus(sid457088@helmsley.irccloud.com)
2021-10-21 03:11:58 +0200gaze___(sid387101@id-387101.helmsley.irccloud.com)
2021-10-21 03:12:04 +0200kupi(uid212005@hampstead.irccloud.com)
2021-10-21 03:12:06 +0200Boarders(sid425905@lymington.irccloud.com)
2021-10-21 03:12:09 +0200sclv(sid39734@haskell/developer/sclv)
2021-10-21 03:12:59 +0200whez(sid470288@lymington.irccloud.com) (Ping timeout: 264 seconds)
2021-10-21 03:13:21 +0200grfn(sid449115@id-449115.helmsley.irccloud.com)
2021-10-21 03:13:24 +0200 <janus> noidedsuper: to generalize this in an arity safe maner, the tag values and the constructors (A, B, ...) and their schemata can be combined using a combinator. and then all those combined cases could be combined with a function that extracts the value from each case, in this case "... -> (Foo -> String) -> (Foo -> Int) -> Schema Foo". with applicative style, correspondence between the extracting function
2021-10-21 03:13:31 +0200 <janus> and the combined tag-cases is ensured
2021-10-21 03:14:17 +0200burnside_(~burnsides@client-8-85.eduroam.oxuni.org.uk) (Remote host closed the connection)
2021-10-21 03:16:09 +0200whez(sid470288@id-470288.lymington.irccloud.com)
2021-10-21 03:20:48 +0200hnOsmium0001(uid453710@id-453710.hampstead.irccloud.com)
2021-10-21 03:23:30 +0200emf_(~emf@2620:10d:c090:400::5:70ff)
2021-10-21 03:26:46 +0200emf(~emf@2620:10d:c090:400::5:7558) (Ping timeout: 245 seconds)
2021-10-21 03:29:34 +0200guydb89(~guy@98.200.9.228) (Ping timeout: 260 seconds)
2021-10-21 03:31:14 +0200guydb89(~guy@98.198.129.114)
2021-10-21 03:31:28 +0200 <noidedsuper> I can play around with it!
2021-10-21 03:31:45 +0200takuan(~takuan@178-116-218-225.access.telenet.be) (Ping timeout: 260 seconds)
2021-10-21 03:31:53 +0200 <noidedsuper> Tomorrow, unfortunately. But thanks for the feedback, Janus! It really helped.
2021-10-21 03:32:32 +0200noidedsuper(~manjaro-u@2601:280:5a81:520::f8be) (Remote host closed the connection)
2021-10-21 03:32:55 +0200myShoggoth(~myShoggot@97-120-85-195.ptld.qwest.net) (Ping timeout: 260 seconds)
2021-10-21 03:32:57 +0200 <janus> good, happy to help, i should mention that i didn't invent any of this, my ideas are taken from libraries such as Orville
2021-10-21 03:36:21 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 258 seconds)
2021-10-21 03:38:47 +0200ski(~ski@remote12.chalmers.se) (Ping timeout: 264 seconds)
2021-10-21 03:41:53 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2021-10-21 03:45:10 +0200rekahsoft(~rekahsoft@cpe0008a20f982f-cm64777d666260.cpe.net.cable.rogers.com) (Ping timeout: 260 seconds)
2021-10-21 03:45:13 +0200stiell(~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
2021-10-21 03:46:40 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-10-21 03:47:11 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 245 seconds)
2021-10-21 03:48:58 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2021-10-21 03:50:18 +0200random-jellyfish(~random-je@user/random-jellyfish) (Ping timeout: 256 seconds)
2021-10-21 03:50:29 +0200zaquest(~notzaques@5.128.210.178) (Remote host closed the connection)
2021-10-21 03:53:22 +0200xff0x(~xff0x@port-92-195-26-90.dynamic.as20676.net) (Ping timeout: 260 seconds)
2021-10-21 03:53:52 +0200zaquest(~notzaques@5.128.210.178)
2021-10-21 03:55:00 +0200sedeki(~textual@user/sedeki)
2021-10-21 03:55:10 +0200xff0x(~xff0x@2001:1a81:524c:400:5205:21d5:64e1:92)
2021-10-21 03:56:32 +0200falafel(~falafel@2603-8000-d800-688c-c469-52c4-b20d-779e.res6.spectrum.com)
2021-10-21 03:57:57 +0200falafel(~falafel@2603-8000-d800-688c-c469-52c4-b20d-779e.res6.spectrum.com) (Remote host closed the connection)
2021-10-21 03:58:10 +0200falafel(~falafel@cpe-76-168-195-162.socal.res.rr.com)
2021-10-21 03:59:41 +0200stiell(~stiell@gateway/tor-sasl/stiell)
2021-10-21 04:00:50 +0200mmhat(~mmh@55d4469f.access.ecotel.net) (Ping timeout: 260 seconds)
2021-10-21 04:06:25 +0200sedeki(~textual@user/sedeki) (Quit: Textual IRC Client: www.textualapp.com)
2021-10-21 04:06:31 +0200guydb89(~guy@98.198.129.114) (Remote host closed the connection)
2021-10-21 04:12:35 +0200MQ-17J(~MQ-17J@8.6.144.186) (Ping timeout: 260 seconds)
2021-10-21 04:13:17 +0200mmhat(~mmh@55d45798.access.ecotel.net)
2021-10-21 04:16:05 +0200falafel(~falafel@cpe-76-168-195-162.socal.res.rr.com) (Ping timeout: 260 seconds)
2021-10-21 04:19:30 +0200econo(uid147250@user/econo)
2021-10-21 04:21:20 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
2021-10-21 04:32:34 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 260 seconds)
2021-10-21 04:33:55 +0200alx741(~alx741@186.178.109.50) (Quit: alx741)
2021-10-21 04:41:00 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-10-21 04:41:00 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-10-21 04:41:00 +0200wroathe(~wroathe@user/wroathe)
2021-10-21 04:42:23 +0200td_(~td@94.134.91.144) (Ping timeout: 264 seconds)
2021-10-21 04:44:06 +0200td_(~td@94.134.91.188)
2021-10-21 04:45:15 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 260 seconds)
2021-10-21 04:46:27 +0200mmhat(~mmh@55d45798.access.ecotel.net) (Quit: WeeChat 3.3)
2021-10-21 04:46:30 +0200peterhil(~peterhil@dsl-hkibng32-54fb56-2.dhcp.inet.fi) (Ping timeout: 258 seconds)
2021-10-21 04:46:49 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643)
2021-10-21 04:47:14 +0200MQ-17J(~MQ-17J@d192-24-122-179.try.wideopenwest.com)
2021-10-21 05:00:02 +0200haasn(~nand@haasn.dev) (Quit: ZNC 1.7.5+deb4 - https://znc.in)
2021-10-21 05:00:33 +0200favonia(~favonia@user/favonia)
2021-10-21 05:01:32 +0200haasn(~nand@haasn.dev)
2021-10-21 05:03:20 +0200segfaultfizzbuzz(~segfaultf@135-180-0-138.static.sonic.net) (Ping timeout: 260 seconds)
2021-10-21 05:08:44 +0200favonia(~favonia@user/favonia) (Ping timeout: 258 seconds)
2021-10-21 05:13:10 +0200machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 260 seconds)
2021-10-21 05:13:41 +0200connrs(~connrs@conners.plus.com) (Read error: Connection reset by peer)
2021-10-21 05:16:24 +0200connrs(~connrs@conners.plus.com)
2021-10-21 05:23:47 +0200myShoggoth(~myShoggot@97-120-85-195.ptld.qwest.net)
2021-10-21 05:24:26 +0200zebrag(~chris@user/zebrag) (Quit: Konversation terminated!)
2021-10-21 05:27:31 +0200jlamothe(~jlamothe@198.251.61.229) (Ping timeout: 258 seconds)
2021-10-21 05:28:53 +0200benin0(~benin@183.82.179.164)
2021-10-21 05:29:07 +0200benin(~benin@183.82.179.164) (Ping timeout: 252 seconds)
2021-10-21 05:29:07 +0200benin0benin
2021-10-21 05:30:43 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2021-10-21 05:31:22 +0200 <jackdk> I'm trying to use servant-server's UVerb machinery, and am getting a strange type error: `Expected one of: '[WithStatus 200 [StoredResourceData id]], but got: WithStatus 200 [StoredResourceData id]`. I suspect that it's a type family thing: that the open union membership test fails before the type families reduce to being equal - should I be looking for ways to delay/force type family evaluation?
2021-10-21 05:31:52 +0200 <jackdk> `StoredResourceData :: Type -> Type` is an associated type family I've written for a `class Resource id`
2021-10-21 05:37:26 +0200 <jackdk> Here is a minimal example, using servant and servant-server 0.18.3 https://www.irccloud.com/pastebin/Zui39kYI/servant-generic-error.hs
2021-10-21 05:38:06 +0200 <jackdk> The error appears on the call to `respond`
2021-10-21 05:38:20 +0200myShoggoth(~myShoggot@97-120-85-195.ptld.qwest.net) (Ping timeout: 260 seconds)
2021-10-21 05:40:35 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
2021-10-21 05:43:43 +0200myShoggoth(~myShoggot@97-120-85-195.ptld.qwest.net)
2021-10-21 05:43:46 +0200Everything(~Everythin@37.115.210.35)
2021-10-21 05:43:59 +0200hnOsmium0001(uid453710@id-453710.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
2021-10-21 05:46:43 +0200 <jackdk> https://github.com/haskell-servant/servant/issues/1381 seems to be related but I don't completely follow the discussion.
2021-10-21 06:05:15 +0200Stotteren(~Stotteren@pool-108-20-79-41.bstnma.fios.verizon.net)
2021-10-21 06:05:18 +0200Gestotterd(~Stotteren@pool-108-20-79-41.bstnma.fios.verizon.net)
2021-10-21 06:12:26 +0200kong4ndrew(~kong4ndre@199.247.111.247) (Remote host closed the connection)
2021-10-21 06:12:43 +0200kong4ndrew(~kong4ndre@199.247.111.247)
2021-10-21 06:16:28 +0200kong4ndrew(~kong4ndre@199.247.111.247) (Remote host closed the connection)
2021-10-21 06:17:18 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-10-21 06:17:36 +0200kong4ndrew(~kong4ndre@199.247.111.247)
2021-10-21 06:19:16 +0200kong4ndrew(~kong4ndre@199.247.111.247) (Remote host closed the connection)
2021-10-21 06:19:33 +0200kong4ndrew(~kong4ndre@199.247.111.247)
2021-10-21 06:19:42 +0200LiaoTao_(~LiaoTao@gateway/tor-sasl/liaotao)
2021-10-21 06:21:06 +0200LiaoTao(~LiaoTao@gateway/tor-sasl/liaotao) (Ping timeout: 276 seconds)
2021-10-21 06:23:16 +0200kong4ndrew(~kong4ndre@199.247.111.247) (Remote host closed the connection)
2021-10-21 06:23:33 +0200kong4ndrew(~kong4ndre@199.247.111.247)
2021-10-21 06:25:05 +0200 <hololeap> extendWith :: Comonad w => (w a -> b) -> w a -> w (a,b)
2021-10-21 06:25:13 +0200 <hololeap> extendWith f w = let a = extract w in (a,) <$> extend f w
2021-10-21 06:25:18 +0200 <hololeap> does this look reasonable?
2021-10-21 06:26:02 +0200 <hololeap> I'm just trying to use extend but keep the previous value around. is there a more idiomatic way to do this?
2021-10-21 06:26:56 +0200ArctVaulMarsHMPJ(~pjetcetal@128-71-225-36.broadband.corbina.ru)
2021-10-21 06:29:30 +0200kong4ndrew(~kong4ndre@199.247.111.247) (Remote host closed the connection)
2021-10-21 06:29:48 +0200kong4ndrew(~kong4ndre@199.247.111.247)
2021-10-21 06:32:01 +0200slowButPresent(~slowButPr@user/slowbutpresent) (Quit: leaving)
2021-10-21 06:33:41 +0200kong4ndrew(~kong4ndre@199.247.111.247) (Remote host closed the connection)
2021-10-21 06:33:59 +0200kong4ndrew(~kong4ndre@199.247.111.247)
2021-10-21 06:36:14 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 260 seconds)
2021-10-21 06:38:00 +0200kong4ndrew(~kong4ndre@199.247.111.247) (Remote host closed the connection)
2021-10-21 06:38:10 +0200favonia(~favonia@user/favonia)
2021-10-21 06:38:18 +0200kong4ndrew(~kong4ndre@199.247.111.247)
2021-10-21 06:39:59 +0200kong4ndrew(~kong4ndre@199.247.111.247) (Remote host closed the connection)
2021-10-21 06:40:18 +0200kong4ndrew(~kong4ndre@199.247.111.247)
2021-10-21 06:40:57 +0200coot(~coot@37.30.49.107.nat.umts.dynamic.t-mobile.pl)
2021-10-21 06:42:26 +0200Guest32(~Guest32@2603-8000-3f42-d500-c5e7-f6b2-1524-e2a0.res6.spectrum.com)
2021-10-21 06:44:14 +0200kong4ndrew(~kong4ndre@199.247.111.247) (Remote host closed the connection)
2021-10-21 06:44:31 +0200kong4ndrew(~kong4ndre@199.247.111.247)
2021-10-21 06:45:15 +0200Guest32(~Guest32@2603-8000-3f42-d500-c5e7-f6b2-1524-e2a0.res6.spectrum.com) (Client Quit)
2021-10-21 06:48:12 +0200kong4ndrew(~kong4ndre@199.247.111.247) (Remote host closed the connection)
2021-10-21 06:48:30 +0200kong4ndrew(~kong4ndre@199.247.111.247)
2021-10-21 06:49:57 +0200lavaman(~lavaman@98.38.249.169)
2021-10-21 06:51:51 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 258 seconds)
2021-10-21 06:54:26 +0200kong4ndrew(~kong4ndre@199.247.111.247) (Remote host closed the connection)
2021-10-21 06:54:26 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 260 seconds)
2021-10-21 06:54:28 +0200ArctVaulMarsHMPJ(~pjetcetal@128-71-225-36.broadband.corbina.ru) (Quit: EXIT)
2021-10-21 06:54:45 +0200kong4ndrew(~kong4ndre@199.247.111.247)
2021-10-21 06:56:25 +0200kong4ndrew(~kong4ndre@199.247.111.247) (Remote host closed the connection)
2021-10-21 06:56:42 +0200kong4ndrew(~kong4ndre@199.247.111.247)
2021-10-21 06:58:23 +0200kong4ndrew(~kong4ndre@199.247.111.247) (Remote host closed the connection)
2021-10-21 06:58:41 +0200kong4ndrew(~kong4ndre@199.247.111.247)
2021-10-21 06:59:57 +0200sedeki(~textual@user/sedeki)
2021-10-21 07:02:22 +0200kong4ndrew(~kong4ndre@199.247.111.247) (Remote host closed the connection)
2021-10-21 07:02:41 +0200kong4ndrew(~kong4ndre@199.247.111.247)
2021-10-21 07:04:21 +0200kong4ndrew(~kong4ndre@199.247.111.247) (Remote host closed the connection)
2021-10-21 07:04:38 +0200kong4ndrew(~kong4ndre@199.247.111.247)
2021-10-21 07:06:19 +0200kong4ndrew(~kong4ndre@199.247.111.247) (Remote host closed the connection)
2021-10-21 07:06:36 +0200kong4ndrew(~kong4ndre@199.247.111.247)
2021-10-21 07:06:46 +0200sedeki(~textual@user/sedeki) (Quit: Textual IRC Client: www.textualapp.com)
2021-10-21 07:08:26 +0200kong4ndrew(~kong4ndre@199.247.111.247) (Remote host closed the connection)
2021-10-21 07:08:44 +0200kong4ndrew(~kong4ndre@199.247.111.247)
2021-10-21 07:10:25 +0200kong4ndrew(~kong4ndre@199.247.111.247) (Remote host closed the connection)
2021-10-21 07:10:42 +0200kong4ndrew(~kong4ndre@199.247.111.247)
2021-10-21 07:12:23 +0200kong4ndrew(~kong4ndre@199.247.111.247) (Remote host closed the connection)
2021-10-21 07:12:40 +0200kong4ndrew(~kong4ndre@199.247.111.247)
2021-10-21 07:14:21 +0200kong4ndrew(~kong4ndre@199.247.111.247) (Remote host closed the connection)
2021-10-21 07:14:39 +0200kong4ndrew(~kong4ndre@199.247.111.247)
2021-10-21 07:14:47 +0200off^(~off@wsip-68-227-92-38.mc.at.cox.net) (Ping timeout: 264 seconds)
2021-10-21 07:16:27 +0200off^(~off@wsip-68-227-92-38.mc.at.cox.net)
2021-10-21 07:16:27 +0200kong4ndrew(~kong4ndre@199.247.111.247) (Remote host closed the connection)
2021-10-21 07:16:45 +0200kong4ndrew(~kong4ndre@199.247.111.247)
2021-10-21 07:16:47 +0200abrantesasf(~abrantesa@187.36.170.211) (Remote host closed the connection)
2021-10-21 07:18:27 +0200kong4ndrew(~kong4ndre@199.247.111.247) (Remote host closed the connection)
2021-10-21 07:18:45 +0200kong4ndrew(~kong4ndre@199.247.111.247)
2021-10-21 07:25:02 +0200kong4ndrew(~kong4ndre@199.247.111.247) (Remote host closed the connection)
2021-10-21 07:25:20 +0200kong4ndrew(~kong4ndre@199.247.111.247)
2021-10-21 07:27:52 +0200ski(~ski@remote12.chalmers.se)
2021-10-21 07:27:55 +0200kong4ndrew(~kong4ndre@199.247.111.247) (Remote host closed the connection)
2021-10-21 07:28:12 +0200kong4ndrew(~kong4ndre@199.247.111.247)
2021-10-21 07:29:53 +0200kong4ndrew(~kong4ndre@199.247.111.247) (Remote host closed the connection)
2021-10-21 07:33:30 +0200michalz(~michalz@185.246.204.93)
2021-10-21 07:39:24 +0200alzgh(~alzgh@user/alzgh)
2021-10-21 07:41:47 +0200zmt00(~zmt00@user/zmt00) (Ping timeout: 264 seconds)
2021-10-21 07:47:17 +0200InstX1(~delicacie@c-98-208-218-119.hsd1.fl.comcast.net)
2021-10-21 07:52:14 +0200hololeap(~hololeap@user/hololeap) (Remote host closed the connection)
2021-10-21 07:53:48 +0200hololeap(~hololeap@user/hololeap)
2021-10-21 07:54:13 +0200jlamothe(~jlamothe@198.251.61.229)
2021-10-21 08:03:28 +0200 <hololeap> @hoogle Comonad w => (w a -> b) -> w a -> w (a,b)
2021-10-21 08:03:30 +0200 <lambdabot> No results found
2021-10-21 08:04:29 +0200ubert(~Thunderbi@77.119.208.184.wireless.dyn.drei.com)
2021-10-21 08:04:40 +0200hololeap(~hololeap@user/hololeap) (Remote host closed the connection)
2021-10-21 08:06:01 +0200hololeap(~hololeap@user/hololeap)
2021-10-21 08:06:21 +0200remexre(~remexre@user/remexre) (Ping timeout: 245 seconds)
2021-10-21 08:06:41 +0200echoreply(~echoreply@2001:19f0:9002:1f3b:5400:ff:fe6f:8b8d) (Quit: WeeChat 2.8)
2021-10-21 08:06:59 +0200joeyh_(joeyh@kitenet.net)
2021-10-21 08:07:08 +0200statusbot(~statusbot@ec2-34-198-122-184.compute-1.amazonaws.com) (Read error: Connection reset by peer)
2021-10-21 08:07:11 +0200echoreply(~echoreply@45.32.163.16)
2021-10-21 08:07:19 +0200statusbot(~statusbot@ec2-34-198-122-184.compute-1.amazonaws.com)
2021-10-21 08:07:36 +0200joeyh(joeyh@kitenet.net) (Ping timeout: 245 seconds)
2021-10-21 08:07:36 +0200tomboy64(~tomboy64@user/tomboy64) (Ping timeout: 245 seconds)
2021-10-21 08:08:24 +0200remexre(~remexre@user/remexre)
2021-10-21 08:09:35 +0200tomboy64(~tomboy64@user/tomboy64)
2021-10-21 08:09:59 +0200takuan(~takuan@178-116-218-225.access.telenet.be)
2021-10-21 08:10:15 +0200 <InstX1> uouououo
2021-10-21 08:10:51 +0200tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
2021-10-21 08:14:36 +0200_xor(~xor@72.49.199.147) (Read error: Connection reset by peer)
2021-10-21 08:15:22 +0200 <hololeap> me too!
2021-10-21 08:15:46 +0200 <ski> % :type (<<=) . (extract &&&)
2021-10-21 08:15:46 +0200 <yahb> ski: Comonad w => (w a -> c') -> w a -> w (a, c')
2021-10-21 08:17:03 +0200 <hololeap> % :type (extract &&&)
2021-10-21 08:17:03 +0200 <yahb> hololeap: Comonad w => (w c -> c') -> w c -> (c, c')
2021-10-21 08:17:14 +0200 <hololeap> % :type (e&&&)
2021-10-21 08:17:14 +0200 <yahb> hololeap: ; <interactive>:1:2: error: Variable not in scope: e :: a b c
2021-10-21 08:17:16 +0200 <hololeap> % :type (&&&)
2021-10-21 08:17:16 +0200 <yahb> hololeap: Arrow a => a b c -> a b c' -> a b (c, c')
2021-10-21 08:17:18 +0200 <ski> % :type \f -> (=>> \wa -> (extract wa,f wa))
2021-10-21 08:17:18 +0200 <yahb> ski: Comonad w => (w a -> b) -> w a -> w (a, b)
2021-10-21 08:18:10 +0200Null_A(~null_a@2601:645:8700:2290:a94b:e46c:6690:e477)
2021-10-21 08:19:00 +0200_xor(~xor@72.49.199.147)
2021-10-21 08:19:42 +0200_xor(~xor@72.49.199.147) (Read error: Connection reset by peer)
2021-10-21 08:20:01 +0200_xor(~xor@72.49.199.147)
2021-10-21 08:21:31 +0200favonia(~favonia@user/favonia) (Remote host closed the connection)
2021-10-21 08:21:37 +0200 <hololeap> % :type \f w -> extend f (EnvT (extract w) w)
2021-10-21 08:21:37 +0200 <yahb> hololeap: ; <interactive>:1:19: error: Data constructor not in scope: EnvT :: t -> w1 t -> w a
2021-10-21 08:21:53 +0200 <hololeap> % import Control.Comonad.Env
2021-10-21 08:21:53 +0200 <yahb> hololeap:
2021-10-21 08:21:57 +0200 <hololeap> % :type \f w -> extend f (EnvT (extract w) w)
2021-10-21 08:21:57 +0200 <yahb> hololeap: Comonad w => (EnvT a w a -> b) -> w a -> EnvT a w b
2021-10-21 08:22:58 +0200 <hololeap> well my first one is probably easiest to understand :D
2021-10-21 08:23:19 +0200 <ski> what's it supposed to do ?
2021-10-21 08:23:33 +0200 <hololeap> it should be pretty clear from the type signature
2021-10-21 08:23:43 +0200 <ski> % :i EnvT
2021-10-21 08:23:43 +0200 <yahb> ski: type role EnvT representational representational nominal; type EnvT :: * -> (* -> *) -> * -> *; data EnvT e w a = EnvT e (w a); -- Defined in `Control.Comonad.Trans.Env'; instance [safe] (Monoid e, Applicative m) => Applicative (EnvT e m) -- Defined in `Control.Comonad.Trans.Env'; instance [safe] Functor w => Functor (EnvT e w) -- Defined in `Control.Comonad.Trans.Env'; instance [safe] Traversable w
2021-10-21 08:24:25 +0200 <hololeap> EnvT is irrelevant. I just want to use `extend` while keeping the original `a` around
2021-10-21 08:25:08 +0200jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2021-10-21 08:25:20 +0200 <hololeap> it doesn't even have to be it's own function, really... I could just extract `a` before running extend
2021-10-21 08:28:40 +0200mbuf(~Shakthi@171.61.241.145)
2021-10-21 08:29:11 +0200ubert(~Thunderbi@77.119.208.184.wireless.dyn.drei.com) (Ping timeout: 264 seconds)
2021-10-21 08:33:53 +0200Null_A(~null_a@2601:645:8700:2290:a94b:e46c:6690:e477) ()
2021-10-21 08:36:49 +0200fendor(~fendor@178.115.78.81.wireless.dyn.drei.com)
2021-10-21 08:37:37 +0200jakalx(~jakalx@base.jakalx.net)
2021-10-21 08:43:03 +0200dschrempf(~dominik@070-207.dynamic.dsl.fonira.net)
2021-10-21 08:45:19 +0200zaquest(~notzaques@5.128.210.178) (Ping timeout: 258 seconds)
2021-10-21 08:46:28 +0200timCF_(~timCF@m91-129-111-87.cust.tele2.ee) (Ping timeout: 258 seconds)
2021-10-21 08:46:52 +0200gehmehgeh(~user@user/gehmehgeh)
2021-10-21 08:47:56 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-10-21 08:48:07 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:2041:32a6:242d:4938)
2021-10-21 08:48:11 +0200zaquest(~notzaques@5.128.210.178)
2021-10-21 08:51:27 +0200jonathanx(~jonathan@178.174.176.109) (Ping timeout: 258 seconds)
2021-10-21 08:52:01 +0200mei(~mei@user/mei)
2021-10-21 08:56:19 +0200max22-(~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr)
2021-10-21 08:58:41 +0200benin1(~benin@106.198.91.7)
2021-10-21 08:59:37 +0200waleee(~waleee@h-98-128-228-119.NA.cust.bahnhof.se) (Quit: WeeChat 3.3)
2021-10-21 09:00:45 +0200benin(~benin@183.82.179.164) (Ping timeout: 260 seconds)
2021-10-21 09:00:45 +0200benin1benin
2021-10-21 09:00:59 +0200danso(~danso@23-233-111-52.cpe.pppoe.ca) (Ping timeout: 264 seconds)
2021-10-21 09:02:06 +0200jonathanx(~jonathan@dyn-8-sc.cdg.chalmers.se)
2021-10-21 09:04:15 +0200dhouthoo(~dhouthoo@178-117-36-167.access.telenet.be)
2021-10-21 09:04:20 +0200favonia(~favonia@user/favonia)
2021-10-21 09:05:00 +0200 <Inst> erm
2021-10-21 09:05:03 +0200 <Inst> could I have some help?
2021-10-21 09:05:43 +0200 <Inst> I already finished my textbook's intro information on typeclasses, but I'm still having difficulty concerning the notation used in :type
2021-10-21 09:05:50 +0200wonko(~wjc@62.115.229.50)
2021-10-21 09:06:02 +0200 <Inst> type a => a -> b -> a etc...
2021-10-21 09:06:09 +0200 <Inst> this is an existing mathematical notation, right?
2021-10-21 09:06:25 +0200 <Inst> what's the name of it? I'd like to be able to look up the notation individually
2021-10-21 09:07:09 +0200 <dibblego> "Haskell"
2021-10-21 09:09:13 +0200 <c_wraith> Haskell is a lot less based on math than some would have you believe.
2021-10-21 09:10:13 +0200Gurkenglas(~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de)
2021-10-21 09:14:01 +0200 <pavonia> Inst: What part of that is confusing to you?
2021-10-21 09:14:27 +0200danso(~danso@23-233-111-52.cpe.pppoe.ca)
2021-10-21 09:15:08 +0200 <Inst> on the left side, you have inputs, on the right side, you have outputs
2021-10-21 09:15:10 +0200 <Inst> that much I understand
2021-10-21 09:15:27 +0200 <Inst> why you have a -> a or a -> b -> a, on the other hand, I don't see the pattern
2021-10-21 09:15:32 +0200mei(~mei@user/mei) (Read error: Connection reset by peer)
2021-10-21 09:15:38 +0200 <dibblego> -> is right-associative
2021-10-21 09:15:42 +0200 <dibblego> a -> b -> a
2021-10-21 09:15:45 +0200 <dibblego> a -> (b -> a)
2021-10-21 09:16:07 +0200mei(~mei@user/mei)
2021-10-21 09:16:16 +0200 <dibblego> function application (space) is left-associative
2021-10-21 09:16:25 +0200 <dibblego> > const 7 "abc"
2021-10-21 09:16:25 +0200 <xsperry> a and b are type variables. names can be arbitrary, but there are some common conventions
2021-10-21 09:16:26 +0200 <lambdabot> 7
2021-10-21 09:16:30 +0200 <dibblego> > (const 7) "abc"
2021-10-21 09:16:32 +0200 <lambdabot> 7
2021-10-21 09:16:35 +0200 <Inst> i'll probably be fine on my own, reading existing texts
2021-10-21 09:16:51 +0200 <xsperry> :t id
2021-10-21 09:16:52 +0200 <lambdabot> a -> a
2021-10-21 09:17:04 +0200 <pavonia> Inst: x => y is not inputs and outputs, x are type constraints, y is the actual type of the function
2021-10-21 09:17:10 +0200 <xsperry> a in id declaration stands for any type
2021-10-21 09:17:30 +0200 <Inst> for x, y, then?
2021-10-21 09:18:47 +0200 <pavonia> I don't understand the question
2021-10-21 09:19:34 +0200 <Inst> read x => y as "for x, y" then?
2021-10-21 09:20:10 +0200 <xsperry> section left of => constrains types
2021-10-21 09:20:51 +0200 <yushyin> 'type y restricted by the context x'
2021-10-21 09:21:30 +0200 <xsperry> :t (+)
2021-10-21 09:21:31 +0200 <lambdabot> Num a => a -> a -> a
2021-10-21 09:21:37 +0200 <Inst> okay, fine
2021-10-21 09:21:42 +0200 <c_wraith> Haskell types do have an implicit top-level forall on all the type variables in them.
2021-10-21 09:21:43 +0200 <xsperry> type a has to be instance of Num typeclass
2021-10-21 09:21:55 +0200 <Inst> i see, thanks, still not getting it, but i have to leave soon
2021-10-21 09:21:55 +0200 <c_wraith> If that's a thing you're wondering about
2021-10-21 09:22:49 +0200 <Inst> heh
2021-10-21 09:22:50 +0200 <Inst> https://serokell.io/files/5x/5xzv88ej.TopReasons.png
2021-10-21 09:23:20 +0200 <ski> @type sort
2021-10-21 09:23:21 +0200 <lambdabot> Ord a => [a] -> [a]
2021-10-21 09:24:35 +0200 <ski> `sort' is a function taking a list of values of type `a' as input, and produces a list of values of type `a' as output, for all types `a', provided `a' is in the type class `Ord' (`Ord a' can be read as values of type `a' supporting ordering comparision)
2021-10-21 09:25:12 +0200 <ski> @type take
2021-10-21 09:25:13 +0200 <lambdabot> Int -> [a] -> [a]
2021-10-21 09:26:02 +0200 <ski> `take' is a function taking an `Int' as input, and producing another function as output, that in turn takes a list of `a's, producing a list of `a' -- again for all types `a' (no restriction this time)
2021-10-21 09:29:57 +0200chele(~chele@user/chele)
2021-10-21 09:30:18 +0200danso(~danso@23-233-111-52.cpe.pppoe.ca) (Ping timeout: 260 seconds)
2021-10-21 09:36:32 +0200jumper149(~jumper149@80.240.31.34)
2021-10-21 09:40:36 +0200danso(~danso@23-233-111-52.cpe.pppoe.ca)
2021-10-21 09:49:34 +0200acidjnk_new3(~acidjnk@p200300d0c703cb878d78f02b280dc416.dip0.t-ipconnect.de)
2021-10-21 09:52:57 +0200oskar_greda(~oskar_gre@84.65.227.20)
2021-10-21 09:54:17 +0200aegon(~mike@174.127.249.180) (Remote host closed the connection)
2021-10-21 09:57:14 +0200Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2021-10-21 10:00:07 +0200ubert(~Thunderbi@77.119.198.223.wireless.dyn.drei.com)
2021-10-21 10:01:06 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2021-10-21 10:08:07 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-10-21 10:08:14 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2021-10-21 10:10:16 +0200hendursa1(~weechat@user/hendursaga)
2021-10-21 10:11:51 +0200hendursaga(~weechat@user/hendursaga) (Ping timeout: 276 seconds)
2021-10-21 10:16:07 +0200kuribas(~user@ip-188-118-57-242.reverse.destiny.be)
2021-10-21 10:16:32 +0200LiaoTao_(~LiaoTao@gateway/tor-sasl/liaotao) (Remote host closed the connection)
2021-10-21 10:16:54 +0200coot(~coot@37.30.49.107.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
2021-10-21 10:17:16 +0200benin5(~benin@183.82.207.116)
2021-10-21 10:17:26 +0200LiaoTao(~LiaoTao@gateway/tor-sasl/liaotao)
2021-10-21 10:17:29 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2021-10-21 10:17:54 +0200geekosaur(~geekosaur@xmonad/geekosaur)
2021-10-21 10:19:30 +0200benin(~benin@106.198.91.7) (Ping timeout: 260 seconds)
2021-10-21 10:19:30 +0200benin5benin
2021-10-21 10:19:38 +0200ub(~Thunderbi@77.119.198.223.wireless.dyn.drei.com)
2021-10-21 10:20:04 +0200synthmeat(~synthmeat@user/synthmeat) (Ping timeout: 252 seconds)
2021-10-21 10:21:00 +0200tomsmeding(~tomsmedin@tomsmeding.com) (Quit: ZNC 1.8.2 - https://znc.in)
2021-10-21 10:22:18 +0200quintasan(~quassel@quintasan.pl) (Ping timeout: 258 seconds)
2021-10-21 10:22:31 +0200beaky(~beaky@2a03:b0c0:0:1010::1e:a001) (Read error: Connection reset by peer)
2021-10-21 10:26:20 +0200acidjnk_new(~acidjnk@p200300d0c703cb87897f933eeab9e85f.dip0.t-ipconnect.de)
2021-10-21 10:29:19 +0200oskar_greda(~oskar_gre@84.65.227.20) (Quit: Client closed)
2021-10-21 10:29:58 +0200acidjnk_new3(~acidjnk@p200300d0c703cb878d78f02b280dc416.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2021-10-21 10:30:33 +0200alzgh(~alzgh@user/alzgh) (Remote host closed the connection)
2021-10-21 10:30:53 +0200alzgh(~alzgh@user/alzgh)
2021-10-21 10:31:51 +0200jgeerds(~jgeerds@55d4da80.access.ecotel.net)
2021-10-21 10:35:31 +0200rune(sid21167@ilkley.irccloud.com) (Ping timeout: 245 seconds)
2021-10-21 10:36:27 +0200hubvu(sid495858@user/hubvu) (Read error: Connection reset by peer)
2021-10-21 10:36:29 +0200kupi(uid212005@hampstead.irccloud.com) (Ping timeout: 258 seconds)
2021-10-21 10:36:36 +0200hubvu(sid495858@user/hubvu)
2021-10-21 10:37:25 +0200acidjnk_new3(~acidjnk@pd9e0b933.dip0.t-ipconnect.de)
2021-10-21 10:38:01 +0200teehemkay(sid14792@lymington.irccloud.com) (Ping timeout: 245 seconds)
2021-10-21 10:38:13 +0200kupi(uid212005@id-212005.hampstead.irccloud.com)
2021-10-21 10:38:41 +0200rune(sid21167@id-21167.ilkley.irccloud.com)
2021-10-21 10:38:46 +0200Adeon(sid418992@lymington.irccloud.com) (Ping timeout: 252 seconds)
2021-10-21 10:39:16 +0200dermato(~dermatobr@cpe-70-114-219-76.austin.res.rr.com) (Ping timeout: 252 seconds)
2021-10-21 10:39:32 +0200teehemkay(sid14792@id-14792.lymington.irccloud.com)
2021-10-21 10:40:28 +0200Adeon(sid418992@id-418992.lymington.irccloud.com)
2021-10-21 10:40:35 +0200dermato(~dermatobr@cpe-70-114-219-76.austin.res.rr.com)
2021-10-21 10:40:42 +0200acidjnk_new(~acidjnk@p200300d0c703cb87897f933eeab9e85f.dip0.t-ipconnect.de) (Ping timeout: 258 seconds)
2021-10-21 10:42:24 +0200kristjansson_(sid126207@tinside.irccloud.com) (Ping timeout: 268 seconds)
2021-10-21 10:42:48 +0200kristjansson_(sid126207@id-126207.tinside.irccloud.com)
2021-10-21 10:43:56 +0200mcfilib(sid302703@user/mcfilib) (Ping timeout: 265 seconds)
2021-10-21 10:45:06 +0200sa(sid1055@tinside.irccloud.com) (Ping timeout: 245 seconds)
2021-10-21 10:45:59 +0200mrianbloom(sid350277@ilkley.irccloud.com) (Ping timeout: 264 seconds)
2021-10-21 10:46:08 +0200rond_(~rond_@2a01:115f:943:5e00:2fb4:6165:4fdd:161d)
2021-10-21 10:47:07 +0200mcfilib(sid302703@user/mcfilib)
2021-10-21 10:48:10 +0200sa(sid1055@id-1055.tinside.irccloud.com)
2021-10-21 10:48:59 +0200hook54321(sid149355@user/hook54321) (Ping timeout: 264 seconds)
2021-10-21 10:49:09 +0200mrianbloom(sid350277@id-350277.ilkley.irccloud.com)
2021-10-21 10:49:28 +0200Everything(~Everythin@37.115.210.35) (Quit: leaving)
2021-10-21 10:49:51 +0200quintasan(~quassel@quintasan.pl)
2021-10-21 10:50:32 +0200mikoto-chan(~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be)
2021-10-21 10:51:22 +0200lavaman(~lavaman@98.38.249.169)
2021-10-21 10:51:26 +0200hook54321(sid149355@user/hook54321)
2021-10-21 10:52:32 +0200coot(~coot@37.30.49.107.nat.umts.dynamic.t-mobile.pl)
2021-10-21 10:52:36 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:b5c0:69fb:2ebc:745e) (Remote host closed the connection)
2021-10-21 10:53:31 +0200Cajun(~Cajun@user/cajun) (Quit: Client closed)
2021-10-21 10:56:15 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 260 seconds)
2021-10-21 10:59:01 +0200synthmeat(~synthmeat@user/synthmeat)
2021-10-21 10:59:30 +0200Matheo_bis(~matheo@user/matheo-bis/x-4309430)
2021-10-21 11:04:32 +0200cfricke(~cfricke@user/cfricke)
2021-10-21 11:06:05 +0200beaky(~beaky@2a03:b0c0:0:1010::1e:a001)
2021-10-21 11:13:32 +0200mvk(~mvk@2607:fea8:5cc1:300::4b63)
2021-10-21 11:13:51 +0200anoe(~anoe@delanoe.org) (Quit: Lost terminal)
2021-10-21 11:18:00 +0200rond_(~rond_@2a01:115f:943:5e00:2fb4:6165:4fdd:161d) (Quit: Client closed)
2021-10-21 11:18:26 +0200rond_(~rond_@2a01:115f:943:5e00:2fb4:6165:4fdd:161d)
2021-10-21 11:19:05 +0200econo(uid147250@user/econo) (Quit: Connection closed for inactivity)
2021-10-21 11:20:53 +0200rdz1789(~rdz1789@139.47.40.241)
2021-10-21 11:24:58 +0200neurocyte0132889(~neurocyte@195.80.52.7)
2021-10-21 11:24:58 +0200neurocyte0132889(~neurocyte@195.80.52.7) (Changing host)
2021-10-21 11:24:58 +0200neurocyte0132889(~neurocyte@user/neurocyte)
2021-10-21 11:25:45 +0200shriekingnoise(~shrieking@186.137.144.80) (Quit: Quit)
2021-10-21 11:26:46 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-10-21 11:36:21 +0200mvk(~mvk@2607:fea8:5cc1:300::4b63) (Ping timeout: 245 seconds)
2021-10-21 11:41:04 +0200timCF(~timCF@200-149-20-81.sta.estpak.ee) (Quit: leaving)
2021-10-21 11:43:57 +0200peterhil(~peterhil@dsl-hkibng32-54fb56-2.dhcp.inet.fi)
2021-10-21 11:46:34 +0200danso(~danso@23-233-111-52.cpe.pppoe.ca) (Ping timeout: 260 seconds)
2021-10-21 11:47:48 +0200mikoto-chan(~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) (Quit: mikoto-chan)
2021-10-21 11:48:54 +0200pavonia(~user@user/siracusa) (Ping timeout: 260 seconds)
2021-10-21 11:50:30 +0200ubert(~Thunderbi@77.119.198.223.wireless.dyn.drei.com) (Ping timeout: 260 seconds)
2021-10-21 11:50:30 +0200ububert
2021-10-21 11:51:00 +0200Matheo_bis(~matheo@user/matheo-bis/x-4309430) (Quit: Konversation terminated!)
2021-10-21 11:53:00 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:b5c0:69fb:2ebc:745e)
2021-10-21 11:55:22 +0200pavonia(~user@user/siracusa)
2021-10-21 11:56:02 +0200pmk(~user@2a02:587:9414:7d03:fb87:7810:40ab:edc0)
2021-10-21 11:56:14 +0200azimut(~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
2021-10-21 11:56:42 +0200danso(~danso@23-233-111-52.cpe.pppoe.ca)
2021-10-21 11:57:59 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:b5c0:69fb:2ebc:745e) (Ping timeout: 264 seconds)
2021-10-21 11:59:51 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2021-10-21 12:00:09 +0200tinwood(~tinwood@canonical/tinwood) (Remote host closed the connection)
2021-10-21 12:00:37 +0200__monty__(~toonn@user/toonn)
2021-10-21 12:03:09 +0200tinwood(~tinwood@general.default.akavanagh.uk0.bigv.io)
2021-10-21 12:03:09 +0200tinwood(~tinwood@general.default.akavanagh.uk0.bigv.io) (Changing host)
2021-10-21 12:03:09 +0200tinwood(~tinwood@canonical/tinwood)
2021-10-21 12:06:26 +0200michalz(~michalz@185.246.204.93) (Remote host closed the connection)
2021-10-21 12:07:52 +0200azimut(~azimut@gateway/tor-sasl/azimut)
2021-10-21 12:09:49 +0200michalz(~michalz@185.246.204.73)
2021-10-21 12:15:41 +0200rond_(~rond_@2a01:115f:943:5e00:2fb4:6165:4fdd:161d) (Quit: Client closed)
2021-10-21 12:18:41 +0200Farzad(~FarzadBek@178.131.30.153)
2021-10-21 12:22:23 +0200LiaoTao(~LiaoTao@gateway/tor-sasl/liaotao) (Remote host closed the connection)
2021-10-21 12:22:40 +0200LiaoTao(~LiaoTao@gateway/tor-sasl/liaotao)
2021-10-21 12:28:44 +0200mmhat(~mmh@55d45798.access.ecotel.net)
2021-10-21 12:36:00 +0200MQ-17J(~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer)
2021-10-21 12:36:35 +0200dschrempf(~dominik@070-207.dynamic.dsl.fonira.net) (Ping timeout: 260 seconds)
2021-10-21 12:41:24 +0200ubert1(~Thunderbi@77.119.198.223.wireless.dyn.drei.com)
2021-10-21 12:41:26 +0200_bo(~bo@217.18.216.247)
2021-10-21 12:46:45 +0200MQ-17J(~MQ-17J@d192-24-122-179.try.wideopenwest.com)
2021-10-21 12:49:07 +0200MQ-17J(~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer)
2021-10-21 12:49:48 +0200gehmehgeh(~user@user/gehmehgeh) (Ping timeout: 276 seconds)
2021-10-21 12:50:27 +0200gensyst(gensyst@user/gensyst)
2021-10-21 12:50:55 +0200 <gensyst> I have a strange/noobish question about EDSLs, compiling Haskell code, and executables.
2021-10-21 12:50:55 +0200 <gensyst> Is it considered normal to have an EDSL in Haskell that "users" (e.g. programmers in my company) use to write their domain-specific "programs" (written in the EDSL) and run these programs by running GHC and running the binary executable over and over again?
2021-10-21 12:51:16 +0200 <gensyst> I think this is strange for two reasons:
2021-10-21 12:51:28 +0200 <gensyst> 1) You're running GHC every time for every little change in the domain-specific "program" (e.g. tweaking some parameter), so you're sort of "abusing" Haskell as a scripting language.
2021-10-21 12:51:29 +0200gehmehgeh(~user@user/gehmehgeh)
2021-10-21 12:51:45 +0200 <gensyst> 2) Isn't the whole point of Haskell to execute GHC once, get one binary executable once, and then run that executable thousands of times instead of... running GHC thousands of times and each of the thousand binary executables only once?
2021-10-21 12:51:51 +0200 <gensyst> Do you see what I mean? Some thoughts on this I'd appreciate a lot!
2021-10-21 12:53:52 +0200burnsidesLlama(~burnsides@dhcp168-036.wadham.ox.ac.uk)
2021-10-21 12:57:05 +0200 <lortabac> gensyst: if I understand correctly, they are using a Haskell library to make programs that they compile with GHC
2021-10-21 12:57:15 +0200 <lortabac> I don't see anything wrong with this
2021-10-21 12:57:39 +0200nsilv(~NSilv@host-87-15-180-17.retail.telecomitalia.it)
2021-10-21 12:57:43 +0200MQ-17J(~MQ-17J@d192-24-122-179.try.wideopenwest.com)
2021-10-21 12:57:57 +0200 <gensyst> lortabac, A part of me thinks it's a bit weird to be running "cabal build; cabal exec" all the time...
2021-10-21 12:58:03 +0200 <lortabac> except the requirement to install GHC, cabal etc.
2021-10-21 12:58:17 +0200 <lortabac> if these are non-tech people that's a different story
2021-10-21 12:58:42 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 258 seconds)
2021-10-21 12:58:48 +0200 <lortabac> in that case maybe you want to find a solution that doesn't require knowledge of Haskell compilation
2021-10-21 12:59:53 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-10-21 13:00:50 +0200alx741(~alx741@186.178.109.50)
2021-10-21 13:01:16 +0200 <gensyst> well they're technical enough to plug and play things together with haskell and run cabal.
2021-10-21 13:01:25 +0200 <gensyst> my question was just why this isn't strange lol
2021-10-21 13:01:48 +0200 <lortabac> another question is, do they already have all the cabal machinery?
2021-10-21 13:01:52 +0200 <gensyst> Hmm on the other hand, I am aware of e.g. the turtle library (shell scripting in Haskell), so scripting in Haskell isn't maybe all that weird
2021-10-21 13:02:42 +0200burnsidesLlama(~burnsides@dhcp168-036.wadham.ox.ac.uk) (Remote host closed the connection)
2021-10-21 13:02:48 +0200hololeap(~hololeap@user/hololeap) (Ping timeout: 276 seconds)
2021-10-21 13:02:55 +0200burnsidesLlama(~burnsides@dhcp168-036.wadham.ox.ac.uk)
2021-10-21 13:04:50 +0200 <gensyst> that part's not an issue. they can set up cabal
2021-10-21 13:04:50 +0200MQ-17J(~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer)
2021-10-21 13:05:11 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
2021-10-21 13:05:37 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-10-21 13:05:45 +0200hiruji(~hiruji@user/hiruji) (Ping timeout: 260 seconds)
2021-10-21 13:05:54 +0200nsilv(~NSilv@host-87-15-180-17.retail.telecomitalia.it) (Quit: WeeChat 2.7.1)
2021-10-21 13:08:21 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Quit: FinnElija)
2021-10-21 13:09:50 +0200MQ-17J(~MQ-17J@d192-24-122-179.try.wideopenwest.com)
2021-10-21 13:11:59 +0200nattiestnate(~nate@2001:448a:20a0:4134:25e:715f:d637:5263)
2021-10-21 13:12:00 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643)
2021-10-21 13:15:12 +0200ggVGc(~ggVGc@a.lowtech.earth)
2021-10-21 13:16:02 +0200Midjak(~Midjak@82-65-111-221.subs.proxad.net)
2021-10-21 13:16:49 +0200 <geekosaur> gensyst, it may not even require cabal. there's runghc
2021-10-21 13:17:12 +0200 <gensyst> yeah, i use runghc. makes it convenient
2021-10-21 13:17:18 +0200 <geekosaur> especially helpful if you're constantly making small changes and testing, you can skip the compile step. of coyurse it'll be slower since it's interpreted
2021-10-21 13:17:23 +0200lavaman(~lavaman@98.38.249.169)
2021-10-21 13:17:42 +0200 <gensyst> oh sorry. i wasn't aware of runghc actually lol. (confused it with ghcup)
2021-10-21 13:17:44 +0200 <ggVGc> wish there was a multi-module version of runghc
2021-10-21 13:17:50 +0200hiruji(~hiruji@user/hiruji)
2021-10-21 13:18:01 +0200 <ggVGc> but I guess that would become very complicated very fast
2021-10-21 13:18:17 +0200 <gensyst> geekosaur, but is this practice of EDSL & running ghc over and over again considered "natural"?
2021-10-21 13:18:35 +0200off^(~off@wsip-68-227-92-38.mc.at.cox.net) (Ping timeout: 260 seconds)
2021-10-21 13:18:38 +0200 <hughjfchen> gensyst: i think you can take a look at propellor
2021-10-21 13:19:03 +0200 <geekosaur> "natural" is in the eye of the beholder. if it works for you, that's enough
2021-10-21 13:19:07 +0200 <hughjfchen> it
2021-10-21 13:19:50 +0200 <ggVGc> is propellor like ansible?
2021-10-21 13:20:05 +0200 <hughjfchen> is a config management using haskell lang to write config property
2021-10-21 13:20:25 +0200 <ggVGc> does it serve the same use-cases one would use ansible for?\
2021-10-21 13:21:03 +0200 <ggVGc> seems like it
2021-10-21 13:21:22 +0200 <merijn> ggVGc: cabal-install supports scripting so you can use it like runghc, but with library dependencies :p
2021-10-21 13:21:47 +0200 <merijn> ggVGc: The documentation of this feature can be called...Spartan, though :p
2021-10-21 13:21:50 +0200 <ggVGc> merijn: realy? I was looking for that a while back, but couldn't find anything
2021-10-21 13:22:12 +0200 <merijn> Has existed for, at least, 2 years
2021-10-21 13:22:23 +0200 <merijn> ggVGc: But I don't think hvr ever got around to writing docs
2021-10-21 13:23:13 +0200 <merijn> ggVGc: https://github.com/haskell/cabal/issues/3843
2021-10-21 13:25:36 +0200MQ-17J(~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer)
2021-10-21 13:26:06 +0200 <ggVGc> nice, thanks! Will have to give it a go when I get back to my haskell project, after these two physics exams which I am sure to fail
2021-10-21 13:27:22 +0200lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-10-21 13:28:54 +0200 <gensyst> geekosaur, hmmmmm ok.
2021-10-21 13:30:04 +0200 <merijn> I mean, basically this question boils down to "what do you think of staged compilation?"
2021-10-21 13:30:27 +0200 <merijn> And my opinion would generally be "staged compilation is great, I wish GHC had better support!"
2021-10-21 13:31:04 +0200 <merijn> TH is kinda staged compilation, but with fucky interactions and lack of clear boundaries/separation
2021-10-21 13:31:10 +0200 <gensyst> well, doesn't EDSL sort of *imply* that's the way you're going to do things?
2021-10-21 13:31:19 +0200MQ-17J(~MQ-17J@d192-24-122-179.try.wideopenwest.com)
2021-10-21 13:31:47 +0200 <gensyst> it implies you're going to be doing stuff at Haskell level (to benefit from type system) instead of reusing final binary executables (or composing such binary executables)
2021-10-21 13:32:25 +0200ubert(~Thunderbi@77.119.198.223.wireless.dyn.drei.com) (Remote host closed the connection)
2021-10-21 13:32:25 +0200ubert1ubert
2021-10-21 13:32:54 +0200 <gensyst> the question was basically, is it "ok" to compile all the time. i think you guys are saying there's nothing wrong with it, so i'll just do it i guess :D
2021-10-21 13:33:27 +0200Rembane_shakes fist at TH
2021-10-21 13:34:01 +0200 <geekosaur> gensyst, take a look at xmonad. you may be mod-q recompiling quite a bit at first until you decide you're satisfied with the result. (of course you may then not touch it for years…)
2021-10-21 13:35:58 +0200 <geekosaur> (xmonad = window manager EDSL)
2021-10-21 13:35:58 +0200MQ-17J(~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer)
2021-10-21 13:36:09 +0200 <gensyst> ok that's cool
2021-10-21 13:36:17 +0200 <gensyst> gives me more confidence
2021-10-21 13:36:24 +0200 <gensyst> this is the way :D
2021-10-21 13:39:20 +0200osa1(~osa1@178.233.26.94)
2021-10-21 13:40:26 +0200 <gensyst> geekosaur, hmm wow. somehow xmonad will use this new .o file? allowing you to plug and play
2021-10-21 13:40:42 +0200 <gensyst> at run time
2021-10-21 13:40:48 +0200 <gensyst> how...
2021-10-21 13:41:03 +0200 <osa1> Does QuickCheck's shrink (https://hackage.haskell.org/package/QuickCheck-2.10/docs/Test-QuickCheck-Arbitrary.html#v:shrink) do depth-first or breadth-first search? When it finds a shrunk example that fails, does it search further (if so, for how long?), or stop and return the first one it finds?
2021-10-21 13:42:36 +0200 <ggVGc> merijn: maybe I misunderstood. Should this allow me to make import another file in the same directory in a Main.hs file?
2021-10-21 13:42:43 +0200 <ggVGc> -make
2021-10-21 13:43:10 +0200 <ggVGc> merijn: e.g https://gist.github.com/0792e113c9b894f854e4675b221aefc6 and then have a Test/Foo.hs file in the same directory
2021-10-21 13:43:49 +0200 <ggVGc> This is what I get, https://gist.github.com/c595db27571a9ac7da18d92e417b85bd
2021-10-21 13:44:03 +0200dschrempf(~dominik@070-207.dynamic.dsl.fonira.net)
2021-10-21 13:44:36 +0200neurocyte0132889(~neurocyte@user/neurocyte) (Read error: Connection reset by peer)
2021-10-21 13:44:59 +0200neurocyte0132889(~neurocyte@195.80.52.7)
2021-10-21 13:44:59 +0200neurocyte0132889(~neurocyte@195.80.52.7) (Changing host)
2021-10-21 13:44:59 +0200neurocyte0132889(~neurocyte@user/neurocyte)
2021-10-21 13:47:27 +0200lavaman(~lavaman@98.38.249.169)
2021-10-21 13:48:52 +0200Guest28(~Guest28@2601:281:d480:2ce0:28de:914f:fac6:10b7)
2021-10-21 13:49:17 +0200 <geekosaur> xmonad compiles the new config and then does a Unix exec()on it, replacing itself with the new config
2021-10-21 13:49:34 +0200 <geekosaur> there is a way tio do binary plugins in Haskell but it's kinda painful
2021-10-21 13:49:50 +0200 <geekosaur> @hackage plugins
2021-10-21 13:49:50 +0200 <lambdabot> https://hackage.haskell.org/package/plugins
2021-10-21 13:49:56 +0200 <gensyst> ok great!
2021-10-21 13:50:08 +0200burnsidesLlama(~burnsides@dhcp168-036.wadham.ox.ac.uk) (Remote host closed the connection)
2021-10-21 13:50:10 +0200 <gensyst> thank you all for these tips and tricks!
2021-10-21 13:50:17 +0200 <gensyst> i can carry on now with confidence
2021-10-21 13:51:00 +0200burnsidesLlama(~burnsides@dhcp168-036.wadham.ox.ac.uk)
2021-10-21 13:52:17 +0200 <merijn> ggVGc: Not sure about that. I meant more that you can depend on packages beyond just what's normally pre-installed
2021-10-21 13:54:05 +0200gensyst(gensyst@user/gensyst) (Quit: Leaving)
2021-10-21 13:55:08 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:b5c0:69fb:2ebc:745e)
2021-10-21 13:55:40 +0200burnsidesLlama(~burnsides@dhcp168-036.wadham.ox.ac.uk) (Ping timeout: 252 seconds)
2021-10-21 13:57:51 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2021-10-21 13:59:10 +0200burnsidesLlama(~burnsides@dhcp168-036.wadham.ox.ac.uk)
2021-10-21 13:59:31 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:b5c0:69fb:2ebc:745e) (Ping timeout: 252 seconds)
2021-10-21 14:03:06 +0200max22-(~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) (Ping timeout: 258 seconds)
2021-10-21 14:06:33 +0200MQ-17J(~MQ-17J@d192-24-122-179.try.wideopenwest.com)
2021-10-21 14:08:03 +0200neurocyte0132889(~neurocyte@user/neurocyte) (Quit: The Lounge - https://thelounge.chat)
2021-10-21 14:09:00 +0200MQ-17J(~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer)
2021-10-21 14:10:32 +0200MQ-17J(~MQ-17J@d192-24-122-179.try.wideopenwest.com)
2021-10-21 14:11:08 +0200neurocyte0132889(~neurocyte@195.80.52.7)
2021-10-21 14:11:08 +0200neurocyte0132889(~neurocyte@195.80.52.7) (Changing host)
2021-10-21 14:11:08 +0200neurocyte0132889(~neurocyte@user/neurocyte)
2021-10-21 14:19:25 +0200__monty__(~toonn@user/toonn) (Quit: leaving)
2021-10-21 14:22:14 +0200enoq(~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7)
2021-10-21 14:22:25 +0200osa1(~osa1@178.233.26.94) ()
2021-10-21 14:26:41 +0200LiaoTao(~LiaoTao@gateway/tor-sasl/liaotao) (Remote host closed the connection)
2021-10-21 14:28:14 +0200jespada(~jespada@2803:9800:9842:7a62:9560:3718:bb2f:f5ee)
2021-10-21 14:29:08 +0200LiaoTao(~LiaoTao@gateway/tor-sasl/liaotao)
2021-10-21 14:31:18 +0200LiaoTao(~LiaoTao@gateway/tor-sasl/liaotao) (Remote host closed the connection)
2021-10-21 14:31:33 +0200LiaoTao(~LiaoTao@gateway/tor-sasl/liaotao)
2021-10-21 14:31:53 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
2021-10-21 14:34:08 +0200slowButPresent(~slowButPr@user/slowbutpresent)
2021-10-21 14:34:09 +0200MQ-17J(~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer)
2021-10-21 14:34:51 +0200MQ-17J(~MQ-17J@8.21.10.17)
2021-10-21 14:35:24 +0200coot(~coot@37.30.49.107.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
2021-10-21 14:37:38 +0200favonia(~favonia@user/favonia) (Remote host closed the connection)
2021-10-21 14:37:59 +0200favonia(~favonia@user/favonia)
2021-10-21 14:42:49 +0200lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-10-21 14:42:58 +0200favonia(~favonia@user/favonia) (Ping timeout: 260 seconds)
2021-10-21 14:43:41 +0200machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca)
2021-10-21 14:44:15 +0200burnsidesLlama(~burnsides@dhcp168-036.wadham.ox.ac.uk) (Remote host closed the connection)
2021-10-21 14:47:56 +0200Guest28(~Guest28@2601:281:d480:2ce0:28de:914f:fac6:10b7) (Quit: Client closed)
2021-10-21 14:49:48 +0200max22-(~maxime@2a01cb0883359800acc7df5c88e6f73e.ipv6.abo.wanadoo.fr)
2021-10-21 14:49:58 +0200bontaq(~user@ool-45779fe5.dyn.optonline.net)
2021-10-21 14:50:25 +0200nattiestnate(~nate@2001:448a:20a0:4134:25e:715f:d637:5263) (Quit: WeeChat 3.3)
2021-10-21 14:53:37 +0200zebrag(~chris@user/zebrag)
2021-10-21 14:54:58 +0200 <ggVGc> merijn: might still start using this for my lab reports...
2021-10-21 14:55:37 +0200ixosa(~xaaxor@251.222.198.146.dyn.plus.net)
2021-10-21 14:55:48 +0200 <ggVGc> was contemplating taking my lab notes in haskell to easily have the calculated results from the same source when I write the report, but hesitated because of execution complications. So currently unhappily using python
2021-10-21 15:01:09 +0200unit73e(~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291)
2021-10-21 15:01:45 +0200ixosa(~xaaxor@251.222.198.146.dyn.plus.net) (Ping timeout: 258 seconds)
2021-10-21 15:02:30 +0200iqofi(~ixosa@217.138.222.92)
2021-10-21 15:05:34 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2021-10-21 15:07:16 +0200geekosaur(~geekosaur@xmonad/geekosaur)
2021-10-21 15:08:16 +0200floridmarshmallo(~nate@pool-100-19-29-41.phlapa.fios.verizon.net)
2021-10-21 15:08:41 +0200floridmarshmallo(~nate@pool-100-19-29-41.phlapa.fios.verizon.net) (Client Quit)
2021-10-21 15:13:21 +0200lavaman(~lavaman@98.38.249.169)
2021-10-21 15:15:09 +0200jumper149(~jumper149@80.240.31.34) (Quit: WeeChat 3.2)
2021-10-21 15:17:59 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 265 seconds)
2021-10-21 15:21:29 +0200coot(~coot@37.30.49.107.nat.umts.dynamic.t-mobile.pl)
2021-10-21 15:21:56 +0200sagax(~sagax_nb@user/sagax)
2021-10-21 15:22:08 +0200burnsidesLlama(~burnsides@dhcp168-036.wadham.ox.ac.uk)
2021-10-21 15:23:26 +0200benin(~benin@183.82.207.116) (Quit: The Lounge - https://thelounge.chat)
2021-10-21 15:26:50 +0200burnsidesLlama(~burnsides@dhcp168-036.wadham.ox.ac.uk) (Ping timeout: 260 seconds)
2021-10-21 15:28:40 +0200bontaq(~user@ool-45779fe5.dyn.optonline.net) (Ping timeout: 260 seconds)
2021-10-21 15:29:05 +0200floridmarshmallo(~quickspin@pool-100-19-29-41.phlapa.fios.verizon.net)
2021-10-21 15:29:28 +0200unit73e(~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291) (Quit: Leaving)
2021-10-21 15:29:34 +0200floridmarshmallo(~quickspin@pool-100-19-29-41.phlapa.fios.verizon.net) (Client Quit)
2021-10-21 15:30:41 +0200unit73e(~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291)
2021-10-21 15:35:05 +0200xiongxin(~quassel@113.116.32.4)
2021-10-21 15:37:21 +0200lavaman(~lavaman@98.38.249.169)
2021-10-21 15:37:36 +0200lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-10-21 15:37:55 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2021-10-21 15:38:46 +0200dschrempf(~dominik@070-207.dynamic.dsl.fonira.net) (Ping timeout: 265 seconds)
2021-10-21 15:39:19 +0200mniip(mniip@libera/staff/mniip) (Remote host closed the connection)
2021-10-21 15:40:11 +0200favonia(~favonia@user/favonia)
2021-10-21 15:41:30 +0200michalz(~michalz@185.246.204.73) (Ping timeout: 260 seconds)
2021-10-21 15:44:01 +0200unit73e(~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291) (Ping timeout: 252 seconds)
2021-10-21 15:44:12 +0200mniip(~mniip@libera/staff/mniip)
2021-10-21 15:47:22 +0200favonia(~favonia@user/favonia) (Ping timeout: 260 seconds)
2021-10-21 15:47:37 +0200hippoid(~idris@184.105.6.88)
2021-10-21 15:48:05 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-10-21 15:48:05 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-10-21 15:48:05 +0200wroathe(~wroathe@user/wroathe)
2021-10-21 15:48:34 +0200 <hippoid> :t \f g x y -> f (g x y)
2021-10-21 15:48:35 +0200 <lambdabot> (t1 -> t2) -> (t3 -> t4 -> t1) -> t3 -> t4 -> t2
2021-10-21 15:49:13 +0200 <hippoid> I want to create a type alias for that function type
2021-10-21 15:49:33 +0200 <hippoid> (t1 -> t2) -> (t3 -> t4 -> t1) -> t3 -> t4 -> t2
2021-10-21 15:50:03 +0200 <hippoid> type F = (t1 -> t2) -> (t3 -> t4 -> t1) -> t3 -> t4 -> t2
2021-10-21 15:50:13 +0200 <hippoid> does not work
2021-10-21 15:50:26 +0200jgeerds(~jgeerds@55d4da80.access.ecotel.net) (Ping timeout: 258 seconds)
2021-10-21 15:51:24 +0200 <geekosaur> no, you really need to pass the types as parameters
2021-10-21 15:51:57 +0200 <geekosaur> since otherwise they can't unify with any other type (and how would you specify which type is which?)
2021-10-21 15:52:24 +0200 <geekosaur> type F t1 t2 t3 t4 = ...
2021-10-21 15:54:23 +0200MQ-17J(~MQ-17J@8.21.10.17) (Ping timeout: 264 seconds)
2021-10-21 15:55:21 +0200 <hippoid> geekosaur: I don't know where to start to answer your question "how would you specify which type is which"
2021-10-21 15:55:53 +0200burnsidesLlama(~burnsides@dhcp168-036.wadham.ox.ac.uk)
2021-10-21 15:56:01 +0200 <merijn> hippoid: Let's rewind, what do you think the behaviour of that alias would be?
2021-10-21 15:56:27 +0200 <pavonia> Perhaps they actually want type F = forall t1 t2 t3 t4. ...
2021-10-21 15:56:29 +0200 <merijn> geekosaur: I mean, it could be a Rank2 alias, but I find that questionable as well
2021-10-21 15:56:36 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:b5c0:69fb:2ebc:745e)
2021-10-21 15:56:57 +0200 <merijn> pavonia: Yes, I realise that that *might* be the solution. That's why I asked why/what they want it to do
2021-10-21 15:57:16 +0200 <merijn> pavonia: Preemptively handing out rope like Rank2 types is generally...not helpful to beginners :p
2021-10-21 15:58:01 +0200 <hippoid> merijn: to rewind further, I'm trying to do Eta reduction on the function \f g x y -> f (g x y) to get it into point-free style, and I'm using QuickCheck to test my equivalances. I want to pass the function into my property test, and that's why I want an alias for that long function type
2021-10-21 15:58:15 +0200 <pavonia> Fair enough
2021-10-21 16:00:18 +0200dschrempf(~dominik@070-207.dynamic.dsl.fonira.net)
2021-10-21 16:00:21 +0200 <hippoid> like this https://paste.tomsmeding.com/jFMbE1G6
2021-10-21 16:00:42 +0200Kaiepi(~Kaiepi@156.34.44.192) (Remote host closed the connection)
2021-10-21 16:00:44 +0200 <lyxia> For QuickCheck you will have to choose some concrete types for t1 ... t4 anyway
2021-10-21 16:01:29 +0200burnsidesLlama(~burnsides@dhcp168-036.wadham.ox.ac.uk) (Ping timeout: 265 seconds)
2021-10-21 16:01:35 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:b5c0:69fb:2ebc:745e) (Ping timeout: 264 seconds)
2021-10-21 16:03:42 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 260 seconds)
2021-10-21 16:04:38 +0200enoq(~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7) (Quit: enoq)
2021-10-21 16:06:11 +0200 <hippoid> ok, i got it working well enough. thanks!
2021-10-21 16:08:12 +0200lavaman(~lavaman@98.38.249.169)
2021-10-21 16:09:27 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-10-21 16:09:45 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2021-10-21 16:10:48 +0200xiongxin(~quassel@113.116.32.4) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
2021-10-21 16:11:08 +0200favonia(~favonia@user/favonia)
2021-10-21 16:11:40 +0200hnOsmium0001(uid453710@id-453710.hampstead.irccloud.com)
2021-10-21 16:13:00 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 260 seconds)
2021-10-21 16:14:10 +0200Gurkenglas(~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 260 seconds)
2021-10-21 16:15:20 +0200rdz1789(~rdz1789@139.47.40.241) (Ping timeout: 260 seconds)
2021-10-21 16:17:24 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:2041:32a6:242d:4938) (Quit: WeeChat 2.8)
2021-10-21 16:19:35 +0200hippoid(~idris@184.105.6.88) (Quit: leaving)
2021-10-21 16:20:30 +0200jonathanx(~jonathan@dyn-8-sc.cdg.chalmers.se) (Ping timeout: 260 seconds)
2021-10-21 16:20:41 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-10-21 16:20:41 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-10-21 16:20:41 +0200wroathe(~wroathe@user/wroathe)
2021-10-21 16:20:41 +0200 <AWizzArd> There are plenty streaming libs for GHC. Pipes. Conduit. Streams. Streamly. To name a few.
2021-10-21 16:21:59 +0200 <AWizzArd> Do they all offer a way to take a set of items out of the stream (i.e. a certain number of bytes, a number of lines, like `take n`) and get ([a], RestOfStream)?
2021-10-21 16:23:05 +0200ystael(~ystael@user/ystael) (Quit: Lost terminal)
2021-10-21 16:23:08 +0200Sgeo(~Sgeo@user/sgeo)
2021-10-21 16:24:01 +0200waleee(~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
2021-10-21 16:24:47 +0200shriekingnoise(~shrieking@186.137.144.80)
2021-10-21 16:25:15 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 260 seconds)
2021-10-21 16:26:47 +0200acidjnk_new3(~acidjnk@pd9e0b933.dip0.t-ipconnect.de) (Ping timeout: 264 seconds)
2021-10-21 16:29:17 +0200gehmehgeh(~user@user/gehmehgeh) (Remote host closed the connection)
2021-10-21 16:29:19 +0200 <adamCS> There's no way I can reorder type parameters via a type synonym or type family such that I can partially apply against the result, right? I want "PipeStream m a = Pipes.Producer a m ()" where I can then use "PipeStream m" or even "PipeStream". But there's no way, right? I have to newtype it?
2021-10-21 16:29:38 +0200 <merijn> adamCS: No, because that is equivalent in power to type level lambda's
2021-10-21 16:30:07 +0200gehmehgeh(~user@user/gehmehgeh)
2021-10-21 16:30:09 +0200 <merijn> (no, as in, no that isn't possible)
2021-10-21 16:30:21 +0200 <adamCS> merijn: yeah. That's what I thought...without the theoretical bit. Thanks!
2021-10-21 16:32:30 +0200 <AWizzArd> adamCS: Are you currently working with the Pipes streaming library?
2021-10-21 16:34:28 +0200cross_cross
2021-10-21 16:34:34 +0200 <adamCS> AWizzArd: Yes, sort of. I'm working on some enhancements to the "Frames" library, which uses Pipes. Part of the work I did is to switch to using streamly where Frames used Pipes. But now I'm trying to merge it all and thus trying to unify (a subset of) the interfaces via a record-of-functions.
2021-10-21 16:35:32 +0200rond_(~rond_@2a01:115f:943:5e00:7fe4:4b4a:851b:ca4d)
2021-10-21 16:35:44 +0200 <adamCS> But the different kind signatures of a streamly stream (t :: (Type -> Type) -> Type -> Type) and a Pipes producer (p :: Type -> (Type -> Type) -> Type -> Type)) are proving...annoying.
2021-10-21 16:36:24 +0200 <AWizzArd> adamCS: Interesting. You might be able to help with some insight. If I have a source of lines (i.e. lists) of Text, something such as `Stream [Text]`. Can I then use Pipes to give me 1-n of those [Text], and a stream that contains the rest (if any)?
2021-10-21 16:36:39 +0200 <merijn> AWizzArd: You want pipes-parse
2021-10-21 16:36:43 +0200 <merijn> @hackage pipes-parse
2021-10-21 16:36:44 +0200 <lambdabot> https://hackage.haskell.org/package/pipes-parse
2021-10-21 16:37:54 +0200 <AWizzArd> merijn: I want to implement functionality for reusing parsing streams of lines of Texts. It will eventually be used to validate/parse CSV files, but it could work on any source for lines of columns.
2021-10-21 16:38:30 +0200 <AWizzArd> merijn: but I want to decouple it from a concrete CSV lib and a concrete streaming lib. Instead my type class will offer the functionality against which a user can write an implementation.
2021-10-21 16:39:07 +0200 <AWizzArd> merijn: the purpose is to factor out the part where the lines are counted and good error reporting and parsing takes place, which is repetitive.
2021-10-21 16:39:34 +0200 <AWizzArd> merijn: on top of it I want something comparable to Json-Schema.
2021-10-21 16:39:46 +0200TMA(tma@twin.jikos.cz)
2021-10-21 16:41:16 +0200 <merijn> AWizzArd: pipes-parse isn't really parsing in the sense you're thinking off
2021-10-21 16:41:24 +0200 <AWizzArd> Doing Abelson&Sussman’s ”Programming by wishful thinking” I would like to get a couple of rows and interate over them. `let ([row], rest) = readFromStream 1 stream`
2021-10-21 16:41:38 +0200 <merijn> pipes itself simply does *not* allow "take N lines and return the remainder"
2021-10-21 16:41:49 +0200 <merijn> You are not allowed to have a remainder with pipes
2021-10-21 16:41:58 +0200 <AWizzArd> merijn: okay, that info already helps
2021-10-21 16:42:17 +0200cfricke(~cfricke@user/cfricke) (Quit: WeeChat 3.3)
2021-10-21 16:42:34 +0200 <merijn> pipes-parse is basically a StateT with the State being a producer, allowing you to pass a producer (i.e. remaining input) to a future stage when you're done consuming
2021-10-21 16:43:18 +0200 <AWizzArd> merijn: essentially I just would like to work with the type [[Text]], which just may blow up memory if an input csv file is 300 GB in size. So I couldn’t use a csv lib directly but instead plug in any of the streaming libs.
2021-10-21 16:43:27 +0200CiaoSen(~Jura@p5dcc1a24.dip0.t-ipconnect.de)
2021-10-21 16:43:52 +0200lavaman(~lavaman@98.38.249.169)
2021-10-21 16:44:08 +0200 <merijn> As someone who has tried wrapping several streaming libs using a single API: Just don't
2021-10-21 16:44:19 +0200dsrt^(~dsrt@wsip-68-227-92-38.mc.at.cox.net)
2021-10-21 16:44:26 +0200 <merijn> It sucks in all sorts of annoying ways
2021-10-21 16:45:35 +0200 <AWizzArd> merijn: I don't want to complect in a concrete implementation. To my users I want to offer something like `getNextLines` (i.e. take on any streaming lib). The user will find an already parsed row or a detailed error report and can decide what to do.
2021-10-21 16:46:15 +0200 <AWizzArd> merijn: when this is done I want to write an implementation for those different streaming libs, so the user will be free to choose any, and the `getNextLines` magic will just do its work.
2021-10-21 16:47:36 +0200burnsidesLlama(~burnsides@dhcp168-036.wadham.ox.ac.uk)
2021-10-21 16:48:19 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 258 seconds)
2021-10-21 16:50:28 +0200mc47(~mc47@xmonad/TheMC47)
2021-10-21 16:50:30 +0200 <lyxia> Is there a proof that ZipList can't be a monad?
2021-10-21 16:50:35 +0200 <merijn> AWizzArd: Probably wanna study how things like the attoparsec wrappers for pipes/conduit are done and adjust your API to play nicely with that
2021-10-21 16:50:41 +0200 <merijn> lyxia: Easy: What's return do?
2021-10-21 16:51:07 +0200 <AWizzArd> merijn: sounds like a starting point.
2021-10-21 16:52:05 +0200burnsidesLlama(~burnsides@dhcp168-036.wadham.ox.ac.uk) (Ping timeout: 260 seconds)
2021-10-21 16:52:16 +0200 <lyxia> merijn: return = ZipList . repeat
2021-10-21 16:52:35 +0200unit73e(~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291)
2021-10-21 16:53:32 +0200 <merijn> lyxia: Ok, so now how's >>= gonna work if I do "return x >>= f"
2021-10-21 16:53:44 +0200 <merijn> Supposedly "return x >>= f" = "f x"
2021-10-21 16:53:52 +0200 <merijn> But now I suddenly have infinite 'x's
2021-10-21 16:54:23 +0200Kaiepi(~Kaiepi@156.34.44.192)
2021-10-21 16:54:28 +0200 <merijn> lyxia: Applicative works because <*> sees two ZipLists and ends up truncating to the shorter one
2021-10-21 16:55:57 +0200 <lyxia> Well I can try to take the diagonal of repeat (f x)
2021-10-21 16:56:08 +0200 <lyxia> I know my attempt is gonna fail, but that's no proof that all attempts are going to fail.
2021-10-21 16:57:25 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:de8d:bf1f:3d7:7a94)
2021-10-21 17:01:03 +0200burnsidesLlama(~burnsides@dhcp168-036.wadham.ox.ac.uk)
2021-10-21 17:01:56 +0200zmt00(~zmt00@user/zmt00)
2021-10-21 17:05:54 +0200 <lyxia> In fact it will satisfy the identity laws, so if there is an argument to be made it must involve the associativity law.
2021-10-21 17:07:10 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
2021-10-21 17:08:29 +0200nefercheprure(tma@twin.jikos.cz)
2021-10-21 17:08:29 +0200nefercheprure(tma@twin.jikos.cz) (Client Quit)
2021-10-21 17:08:51 +0200_ht(~quassel@82-169-194-8.biz.kpn.net)
2021-10-21 17:11:32 +0200dsrt^(~dsrt@wsip-68-227-92-38.mc.at.cox.net) (Remote host closed the connection)
2021-10-21 17:14:15 +0200ArtVandelayer(~ArtVandel@ip174-68-147-20.lv.lv.cox.net) (Ping timeout: 260 seconds)
2021-10-21 17:24:30 +0200segfaultfizzbuzz(~segfaultf@135-180-0-138.static.sonic.net)
2021-10-21 17:26:35 +0200jgeerds(~jgeerds@55d4da80.access.ecotel.net)
2021-10-21 17:27:38 +0200 <codolio> lyxia: It takes some work, but the idea is that to be associative, you'd need to figure out the diagonal of a 3-dimensional cube, but the operations can only act on squares. Collapsing squares can eliminate things that would be holes in the diagonal in 3 dimensions.
2021-10-21 17:30:11 +0200rdz1789(~rdz1789@139.47.40.241)
2021-10-21 17:31:47 +0200 <codolio> Or maybe it's the opposite in some cases, now that I think of it.
2021-10-21 17:32:34 +0200 <lyxia> the opposite of what?
2021-10-21 17:32:47 +0200 <codolio> There are squares with holes in the diagonal but those holes don't form part of the 3-dimensional diagonal, so you shouldn't artificially truncate.
2021-10-21 17:34:52 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-10-21 17:35:29 +0200brettgilio(~brettgili@x-node.gq) (Quit: Leaving...)
2021-10-21 17:35:32 +0200 <codolio> Maybe it's just a matter of perspective on how you think the monad might actually work out.
2021-10-21 17:36:14 +0200favonia(~favonia@user/favonia) (Ping timeout: 258 seconds)
2021-10-21 17:37:55 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:de8d:bf1f:3d7:7a94) (Quit: WeeChat 2.8)
2021-10-21 17:38:46 +0200Null_A(~null_a@2601:645:8700:2290:a891:322d:b92c:f184)
2021-10-21 17:39:22 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
2021-10-21 17:40:38 +0200brettgilio(~brettgili@x-node.gq)
2021-10-21 17:42:27 +0200LimeGolem(~LimeGolem@82.40.121.143)
2021-10-21 17:46:23 +0200codoliodolio
2021-10-21 17:47:03 +0200favonia(~favonia@user/favonia)
2021-10-21 17:48:42 +0200Farzad(~FarzadBek@178.131.30.153) (Ping timeout: 260 seconds)
2021-10-21 17:49:54 +0200rdz1789(~rdz1789@139.47.40.241) (Remote host closed the connection)
2021-10-21 17:50:20 +0200 <LimeGolem> I have a data type with multiple constructors, some of them recursive (e.g. `data Expr = Lit Int | Add Expr Expr | Mul Expr Expr`). I want to forbid certain patterns (e.g. in `Add a b` I want to forbid `a` from being of the form `Add _ _`, which is always possible if `Add` is modelling something associative). Is there any way to do this which
2021-10-21 17:50:21 +0200 <LimeGolem> doesn't involve boilerplate which is quadratic in the number of constructors?
2021-10-21 17:52:56 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:b5c0:69fb:2ebc:745e)
2021-10-21 17:52:58 +0200 <c_wraith> depending on the use case, you might be able to do that by making it a GADT. (Or maybe not - it depends entirely on what you're doing with them.
2021-10-21 17:53:09 +0200hendursa1(~weechat@user/hendursaga) (Quit: hendursa1)
2021-10-21 17:53:40 +0200hendursaga(~weechat@user/hendursaga)
2021-10-21 17:54:51 +0200 <LimeGolem> The use case is that I'm building an AST, but I have various equivalences and I want to enforce some kind of normal form at the type level.
2021-10-21 17:54:53 +0200 <c_wraith> Hmm, actually that'd need more than just a GADT. That would need to be mixed with rank-n types
2021-10-21 17:55:39 +0200 <LimeGolem> The best solution I have at the moment uses GADTs and RankNTypes, but also involves a lot of boilerplate. I'm hoping there's a simpler solution which I've missed.
2021-10-21 17:56:31 +0200jgeerds(~jgeerds@55d4da80.access.ecotel.net) (Ping timeout: 265 seconds)
2021-10-21 17:57:01 +0200 <c_wraith> I could construct something, but I would probably put it at the edge of being unusable in real code.
2021-10-21 17:57:49 +0200 <LimeGolem> If it doesn't involve an unwieldy amount of boilerplate, I'd definitely be interested in seeing it.
2021-10-21 17:58:00 +0200mmhat(~mmh@55d45798.access.ecotel.net) (Ping timeout: 260 seconds)
2021-10-21 17:58:26 +0200dschrempf(~dominik@070-207.dynamic.dsl.fonira.net) (Quit: WeeChat 3.3)
2021-10-21 17:58:54 +0200 <monochrom> I think s/depends on use case/depends on actual restrictions/
2021-10-21 17:59:04 +0200ishutin(~ishutin@84-236-97-21.pool.digikabel.hu) (Ping timeout: 265 seconds)
2021-10-21 17:59:04 +0200 <c_wraith> if I wanted to go with an actually-usable approach, I'd probably go with enforcing an interface consisting only of normalizing combinators
2021-10-21 17:59:44 +0200favonia(~favonia@user/favonia) (Quit: Leaving)
2021-10-21 18:00:05 +0200 <LimeGolem> That is an option. But I'm trying to find a way to enforce the normalisation directly at the type level.
2021-10-21 18:00:33 +0200lbseale(~lbseale@user/ep1ctetus)
2021-10-21 18:00:49 +0200ishutin(~ishutin@94-21-131-99.pool.digikabel.hu)
2021-10-21 18:00:58 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer)
2021-10-21 18:05:17 +0200Guest78(~Guest78@178-78-205-86.customers.ownit.se)
2021-10-21 18:05:28 +0200tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
2021-10-21 18:07:05 +0200justHaunt(~justache@user/justache) (Read error: Connection reset by peer)
2021-10-21 18:07:39 +0200 <Guest78> Hi! I'm on p. 29 of Learn You a Haskell for Great Good, and there is this pattern of pattern matching that I can't get to work. It says that to capture the first three variables of a list and then the rest in another variable, you can use the pattern q:p:r:xs. But, ...
2021-10-21 18:07:59 +0200justHaunt(~justache@user/justache)
2021-10-21 18:08:16 +0200 <geekosaur> you need to parenthesize it (and most patterns)
2021-10-21 18:08:25 +0200 <Guest78> ... when I try I get an infinite type error when trying this line: mytails (q:p:r:x) = [r,p,q,x]
2021-10-21 18:08:38 +0200 <Guest78> If someone has the time to explain, I would be very grateful!
2021-10-21 18:08:56 +0200 <geekosaur> because x has the type [a] whereas q, p, r have type a
2021-10-21 18:09:19 +0200 <geekosaur> you have to recombine them using (:) syntax, not standard list syntax
2021-10-21 18:09:40 +0200 <geekosaur> mytails (q:p:r:x) = (r:p:q:x)
2021-10-21 18:09:59 +0200 <Guest78> So how do I declare that in the declaration line? Here is what I had : mytails :: [a] -> [a]
2021-10-21 18:10:14 +0200 <geekosaur> you don't need to do anything in the declaration line
2021-10-21 18:10:21 +0200 <c_wraith> LimeGolem: https://paste.tomsmeding.com/NGZmMb1Q I would rate the usability of this around 1/10. But technically it does what you asked for.
2021-10-21 18:10:43 +0200 <geekosaur> [a,b,c] is the same as a:b:c:[]
2021-10-21 18:11:15 +0200 <Guest78> I think I get it now -- it is like consing in Lisp, right? Thanks a lot for your help!
2021-10-21 18:11:20 +0200 <geekosaur> yes
2021-10-21 18:11:34 +0200 <geekosaur> the [x,y,z] syntax is augar for the cons-style syntax
2021-10-21 18:11:39 +0200 <geekosaur> *sugar for
2021-10-21 18:12:02 +0200mmhat(~mmh@55d45d75.access.ecotel.net)
2021-10-21 18:15:05 +0200alzgh(~alzgh@user/alzgh) (Remote host closed the connection)
2021-10-21 18:15:15 +0200alzgh(~alzgh@user/alzgh)
2021-10-21 18:15:26 +0200 <Guest78> I think I'm still a bit confused about the parentheses -- the ( is for tuples and [ for lists, but here, I use ( to match and return a list?
2021-10-21 18:15:44 +0200 <LimeGolem> c_wraith: Thanks! I would give that at least a 3/10 :). Is there any way to extend that to include patterns involving multiple terms in a single constructor, e.g. `Add (Add a b) (Add c d)`?
2021-10-21 18:16:15 +0200 <geekosaur> Guest78, inb this case the () is just because of precedence
2021-10-21 18:16:41 +0200 <geekosaur> foo x:y:z is parsed (((foo x):y):z) which is not what you want
2021-10-21 18:16:58 +0200 <geekosaur> (even in patterns, for consistency with expressions)
2021-10-21 18:17:09 +0200 <geekosaur> so you have to say foo (x:y:z)
2021-10-21 18:17:47 +0200 <geekosaur> so the parentheses aren't really part of the syntax, they just make things associate correctly
2021-10-21 18:18:04 +0200 <c_wraith> LimeGolem: probably, but I can't see it right now. and it would probably get far worse to work with
2021-10-21 18:19:11 +0200 <Guest78> Thanks again! I get it now! I should have re-read a few pages before jumping right back into where I was yesterday :).
2021-10-21 18:20:47 +0200waleee(~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 264 seconds)
2021-10-21 18:20:54 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-10-21 18:23:37 +0200waleee(~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
2021-10-21 18:24:29 +0200hgolden(~hgolden2@cpe-172-114-81-123.socal.res.rr.com) (Remote host closed the connection)
2021-10-21 18:25:14 +0200hgolden(~hgolden2@cpe-172-114-81-123.socal.res.rr.com)
2021-10-21 18:25:56 +0200peterhil(~peterhil@dsl-hkibng32-54fb56-2.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-10-21 18:26:16 +0200kupi(uid212005@id-212005.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
2021-10-21 18:26:23 +0200MQ-17J(~MQ-17J@d192-24-122-179.try.wideopenwest.com)
2021-10-21 18:26:33 +0200peterhil(~peterhil@dsl-hkibng32-54fb56-2.dhcp.inet.fi)
2021-10-21 18:28:47 +0200 <LimeGolem> c_wraith: That's what I was afraid of. Is there a name for this sort of technique? Something that I can look up?
2021-10-21 18:29:12 +0200hgolden(~hgolden2@cpe-172-114-81-123.socal.res.rr.com) (Remote host closed the connection)
2021-10-21 18:30:48 +0200 <c_wraith> You know, I can't recall ever seeing a name for it.
2021-10-21 18:31:23 +0200hgolden(~hgolden2@cpe-172-114-81-123.socal.res.rr.com)
2021-10-21 18:31:43 +0200 <dolio> lyxia: The closest natural thing I can come up with is this: imagine lists as `Σ n. Fin n -> A`. (<*>) takes the minimum of two ns. Make join use the minimum over all ns. So, if one row is empty, your whole join is empty, even if there's a non-trivial diagonal. Then maybe that operation is associative.
2021-10-21 18:32:25 +0200 <dolio> However, that doesn't actually work for infinite lists. You can't know how big the output should be without seeing the entire input.
2021-10-21 18:32:30 +0200kuribas(~user@ip-188-118-57-242.reverse.destiny.be) (Quit: ERC (IRC client for Emacs 26.3))
2021-10-21 18:33:29 +0200timCF(~timCF@m91-129-111-87.cust.tele2.ee)
2021-10-21 18:33:45 +0200 <LimeGolem> c_wraith: Oh well, thanks for the help!
2021-10-21 18:34:38 +0200 <dolio> And without infinite lists there is no unit. You could formally adjoin one, but it is not the same type.
2021-10-21 18:37:28 +0200 <dolio> I.E. Maybe ℕ is not the same as the possibly infinite, 'natural numbers,' they have distinct computational topologies.
2021-10-21 18:45:04 +0200Guest78(~Guest78@178-78-205-86.customers.ownit.se) (Ping timeout: 256 seconds)
2021-10-21 18:46:47 +0200CiaoSen(~Jura@p5dcc1a24.dip0.t-ipconnect.de) (Ping timeout: 265 seconds)
2021-10-21 18:48:51 +0200 <dolio> geekosaur: I think you got that slightly wrong.
2021-10-21 18:49:11 +0200 <dolio> (foo x):(y:z)
2021-10-21 18:49:19 +0200 <geekosaur> probably
2021-10-21 18:49:27 +0200 <geekosaur> right, (:) right-associates, sorry
2021-10-21 18:49:34 +0200 <dolio> I had to think about it a while with that many parens. :þ
2021-10-21 18:49:42 +0200 <geekosaur> but the important part was x misassociating
2021-10-21 18:50:17 +0200 <lyxia> dolio: you can't prove that there is no good join by showing that just one join is bad. And that one is not associative either.
2021-10-21 18:51:02 +0200chele(~chele@user/chele) (Remote host closed the connection)
2021-10-21 18:55:26 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
2021-10-21 18:55:27 +0200MQ-17J(~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer)
2021-10-21 18:57:35 +0200MQ-17J(~MQ-17J@d192-24-122-179.try.wideopenwest.com)
2021-10-21 18:59:00 +0200f-a(f2a@f2a.jujube.ircnow.org)
2021-10-21 19:00:17 +0200f-a(f2a@f2a.jujube.ircnow.org) ()
2021-10-21 19:02:05 +0200 <dolio> What is a 'good' join? Is it any arbitrary function that is associative and happens to take the diagonal on squares, regardless of how unpredictable it is on non-square cases? Then I haven't seen a universal disproof of those.
2021-10-21 19:06:27 +0200 <dolio> If the goodness criterion includes corresponding to some simply describable operation on diagonals of ragged squares/cubes, then there are counter example cubes for the obvious ones.
2021-10-21 19:09:57 +0200 <awpr> FWIW infinite streams and fixed-size Vecs do have this diagonalization instance
2021-10-21 19:12:50 +0200LimeGolem(~LimeGolem@82.40.121.143) (Ping timeout: 256 seconds)
2021-10-21 19:18:59 +0200lavaman(~lavaman@98.38.249.169)
2021-10-21 19:20:56 +0200 <segfaultfizzbuzz> i am now interested in what abstract "characteristics" code can have. i am not quite sure what i mean by code here, but i probably mean a function as haskellers describe it, or possibly a function or data type. for example: pure, functional, linear, total, synchronous/asynchronous, ...
2021-10-21 19:20:57 +0200 <lyxia> Yes to "What is a 'good' join? Is it ..."
2021-10-21 19:21:35 +0200 <segfaultfizzbuzz> is there a list of these abstract characteristics somewhere?
2021-10-21 19:23:45 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 260 seconds)
2021-10-21 19:24:51 +0200kupi(uid212005@id-212005.hampstead.irccloud.com)
2021-10-21 19:27:52 +0200Guest78(~Guest78@178-78-205-86.customers.ownit.se)
2021-10-21 19:30:17 +0200RoxSive(~RoxSive@95-30-22-55.broadband.corbina.ru)
2021-10-21 19:30:22 +0200 <Guest78> I have another question, if someone has the time. I'm now on p. 36 of Learn You a Haskell... and am practicing with case. I can do fibonacci numbers with pattern match, if-then-else and guards, but with case I get a parse error. Here is my attempt:
2021-10-21 19:30:42 +0200 <Guest78> myfib4 :: (Integral a) => a -> a
2021-10-21 19:30:42 +0200 <Guest78> myfib4 n = case n of < 2 -> n
2021-10-21 19:30:43 +0200 <Guest78> case n of _ -> myfib3 (n - 1) + myfib3 (n - 2)
2021-10-21 19:31:08 +0200 <Guest78> The parse error is on the first case. Emacs marks it at the arrow.
2021-10-21 19:31:10 +0200 <geekosaur> case does pattern matches on structure; you need guards to do numeric comparisons
2021-10-21 19:31:45 +0200 <Guest78> Ok, so I can't use case for this at all?
2021-10-21 19:31:49 +0200 <geekosaur> so you can't do that check directly using case, only with a guard
2021-10-21 19:32:21 +0200 <Guest78> Thanks a lot :). I'll just move on then!
2021-10-21 19:35:52 +0200haasn(~nand@haasn.dev) (Quit: ZNC 1.7.5+deb4 - https://znc.in)
2021-10-21 19:36:17 +0200haasn(~nand@haasn.dev)
2021-10-21 19:36:37 +0200mbuf(~Shakthi@171.61.241.145) (Quit: Leaving)
2021-10-21 19:37:36 +0200jgeerds(~jgeerds@55d4da80.access.ecotel.net)
2021-10-21 19:38:37 +0200Guest377(~Guest37@93-172-116-38.bb.netvision.net.il)
2021-10-21 19:39:25 +0200Guest377(~Guest37@93-172-116-38.bb.netvision.net.il) (Client Quit)
2021-10-21 19:39:41 +0200Guest7483(~Guest7483@93-172-116-38.bb.netvision.net.il)
2021-10-21 19:40:13 +0200Guest7483(~Guest7483@93-172-116-38.bb.netvision.net.il) (Client Quit)
2021-10-21 19:40:28 +0200Guest28(~Guest28@93-172-116-38.bb.netvision.net.il)
2021-10-21 19:46:52 +0200lavaman(~lavaman@98.38.249.169)
2021-10-21 19:48:32 +0200 <Inst> also, this is interesting
2021-10-21 19:49:43 +0200 <Inst> it turns out HPF1P does the Main / Do in Chapter 3
2021-10-21 19:51:54 +0200Null_A(~null_a@2601:645:8700:2290:a891:322d:b92c:f184) (Remote host closed the connection)
2021-10-21 19:52:29 +0200Null_A(~null_a@2601:645:8700:2290:a891:322d:b92c:f184)
2021-10-21 19:53:17 +0200RoxSive(~RoxSive@95-30-22-55.broadband.corbina.ru) (Quit: Leaving)
2021-10-21 19:57:01 +0200Null_A(~null_a@2601:645:8700:2290:a891:322d:b92c:f184) (Ping timeout: 252 seconds)
2021-10-21 19:59:23 +0200Null_A(~null_a@2601:645:8700:2290:a891:322d:b92c:f184)
2021-10-21 20:00:14 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 20:00:21 +0200burnsidesLlama(~burnsides@dhcp168-036.wadham.ox.ac.uk) (Remote host closed the connection)
2021-10-21 20:00:30 +0200xff0x(~xff0x@2001:1a81:524c:400:5205:21d5:64e1:92) (Ping timeout: 260 seconds)
2021-10-21 20:00:53 +0200burnsidesLlama(~burnsides@dhcp168-036.wadham.ox.ac.uk)
2021-10-21 20:01:20 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 20:01:20 +0200MQ-17J(~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer)
2021-10-21 20:02:01 +0200MQ-17J(~MQ-17J@d192-24-122-179.try.wideopenwest.com)
2021-10-21 20:02:10 +0200k(~user@152.1.137.158)
2021-10-21 20:02:14 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 20:02:38 +0200 <k> Where is the source for the `Ord` class? I can't find it in GHC.Base.
2021-10-21 20:03:21 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 20:03:51 +0200 <davean> GHC.Classes perhaps
2021-10-21 20:03:57 +0200 <geekosaur> https://downloads.haskell.org/ghc/latest/docs/html/libraries/ghc-prim-0.7.0/src/GHC-Classes.html#Ord
2021-10-21 20:04:02 +0200 <davean> The thing you get when you click on "Source" next to Ord in Data.Ord?
2021-10-21 20:04:15 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 20:04:25 +0200 <geekosaur> or in Prelude for that matter
2021-10-21 20:04:37 +0200 <Hecate> found it
2021-10-21 20:04:44 +0200 <Hecate> ah yes, thanks geekosaur
2021-10-21 20:04:52 +0200 <k> geekosaur: thanks!
2021-10-21 20:05:03 +0200 <Hecate> davean: I had to click on the source for the Ord Bool implementation in the "Instances" dropdown
2021-10-21 20:05:05 +0200 <k> davean: Couldn't get to the source that way.
2021-10-21 20:05:06 +0200 <Hecate> to get to GHC.Classes
2021-10-21 20:05:21 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 20:05:26 +0200burnsidesLlama(~burnsides@dhcp168-036.wadham.ox.ac.uk) (Ping timeout: 260 seconds)
2021-10-21 20:06:15 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 20:07:21 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 20:08:15 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 20:09:22 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 20:10:15 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 20:11:22 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 20:12:16 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 20:12:48 +0200ArtVandelayer(~ArtVandel@ip174-68-147-20.lv.lv.cox.net)
2021-10-21 20:13:22 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 20:14:16 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 20:14:29 +0200 <geekosaur> come to think of it I did the same thing, but I intended it as a shortcut. if it's not directly documented in either Data.Ord or Prelude, that's a bug imo
2021-10-21 20:14:49 +0200 <geekosaur> shouldn't force preople to go digging for GHC.Classes for basic stuff like Ord and Eq
2021-10-21 20:15:22 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 20:16:02 +0200 <k> Does `compare` imply that `Ord` defines a total order? If not, why not?
2021-10-21 20:16:16 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 20:16:16 +0200 <geekosaur> Ord is supposed to define a total order
2021-10-21 20:16:37 +0200 <geekosaur> Sadly this gets abused a bit, including by Double
2021-10-21 20:16:52 +0200Null_A(~null_a@2601:645:8700:2290:a891:322d:b92c:f184) (Remote host closed the connection)
2021-10-21 20:17:07 +0200 <Hecate> I'm waiting for the CLC to be operational to push for a PartialEq / PartialOrd
2021-10-21 20:17:20 +0200 <Hecate> that Eq/Ord would inherit, and as such become Laws-only typeclasses
2021-10-21 20:17:22 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 20:17:34 +0200 <k> Per the docs: 'The Haskell Report defines not laws for 'Ord'. However, '<=' is customarily expected to implement a non-strict partial order ...'
2021-10-21 20:18:07 +0200 <k> *no laws
2021-10-21 20:18:13 +0200 <Hecate> yep
2021-10-21 20:18:16 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 20:18:23 +0200 <davean> Thats not what the documentation says: ""
2021-10-21 20:18:26 +0200 <davean> Thats not what the documentation says: "<= is customarily expected to implement a non-strict partial order"
2021-10-21 20:19:08 +0200 <davean> The only total order class I know of in Haskell is in a library
2021-10-21 20:19:16 +0200 <davean> Ironicly, a partial order library
2021-10-21 20:19:23 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 20:20:02 +0200 <k> I guess `EQ` is not supposed to mean `equal` or `equivalent`?
2021-10-21 20:20:16 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 20:20:24 +0200 <k> But maybe `not comparably greater or less than`?
2021-10-21 20:21:12 +0200xff0x(~xff0x@2001:1a81:524c:400:5205:21d5:64e1:92)
2021-10-21 20:21:23 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 20:21:30 +0200jgeerds(~jgeerds@55d4da80.access.ecotel.net) (Ping timeout: 260 seconds)
2021-10-21 20:22:16 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 20:23:23 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 20:24:17 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 20:24:59 +0200iqofi(~ixosa@217.138.222.92) (Remote host closed the connection)
2021-10-21 20:25:22 +0200Null_A(~null_a@2601:645:8700:2290:a891:322d:b92c:f184)
2021-10-21 20:25:23 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 20:25:29 +0200 <k> Ah, never mind. I don't really know what I'm talking about.
2021-10-21 20:25:57 +0200albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
2021-10-21 20:26:17 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 20:26:59 +0200 <k> I still don't understand why all of `>`, `>=`, and `<` are defined in terms of `compare`. Or, honestly, why they're methods. Seems like a waste of code.
2021-10-21 20:27:04 +0200albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8)
2021-10-21 20:27:23 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 20:27:38 +0200 <monochrom> Standard libraries such as Data.Map and Data.Set already treats Ord as a total order. I think it is too late to defend "but it has no laws".
2021-10-21 20:27:58 +0200albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8) (Read error: Connection reset by peer)
2021-10-21 20:27:59 +0200econo(uid147250@user/econo)
2021-10-21 20:28:17 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 20:28:25 +0200 <janus> k: how would they be if they were not methods and not defined in terms of `compare`?
2021-10-21 20:29:04 +0200albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8)
2021-10-21 20:29:15 +0200 <k> janus: You could define them in terms of `<=` as constrained functions rather than methods.
2021-10-21 20:29:24 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 20:29:37 +0200 <monochrom> "MINIMAL compare | (<=)" allows starting with <=
2021-10-21 20:30:05 +0200 <k> Oh, I'm aware of that, but you still end up defining everything in terms of `compare` when you start with only `<=`.
2021-10-21 20:30:09 +0200 <monochrom> Though, I am surprised that you don't also raise "but (>) is better"
2021-10-21 20:30:12 +0200 <janus> k: but then NaN <= NaN would be unequal NaN > NaN, right?
2021-10-21 20:30:17 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 20:31:10 +0200 <monochrom> If you are referring to default implementations...
2021-10-21 20:31:20 +0200 <monochrom> You can always override them for your type.
2021-10-21 20:31:24 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 20:31:34 +0200 <davean> k: Making them members allows optimizations for their specific cases
2021-10-21 20:32:16 +0200 <monochrom> Default implementations are meant to "work under maximum mathematical generality" not "efficient".
2021-10-21 20:32:18 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 20:32:29 +0200 <k> > (0/0 :: Double) > (0/0 :: Double)
2021-10-21 20:32:30 +0200 <monochrom> Just look at Foldable.
2021-10-21 20:32:31 +0200 <lambdabot> False
2021-10-21 20:32:59 +0200 <k> > (0/0 :: Double) <= (0/0 :: Double)
2021-10-21 20:33:01 +0200 <lambdabot> False
2021-10-21 20:33:04 +0200 <monochrom> Who would code up foldl' in terms of foldr, really. And foldr' in terms of foldl, for the LOL.
2021-10-21 20:33:24 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 20:33:46 +0200 <k> And foldr in terms of foldMap, for that matter...
2021-10-21 20:33:57 +0200 <k> Fair enough.
2021-10-21 20:34:18 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 20:35:07 +0200 <k> I was just thinking that if there's a default implementation that is basically always as efficient as any hand-crafted implementation, there's no need to make it a method. There was a similar discussion about `Eq` on haskell-cafe.
2021-10-21 20:35:24 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 20:35:36 +0200 <k> Although that had the added issue of newtype dictionaries.
2021-10-21 20:35:40 +0200 <monochrom> That's a big "IF".
2021-10-21 20:36:18 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 20:36:23 +0200 <monochrom> In practice, that statement is vacuously satisfied by all classes we hav.
2021-10-21 20:37:25 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 20:37:27 +0200 <davean> Thats basicly non-sensicil
2021-10-21 20:37:39 +0200 <davean> You've derived why they are in the class - because thats false
2021-10-21 20:37:44 +0200 <davean> and almost has to be
2021-10-21 20:38:09 +0200 <davean> I say almost because in SOME specific cases a sufficiently smart SMT solver style compiler COULD optimize
2021-10-21 20:38:17 +0200 <davean> But lets be real - thats horribly unrealistic
2021-10-21 20:38:18 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 20:39:00 +0200 <Inst> nice, just got GHCI running in visual studio code
2021-10-21 20:39:10 +0200 <Inst> honestly they should advertise visual studio code for haskell in windows
2021-10-21 20:39:24 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 20:40:14 +0200 <k> I'd say there's a big difference between `notElem x` = `not . elem x` and `foldl f z xs = appEndo (getDual (foldMap (Dual . Endo . flip f) xs)) z`.
2021-10-21 20:40:18 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 20:40:54 +0200burnsidesLlama(~burnsides@dhcp168-036.wadham.ox.ac.uk)
2021-10-21 20:41:26 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 20:41:48 +0200 <davean> k: Thats trivially false.
2021-10-21 20:42:15 +0200 <k> davean: OK, please explain.
2021-10-21 20:42:19 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 20:42:29 +0200 <k> Sometimes 'trivial' things are hard for me to figure out.
2021-10-21 20:42:53 +0200 <davean> k: consider the infinite cases
2021-10-21 20:43:25 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 20:43:55 +0200 <k> OK. So elem of an infinite structure can terminate; `notElem` cannot be defined to terminate.
2021-10-21 20:44:19 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 20:45:06 +0200 <k> foldl of an infinite right-to-left structure can terminate; foldl of an infinite left-to-right structure cannot terminate.
2021-10-21 20:45:27 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 20:46:05 +0200 <k> `elem` and `notElem` have the same termination characteristics regardless of the bias of the infinite structure. What is your point?
2021-10-21 20:46:20 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 20:47:29 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 20:48:20 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 20:49:19 +0200dhouthoo(~dhouthoo@178-117-36-167.access.telenet.be) (Quit: WeeChat 3.3)
2021-10-21 20:49:26 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 20:49:46 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 260 seconds)
2021-10-21 20:50:20 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 20:51:22 +0200hnOsmium0001(uid453710@id-453710.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
2021-10-21 20:51:26 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 20:52:16 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-10-21 20:52:20 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 20:53:27 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 20:53:52 +0200burnsidesLlama(~burnsides@dhcp168-036.wadham.ox.ac.uk) (Remote host closed the connection)
2021-10-21 20:54:19 +0200burnsidesLlama(~burnsides@dhcp168-036.wadham.ox.ac.uk)
2021-10-21 20:54:21 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 20:54:51 +0200coot(~coot@37.30.49.107.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
2021-10-21 20:54:51 +0200burnsidesLlama(~burnsides@dhcp168-036.wadham.ox.ac.uk) (Remote host closed the connection)
2021-10-21 20:55:02 +0200burnsidesLlama(~burnsides@dhcp168-036.wadham.ox.ac.uk)
2021-10-21 20:55:27 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 20:56:21 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 20:57:27 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 20:58:21 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 20:58:58 +0200mei(~mei@user/mei) (Read error: Connection reset by peer)
2021-10-21 20:58:59 +0200reumeth(~reumeth@user/reumeth)
2021-10-21 20:59:27 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 21:00:21 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 21:01:28 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 21:02:21 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 21:03:28 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 21:04:03 +0200jgeerds(~jgeerds@55d4da80.access.ecotel.net)
2021-10-21 21:04:21 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 21:05:28 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 21:06:22 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 21:06:58 +0200burnsidesLlama(~burnsides@dhcp168-036.wadham.ox.ac.uk) (Remote host closed the connection)
2021-10-21 21:07:26 +0200burnsidesLlama(~burnsides@dhcp168-036.wadham.ox.ac.uk)
2021-10-21 21:07:28 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 21:07:34 +0200 <k> I wonder what trivial thing I was missing. Happy Friday everyone.
2021-10-21 21:07:43 +0200k(~user@152.1.137.158) (Quit: ERC (IRC client for Emacs 27.1))
2021-10-21 21:08:22 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 21:08:26 +0200Guest78(~Guest78@178-78-205-86.customers.ownit.se) (Ping timeout: 256 seconds)
2021-10-21 21:08:28 +0200 <koala_man> is there a class or something I can use to automatically enumerate each value in a data type, e.g. data Foo = Bar | Baz; (something :: [Foo]) == [ Bar, Baz ]?
2021-10-21 21:08:49 +0200 <geekosaur> something in Data.Generic
2021-10-21 21:09:00 +0200 <geekosaur> requires deriving Generic
2021-10-21 21:09:03 +0200burnsidesLlama(~burnsides@dhcp168-036.wadham.ox.ac.uk) (Remote host closed the connection)
2021-10-21 21:09:09 +0200burnsidesLlama(~burnsides@dhcp168-036.wadham.ox.ac.uk)
2021-10-21 21:09:22 +0200 <awpr> > `enumFrom minBound :: [Word8]`
2021-10-21 21:09:23 +0200 <lambdabot> <hint>:1:1: error: parse error on input ‘`’
2021-10-21 21:09:29 +0200 <awpr> > enumFrom minBound :: [Word8]
2021-10-21 21:09:29 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 21:09:31 +0200 <lambdabot> [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,2...
2021-10-21 21:09:50 +0200 <awpr> for simple enums with Enum and Bounded, that should do it
2021-10-21 21:10:22 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 21:10:52 +0200 <monochrom> data Foo = Bar | Baz deriving (Bounded, Enum)
2021-10-21 21:11:04 +0200CiaoSen(~Jura@p200300c95730dd002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
2021-10-21 21:11:13 +0200 <monochrom> then you can [minBound .. maxBound]
2021-10-21 21:11:29 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 21:11:38 +0200 <monochrom> This doesn't work for "larger" examples.
2021-10-21 21:11:40 +0200myShoggoth(~myShoggot@97-120-85-195.ptld.qwest.net) (Ping timeout: 260 seconds)
2021-10-21 21:11:48 +0200aegon(~mike@174.127.249.180)
2021-10-21 21:11:54 +0200 <koala_man> nice, thanks!
2021-10-21 21:12:20 +0200 <awpr> for more complicated types like tuples of enums, sum types with fields, etc. there's https://hackage.haskell.org/package/finite-table-0.1.0.1/docs/Data-Finite.html#v:enumerate
2021-10-21 21:12:22 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 21:13:21 +0200mikoto-chan(~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be)
2021-10-21 21:13:29 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 21:14:11 +0200slowButPresent(~slowButPr@user/slowbutpresent) (Ping timeout: 264 seconds)
2021-10-21 21:14:23 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 21:15:29 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 21:15:33 +0200 <awpr> (note `[minBound..maxBound]` is exactly `enumFromTo minBound maxBound`, and for derived instances for finite enums, those are the same as `[minBound..]` and `enumFrom minBound`)
2021-10-21 21:16:23 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 21:16:26 +0200myShoggoth(~myShoggot@97-120-85-195.ptld.qwest.net)
2021-10-21 21:17:29 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 21:17:31 +0200gomma(~gomma@c-73-132-243-63.hsd1.md.comcast.net)
2021-10-21 21:18:14 +0200 <gomma> Is conan in here?
2021-10-21 21:18:23 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 21:18:32 +0200 <Franciman> not now, apparently
2021-10-21 21:18:57 +0200 <gomma> but he is sometimes here?
2021-10-21 21:19:16 +0200 <Franciman> conal^
2021-10-21 21:19:18 +0200 <Franciman> ?
2021-10-21 21:19:22 +0200 <Franciman> yes usually I see him online
2021-10-21 21:19:25 +0200 <gomma> yes that's probably it!
2021-10-21 21:19:29 +0200 <gomma> thank u
2021-10-21 21:19:30 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 21:19:44 +0200 <gomma> ok thanks
2021-10-21 21:20:22 +0200 <gomma> he helped me years ago and i wanted to discuss stuff with him since i've grown a lot since then
2021-10-21 21:20:24 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 21:20:30 +0200 <gomma> but since i have the right name now, i found his publications
2021-10-21 21:20:34 +0200jaitoon(~Jaitoon@2a02:c7f:a5f:1d00:3901:d03b:2d77:c4b6)
2021-10-21 21:20:41 +0200slowButPresent(~slowButPr@user/slowbutpresent)
2021-10-21 21:21:22 +0200 <gomma> I think I want to read through those before engaging again
2021-10-21 21:21:29 +0200 <gomma> Thanks so much! Goodbye y'all
2021-10-21 21:21:30 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 21:21:35 +0200gomma(~gomma@c-73-132-243-63.hsd1.md.comcast.net) (Client Quit)
2021-10-21 21:21:43 +0200 <janus> goodbye gomma
2021-10-21 21:22:24 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 21:23:30 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 21:24:24 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 21:25:31 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 21:25:51 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 258 seconds)
2021-10-21 21:26:25 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 21:27:31 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 21:27:36 +0200 <aegon> is there an applicative version of ^. for lens?
2021-10-21 21:28:25 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 21:29:31 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 21:30:20 +0200slowButPresent(~slowButPr@user/slowbutpresent) (Ping timeout: 260 seconds)
2021-10-21 21:30:25 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 21:31:31 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 21:31:42 +0200slowButPresent(~slowButPr@user/slowbutpresent)
2021-10-21 21:32:25 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 21:33:32 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 21:34:26 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 21:35:32 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 21:36:26 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 21:37:32 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 21:38:26 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 21:39:33 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 21:39:33 +0200MQ-17J(~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer)
2021-10-21 21:39:56 +0200MQ-17J(~MQ-17J@d192-24-122-179.try.wideopenwest.com)
2021-10-21 21:40:27 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 21:41:33 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 21:42:27 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 21:43:33 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 21:44:27 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 21:45:11 +0200_ht(~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection)
2021-10-21 21:45:34 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 21:45:39 +0200 <kronicmage> wdym by applicative?
2021-10-21 21:45:42 +0200 <kronicmage> aegon
2021-10-21 21:46:28 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 21:47:34 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 21:48:28 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 21:49:34 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 21:50:28 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 21:51:14 +0200tomsmeding(~tomsmedin@tomsmeding.com)
2021-10-21 21:51:35 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 21:52:27 +0200rond_(~rond_@2a01:115f:943:5e00:7fe4:4b4a:851b:ca4d) (Quit: Client closed)
2021-10-21 21:52:29 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 21:53:36 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 21:54:29 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 21:55:36 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 21:56:30 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 21:57:37 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 21:58:05 +0200acidjnk_new3(~acidjnk@p200300d0c703cb87897f933eeab9e85f.dip0.t-ipconnect.de)
2021-10-21 21:58:30 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 21:59:37 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 22:00:30 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 22:01:37 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 22:02:30 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 22:02:58 +0200 <aegon> kronicmage: i want to apply a lens to a value within a monadic context or functor context
2021-10-21 22:03:25 +0200 <aegon> so instead of doing somethign like val >>= \x -> x ^. lens i'm wondering if anyones made a applicative for m so i can do val ^. lens
2021-10-21 22:03:34 +0200Tuplanolla(~Tuplanoll@91-159-69-50.elisa-laajakaista.fi)
2021-10-21 22:03:37 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 22:04:06 +0200 <aegon> well, binds used wrong there :\ but thats the jist
2021-10-21 22:04:31 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 22:04:44 +0200 <awpr> I'm not aware of such a thing existing. I would just use `view l <$> val`
2021-10-21 22:04:58 +0200 <awpr> (since the operator form would require a kinda ugly operator section)
2021-10-21 22:05:06 +0200juhp(~juhp@128.106.188.220) (Ping timeout: 245 seconds)
2021-10-21 22:05:37 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 22:05:59 +0200 <janus> i want to marry Operator Section <3
2021-10-21 22:06:31 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 22:06:53 +0200 <awpr> I do like operator sections in general, but this case I find just looks better with the alphanumeric name (compare `(^. l) <$> val`
2021-10-21 22:06:56 +0200juhp(~juhp@128.106.188.220)
2021-10-21 22:07:04 +0200 <awpr> )
2021-10-21 22:07:06 +0200 <janus> is it ugly because it is followed by infix fmap? so `fmap (^. l) val` is ok? :P
2021-10-21 22:07:37 +0200 <awpr> hmm, even with fmap, I'd still probably write `fmap (view l) val`
2021-10-21 22:07:38 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 22:07:51 +0200 <geekosaur> operator glazeover :þ
2021-10-21 22:08:13 +0200 <aegon> awpr: didn't think of using the non operator version
2021-10-21 22:08:15 +0200 <aegon> :t compare
2021-10-21 22:08:16 +0200 <lambdabot> Ord a => a -> a -> Ordering
2021-10-21 22:08:18 +0200 <awpr> so I guess it's just that I prefer a partial application of a well-known alphanumeric-named function over an operator section
2021-10-21 22:08:31 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 22:08:34 +0200 <awpr> ("compare" is just prose in that message)
2021-10-21 22:08:50 +0200 <aegon> :)
2021-10-21 22:09:00 +0200rond_(~rond_@2a01:115f:943:5e00:7fe4:4b4a:851b:ca4d)
2021-10-21 22:09:09 +0200 <aegon> what about val <&> (^. l)
2021-10-21 22:09:21 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:b5c0:69fb:2ebc:745e) (Remote host closed the connection)
2021-10-21 22:09:26 +0200 <janus> Mrs Perl approves :+1:
2021-10-21 22:09:26 +0200 <aegon> i'm just guessing at that, going to go play around in ghci
2021-10-21 22:09:38 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 22:10:02 +0200 <awpr> I think I've concluded that I'd always personally choose `view l` over `(^. l)` (when not immediately applied to another argument)
2021-10-21 22:10:32 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 22:10:58 +0200 <janus> come on, why not just use `flip (<$>) (`(^.)` l)`
2021-10-21 22:11:14 +0200 <geekosaur> have you tried it?
2021-10-21 22:11:39 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 22:11:59 +0200 <janus> i seems to be having some kind of problem with my diacretics, must reconfigure my keyboard configuration in nix first. i'll report back next week
2021-10-21 22:12:03 +0200 <geekosaur> (`` syntax is limited, you can't nest it that way)
2021-10-21 22:12:14 +0200 <aegon> yeah i think its clearer too, thanks for the tip, i'm still not used to thinking applicatively over monadicly
2021-10-21 22:12:32 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 22:12:46 +0200 <geekosaur> on the one hand it's probably for the best, on the other imagine being able to `(`(`(...)`)`)`
2021-10-21 22:13:08 +0200 <geekosaur> (then think about how you'd escape the `s)
2021-10-21 22:13:22 +0200 <awpr> needs guillemets
2021-10-21 22:13:35 +0200alx741(~alx741@186.178.109.50) (Ping timeout: 264 seconds)
2021-10-21 22:13:38 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 22:13:40 +0200 <awpr> (since they can be balanced like parentheses)
2021-10-21 22:14:23 +0200ub(~Thunderbi@77.119.198.223.wireless.dyn.drei.com)
2021-10-21 22:14:32 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 22:14:47 +0200ikex(ash@user/ikex) (Ping timeout: 264 seconds)
2021-10-21 22:15:17 +0200Midjak(~Midjak@82-65-111-221.subs.proxad.net) (Quit: Leaving)
2021-10-21 22:15:26 +0200ikex(ash@user/ikex)
2021-10-21 22:15:39 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 22:15:50 +0200mikoto-chan(~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) (Ping timeout: 260 seconds)
2021-10-21 22:16:33 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 22:17:39 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 22:18:33 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 22:18:33 +0200 <aegon> oh man with `view l <$> var >>= \case ...` hlint recommends a super hard to read: `var >>= (\case ...) . view Snapshot`
2021-10-21 22:19:08 +0200 <aegon> er view l
2021-10-21 22:19:25 +0200 <geekosaur> hlolint
2021-10-21 22:19:36 +0200 <aegon> oh man with `view l <$> var >>= \case ...` hlint recommends a super hard to read: `var >>= (\case ...) . view l` imo hlint is wrong here, is it optimizing for some sort of perf thing?
2021-10-21 22:19:39 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 22:20:30 +0200 <geekosaur> imo if it is then it should be shot; fix the compiler instead
2021-10-21 22:20:33 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 22:20:58 +0200mikoto-chan(~mikoto-ch@185.237.102.126)
2021-10-21 22:21:39 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 22:21:51 +0200 <awpr> that's a left-associated fmap if I'm reading it correctly
2021-10-21 22:22:33 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 22:22:59 +0200Inst(~Inst@2601:6c4:4080:3f80:887d:efb8:1cec:d51f) (Remote host closed the connection)
2021-10-21 22:23:01 +0200 <aegon> it doesnt suggest any change for `var <&> (^. l) >>= \case ...` wonder whats going on here / what its trying to hint at
2021-10-21 22:23:07 +0200 <awpr> generally things should be right-associated to avoid re-traversing the whole left structure (same sort of reason you don't left-associate string concatenations)
2021-10-21 22:23:16 +0200Inst(~Inst@2601:6c4:4080:3f80:84fc:7e49:3098:491f)
2021-10-21 22:23:40 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 22:23:45 +0200 <awpr> maybe it just doesn't know about `<&>`?
2021-10-21 22:24:01 +0200 <aegon> sos view l <$> var is left associative but the . view l is right? i need to churn on that
2021-10-21 22:24:34 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 22:24:50 +0200 <awpr> well, `(view l <$> var) >>= f` is left-associated, and `var >>= \x -> f (view x)` is right-associate
2021-10-21 22:24:52 +0200 <awpr> d
2021-10-21 22:25:40 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 22:26:34 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 22:26:35 +0200 <awpr> if the monad in question is a list, for example, the left version goes through the whole list to apply `view l`, then goes through that whole list to `concatMap` `f`, while the right version goes through the list just once
2021-10-21 22:27:24 +0200alx741(~alx741@186.178.108.23)
2021-10-21 22:27:40 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 22:28:34 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 22:28:39 +0200 <aegon> interesting, ok, that makes sense, wow thats a possible perf hit thats very hard to keep in mind for me at the moment
2021-10-21 22:29:13 +0200 <aegon> the monad in question here is IO but i'm glad hlint yelled at me
2021-10-21 22:29:23 +0200__monty__(~toonn@user/toonn)
2021-10-21 22:29:41 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 22:30:24 +0200coot(~coot@37.30.49.107.nat.umts.dynamic.t-mobile.pl)
2021-10-21 22:30:34 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 22:31:41 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 22:32:11 +0200timCF(~timCF@m91-129-111-87.cust.tele2.ee) (Ping timeout: 264 seconds)
2021-10-21 22:32:35 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 22:33:01 +0200timCF(~timCF@m91-129-111-87.cust.tele2.ee)
2021-10-21 22:33:23 +0200Inst(~Inst@2601:6c4:4080:3f80:84fc:7e49:3098:491f) (Ping timeout: 264 seconds)
2021-10-21 22:33:41 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 22:34:35 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 22:35:11 +0200coot(~coot@37.30.49.107.nat.umts.dynamic.t-mobile.pl) (Ping timeout: 264 seconds)
2021-10-21 22:35:41 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 22:35:48 +0200Guest3072(~Guest30@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
2021-10-21 22:36:35 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 22:37:37 +0200coot(~coot@37.30.49.107.nat.umts.dynamic.t-mobile.pl)
2021-10-21 22:37:42 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 22:38:36 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 22:38:41 +0200reumeth(~reumeth@user/reumeth) (Ping timeout: 258 seconds)
2021-10-21 22:39:13 +0200ub(~Thunderbi@77.119.198.223.wireless.dyn.drei.com) (Quit: ub)
2021-10-21 22:39:42 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 22:40:36 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 22:41:42 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 22:42:20 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:b5c0:69fb:2ebc:745e)
2021-10-21 22:42:36 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 22:43:43 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 22:44:36 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 22:45:43 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 22:46:16 +0200kupi(uid212005@id-212005.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
2021-10-21 22:46:36 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 22:47:43 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 22:48:29 +0200takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2021-10-21 22:48:37 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 22:49:43 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 22:50:37 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 22:50:37 +0200mikoto-chan(~mikoto-ch@185.237.102.126) (Read error: Connection reset by peer)
2021-10-21 22:51:44 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 22:52:37 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 22:53:45 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 22:54:38 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 22:55:44 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 22:56:38 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 22:57:44 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 22:58:38 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 22:59:44 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 22:59:55 +0200Cajun(~Cajun@user/cajun)
2021-10-21 23:00:38 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 23:01:44 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 23:02:38 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 23:03:45 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 23:04:38 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 23:05:46 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 23:06:39 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 23:07:45 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 23:08:30 +0200fendor(~fendor@178.115.78.81.wireless.dyn.drei.com) (Remote host closed the connection)
2021-10-21 23:08:39 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 23:08:43 +0200 <monochrom> Ah, Bird's Thinking Functionally with Haskell is the one that suffers "right before AMP".
2021-10-21 23:09:46 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 23:10:39 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 23:10:54 +0200coot(~coot@37.30.49.107.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
2021-10-21 23:11:46 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 23:12:39 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 23:13:46 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 23:14:12 +0200lavaman(~lavaman@98.38.249.169)
2021-10-21 23:14:40 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 23:15:46 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 23:16:40 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 23:17:05 +0200__monty__(~toonn@user/toonn) (Quit: leaving)
2021-10-21 23:17:46 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 23:17:50 +0200Feuermagier(~Feuermagi@user/feuermagier)
2021-10-21 23:18:40 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 23:19:46 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 23:20:40 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 23:21:47 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 23:22:12 +0200rond_(~rond_@2a01:115f:943:5e00:7fe4:4b4a:851b:ca4d) (Quit: Client closed)
2021-10-21 23:22:25 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-10-21 23:22:41 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 23:23:47 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 23:24:41 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 23:25:10 +0200gehmehgeh(~user@user/gehmehgeh) (Quit: Leaving)
2021-10-21 23:25:48 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 23:26:41 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 23:27:23 +0200CiaoSen(~Jura@p200300c95730dd002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 264 seconds)
2021-10-21 23:27:41 +0200allbery_b(~geekosaur@xmonad/geekosaur)
2021-10-21 23:27:41 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
2021-10-21 23:27:44 +0200allbery_bgeekosaur
2021-10-21 23:27:48 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 23:28:42 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 23:29:48 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 23:30:42 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 23:31:40 +0200ubert(~Thunderbi@77.119.198.223.wireless.dyn.drei.com) (Ping timeout: 260 seconds)
2021-10-21 23:31:49 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 23:32:11 +0200myShoggoth(~myShoggot@97-120-85-195.ptld.qwest.net) (Ping timeout: 264 seconds)
2021-10-21 23:32:42 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 23:33:06 +0200slowButPresent(~slowButPr@user/slowbutpresent) (Ping timeout: 260 seconds)
2021-10-21 23:33:23 +0200Guest3072(~Guest30@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Quit: Client closed)
2021-10-21 23:33:48 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 23:34:42 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 23:35:49 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 23:36:43 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 23:37:16 +0200wonko(~wjc@62.115.229.50) (Ping timeout: 265 seconds)
2021-10-21 23:37:49 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 23:38:43 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 23:39:15 +0200Guest54(~Guest54@207.151.52.24)
2021-10-21 23:39:50 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 23:40:43 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 23:41:50 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 23:42:44 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 23:43:34 +0200slowButPresent(~slowButPr@user/slowbutpresent)
2021-10-21 23:43:50 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 23:44:44 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 23:45:50 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 23:46:44 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 23:47:51 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 23:48:44 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 23:49:51 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 23:50:44 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 23:51:25 +0200max22-(~maxime@2a01cb0883359800acc7df5c88e6f73e.ipv6.abo.wanadoo.fr) (Quit: Leaving)
2021-10-21 23:51:51 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 23:52:45 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 23:53:51 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 23:54:45 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 23:55:36 +0200Guest54(~Guest54@207.151.52.24) (Ping timeout: 256 seconds)
2021-10-21 23:55:51 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 23:56:45 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 23:56:45 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
2021-10-21 23:57:52 +0200Guest372(~xxx@47.245.54.240)
2021-10-21 23:58:34 +0200myShoggoth(~myShoggot@97-120-85-195.ptld.qwest.net)
2021-10-21 23:58:45 +0200Guest372(~xxx@47.245.54.240) (Remote host closed the connection)
2021-10-21 23:59:52 +0200Guest372(~xxx@47.245.54.240)