2021/10/14

2021-10-14 00:02:51 +0200coot(~coot@37.30.52.44.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
2021-10-14 00:08:01 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 245 seconds)
2021-10-14 00:08:52 +0200bontaq(~user@ool-45779fe5.dyn.optonline.net)
2021-10-14 00:10:35 +0200cheater(~Username@user/cheater)
2021-10-14 00:13:31 +0200ubert(~Thunderbi@178.165.161.120.wireless.dyn.drei.com) (Ping timeout: 252 seconds)
2021-10-14 00:13:47 +0200mestre(~mestre@191.177.175.57)
2021-10-14 00:15:11 +0200Tuplanolla(~Tuplanoll@91-159-69-50.elisa-laajakaista.fi)
2021-10-14 00:19:22 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-10-14 00:19:22 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-10-14 00:19:22 +0200wroathe(~wroathe@user/wroathe)
2021-10-14 00:21:09 +0200__monty__(~toonn@user/toonn) (Quit: leaving)
2021-10-14 00:21:49 +0200MQ-17J(~MQ-17J@8.6.144.117) (Ping timeout: 252 seconds)
2021-10-14 00:23:58 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 252 seconds)
2021-10-14 00:25:26 +0200aku(~aku@eagleflow.fi) (Remote host closed the connection)
2021-10-14 00:26:00 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2021-10-14 00:27:33 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2021-10-14 00:28:22 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
2021-10-14 00:28:37 +0200ec(~ec@gateway/tor-sasl/ec)
2021-10-14 00:31:11 +0200 <koz> What is the correct wrapper for Maybe such that <> two Nothings gives a Nothing, Just beats nothing, and first Just wins?
2021-10-14 00:31:26 +0200 <koz> (this is for 8.10's base in case it matters)
2021-10-14 00:33:11 +0200 <Hecate> koz: with a rapid test in ghci, I think Alternative does what you want
2021-10-14 00:33:21 +0200 <Hecate> % Nothing <|> Nothing
2021-10-14 00:33:22 +0200 <yahb> Hecate: Nothing
2021-10-14 00:33:24 +0200ArctVaulMarsHMPJ(~pjetcetal@2.95.44.252)
2021-10-14 00:33:31 +0200 <Hecate> % Nothing <|> Just 3
2021-10-14 00:33:31 +0200 <yahb> Hecate: Just 3
2021-10-14 00:33:35 +0200 <Hecate> % Just 1 <|> Just 3
2021-10-14 00:33:36 +0200 <yahb> Hecate: Just 1
2021-10-14 00:33:58 +0200 <koz> So I need a wrapper which just translates 'mempty = empty' and '(<>) = (<|>)'.
2021-10-14 00:34:16 +0200 <koz> Alt I think?
2021-10-14 00:34:23 +0200 <Hecate> koz: sounds like it yeah, if you have no choice but to use (<>)
2021-10-14 00:34:26 +0200 <c_wraith> You want either (Data.Monoid.First a) or Maybe (Data.Semigroup.First a)
2021-10-14 00:34:27 +0200cfricke(~cfricke@user/cfricke) (Quit: WeeChat 3.3)
2021-10-14 00:34:52 +0200 <koz> c_wraith: I don't think First (Maybe a) does what I want here.
2021-10-14 00:34:54 +0200 <Hecate> koz: oh, Alt gives an interesting vibe. What do you think c_wraith ?
2021-10-14 00:35:13 +0200 <c_wraith> the former has been around longer, the latter is cleaner
2021-10-14 00:35:13 +0200o1lo01ol1o(~o1lo01ol1@2001:8a0:6d7a:df01:74db:7502:a3aa:3820) (Read error: Connection reset by peer)
2021-10-14 00:35:31 +0200Guest|15(~Guest|15@46.248.69.125) (Ping timeout: 245 seconds)
2021-10-14 00:35:36 +0200 <c_wraith> koz: Maybe (First a), not First (Maybe a)
2021-10-14 00:35:40 +0200 <koz> Ah.
2021-10-14 00:35:49 +0200 <koz> Would Alt Maybe a work?
2021-10-14 00:35:57 +0200 <koz> (even if it's 'too strong')
2021-10-14 00:36:02 +0200drdo(~drdo@overlord0.drdo.eu) (Quit: ...)
2021-10-14 00:36:07 +0200 <c_wraith> yes, it's just less idiomatic
2021-10-14 00:36:38 +0200drdo(~drdo@overlord0.drdo.eu)
2021-10-14 00:38:06 +0200o1lo01ol1o(~o1lo01ol1@2001:8a0:6d7a:df01:74db:7502:a3aa:3820)
2021-10-14 00:39:30 +0200 <koz> Also, is there a version of Last that wraps an 'a' (as opposed to a 'Maybe a'), but which isn't a Monoid?
2021-10-14 00:40:01 +0200 <koz> Ah lol, imported from wrong place.
2021-10-14 00:41:29 +0200Ram-Z_(~Ram-Z@li1814-254.members.linode.com) (Ping timeout: 264 seconds)
2021-10-14 00:41:43 +0200 <c_wraith> yes, those are the Data.Semigroup ones, rather than the Data.Monoid ones.
2021-10-14 00:41:49 +0200 <c_wraith> that name collision is a bit a problem
2021-10-14 00:42:05 +0200 <c_wraith> +of
2021-10-14 00:42:30 +0200Ram-Z(~Ram-Z@li1814-254.members.linode.com)
2021-10-14 00:42:37 +0200 <koz> Firster and Laster, lol.
2021-10-14 00:44:13 +0200[Kalisto](~nico@user/kalisto/x-8968079)
2021-10-14 00:44:31 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.3)
2021-10-14 00:47:35 +0200ec(~ec@gateway/tor-sasl/ec) (Quit: ec)
2021-10-14 00:50:11 +0200Psybur(~Psybur@mobile-166-170-32-197.mycingular.net)
2021-10-14 00:52:38 +0200pierrot_pierrot
2021-10-14 00:52:54 +0200pierrotinfo
2021-10-14 00:53:17 +0200infopierrot
2021-10-14 00:55:31 +0200CiaoSen(~Jura@p200300c9571101002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 245 seconds)
2021-10-14 00:58:49 +0200tdaeayusr^(~tdaeayusr@70.166.66.234)
2021-10-14 01:00:24 +0200azimut(~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
2021-10-14 01:00:58 +0200azimut(~azimut@gateway/tor-sasl/azimut)
2021-10-14 01:04:47 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2021-10-14 01:06:39 +0200geekosaur(~geekosaur@xmonad/geekosaur)
2021-10-14 01:07:41 +0200jollygood2(~bc8165b6@217.29.117.252)
2021-10-14 01:08:07 +0200 <jollygood2> hi. what xml reader is usually recommended? I found several on hackage
2021-10-14 01:10:10 +0200tired(~tired@user/tired)
2021-10-14 01:10:40 +0200 <Axma53541> might depend what you want to do. I usually start by searching hackage and sorting by downloads to get a rough idea of at least what's being used
2021-10-14 01:11:05 +0200 <dsal> jollygood2: it doesn't come up much. Heh. Depends on what you're doing, though. I used xeno last time I needed to do XML
2021-10-14 01:13:17 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-10-14 01:13:27 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2021-10-14 01:13:29 +0200 <jollygood2> I just wanted to read someone elses xml file. ist is pretty basic, and not too large, about 200 kB
2021-10-14 01:13:47 +0200max22-(~maxime@2a01cb0883359800e21c21519a7e8938.ipv6.abo.wanadoo.fr) (Remote host closed the connection)
2021-10-14 01:14:31 +0200 <jollygood2> so I'd take simplicity and ease of use over, say, performance
2021-10-14 01:15:39 +0200acidjnk_new(~acidjnk@p200300d0c703cb80045a72a6c330f226.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
2021-10-14 01:18:25 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-10-14 01:18:38 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2021-10-14 01:28:01 +0200xff0x(~xff0x@2001:1a81:53d3:ff00:1ad7:b60d:185b:4b6b) (Ping timeout: 245 seconds)
2021-10-14 01:29:02 +0200xff0x(~xff0x@2001:1a81:53d3:ff00:5c0b:f69b:2ab5:cb4c)
2021-10-14 01:29:02 +0200Pickchea(~private@user/pickchea) (Quit: Leaving)
2021-10-14 01:30:27 +0200emf_(~emf@2620:10d:c090:400::5:c416) (Quit: emf_)
2021-10-14 01:31:28 +0200emf(~emf@2620:10d:c090:400::5:c416)
2021-10-14 01:32:03 +0200 <Axma53541> Those are rookie numbers, if you read that in using String, you can easilt make that 200kB 2GB+!
2021-10-14 01:32:25 +0200emf(~emf@2620:10d:c090:400::5:c416) (Client Quit)
2021-10-14 01:32:30 +0200Axma53541Axman6
2021-10-14 01:36:02 +0200 <jollygood2> some xml libraries use strings? I am looking at xeno, tagsoup, xml and xaml
2021-10-14 01:36:16 +0200 <jollygood2> s/xaml/haxml
2021-10-14 01:37:59 +0200 <monochrom> tagsoup and xml are pretty simple, perhaps simplistic.
2021-10-14 01:38:09 +0200 <jollygood2> am I misunderstanding this, or is tagsoup converting everything to String? https://hackage.haskell.org/package/tagsoup-0.14.8/docs/src/Text.HTML.TagSoup.Manual.html#parseTag…
2021-10-14 01:38:31 +0200 <jollygood2> meaning that there's no benefit in using Text?
2021-10-14 01:39:01 +0200 <monochrom> StringLike has ByteString and Text instances.
2021-10-14 01:39:23 +0200 <jollygood2> right. but they are calling toString, which converts everything to String. I see that all over the place
2021-10-14 01:43:06 +0200 <jollygood2> maybe I'm jumping the gun, but I experienced something similar a couple of years ago with scalpel web scraping lib. It also had similar StringLike data type, and internally worked with String everywhere. and when I converted my code to use Text over String, it made everything slightly slower
2021-10-14 01:44:04 +0200 <monochrom> I think your assessment is right.
2021-10-14 01:45:01 +0200 <monochrom> If one goes "fromString . parse . toString", the parser in the middle is usually too complicated for the compiler to say "I understand, I'll do fusion".
2021-10-14 01:48:12 +0200 <jollygood2> I don't actually care about speed, I'm doing it at program startup, and the file is relatively small. but high memory use could be a concern
2021-10-14 01:49:13 +0200hyiltiz(~quassel@31.220.5.250) (Ping timeout: 252 seconds)
2021-10-14 01:49:19 +0200 <jollygood2> so maybe conversion is not an issue for memory use, if String in the middle is picked up by garbage collector
2021-10-14 01:50:16 +0200mestre(~mestre@191.177.175.57) (Quit: Lost terminal)
2021-10-14 01:51:25 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 252 seconds)
2021-10-14 01:55:56 +0200hyiltiz(~quassel@31.220.5.250)
2021-10-14 01:55:57 +0200 <dsal> If you're reading a 200 kB piece of XML once at startup, I don't know that I'd worry about performance or memory use.
2021-10-14 01:56:55 +0200 <jollygood2> I wasn't worrying until Axma mentioned 200kB turning into 2GB+. maybe he was sarcastic, so I'll just give tagsoup a try
2021-10-14 01:57:17 +0200zaquest(~notzaques@5.128.210.178) (Remote host closed the connection)
2021-10-14 01:57:53 +0200emf(~emf@2620:10d:c090:400::5:c416)
2021-10-14 02:00:06 +0200hyiltiz(~quassel@31.220.5.250) (Ping timeout: 245 seconds)
2021-10-14 02:00:58 +0200hippoid(~idris@184.105.6.88) (Quit: leaving)
2021-10-14 02:01:14 +0200idris(~idris@184.105.6.88)
2021-10-14 02:04:40 +0200Stotteren(~Stotteren@pool-108-20-79-41.bstnma.fios.verizon.net) (Remote host closed the connection)
2021-10-14 02:06:33 +0200hyiltiz(~quassel@31.220.5.250)
2021-10-14 02:06:39 +0200 <idris> can someone give me a hint for the Node case for defining a functor on a tree? https://paste.tomsmeding.com/W7jWvHNw
2021-10-14 02:06:55 +0200 <idris> a question from typeclassopedia
2021-10-14 02:08:00 +0200zaquest(~notzaques@5.128.210.178)
2021-10-14 02:09:30 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-10-14 02:09:30 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-10-14 02:09:30 +0200wroathe(~wroathe@user/wroathe)
2021-10-14 02:09:34 +0200 <ski> you'll need to use `Node' in the result, of course
2021-10-14 02:09:45 +0200tdaeayusr^(~tdaeayusr@70.166.66.234) (Ping timeout: 265 seconds)
2021-10-14 02:10:09 +0200 <ski> (also, you're missing a pair of brackets, in the pattern)
2021-10-14 02:10:28 +0200emf(~emf@2620:10d:c090:400::5:c416) (Quit: emf)
2021-10-14 02:10:50 +0200 <ski> fixing that, you're only handling non-empty lists .. .. maybe it would be better to not match on the structure of the list here ?
2021-10-14 02:12:19 +0200 <idris> ski: im going to ponder on that
2021-10-14 02:12:46 +0200 <ski> (there are multiple ways to go about it .. some might be nicer than others)
2021-10-14 02:13:29 +0200MQ-17J(~MQ-17J@2607:fb90:1d89:67a9:1cd1:a18:a57f:e102)
2021-10-14 02:17:32 +0200MQ-17J(~MQ-17J@2607:fb90:1d89:67a9:1cd1:a18:a57f:e102) (Read error: Connection reset by peer)
2021-10-14 02:17:50 +0200MQ-17J(~MQ-17J@d192-24-122-179.try.wideopenwest.com)
2021-10-14 02:18:10 +0200 <idris> is there a way to destructure the a Node to get at the `a` in ITree in the pattern itself?
2021-10-14 02:18:48 +0200 <ski> that's what you're doing in your paste (modulo the bracketting mistake)
2021-10-14 02:19:24 +0200Neuromancer(~Neuromanc@user/neuromancer) (Ping timeout: 265 seconds)
2021-10-14 02:19:25 +0200 <ski> however .. "is there a way to destructure a list to get at the element(s) of the list ?"
2021-10-14 02:20:30 +0200 <idris> the (x:xs) syntax, and then recursion?
2021-10-14 02:20:43 +0200 <ski> (perhaps even : "is there a way to do the same thing to all elements of a list ?")
2021-10-14 02:21:26 +0200Tuplanolla(~Tuplanoll@91-159-69-50.elisa-laajakaista.fi) (Quit: Leaving.)
2021-10-14 02:21:26 +0200 <ski> that's one way. (my last questions hints at another way to think about it)
2021-10-14 02:21:48 +0200 <idris> yeah, I had some thought like that - 'fmap f Node xs = Node (map f xs)'
2021-10-14 02:22:23 +0200Psybur(~Psybur@mobile-166-170-32-197.mycingular.net) (Remote host closed the connection)
2021-10-14 02:22:37 +0200 <idris> but is not correct, but I think that's closer to your hints
2021-10-14 02:22:42 +0200 <ski> yea .. except `xs' is not a list of `a's, but a list of `ITree a's .. so you can't pass `f' to `map' expecting it to call it on every element of `xs', since that doesn't work
2021-10-14 02:23:00 +0200 <ski> instead, you have to .. *mumble* *mumble*
2021-10-14 02:23:41 +0200 <idris> hmm. seems like another fmap
2021-10-14 02:24:23 +0200 <ski> (`f' is a function converting `a's to `b's, remember. it doesn't accept a whole `ITree a' as input .. what would be comfortable with working on an `ITree a' ?)
2021-10-14 02:25:19 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-10-14 02:25:32 +0200 <idris> ummm, fmap?
2021-10-14 02:25:40 +0200 <ski> maybe ?
2021-10-14 02:25:46 +0200 <idris> haha
2021-10-14 02:25:49 +0200 <ski> (perhaps you can explain ?)
2021-10-14 02:25:49 +0200chexum_(~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
2021-10-14 02:26:06 +0200chexum(~quassel@gateway/tor-sasl/chexum)
2021-10-14 02:27:06 +0200 <idris> "what would be comfortable working on an ITree a"... where this pattern is working on a [ITree a]
2021-10-14 02:27:25 +0200 <idris> maybe a case pattern on the right side is what I need
2021-10-14 02:28:03 +0200 <ski> well, you could try that as well
2021-10-14 02:28:23 +0200 <koz> Is it possible to construct a tasty option that is just a flag? I.e., instead of '--my-option=foo' it's just '--my-option'?
2021-10-14 02:28:42 +0200 <idris> ski: you're cluing me that there's a better way
2021-10-14 02:30:13 +0200 <ski> it's good to have multiple approaches in ones arsenal of problem attack, and to become better accquainted with their relative strengths, trade-offs, preconditions, effects
2021-10-14 02:30:52 +0200 <idris> ok, you've given some great hints. Time to try a bunch of stuff. Thanks
2021-10-14 02:31:12 +0200 <idris> ski++
2021-10-14 02:31:17 +0200 <ski> sometimes, banging one's head on a thing, for a while, exploring several avenues, is a better worth of one's while, than being served the (or rather, one particular) answer
2021-10-14 02:31:23 +0200skitwitches
2021-10-14 02:31:31 +0200 <idris> agreed
2021-10-14 02:31:49 +0200 <ski> (of course, if you're stuck, or if you want a proper explanation, feel free to ask for that)
2021-10-14 02:31:54 +0200 <idris> thank you for NOT giving me the exact answer
2021-10-14 02:34:06 +0200emf(~emf@2620:10d:c090:400::5:c416)
2021-10-14 02:34:23 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
2021-10-14 02:39:34 +0200brainfreeze(~brainfree@2a03:1b20:4:f011::20d)
2021-10-14 02:39:37 +0200 <jollygood2> @hoogle [a] -> [(a, Int)]
2021-10-14 02:39:38 +0200 <lambdabot> Test.LeanCheck.Stats counts :: Eq a => [a] -> [(a, Int)]
2021-10-14 02:39:38 +0200 <lambdabot> Test.Speculate.Utils counts :: Eq a => [a] -> [(a, Int)]
2021-10-14 02:39:38 +0200 <lambdabot> ELynx.Tools sortListWithIndices :: Ord a => [a] -> [(a, Int)]
2021-10-14 02:39:47 +0200 <jollygood2> is there something like that in base?
2021-10-14 02:39:55 +0200 <jollygood2> or similar
2021-10-14 02:40:08 +0200 <awpr> `zip [0..]`
2021-10-14 02:40:25 +0200alx741(~alx741@186.178.108.69) (Ping timeout: 252 seconds)
2021-10-14 02:40:32 +0200 <awpr> or with `flip` to make the order match
2021-10-14 02:41:17 +0200 <ski> possibly that's not the intended semantics ?
2021-10-14 02:41:21 +0200 <jollygood2> sorry, I wasn't clear, I want to get the count of identical elements
2021-10-14 02:41:25 +0200skinods
2021-10-14 02:42:10 +0200 <awpr> ah, okay. can cobble something together with `Data.IntMap.fromListWith`, but it won't be as convenient as a pre-made function
2021-10-14 02:42:25 +0200 <awpr> `Data.Map.fromListWith`
2021-10-14 02:42:46 +0200 <geekosaur> nothing premade but I think you can construct one with length, group, and sort
2021-10-14 02:42:52 +0200 <xsperry> > (map (head &&& length) . group . sort) ["foo", "bar", "foo"]
2021-10-14 02:42:54 +0200 <lambdabot> [("bar",1),("foo",2)]
2021-10-14 02:45:22 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 252 seconds)
2021-10-14 02:45:45 +0200 <ski> i guess one could also search for "bag" or "multiset"/"multi-set"
2021-10-14 02:48:14 +0200lavaman(~lavaman@98.38.249.169)
2021-10-14 02:49:14 +0200 <Axman6> I always called that ahistogram
2021-10-14 02:50:18 +0200 <Axman6> % data Booly a where Truey :: Booly 'True; Falsey :: Booly 'False
2021-10-14 02:50:18 +0200 <yahb> Axman6:
2021-10-14 02:50:25 +0200 <Axman6> % :T Truey
2021-10-14 02:50:25 +0200 <yahb> Axman6: unknown command ':T'; use :? for help.
2021-10-14 02:50:28 +0200 <Axman6> % :t Truey
2021-10-14 02:50:28 +0200 <yahb> Axman6: Booly 'True
2021-10-14 02:52:28 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 252 seconds)
2021-10-14 02:53:02 +0200alx741(~alx741@181.196.69.128)
2021-10-14 02:54:17 +0200 <ski> hm, well, "histogram" entered my mind, but afaik, the word is used when you have some given partition of the possible data points, not necessarily the identity equivalence relation / the finest partition, so ..
2021-10-14 02:57:03 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-10-14 02:57:03 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-10-14 02:57:03 +0200wroathe(~wroathe@user/wroathe)
2021-10-14 02:57:22 +0200haskellchap(~haskellch@84-115-222-182.cable.dynamic.surfer.at)
2021-10-14 02:59:47 +0200 <haskellchap> Hello everyone. Can anyone tell me how come this https://pastebin.com/raw/bJkmarBp program does not work when compiled with -XStrict .
2021-10-14 03:00:05 +0200 <haskellchap> I get the error "How?" executed, even though branch is not True
2021-10-14 03:00:42 +0200 <haskellchap> Without -XStrict the program works fine.
2021-10-14 03:01:19 +0200hyiltiz(~quassel@31.220.5.250) (Ping timeout: 252 seconds)
2021-10-14 03:01:36 +0200funsafe(~funsafe@2601:1c1:4200:e53:2875:5507:42e4:4e14) (Read error: Connection reset by peer)
2021-10-14 03:01:39 +0200 <awpr> that's kind of the definition of `-XStrict`. it makes the data constructor `P` strict, which means the error gets forced as part of constructing the `P`
2021-10-14 03:01:52 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 252 seconds)
2021-10-14 03:01:57 +0200 <ski> try `ff = M.state (\_ -> error "How ?")'
2021-10-14 03:02:34 +0200 <haskellchap> The code runs up to the branch and then throws error
2021-10-14 03:03:55 +0200 <ski> hm, what if you add say `() <- ()' before the `let' ?
2021-10-14 03:04:16 +0200 <ski> er, make that `() <- return ()', of course
2021-10-14 03:05:45 +0200brettgilio(~brettgili@x-node.gq) (Quit: Leaving...)
2021-10-14 03:05:48 +0200 <haskellchap> I mean, your M.state suggestion works. The code no longer throws and putting f below g will throw it.
2021-10-14 03:05:49 +0200 <ski> hm, sorry, i should be more specific. before the second `let' (after the second `do'). (i forgot that there was a first `let')
2021-10-14 03:06:14 +0200 <haskellchap> the M.state works even if let P{f,g} is there. If f is not called there is no throw.
2021-10-14 03:06:21 +0200 <monochrom> What awpr said. You just need to understand: without Strict, but with "data P = P { f :: !(SM ()), g :: !(SM ())}", that is enough strictness to cause the bottom.
2021-10-14 03:06:21 +0200funsafe(~funsafe@2601:1c1:4200:e53:2875:5507:42e4:4e14)
2021-10-14 03:06:39 +0200nitrix(~nitrix@user/nitrix) (Quit: Genius is one percent inspiration and ninety-nine percent perspiration)
2021-10-14 03:07:26 +0200 <monochrom> See also my http://www.vex.net/~trebla/haskell/strict-field.xhtml
2021-10-14 03:07:37 +0200skiidly wonders how it was established that the code runs up to the branch
2021-10-14 03:07:45 +0200awprtoo
2021-10-14 03:07:49 +0200lbseale(~lbseale@user/ep1ctetus) (Read error: Connection reset by peer)
2021-10-14 03:08:40 +0200 <monochrom> My theory is instead:
2021-10-14 03:08:42 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-10-14 03:08:43 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-10-14 03:08:43 +0200wroathe(~wroathe@user/wroathe)
2021-10-14 03:09:07 +0200 <haskellchap> Interesting. In my real example the code was running and then threw error, even though the P was constructed at the top level there too.
2021-10-14 03:09:27 +0200 <monochrom> "s <- M.get", even with State.Lazy, causes the preceding "g" to be seq'ed.
2021-10-14 03:09:44 +0200brettgilio(~brettgili@x-node.gq)
2021-10-14 03:10:16 +0200 <monochrom> If g is seq'ed, then it causes the d in "P{g} = d" to be seq'ed.
2021-10-14 03:10:51 +0200 <monochrom> If d is seq'ed, then Strict or "data = ... ! ..." causes its f field to be seq'ed, which means ff.
2021-10-14 03:11:15 +0200 <monochrom> It totally doesn't matter whether s==4 or s/=4.
2021-10-14 03:11:20 +0200 <haskellchap> Yep, I get it, I read the link and yes, I evaluate the parent definitely.
2021-10-14 03:11:27 +0200 <haskellchap> Thanks for the explanation.
2021-10-14 03:11:39 +0200o1lo01ol1o(~o1lo01ol1@2001:8a0:6d7a:df01:74db:7502:a3aa:3820) (Read error: Connection reset by peer)
2021-10-14 03:12:06 +0200hyiltiz(~quassel@31.220.5.250)
2021-10-14 03:12:31 +0200o1lo01ol1o(~o1lo01ol1@2001:8a0:6d7a:df01:74db:7502:a3aa:3820)
2021-10-14 03:12:34 +0200tabemann(~tabemann@2600:1700:7990:24e0:5901:20e0:5666:a3ee)
2021-10-14 03:14:00 +0200nitrix(~nitrix@user/nitrix)
2021-10-14 03:16:25 +0200haskellchap(~haskellch@84-115-222-182.cable.dynamic.surfer.at) (Ping timeout: 256 seconds)
2021-10-14 03:19:58 +0200MQ-17J(~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer)
2021-10-14 03:24:34 +0200MQ-17J(~MQ-17J@8.6.144.117)
2021-10-14 03:26:24 +0200nitrixnitrix-or-treat
2021-10-14 03:36:55 +0200wrengrwrengr_away
2021-10-14 03:37:57 +0200[_](~itchyjunk@user/itchyjunk/x-7353470)
2021-10-14 03:40:22 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 252 seconds)
2021-10-14 03:44:51 +0200Neuromancer(~Neuromanc@user/neuromancer)
2021-10-14 03:46:40 +0200theproffesor(~theproffe@user/theproffesor)
2021-10-14 03:49:52 +0200YoungChiefBTW(~youngchie@2001:470:69fc:105::214c) (Changing host)
2021-10-14 03:49:52 +0200YoungChiefBTW(~youngchie@user/youngchiefbtw)
2021-10-14 03:53:43 +0200[_][itchyjunk]
2021-10-14 03:53:51 +0200hyiltiz(~quassel@31.220.5.250) (Ping timeout: 245 seconds)
2021-10-14 03:58:12 +0200 <jollygood2> does this seem reasonable way to avoid "Pattern match(es) are non-exhaustive" warning? do c <- oneOf "xyz"; case c of X -> � Y -> � _ error "parseXYZ: can't happen!"
2021-10-14 03:58:31 +0200 <jollygood2> case c of 'x' � even
2021-10-14 03:59:07 +0200jinsun(~quassel@user/jinsun) (Read error: Connection reset by peer)
2021-10-14 04:01:28 +0200 <pavonia> Your syntax seems a bit mixed up, but I guess you mean the right thing
2021-10-14 04:01:44 +0200 <jollygood2> it is possible, I typed it in irc client
2021-10-14 04:02:11 +0200xff0x(~xff0x@2001:1a81:53d3:ff00:5c0b:f69b:2ab5:cb4c) (Ping timeout: 245 seconds)
2021-10-14 04:02:20 +0200 <jollygood2> anyway, does error seem like a reasonable way to handle default case, that can't happen?
2021-10-14 04:03:15 +0200 <ski> an alternative would be to use `<|>', i guess
2021-10-14 04:04:14 +0200xff0x(~xff0x@2001:1a81:5210:a600:f14:89c2:cfb:bd25)
2021-10-14 04:04:24 +0200 <pavonia> Use error if something really shouldn't happen under any circumstances
2021-10-14 04:04:42 +0200hyiltiz(~quassel@31.220.5.250)
2021-10-14 04:05:11 +0200theproffesor(~theproffe@user/theproffesor) (Leaving)
2021-10-14 04:05:18 +0200 <pavonia> (In this case there should be alternatives for 'y' and 'z')
2021-10-14 04:07:11 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 265 seconds)
2021-10-14 04:09:07 +0200bontaq(~user@ool-45779fe5.dyn.optonline.net) (Ping timeout: 265 seconds)
2021-10-14 04:14:20 +0200 <dsal> jollygood2: `error` is `undefined` but you get to write an insult next to it.
2021-10-14 04:14:44 +0200 <dsal> You can generally write much better code without `error` and then not end up sad later. :)
2021-10-14 04:14:55 +0200Neuromancer(~Neuromanc@user/neuromancer) (Ping timeout: 265 seconds)
2021-10-14 04:15:37 +0200 <jollygood2> yes, it has happened to me before that "can't happen" ends up happening anyway :). it really can't happen in here though, I think, but <|> is better yes
2021-10-14 04:18:58 +0200wroathe(~wroathe@user/wroathe)
2021-10-14 04:23:13 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 252 seconds)
2021-10-14 04:23:26 +0200gay(~quassel@77-120-141-90.kha.volia.net)
2021-10-14 04:25:42 +0200 <byorgey> I use the 'error "Can't happen"' thing way too often, I guess. It has been an enlightening experience working on https://github.com/byorgey/swarm/ with the policy that there can be absolutely positively zero uses of 'undefined' or 'error', because if the game crashes it means a user loses all their progress.
2021-10-14 04:26:57 +0200 <byorgey> so we have to come up with creative ways of either dealing with all cases gracefully, or reporting an error to the user (but not crashing the game) if something happens that really shouldn't.
2021-10-14 04:30:30 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-10-14 04:44:23 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2021-10-14 04:44:50 +0200 <dsal> Maybe works for "can't happen" things and composes reasonably well.
2021-10-14 04:49:14 +0200td_(~td@94.134.91.240) (Ping timeout: 265 seconds)
2021-10-14 04:50:55 +0200td_(~td@94.134.91.160)
2021-10-14 04:50:56 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 245 seconds)
2021-10-14 04:52:51 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643)
2021-10-14 04:59:52 +0200rekahsoft(~rekahsoft@52.129.35.150) (Ping timeout: 265 seconds)
2021-10-14 05:05:04 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
2021-10-14 05:15:18 +0200wyrd(~wyrd@70.39.83.14)
2021-10-14 05:26:21 +0200wyrd(~wyrd@70.39.83.14) (Quit: leaving)
2021-10-14 05:27:56 +0200Neuromancer(~Neuromanc@user/neuromancer)
2021-10-14 05:30:31 +0200obfusk_(~quassel@a82-161-150-56.adsl.xs4all.nl) (Ping timeout: 245 seconds)
2021-10-14 05:31:10 +0200nitrix-or-treat(~nitrix@user/nitrix) (Quit: Genius is one percent inspiration and ninety-nine percent perspiration)
2021-10-14 05:32:39 +0200obfusk(~quassel@a82-161-150-56.adsl.xs4all.nl)
2021-10-14 05:32:44 +0200nitrix(~nitrix@user/nitrix)
2021-10-14 05:42:35 +0200wyrd(~wyrd@70.39.83.14)
2021-10-14 05:44:30 +0200jess(~jess@libera/staff/jess) (Quit: Lost terminal)
2021-10-14 05:45:34 +0200jess(~jess@libera/staff/jess)
2021-10-14 05:49:34 +0200ystael(~ystael@user/ystael) (Ping timeout: 252 seconds)
2021-10-14 05:55:06 +0200shapr(~user@pool-100-36-247-68.washdc.fios.verizon.net) (Ping timeout: 245 seconds)
2021-10-14 05:55:48 +0200Gurkenglas(~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de)
2021-10-14 06:04:20 +0200zmt00(~zmt00@user/zmt00) (Quit: Gone.)
2021-10-14 06:06:04 +0200zmt00(~zmt00@user/zmt00)
2021-10-14 06:08:34 +0200fizzsegfaultbuzz(~segfaultf@135-180-0-138.static.sonic.net) (Ping timeout: 268 seconds)
2021-10-14 06:11:05 +0200emf(~emf@2620:10d:c090:400::5:c416) (Quit: emf)
2021-10-14 06:13:08 +0200emf(~emf@2620:10d:c090:400::5:c416)
2021-10-14 06:28:19 +0200zebrag(~chris@user/zebrag) (Remote host closed the connection)
2021-10-14 06:29:52 +0200jinsun(~quassel@user/jinsun)
2021-10-14 06:37:25 +0200machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 252 seconds)
2021-10-14 06:37:25 +0200waleee(~waleee@h-98-128-228-119.na.cust.bahnhof.se) (Ping timeout: 252 seconds)
2021-10-14 06:44:46 +0200coot(~coot@37.30.52.44.nat.umts.dynamic.t-mobile.pl)
2021-10-14 06:49:32 +0200infinity0_(~infinity0@occupy.ecodis.net)
2021-10-14 06:49:33 +0200infinity0Guest732
2021-10-14 06:49:33 +0200Guest732(~infinity0@occupy.ecodis.net) (Killed (copper.libera.chat (Nickname regained by services)))
2021-10-14 06:49:33 +0200infinity0_infinity0
2021-10-14 06:51:10 +0200falafel(~falafel@2603-8000-d800-688c-c469-52c4-b20d-779e.res6.spectrum.com)
2021-10-14 07:05:31 +0200MQ-17J(~MQ-17J@8.6.144.117) (Ping timeout: 252 seconds)
2021-10-14 07:06:14 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-10-14 07:09:24 +0200Neuromancer(~Neuromanc@user/neuromancer) (Ping timeout: 265 seconds)
2021-10-14 07:20:16 +0200emf(~emf@2620:10d:c090:400::5:c416) (Quit: emf)
2021-10-14 07:26:24 +0200mbuf(~Shakthi@122.178.118.100)
2021-10-14 07:27:47 +0200slowButPresent(~slowButPr@user/slowbutpresent) (Quit: leaving)
2021-10-14 07:29:03 +0200abrantesasf(~abrantesa@187.36.170.211)
2021-10-14 07:30:09 +0200abrantesasf(~abrantesa@187.36.170.211) (Remote host closed the connection)
2021-10-14 07:31:13 +0200abrantesasf(~abrantesa@187.36.170.211)
2021-10-14 07:31:47 +0200abrantesasf(~abrantesa@187.36.170.211) (Remote host closed the connection)
2021-10-14 07:32:55 +0200aegon(~mike@174.127.249.180) (Remote host closed the connection)
2021-10-14 07:33:28 +0200even4void(even4void@came.here.for-some.fun) ()
2021-10-14 07:35:43 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
2021-10-14 07:36:37 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer)
2021-10-14 07:38:45 +0200lavaman(~lavaman@98.38.249.169)
2021-10-14 07:39:38 +0200falafel(~falafel@2603-8000-d800-688c-c469-52c4-b20d-779e.res6.spectrum.com) (Remote host closed the connection)
2021-10-14 07:39:53 +0200falafel(~falafel@2603-8000-d800-688c-c469-52c4-b20d-779e.res6.spectrum.com)
2021-10-14 07:43:08 +0200obfusk(~quassel@a82-161-150-56.adsl.xs4all.nl) (Quit: No Ping reply in 180 seconds.)
2021-10-14 07:43:14 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 265 seconds)
2021-10-14 07:44:17 +0200obfusk(~quassel@a82-161-150-56.adsl.xs4all.nl)
2021-10-14 07:46:32 +0200takuan(~takuan@178-116-218-225.access.telenet.be)
2021-10-14 07:53:59 +0200carbolymer_carbolymer
2021-10-14 07:54:33 +0200ubert(~Thunderbi@77.119.175.120.wireless.dyn.drei.com)
2021-10-14 07:57:04 +0200mjs2600(~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) (Quit: ZNC 1.8.2 - https://znc.in)
2021-10-14 07:57:19 +0200mjs2600(~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net)
2021-10-14 08:04:15 +0200azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 276 seconds)
2021-10-14 08:05:06 +0200azimut(~azimut@gateway/tor-sasl/azimut)
2021-10-14 08:12:30 +0200Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2021-10-14 08:20:06 +0200vjoki(~vjoki@2a00:d880:3:1::fea1:9ae) (Ping timeout: 245 seconds)
2021-10-14 08:21:16 +0200vjoki(~vjoki@2a00:d880:3:1::fea1:9ae)
2021-10-14 08:25:28 +0200jakalx(~jakalx@base.jakalx.net) ()
2021-10-14 08:26:56 +0200dhouthoo(~dhouthoo@178-117-36-167.access.telenet.be)
2021-10-14 08:27:58 +0200dschrempf(~dominik@070-207.dynamic.dsl.fonira.net)
2021-10-14 08:35:27 +0200Neuromancer(~Neuromanc@user/neuromancer)
2021-10-14 08:37:11 +0200falafel(~falafel@2603-8000-d800-688c-c469-52c4-b20d-779e.res6.spectrum.com) (Ping timeout: 245 seconds)
2021-10-14 08:38:18 +0200jakalx(~jakalx@base.jakalx.net)
2021-10-14 08:39:01 +0200brainfreeze(~brainfree@2a03:1b20:4:f011::20d) (Quit: Leaving)
2021-10-14 08:41:46 +0200fendor(~fendor@178.115.40.84.wireless.dyn.drei.com)
2021-10-14 08:51:43 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:d23a:63c3:dec2:f7ab)
2021-10-14 08:51:56 +0200visortelle(~visortell@37.214.28.39)
2021-10-14 08:52:38 +0200visortelle(~visortell@37.214.28.39) (Remote host closed the connection)
2021-10-14 08:58:59 +0200 <dminuoso> byorgey: Perhaps this is an argument that for non-trivial code with "cant happen cases" being in IO is not such a bad idea.
2021-10-14 09:07:52 +0200wyrd(~wyrd@70.39.83.14) (Quit: leaving)
2021-10-14 09:08:03 +0200MQ-17J(~MQ-17J@d192-24-122-179.try.wideopenwest.com)
2021-10-14 09:08:06 +0200 <tdammers> I think it fits in nicely with the "small dangerous trusted core in IO, large trustworthy well-typed pure code to deal with all the complex logic" design
2021-10-14 09:08:11 +0200wyrd(~wyrd@70.39.83.14)
2021-10-14 09:08:44 +0200max22-(~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr)
2021-10-14 09:09:22 +0200wyrd(~wyrd@70.39.83.14) (Client Quit)
2021-10-14 09:09:31 +0200chele(~chele@user/chele)
2021-10-14 09:10:03 +0200wyrd(~wyrd@70.39.83.14)
2021-10-14 09:11:00 +0200jtomas_(~jtomas@95.red-88-11-64.dynamicip.rima-tde.net)
2021-10-14 09:15:17 +0200thonkpod(~thonkpod@user/thonkpod) (Ping timeout: 246 seconds)
2021-10-14 09:15:37 +0200jollygood2(~bc8165b6@217.29.117.252) (Quit: http://www.okay.uz/ (Session timeout))
2021-10-14 09:15:43 +0200thonkpod(~thonkpod@user/thonkpod)
2021-10-14 09:17:30 +0200MQ-17J(~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer)
2021-10-14 09:18:17 +0200MQ-17J(~MQ-17J@d192-24-122-179.try.wideopenwest.com)
2021-10-14 09:21:53 +0200jinsun__(~quassel@user/jinsun)
2021-10-14 09:22:32 +0200wyrd(~wyrd@70.39.83.14) (Quit: leaving)
2021-10-14 09:23:32 +0200econo(uid147250@user/econo) (Quit: Connection closed for inactivity)
2021-10-14 09:24:09 +0200gehmehgeh(~user@user/gehmehgeh)
2021-10-14 09:25:06 +0200jinsun(~quassel@user/jinsun) (Ping timeout: 245 seconds)
2021-10-14 09:28:30 +0200wyrd(~wyrd@gateway/tor-sasl/wyrd)
2021-10-14 09:30:09 +0200michalz(~michalz@185.246.204.93)
2021-10-14 09:30:16 +0200hnOsmium0001(uid453710@id-453710.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
2021-10-14 09:30:40 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-10-14 09:33:10 +0200ubert1(~Thunderbi@77.119.175.120.wireless.dyn.drei.com)
2021-10-14 09:33:50 +0200wyrd(~wyrd@gateway/tor-sasl/wyrd) (Quit: leaving)
2021-10-14 09:34:04 +0200wyrd(~wyrd@gateway/tor-sasl/wyrd)
2021-10-14 09:34:23 +0200wyrd(~wyrd@gateway/tor-sasl/wyrd) (Client Quit)
2021-10-14 09:35:34 +0200wyrd(~wyrd@gateway/tor-sasl/wyrd)
2021-10-14 09:35:38 +0200oxide(~lambda@user/oxide)
2021-10-14 09:40:01 +0200cfricke(~cfricke@user/cfricke)
2021-10-14 09:45:27 +0200azeem(~azeem@2a00:801:238:8585:a976:a6c:e179:1344) (Read error: Connection reset by peer)
2021-10-14 09:45:44 +0200azeem(~azeem@emp-85-170.eduroam.uu.se)
2021-10-14 09:46:33 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-10-14 09:46:45 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2021-10-14 09:52:25 +0200kuribas(~user@ip-188-118-57-242.reverse.destiny.be)
2021-10-14 09:55:08 +0200acidjnk_new(~acidjnk@p200300d0c703cb2624cf652eb5c49df1.dip0.t-ipconnect.de)
2021-10-14 09:55:12 +0200 <dminuoso> tdammers: In part yes, though if you have these "impossible cant happen" situations in pure code, this results in one of several problems
2021-10-14 09:55:28 +0200o1lo01ol1o(~o1lo01ol1@2001:8a0:6d7a:df01:74db:7502:a3aa:3820) (Remote host closed the connection)
2021-10-14 09:56:05 +0200 <dminuoso> Encoding these error conditions into ADTs can be tricky or annoying at times due to compositionality
2021-10-14 09:56:11 +0200jtomas_(~jtomas@95.red-88-11-64.dynamicip.rima-tde.net) (Quit: Leaving)
2021-10-14 09:56:44 +0200 <c_wraith> or a massive performance penalty
2021-10-14 09:57:41 +0200 <dminuoso> Heh, was going to say that too.
2021-10-14 09:58:06 +0200 <dminuoso> It's not a reason not to do this, but it can present challenges
2021-10-14 09:58:39 +0200 <kuribas> just put some property tests on it to prove the invariant.
2021-10-14 10:01:27 +0200 <kuribas> It just depends on how much the problem solves vs the effort required.
2021-10-14 10:01:47 +0200 <c_wraith> I'm thinking of a particularly knotty bit of code I wrote... I think getting rid of the call to error completely invalidates the reason the code exists.
2021-10-14 10:03:22 +0200 <dminuoso> Plus, you *can* catch error in IO
2021-10-14 10:04:20 +0200 <dminuoso> Perhaps we should just use more `evaluate`
2021-10-14 10:04:26 +0200 <c_wraith> also, it doesn't really help with the actual problem in that code, which is that if the circular reference is allowed to close, you get a self-referential thunk. No data type can fix *that* problem.
2021-10-14 10:05:25 +0200 <dminuoso> c_wraith: Oh but that's not true!
2021-10-14 10:05:36 +0200 <dminuoso> Pointers are magic
2021-10-14 10:05:43 +0200 <kuribas> c_wraith: do you want to avoid self-referencing?
2021-10-14 10:05:59 +0200 <kuribas> c_wraith: couldn't you use a monad to generate it?
2021-10-14 10:06:12 +0200 <c_wraith> no. not even close.
2021-10-14 10:07:20 +0200 <c_wraith> https://gist.github.com/chowells79/996f2749b088d287937e3eff11055522
2021-10-14 10:09:08 +0200tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
2021-10-14 10:09:48 +0200hendursa1(~weechat@user/hendursaga)
2021-10-14 10:10:21 +0200hendursaga(~weechat@user/hendursaga) (Ping timeout: 276 seconds)
2021-10-14 10:10:56 +0200 <kuribas> c_wraith: could you make an intermediate, not self-referencial version, which you then validate and convert to tie the knot?
2021-10-14 10:11:13 +0200 <c_wraith> that would entirely defeat the purpose
2021-10-14 10:11:35 +0200 <kuribas> looks like an interesting problem, but I am busy right now...
2021-10-14 10:11:38 +0200 <c_wraith> as it would add back all the overhead that's being eliminated by making them the same in the first place
2021-10-14 10:13:26 +0200 <kuribas> I could look at it this evening, or tomorrow.
2021-10-14 10:16:55 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Read error: Connection reset by peer)
2021-10-14 10:17:36 +0200geekosaur(~geekosaur@xmonad/geekosaur)
2021-10-14 10:18:11 +0200o1lo01ol1o(~o1lo01ol1@2001:8a0:6d7a:df01:74db:7502:a3aa:3820)
2021-10-14 10:18:44 +0200ub(~Thunderbi@178.115.37.32.wireless.dyn.drei.com)
2021-10-14 10:19:37 +0200ubert1(~Thunderbi@77.119.175.120.wireless.dyn.drei.com) (Ping timeout: 252 seconds)
2021-10-14 10:20:06 +0200ubert(~Thunderbi@77.119.175.120.wireless.dyn.drei.com) (Ping timeout: 245 seconds)
2021-10-14 10:20:06 +0200ububert
2021-10-14 10:26:58 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:ac5a:4bd6:3f7c:fb35) (Remote host closed the connection)
2021-10-14 10:30:04 +0200MQ-17J(~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer)
2021-10-14 10:31:14 +0200MQ-17J(~MQ-17J@8.6.144.117)
2021-10-14 10:33:23 +0200max22-(~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) (Remote host closed the connection)
2021-10-14 10:33:51 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 265 seconds)
2021-10-14 10:34:10 +0200max22-(~maxime@2a01cb0883359800f335681c9791beec.ipv6.abo.wanadoo.fr)
2021-10-14 10:52:20 +0200o1lo01ol1o(~o1lo01ol1@2001:8a0:6d7a:df01:74db:7502:a3aa:3820) (Remote host closed the connection)
2021-10-14 10:52:54 +0200Pickchea(~private@user/pickchea)
2021-10-14 10:52:57 +0200o1lo01ol1o(~o1lo01ol1@2001:8a0:6d7a:df01:74db:7502:a3aa:3820)
2021-10-14 10:54:59 +0200o1lo01ol1o(~o1lo01ol1@2001:8a0:6d7a:df01:74db:7502:a3aa:3820) (Remote host closed the connection)
2021-10-14 10:55:13 +0200o1lo01ol1o(~o1lo01ol1@2001:8a0:6d7a:df01:74db:7502:a3aa:3820)
2021-10-14 10:58:27 +0200fendor_(~fendor@77.119.208.38.wireless.dyn.drei.com)
2021-10-14 11:00:56 +0200fendor(~fendor@178.115.40.84.wireless.dyn.drei.com) (Ping timeout: 245 seconds)
2021-10-14 11:02:47 +0200o1lo01ol1o(~o1lo01ol1@2001:8a0:6d7a:df01:74db:7502:a3aa:3820) (Remote host closed the connection)
2021-10-14 11:03:27 +0200o1lo01ol1o(~o1lo01ol1@2001:8a0:6d7a:df01:74db:7502:a3aa:3820)
2021-10-14 11:04:10 +0200dolio(~dolio@130.44.130.54) (Ping timeout: 252 seconds)
2021-10-14 11:05:11 +0200dolio(~dolio@130.44.130.54)
2021-10-14 11:10:09 +0200azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 276 seconds)
2021-10-14 11:20:01 +0200mestre(~mestre@191.177.175.57)
2021-10-14 11:21:20 +0200tdaeayusr^(~tdaeayusr@70.166.66.234)
2021-10-14 11:25:15 +0200trillp(~trillp@69.233.98.238)
2021-10-14 11:26:03 +0200Pickchea(~private@user/pickchea) (Ping timeout: 265 seconds)
2021-10-14 11:27:24 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:ac5a:4bd6:3f7c:fb35)
2021-10-14 11:32:00 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:ac5a:4bd6:3f7c:fb35) (Ping timeout: 265 seconds)
2021-10-14 11:33:19 +0200dschrempf(~dominik@070-207.dynamic.dsl.fonira.net) (Ping timeout: 252 seconds)
2021-10-14 11:34:13 +0200Kaiepi(~Kaiepi@156.34.44.192) (Read error: Connection reset by peer)
2021-10-14 11:34:25 +0200mei6(~mei@user/mei)
2021-10-14 11:34:28 +0200Kaiepi(~Kaiepi@156.34.44.192)
2021-10-14 11:37:02 +0200acidjnk_new(~acidjnk@p200300d0c703cb2624cf652eb5c49df1.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
2021-10-14 11:43:26 +0200timCF(~timCF@200-149-20-81.sta.estpak.ee)
2021-10-14 11:46:01 +0200tdaeayusr^(~tdaeayusr@70.166.66.234) (Ping timeout: 252 seconds)
2021-10-14 11:48:10 +0200MQ-17J(~MQ-17J@8.6.144.117) (Ping timeout: 252 seconds)
2021-10-14 11:48:20 +0200 <timCF> Hello! Does anyone have an idea how I could get a some sort of a list/graph/tree of Async processes currently running with information about how they are related to each other, structured and linked? Basically I'm looking for experience similar to Erlang "observer" tool, but in form of data which I can programmatically handle - send some mertics to monitoring services etc.
2021-10-14 11:51:45 +0200 <sshine> timCF, as far as I remember, Erlang's spawn_link creates a child process and grants the parent process certain runtime privileges for monitoring if the process died, and killing child processes.
2021-10-14 11:53:05 +0200MQ-17J(~MQ-17J@d192-24-122-179.try.wideopenwest.com)
2021-10-14 11:53:23 +0200 <sshine> timCF, I don't know exactly how spawn_monitor is implemented, though. but maybe it happens by wrapping the function that the child process runs inside another function that handles monitoring requests?
2021-10-14 11:54:31 +0200 <sshine> timCF, did you see https://hackage.haskell.org/package/distributed-process ?
2021-10-14 11:56:56 +0200 <sshine> timCF, judging by the 2018 timestamp, I don't know how popular it is.
2021-10-14 11:57:29 +0200Neuromancer(~Neuromanc@user/neuromancer) (Remote host closed the connection)
2021-10-14 11:57:30 +0200 <timCF> sshine: yeah, I'm ex-Erlang programmer, and I did transfered a lot of ideas from it to my current Haskell development experience. Including linking spawned processes. Async libarary provides experience pretty close to low-level OTP functions like spawn and link. I do have some sort of generic supervisor trees implemented in terms of Async, and it mostly works. Just thinking that it might be very cool to
2021-10-14 11:57:36 +0200 <timCF> visualize it, and use for some metrics
2021-10-14 11:57:38 +0200bontaq(~user@ool-45779fe5.dyn.optonline.net)
2021-10-14 11:58:34 +0200LiaoTao(~LiaoTao@gateway/tor-sasl/liaotao) (Remote host closed the connection)
2021-10-14 11:58:55 +0200 <timCF> sshine: distributed-process seems overkill, they do focus a lot on distributed Erlang-like features, which is pretty hard thing to do right
2021-10-14 11:59:06 +0200LiaoTao(~LiaoTao@gateway/tor-sasl/liaotao)
2021-10-14 11:59:32 +0200 <sshine> yeah, it seems like they try to embed a large part of Erlang into Haskell, rather than use similar design patterns.
2021-10-14 11:59:44 +0200 <sshine> or rather, create a large framework for replicating those design patterns.
2021-10-14 12:00:19 +0200 <sshine> timCF, I suppose you could create a monitoring process that kept information about the processes it monitors, and have those types of monitoring processes contain the list/graph/tree data for visualising. does sound kinda frameworkey, though. :)
2021-10-14 12:00:45 +0200 <sshine> sounds like a partial OTP implementation, hehe.
2021-10-14 12:01:22 +0200 <sshine> timCF, did you see https://hackage.haskell.org/package/nqe then?
2021-10-14 12:01:40 +0200 <timCF> sshine: in my opinion distributed Erlang features do have low demand and utility, and at the same time very hard to implement right. But dynamic supervision trees are actually very useful and practical, and simpler to implement)
2021-10-14 12:01:49 +0200jinsun__jinsun
2021-10-14 12:02:05 +0200 <timCF> sshine: I'll check it, thanks)
2021-10-14 12:03:06 +0200 <sshine> timCF, it specifically has a Control.Concurrent.NQE.Supervisor module.
2021-10-14 12:03:13 +0200 <sshine> timCF, and it doesn't seem very huge.
2021-10-14 12:03:30 +0200 <sshine> timCF, and jprupp made it in 2020. :)
2021-10-14 12:03:40 +0200jollygood2(~bc8165b6@217.29.117.252)
2021-10-14 12:06:16 +0200 <jollygood2> hi. is there a way to do this without as much boilerplate?
2021-10-14 12:06:37 +0200 <jollygood2> https://paste.tomsmeding.com/3qKex6gT
2021-10-14 12:13:03 +0200dyeplexer(~dyeplexer@user/dyeplexer)
2021-10-14 12:13:26 +0200 <timCF> jollygood2: Looks like `uncurry` might do the job
2021-10-14 12:13:44 +0200 <jollygood2> :t uncurry
2021-10-14 12:13:45 +0200 <lambdabot> (a -> b -> c) -> (a, b) -> c
2021-10-14 12:13:57 +0200 <jollygood2> hmm, how?
2021-10-14 12:14:56 +0200__monty__(~toonn@user/toonn)
2021-10-14 12:16:06 +0200 <timCF> jollygood2: I thought it might be useful to uncurry function of multiple arguments somehow
2021-10-14 12:16:47 +0200 <jollygood2> yeah it seems similar, but I have list as an input, not a tuple
2021-10-14 12:20:21 +0200 <timCF> jollygood2: well, you can't use fold to gradually apply arguments one by one, because accumulator needs to be the same type
2021-10-14 12:21:11 +0200 <[exa]> jollygood2: there's a function called chunksOf or similarly that cuts the list into parts; then you'll either need to patternmatch the [a,b,c,d,e] manually or use some var-arg magic, such as the one in Text.Printf
2021-10-14 12:21:23 +0200 <timCF> jollygood2: but you can recursively apply, decomposing list with pattern matching, and expressing your apply-like functions in terms of each other
2021-10-14 12:22:33 +0200 <timCF> jollygood2: for example `apply5 f (x : xs) = apply4 (f x) xs`
2021-10-14 12:23:31 +0200 <[exa]> anyway, using !! is discouraged. apply5 f (a:b:c:d:e:xs) = f a b c d e` is much less troublesome
2021-10-14 12:28:32 +0200 <sshine> :t ap
2021-10-14 12:28:33 +0200 <lambdabot> Monad m => m (a -> b) -> m a -> m b
2021-10-14 12:29:50 +0200 <sshine> jollygood2, you have some functions liftM, liftM2, liftM3, etc. that share a similar cascading effect: https://hackage.haskell.org/package/base-4.15.0.0/docs/Control-Monad.html#g:7
2021-10-14 12:29:55 +0200 <jollygood2> this worked apply5 f xs = apply4 f (dropFromEnd 1 xs) (last xs)
2021-10-14 12:30:35 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2021-10-14 12:31:11 +0200 <jollygood2> not sure if it is much clearer. and I could pattern match instead, like [exa] said. but then what do I do if there aren't enough elements? return error? throw exception?
2021-10-14 12:31:57 +0200 <jollygood2> sshine I'm familiar with liftM, but I'm not sure how I could use that function for this
2021-10-14 12:32:10 +0200 <jollygood2> those functions*
2021-10-14 12:32:32 +0200timCF(~timCF@200-149-20-81.sta.estpak.ee) (Quit: leaving)
2021-10-14 12:34:10 +0200 <sshine> jollygood2, oh, hm. I'm beginning to see what you're trying to accomplish. you're trying to implement variadic functions, aren't you? i.e. functions with a number of arguments that vary at runtime.
2021-10-14 12:34:52 +0200Neuromancer(~Neuromanc@user/neuromancer)
2021-10-14 12:34:52 +0200 <sshine> jollygood2, this is hard to do safely without dependent types, because you may at any point not have as many arguments as you assume.
2021-10-14 12:35:57 +0200 <jollygood2> no I am not implementing variadic function. I have constructors that take different number of arguments, and a list of those arguments. code that precedes construction, that tests for some behavior, should ensure that I have the right number of arguments
2021-10-14 12:36:34 +0200 <jollygood2> I just wanted to avoid cluttering the logic code with Constructor (x !! 0) (x !! 1) (x !! 2) (x !! 3) (x !! 4)
2021-10-14 12:36:47 +0200 <jollygood2> vs apply5 Constructor xs
2021-10-14 12:37:21 +0200 <sshine> jollygood2, did you read https://lexi-lambda.github.io/blog/2019/11/05/parse-don-t-validate/ ? -- you want to end up in a state where, if you've asserted that you have the right amount of values, then the types prevent any other scenario.
2021-10-14 12:37:30 +0200 <sshine> !! does not prevent any other scenario :)
2021-10-14 12:37:31 +0200 <jollygood2> and, out of curiosity, I was wondering if there was a nicer way to implement apply* functions
2021-10-14 12:38:11 +0200 <sshine> jollygood2, seems like an x-y problem. maybe if you showed what problem you're trying to solve with apply2, apply3, apply4, that problem can be remodelled to not need unsafe variadic functions.
2021-10-14 12:39:29 +0200 <jollygood2> here's a short example that will, hopefully, make it clear what I'm doing. https://paste.tomsmeding.com/KzM7LiOJ
2021-10-14 12:41:08 +0200 <jollygood2> includes HandValue definition: https://paste.tomsmeding.com/QSYLVhro
2021-10-14 12:43:17 +0200 <jollygood2> [Card] includes both player's hole cards, and table cards. it would be ideal to use types to ensure invalid state can't happen, but I have no clue how I'd do that
2021-10-14 12:43:27 +0200acidjnk_new(~acidjnk@p200300d0c703cb2624cf652eb5c49df1.dip0.t-ipconnect.de)
2021-10-14 12:47:46 +0200dschrempf(~dominik@070-207.dynamic.dsl.fonira.net)
2021-10-14 12:49:49 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
2021-10-14 12:49:51 +0200 <sshine> jollygood2, sounds like [exa]'s suggestion of pattern matching is right. to answer your question, "what do I do if tehere aren't enough elements?" -- you want to catch that early on, not drag potentially-too-short lists around after a point where you've validated their length.
2021-10-14 12:50:25 +0200 <jollygood2> that is what I was thinking as well, catch that during parsing, and then assume I have enough elements, to simplify logic code
2021-10-14 12:50:42 +0200 <jollygood2> does apply* seem appropriate in here?
2021-10-14 12:51:38 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-10-14 12:51:59 +0200 <sshine> jollygood2, could you post the HandValue type?
2021-10-14 12:52:29 +0200 <jollygood2> it is on the second link. https://paste.tomsmeding.com/QSYLVhro
2021-10-14 12:52:36 +0200 <sshine> thanks
2021-10-14 12:52:36 +0200o1lo01ol1o(~o1lo01ol1@2001:8a0:6d7a:df01:74db:7502:a3aa:3820) (Ping timeout: 245 seconds)
2021-10-14 12:53:32 +0200 <sshine> jollygood2, btw, I'm fairly certain that Texas Hold'em doesn't have five kickers in the NoPair case. you have one kicker, and if they're equal, it's a draw.
2021-10-14 12:53:44 +0200 <lortabac> jollygood2: there is a simpler solution
2021-10-14 12:54:03 +0200 <lortabac> add a type parameter to HandValue and make it a functor
2021-10-14 12:54:18 +0200 <lortabac> then you'll get all those apply functions for free with DeriveFunctor
2021-10-14 12:54:20 +0200 <sshine> haha
2021-10-14 12:54:20 +0200 <jollygood2> sshine, other 3 to 4 kickers come from the table
2021-10-14 12:54:28 +0200 <sshine> "There is a simpler solution. Use higher-kinded data!" ;)
2021-10-14 12:54:54 +0200 <jollygood2> 3 to 5, even. if you have 2 and 3, all the kickers could come from the table
2021-10-14 12:55:00 +0200 <sshine> jollygood2, so... the table cards are in your hand?
2021-10-14 12:55:31 +0200 <jollygood2> [Card] in handValue contains both table and hand cards
2021-10-14 12:55:42 +0200 <jollygood2> lortabac, can you elaborate, I'm not sure I understand
2021-10-14 12:56:24 +0200 <sshine> jollygood2, my argument (whether it's valid or not) also applies for extending the hand to the table. so if you have two players who have sucky cards on their hands, and they tie for the highest single card on the table, no amount of sucky cards on their hand will make one hand better.
2021-10-14 12:56:29 +0200 <lortabac> jollygood2: data HandValue a = NoPair a a a a a | OnePair Rank a a a ...
2021-10-14 12:56:41 +0200 <lortabac> deriving (Functor)
2021-10-14 12:56:55 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
2021-10-14 12:57:29 +0200 <lortabac> but to be honest I haven't followed the whole discussion, so it might not apply to your specific case
2021-10-14 12:57:32 +0200 <jollygood2> sshine, handValue returns the best possible hand, given your hole cards and table cards. if there's no pair, then there are 5 kickers
2021-10-14 12:57:36 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-10-14 12:57:55 +0200 <jollygood2> highest 5 cards including table and your own cards
2021-10-14 12:58:09 +0200 <jollygood2> lortabac, I have no clue either, but it seems interesting
2021-10-14 12:58:23 +0200 <jollygood2> lortabac, not sure if this link helps: https://paste.tomsmeding.com/QSYLVhro
2021-10-14 12:58:54 +0200 <lortabac> this solution will give you the possibility of mapping over all the Kickers in a HandValue
2021-10-14 12:59:23 +0200 <lortabac> however if you don't have a HandValue in the first place, that's another problem
2021-10-14 13:02:52 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
2021-10-14 13:03:32 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-10-14 13:03:36 +0200 <jollygood2> I don't, I'm mapping [Card] to HandValue
2021-10-14 13:05:03 +0200 <sshine> >_< I actually have a library for playing cards, but decided not to publish it because one Wikipedia rabbit hole led me to realise that what I believe are "playing cards" are really just "French-suited 52-card playing cards", where there's at least 5 other European types available, haha.
2021-10-14 13:08:42 +0200 <jollygood2> I am basically trying to rewrite this in pure haskell, for fun. https://hackage.haskell.org/package/poker-eval-0.3.1/docs/Data-Poker.html
2021-10-14 13:09:07 +0200Inst(~Inst@2601:6c4:4080:3f80:4860:840:17cf:1bbb)
2021-10-14 13:10:19 +0200 <maralorn> <sshine> ">_< I actually have a library..." <- It's really interesting how for poker or also all popular German card games French cards are the norm. There is even something called "German cards" here but no one knows it.
2021-10-14 13:10:43 +0200chexum_(~quassel@gateway/tor-sasl/chexum)
2021-10-14 13:10:52 +0200 <maralorn> (they are pretty similar though.)
2021-10-14 13:10:59 +0200chexum(~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
2021-10-14 13:11:13 +0200Neuromancer(~Neuromanc@user/neuromancer) (Ping timeout: 252 seconds)
2021-10-14 13:11:47 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2021-10-14 13:11:52 +0200AlexNoo_(~AlexNoo@178.34.163.33)
2021-10-14 13:12:01 +0200 <sshine> maralorn, I was interested in the Swiss ones because a friend who lives in Switzerland had a really odd looking deck in his home, and his Swiss guests would say that they know games that are only played with those.
2021-10-14 13:12:52 +0200 <sshine> yeah, they're not really breaking the format. but the picture cards are named differently, and there's a different total amount of each card. some don't have 4 of each kind, but a different amount of different kinds.
2021-10-14 13:14:01 +0200Alex_test(~al_test@178.34.161.78) (Ping timeout: 252 seconds)
2021-10-14 13:15:00 +0200geekosaur(~geekosaur@xmonad/geekosaur)
2021-10-14 13:15:07 +0200AlexZenon(~alzenon@178.34.161.78) (Ping timeout: 252 seconds)
2021-10-14 13:15:19 +0200AlexNoo(~AlexNoo@178.34.161.78) (Ping timeout: 245 seconds)
2021-10-14 13:15:44 +0200 <sshine> jollygood2, I can see that you've derived the data type from this library. so, one of the things that I don't like about it is "The following must be true for a HandValue to be valid: All kickers must be in decending order. No Rank may not occur twice. The kickers may not construct higher-value hands." -- those constraints are not actually hard to construct using standard data types. so making a too
2021-10-14 13:15:50 +0200 <sshine> lenient representation is perhaps only useful for being backwards-compatible with this poker library.
2021-10-14 13:16:53 +0200 <jollygood2> sshine, how would I construct those constraints in types?
2021-10-14 13:17:12 +0200 <sshine> jollygood2, e.g. "All kickers must be in descending order": NoPair (Set Kicker)
2021-10-14 13:18:31 +0200 <jollygood2> ah I see.
2021-10-14 13:18:57 +0200 <jollygood2> could still form an invalid hand though, but in a different way. you may have less than 5 kickers
2021-10-14 13:19:39 +0200 <jollygood2> but it still nicer, kickers are sorted, and there it can't contain a pair or greater
2021-10-14 13:19:57 +0200Alex_test(~al_test@178.34.163.33)
2021-10-14 13:21:16 +0200AlexZenon(~alzenon@178.34.163.33)
2021-10-14 13:23:29 +0200mestre(~mestre@191.177.175.57) (Quit: Lost terminal)
2021-10-14 13:23:37 +0200 <jollygood2> as far as, say, king of hearts appearing twice, I think that is best handled when filtering input. as far as I can tell there's no way to implement that in types in haskell
2021-10-14 13:24:07 +0200 <jollygood2> out of curiosity, would this be possible in a language like idris?
2021-10-14 13:24:19 +0200 <sshine> jollygood2, well, it depends on the kind of poker you're modelling. you could expose one variant in a module with constructors that fail (Either PokerError) when you can't gather five kickers. but the logic for comparing two hands using any amount of kickers is still the same. (and yes, you might end up comparing two Set Kicker with a different amount of elements, and probably your variation of poker in
2021-10-14 13:24:25 +0200 <sshine> that module doesn't allow different-sized hands, and that'd probably be a corner case you'd rather validate your way out of.)
2021-10-14 13:24:43 +0200 <hpc> jollygood2: yes
2021-10-14 13:24:51 +0200 <sshine> yeah. or Haskell with some effort.
2021-10-14 13:24:56 +0200 <hpc> imagine say, your hand is a list
2021-10-14 13:25:35 +0200 <hpc> (x :: card) : (xs :: cards1) :: cards2
2021-10-14 13:25:45 +0200 <hpc> where cards1 can't contain x
2021-10-14 13:25:51 +0200 <hpc> and cards2 = cards1 plus x
2021-10-14 13:26:33 +0200 <hpc> well, more like a set than a list
2021-10-14 13:27:07 +0200 <jollygood2> that looks a bit like peano numbers?
2021-10-14 13:28:26 +0200 <sshine> more like type-level sets
2021-10-14 13:28:41 +0200 <sshine> I guess
2021-10-14 13:29:45 +0200 <hpc> there's probably better ways too, that is a particularly naive solution
2021-10-14 13:30:17 +0200 <jollygood2> as a practical solution, is what I'm doing ok? just [Card], and apply*
2021-10-14 13:30:31 +0200 <jollygood2> and ensure input is correct when parsing it
2021-10-14 13:32:43 +0200 <lortabac> sshine: regarding your library, I have a suggestion: just do the Neapolitan cards, they are the only real playing cards :P
2021-10-14 13:38:42 +0200machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca)
2021-10-14 13:41:18 +0200lavaman(~lavaman@98.38.249.169)
2021-10-14 13:43:34 +0200timCF(~timCF@200-149-20-81.sta.estpak.ee)
2021-10-14 13:45:25 +0200max22-(~maxime@2a01cb0883359800f335681c9791beec.ipv6.abo.wanadoo.fr) (Ping timeout: 260 seconds)
2021-10-14 13:45:39 +0200tfeb(~tfb@88.98.95.237)
2021-10-14 13:46:11 +0200 <timCF> Hello! Does anybody know, do I need still use `Async.link` function when I'm using high-level `Async.withAsync` bracket? Basically I want bidirectional link, where if parent process terminate, child will do as well. As well as the other way around.
2021-10-14 13:46:17 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 264 seconds)
2021-10-14 13:46:17 +0200jgeerds(~jgeerds@55d4da80.access.ecotel.net)
2021-10-14 13:48:12 +0200 <sshine> lortabac, honestly, the point where I gave up was when I realised that even for one country's style of playing cards, you also have a history of variations. I guess I took the 'library' part too seriously. :P
2021-10-14 13:49:30 +0200rembo10(~rembo10@remulis.com) (Ping timeout: 260 seconds)
2021-10-14 13:50:37 +0200 <lortabac> sshine: if you make it too generic it can become less useful
2021-10-14 13:51:28 +0200 <lortabac> if I had to implement such a library, I'd just focus on one type of cards
2021-10-14 13:55:35 +0200Lycurgus(~juan@98.4.112.204)
2021-10-14 13:58:13 +0200 <jollygood2> what's a better name for this? safeSucc x = if x == maxBound then minBound else succ x
2021-10-14 13:59:30 +0200tfeb(~tfb@88.98.95.237) (Quit: died)
2021-10-14 14:00:12 +0200 <geekosaur> wrapSucc
2021-10-14 14:00:22 +0200 <dminuoso> rotate
2021-10-14 14:00:32 +0200 <Lycurgus> intGLB
2021-10-14 14:00:54 +0200 <geekosaur> I thought about rotate but the next step is to do the same with prev
2021-10-14 14:01:04 +0200 <jollygood2> yes I also have safePred
2021-10-14 14:01:27 +0200 <jollygood2> I like wrapSucc|Pred
2021-10-14 14:03:34 +0200rembo10(~rembo10@remulis.com)
2021-10-14 14:05:17 +0200 <merijn> That's still not safe, though :p
2021-10-14 14:05:41 +0200 <merijn> Hot take: Enum as-is is a terrible class that should be excised from all code
2021-10-14 14:06:29 +0200 <merijn> Let's make that the next major compat break in base >.>
2021-10-14 14:07:01 +0200 <hpc> no way
2021-10-14 14:07:16 +0200 <hpc> not until we get data Bool = TRUE | FALSE | FILE_NOT_FOUND in
2021-10-14 14:07:23 +0200 <merijn> hpc: We already have that
2021-10-14 14:07:28 +0200 <merijn> Just install acme-php
2021-10-14 14:07:32 +0200rembo10(~rembo10@remulis.com) (Client Quit)
2021-10-14 14:08:24 +0200rembo10(~rembo10@remulis.com)
2021-10-14 14:08:36 +0200 <merijn> hpc: This also seems to imply you think Enum is good, which I'm sorry to inform you is a clear sign of mental degradation :p
2021-10-14 14:09:50 +0200 <hpc> oh don't worry, i have much clearer signs :D
2021-10-14 14:11:20 +0200 <merijn> In fact, we should find out whos responsible for 10.2 of the Haskell 98 Report and retroactively withdraw their committee membership >.>
2021-10-14 14:11:50 +0200coot(~coot@37.30.52.44.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
2021-10-14 14:14:04 +0200kjak_(~kjak@pool-108-45-56-21.washdc.fios.verizon.net) (Ping timeout: 252 seconds)
2021-10-14 14:14:07 +0200rond_(~rond_@2a02:a31a:a23c:f480:2fd7:e087:5546:a438)
2021-10-14 14:15:12 +0200stiell(~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
2021-10-14 14:15:40 +0200stiell(~stiell@gateway/tor-sasl/stiell)
2021-10-14 14:23:20 +0200slowButPresent(~slowButPr@user/slowbutpresent)
2021-10-14 14:27:52 +0200dschrempf(~dominik@070-207.dynamic.dsl.fonira.net) (Quit: WeeChat 3.3)
2021-10-14 14:27:53 +0200 <jollygood2> can I pattern match in MultiWayIf? something like if | (Just x = someFunc y) -> ..
2021-10-14 14:29:02 +0200 <merijn> jollygood2: I mean, that's just case-of with a bunch of extra steps?
2021-10-14 14:30:18 +0200 <jollygood2> yes, but that is one of dozen if clauses, so it would be convenient if the branch executed only if someFunc returns Just. I want functionality of if | (isJust $ someFunc y) -> fromJust $ someFunc y
2021-10-14 14:30:18 +0200Lycurgus(~juan@98.4.112.204) (Quit: Exeunt)
2021-10-14 14:31:36 +0200__monty__(~toonn@user/toonn) (Quit: leaving)
2021-10-14 14:32:21 +0200 <merijn> tbh, I find the use-case for a dozen if clauses questionable...I don't think you can pattern match in MultiWayIf, though?
2021-10-14 14:32:42 +0200 <jollygood2> I am doing this: https://paste.tomsmeding.com/QSYLVhro
2021-10-14 14:33:10 +0200 <jollygood2> in the updated code, isStraight returns Maybe Rank instead of Bool
2021-10-14 14:33:10 +0200MQ-17J(~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer)
2021-10-14 14:33:42 +0200MQ-17J(~MQ-17J@d192-24-122-179.try.wideopenwest.com)
2021-10-14 14:34:46 +0200 <jollygood2> more context: https://paste.tomsmeding.com/teQxsvjX
2021-10-14 14:34:49 +0200 <jollygood2> if needed
2021-10-14 14:36:44 +0200 <jollygood2> if I am doing something else that is stupid feel free too comment :). I'm not sure I like [Card], or apply* functions
2021-10-14 14:36:49 +0200 <merijn> jollygood2: btw, instead of reverse after sort, use Down
2021-10-14 14:36:57 +0200 <merijn> > sortOn Down [1..5]
2021-10-14 14:36:59 +0200 <lambdabot> [5,4,3,2,1]
2021-10-14 14:37:02 +0200 <jollygood2> ah ok
2021-10-14 14:37:13 +0200 <merijn> So you can just do "sortOn (Down . snd)"
2021-10-14 14:37:18 +0200motherfsck(~motherfsc@user/motherfsck)
2021-10-14 14:37:23 +0200 <merijn> :t Down
2021-10-14 14:37:24 +0200 <lambdabot> a -> Down a
2021-10-14 14:37:35 +0200 <merijn> It's just a newtype with reversed comparisons
2021-10-14 14:37:48 +0200 <jollygood2> that's neat
2021-10-14 14:39:32 +0200 <merijn> btw, apply5 would be better of doing, like "apply5 f (a:b:c:d:e:_) = f a b c d e", the !! ends up rewalking the list each time
2021-10-14 14:40:13 +0200 <jollygood2> yes. and what would I do if the list length doesn't match? return Maybe, error?
2021-10-14 14:40:18 +0200rembo10(~rembo10@remulis.com) (Quit: ZNC 1.8.2 - https://znc.in)
2021-10-14 14:40:27 +0200 <merijn> I mean, right now it already errors anyway :p
2021-10-14 14:40:31 +0200 <jollygood2> yeah :)
2021-10-14 14:41:10 +0200rembo10(~rembo10@remulis.com)
2021-10-14 14:42:13 +0200 <jollygood2> apply5 :: String -> (a -> a -> a -> a -> a -> b) -> [a] -> b, where String is error message, so if what shouldn't happen happens, I know what to check
2021-10-14 14:42:26 +0200 <merijn> Personally I'd probably refactor to something like: https://paste.tomsmeding.com/ychadwJh
2021-10-14 14:43:04 +0200 <merijn> That has the same result as the multiwayif, but no extension and you can pattern match however you like
2021-10-14 14:43:35 +0200 <jollygood2> I think I would have deeply nested cases with that? because I need to shortcircuit. hand could contain both Straight and OnePair, for example
2021-10-14 14:43:41 +0200 <merijn> You could also define new datatype for it
2021-10-14 14:44:14 +0200 <merijn> ok, actually
2021-10-14 14:44:17 +0200 <merijn> Here's an idea
2021-10-14 14:45:02 +0200 <merijn> write separate function for each scoring "straightFlush :: [Card] -> Maybe HandValue", "flush :: [Card] -> Maybe HandValue", etc.
2021-10-14 14:45:28 +0200 <merijn> Then you apply each of them to the hand and use catMaybes
2021-10-14 14:45:33 +0200 <merijn> :t catMaybes
2021-10-14 14:45:34 +0200 <lambdabot> [Maybe a] -> [a]
2021-10-14 14:46:07 +0200 <merijn> So you get "[Card] -> [HandValue]"
2021-10-14 14:46:12 +0200 <jollygood2> sounds good, I'll try
2021-10-14 14:47:02 +0200 <jollygood2> you see anything wrong with using [Card] and just validating input before passing cards to handValue? instead of trying to encode some guarantees in the types
2021-10-14 14:48:36 +0200 <merijn> tbh, I dislike having pre-conditions on inputs
2021-10-14 14:48:48 +0200 <merijn> Usually easy to forget and easy to mess up
2021-10-14 14:49:31 +0200coot(~coot@37.30.52.44.nat.umts.dynamic.t-mobile.pl)
2021-10-14 14:49:39 +0200 <jollygood2> so what should I do? common invalid input I can think of: not enough cards, or too many (should be between 5 and 7). identical cards repeating more than once
2021-10-14 14:50:30 +0200azimut(~azimut@gateway/tor-sasl/azimut)
2021-10-14 14:54:03 +0200 <merijn> If you use Set instead of list you rule out identical cards :p
2021-10-14 14:55:33 +0200renzhi(~xp@2607:fa49:6500:b100::5845)
2021-10-14 15:02:14 +0200idrishippoid
2021-10-14 15:05:18 +0200shapr(~user@pool-100-36-247-68.washdc.fios.verizon.net)
2021-10-14 15:08:36 +0200AlexNoo_AlexNoo
2021-10-14 15:10:39 +0200hendursa1(~weechat@user/hendursaga) (Ping timeout: 276 seconds)
2021-10-14 15:18:22 +0200ystael(~ystael@user/ystael)
2021-10-14 15:20:57 +0200max22-(~maxime@2a01cb0883359800f362ea56be7f8960.ipv6.abo.wanadoo.fr)
2021-10-14 15:25:47 +0200azeem(~azeem@emp-85-170.eduroam.uu.se) (Read error: Connection reset by peer)
2021-10-14 15:30:48 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:ac5a:4bd6:3f7c:fb35)
2021-10-14 15:33:04 +0200Pickchea(~private@user/pickchea)
2021-10-14 15:33:20 +0200azeem(~azeem@emp-85-170.eduroam.uu.se)
2021-10-14 15:35:06 +0200slack1256(~slack1256@45.4.2.52)
2021-10-14 15:35:22 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:ac5a:4bd6:3f7c:fb35) (Ping timeout: 252 seconds)
2021-10-14 15:36:44 +0200rond_(~rond_@2a02:a31a:a23c:f480:2fd7:e087:5546:a438) (Quit: Client closed)
2021-10-14 15:38:51 +0200hendursa1(~weechat@user/hendursaga)
2021-10-14 15:41:20 +0200nitrix(~nitrix@user/nitrix) (Quit: Genius is one percent inspiration and ninety-nine percent perspiration)
2021-10-14 15:42:25 +0200nitrix(~nitrix@user/nitrix)
2021-10-14 15:46:52 +0200MQ-17J(~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer)
2021-10-14 15:49:33 +0200Pickchea(~private@user/pickchea) (Quit: Leaving)
2021-10-14 15:52:02 +0200MQ-17J(~MQ-17J@d192-24-122-179.try.wideopenwest.com)
2021-10-14 15:55:07 +0200nvmd(~nvmd@user/nvmd) (Ping timeout: 252 seconds)
2021-10-14 15:55:21 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-10-14 15:55:21 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-10-14 15:55:21 +0200wroathe(~wroathe@user/wroathe)
2021-10-14 15:56:45 +0200nvmd(~nvmd@user/nvmd)
2021-10-14 16:02:36 +0200ishutin(~ishutin@178-164-207-71.pool.digikabel.hu) (Ping timeout: 245 seconds)
2021-10-14 16:03:20 +0200timCF(~timCF@200-149-20-81.sta.estpak.ee) (Quit: leaving)
2021-10-14 16:09:39 +0200ishutin(~ishutin@84-236-97-21.pool.digikabel.hu)
2021-10-14 16:11:48 +0200jollygood2(~bc8165b6@217.29.117.252) (Quit: http://www.okay.uz/ (Ping timeout))
2021-10-14 16:14:45 +0200acidjnk_new(~acidjnk@p200300d0c703cb2624cf652eb5c49df1.dip0.t-ipconnect.de) (Ping timeout: 265 seconds)
2021-10-14 16:16:27 +0200Lysanleo(~Lysanleo@124.161.121.202) (Read error: Connection reset by peer)
2021-10-14 16:18:53 +0200hnOsmium0001(uid453710@id-453710.hampstead.irccloud.com)
2021-10-14 16:22:13 +0200 <cigsender> jollygood2: what about something like this? https://paste.tomsmeding.com/cwfN7nm5
2021-10-14 16:25:04 +0200 <cigsender> restricting your inputs to only what's valid allows you to exploit pattern-matching better
2021-10-14 16:28:59 +0200Sgeo(~Sgeo@user/sgeo)
2021-10-14 16:33:46 +0200 <sshine> where did jollygood2 go?
2021-10-14 16:34:03 +0200cigsendershrugs
2021-10-14 16:35:07 +0200 <sshine> /dcc get cigsender cig
2021-10-14 16:35:57 +0200 <Hecate> cc cigsender :)
2021-10-14 16:36:02 +0200 <sshine> I was going to suggest using a non-empty set since if you have at least one card, then no matter how you model your hand, you can always claim a high card.
2021-10-14 16:36:20 +0200 <cigsender> is there a non-empty set in base?
2021-10-14 16:36:29 +0200 <sshine> no, but there is one in nonempty-containers
2021-10-14 16:36:40 +0200 <cigsender> hey Hecate <3
2021-10-14 16:36:40 +0200 <sshine> and it's made by jle, so I'd think it's good.
2021-10-14 16:37:12 +0200 <cigsender> ugh wow never knew i needed this
2021-10-14 16:37:21 +0200 <sshine> I also never knew
2021-10-14 16:37:29 +0200 <sshine> so I ended up rabbit-holing until they left, haha.
2021-10-14 16:39:14 +0200jollygood2(~bc8165b6@217.29.117.252)
2021-10-14 16:39:48 +0200cigsenderwonders about pattern-matching on containers other than Seq
2021-10-14 16:39:54 +0200 <jollygood2> cigsender, got disconnected, let me check.
2021-10-14 16:40:20 +0200 <sshine> jollygood2, welcome back.
2021-10-14 16:40:35 +0200 <jollygood2> thanks!
2021-10-14 16:41:08 +0200 <jollygood2> cigsender, I like that, data Table = Flop Card Card Card | Turn Card Card Card Card | River Card Card Card Card Card
2021-10-14 16:41:23 +0200 <sshine> jollygood2, I was going to suggest that if you have a non-empty set of cards to represent your hand, then your Hand -> HandValue function can easily be total, since you can default to the high card (kicker).
2021-10-14 16:41:23 +0200 <cigsender> could be nice to have patterns for matching the minimum or maximum of a Map or a Set
2021-10-14 16:42:23 +0200 <sshine> cigsender, you have viewpatterns.
2021-10-14 16:43:06 +0200 <cigsender> jollygood2: yes! if you only have certain states the Table can be in, you can exhaustively match all the valid states
2021-10-14 16:43:13 +0200 <geekosaur> also sounds like something that might be doable with a pattern synonym
2021-10-14 16:44:08 +0200 <cigsender> sshine: view patterns are nice but i was thinking closer to pattern synonyms, where you could (?) also match on an empty Map without an Eq constraint
2021-10-14 16:45:08 +0200 <cigsender> not that you'd ever really be in that situation :)
2021-10-14 16:45:24 +0200 <sshine> cigsender, I kinda like that patterns are kinda dumb and that functions are kinda smart. :P
2021-10-14 16:45:35 +0200azeem(~azeem@emp-85-170.eduroam.uu.se) (Ping timeout: 268 seconds)
2021-10-14 16:46:08 +0200 <sshine> cigsender, if patterns suddenly start computing things, I find it hard to reason about performance. (I think there was a similar debate about Erlang guards.)
2021-10-14 16:47:01 +0200 <cigsender> sshine, that's a fair point, it's hard to reason about computational complexity when the computations are hidden :p
2021-10-14 16:47:14 +0200 <cigsender> sshine, but then, how do you feel about YearMonthDay?
2021-10-14 16:47:19 +0200 <geekosaur> that said min and max are cheap to compute
2021-10-14 16:47:36 +0200 <sshine> cigsender, what's YearMonthDay?
2021-10-14 16:47:41 +0200 <geekosaur> using one to search out something else in Set/Map is where you'd run into complexity
2021-10-14 16:48:26 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 245 seconds)
2021-10-14 16:48:28 +0200 <cigsender> it's a pattern synonym for the Day type in time that precalculates gregorian for you instead of the julian day https://hackage.haskell.org/package/time-1.12/docs/Data-Time-Calendar.html#v:YearMonthDay
2021-10-14 16:48:29 +0200azeem(~azeem@emp-85-170.eduroam.uu.se)
2021-10-14 16:50:17 +0200VoidNoir0(~VoidNoir0@72.80.203.52) (Quit: Connection closed)
2021-10-14 16:50:42 +0200 <sshine> cigsender, ah, thanks, didn't know.
2021-10-14 16:51:11 +0200 <sshine> cigsender, well, generally I'm not in favor. :) but it seems like a pretty good use-case for this kind of syntax.
2021-10-14 16:52:33 +0200 <sshine> cigsender, if there's a somewhat constant, small computational overhead, I could totally accept it. not veto'ing. just saying it's a slippery slope. :P
2021-10-14 16:53:08 +0200hippoid(~idris@184.105.6.88) (Quit: leaving)
2021-10-14 16:53:20 +0200 <cigsender> just wanted to feel out your position a little more, sshine :)
2021-10-14 16:54:03 +0200ubert1(~Thunderbi@178.115.37.32.wireless.dyn.drei.com)
2021-10-14 16:54:33 +0200 <merijn> sshine: I have a nice bunch of abuse for pattern synonyms :p
2021-10-14 16:55:23 +0200 <merijn> sshine: Mapping 3 (4?) different "constructors" to one single universal one that has a bunch of preconditions. So my code operating on it has a simple single representation to work on, while having convenient constructors
2021-10-14 16:57:04 +0200 <sshine> merijn, as a library API designer, it sounds like a great tool, honestly.
2021-10-14 16:57:16 +0200hyiltiz(~quassel@31.220.5.250) (Ping timeout: 252 seconds)
2021-10-14 16:57:21 +0200 <jollygood2> ok I did data Table = Flop Card Card Card, but I'm not sure how to use the same code to evaluate the hand on the flop, turn and river, without pattern matching each case? if I convert Table to [Card], then I'm kind of back where I started?
2021-10-14 16:57:30 +0200 <sshine> I've used pattern synonyms myself, but only ones that map very straight onto the internal representation.
2021-10-14 16:57:44 +0200hyiltiz(~quassel@31.220.5.250)
2021-10-14 16:57:48 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2021-10-14 16:58:04 +0200hippoid(~idris@184.105.6.88)
2021-10-14 16:58:14 +0200 <hippoid> :t pure
2021-10-14 16:58:15 +0200 <lambdabot> Applicative f => a -> f a
2021-10-14 16:58:35 +0200 <hippoid> :t pure 10
2021-10-14 16:58:36 +0200 <lambdabot> (Applicative f, Num a) => f a
2021-10-14 16:59:02 +0200 <cigsender> jollygood2: you can convert Table to [Card] if you want, because you'll be sure inside handValue that you'll have at least 3
2021-10-14 16:59:07 +0200 <jollygood2> I guess the advantage is that if I get [Card] from Table, I am guaranteed to have 3, 4 or 5 cards, even if the [Card] doesn't show that
2021-10-14 16:59:13 +0200 <jollygood2> cigsender, yes
2021-10-14 16:59:31 +0200 <hippoid> `pure 10` confuses me. What is the (Applicative f) for an Int?
2021-10-14 16:59:49 +0200 <merijn> hippoid: What do you mean "for an Int"
2021-10-14 17:00:03 +0200 <cigsender> :k Applicative
2021-10-14 17:00:05 +0200 <lambdabot> (* -> *) -> Constraint
2021-10-14 17:00:05 +0200 <merijn> hippoid: pure 10 *takes* an Int (simplifying the type of 10 for now)
2021-10-14 17:00:15 +0200 <merijn> hippoid: It returns "whatever Applicative you want"
2021-10-14 17:00:21 +0200 <merijn> > pure 10 :: Maybe Int
2021-10-14 17:00:22 +0200 <lambdabot> Just 10
2021-10-14 17:00:24 +0200 <hippoid> I thought I'd have to provide some kind of 'container' type as the first arg of pure
2021-10-14 17:00:32 +0200 <jollygood2> Int is not Applicative, it is the value within Applicative
2021-10-14 17:00:35 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-10-14 17:00:35 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-10-14 17:00:35 +0200wroathe(~wroathe@user/wroathe)
2021-10-14 17:00:38 +0200 <merijn> hippoid: *which* Applicative is inferred from the result
2021-10-14 17:00:48 +0200 <cigsender> > pure @Maybe 10
2021-10-14 17:00:50 +0200 <lambdabot> error:
2021-10-14 17:00:50 +0200 <lambdabot> Pattern syntax in expression context: pure@Maybe
2021-10-14 17:00:50 +0200 <lambdabot> Did you mean to enable TypeApplications?
2021-10-14 17:00:53 +0200 <xsperry> > pure 10 :: [Int]
2021-10-14 17:00:54 +0200 <lambdabot> [10]
2021-10-14 17:01:06 +0200 <xsperry> > pure 10 :: IO Int
2021-10-14 17:01:08 +0200 <lambdabot> <IO Int>
2021-10-14 17:01:12 +0200 <hippoid> :t pure 10
2021-10-14 17:01:13 +0200 <lambdabot> (Applicative f, Num a) => f a
2021-10-14 17:01:21 +0200 <hippoid> what is f in that situation?
2021-10-14 17:01:28 +0200 <merijn> hippoid: "any Applicative"
2021-10-14 17:01:36 +0200 <merijn> hippoid: Which one, will be inferred when you try to use it
2021-10-14 17:01:57 +0200 <merijn> > fromMaybe 0 (pure 10)
2021-10-14 17:01:58 +0200 <lambdabot> 10
2021-10-14 17:02:17 +0200 <jollygood2> > head $ pure 10
2021-10-14 17:02:19 +0200 <lambdabot> 10
2021-10-14 17:02:26 +0200 <merijn> hippoid: fromMaybe wants a "Maybe a", so GHC infers "pure 10" has type "Maybe Int" and chooses Maybe
2021-10-14 17:02:41 +0200 <hippoid> wow, that's mindblowing
2021-10-14 17:03:30 +0200 <hippoid> :t pure 10 :: Either Int
2021-10-14 17:03:31 +0200 <lambdabot> error:
2021-10-14 17:03:31 +0200 <lambdabot> • Expecting one more argument to ‘Either Int’
2021-10-14 17:03:31 +0200 <lambdabot> Expected a type, but ‘Either Int’ has kind ‘* -> *’
2021-10-14 17:03:37 +0200 <jollygood2> Either takes two types
2021-10-14 17:03:39 +0200 <merijn> > pure 10 :: Either Bool Int
2021-10-14 17:03:41 +0200 <lambdabot> Right 10
2021-10-14 17:03:56 +0200 <cigsender> however:
2021-10-14 17:04:02 +0200 <hippoid> ah ok, my mistake was thinking the second type would be inferred when I try to use it
2021-10-14 17:04:03 +0200 <merijn> hippoid: Inference goes in both directions (unlike something like "auto" in C++/Java)
2021-10-14 17:04:07 +0200 <cigsender> > pure 10 :: Either Int Bool
2021-10-14 17:04:09 +0200 <lambdabot> error:
2021-10-14 17:04:09 +0200 <lambdabot> • No instance for (Num Bool) arising from the literal ‘10’
2021-10-14 17:04:09 +0200 <lambdabot> • In the first argument of ‘pure’, namely ‘10’
2021-10-14 17:04:30 +0200 <jollygood2> hippoid it would be if you didn't specify it. but if you want to write explicit type, it has to be complete
2021-10-14 17:04:45 +0200 <merijn> hippoid: If you (somehow) use something like that in a way where ghc *can't* infer the correct result, you will get an "ambiguous type" error
2021-10-14 17:04:59 +0200 <merijn> > const 'a' (pure True) -- not sure this will give the error I want
2021-10-14 17:05:01 +0200 <lambdabot> error:
2021-10-14 17:05:01 +0200 <lambdabot> • Ambiguous type variable ‘f0’ arising from a use of ‘pure’
2021-10-14 17:05:01 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 252 seconds)
2021-10-14 17:05:01 +0200 <lambdabot> prevents the constraint ‘(Applicative f0)’ from being solved.
2021-10-14 17:05:12 +0200 <hippoid> merijn: can you say more about "both directions" and type inference? To start, what are the two endpoints of the two directions?
2021-10-14 17:05:30 +0200 <merijn> hippoid: Success! As you can see "hey, this is *some* Applicative, but not enough context to infer *which*, thus it's ambiguous"
2021-10-14 17:06:10 +0200 <merijn> hippoid: One end is "individual syntactical tokens" which usually have types, like 'a' being Char and the top level signature
2021-10-14 17:06:48 +0200 <merijn> hippoid: If you have "foo :: Bar -> Baz -> Quux; foo = ..." then we have 2 types, the ones specified as foo's type signature and "the type of the actual body of foo"
2021-10-14 17:07:07 +0200 <hippoid> is it correct to say one end is terms, and the other end is types?
2021-10-14 17:07:11 +0200 <merijn> If we write "foo = 'a'" then the 2nd would be Char, for example
2021-10-14 17:08:01 +0200 <merijn> hippoid: More like one end is the types we *claim* something is, the other end is "the types we know the actual terms have"
2021-10-14 17:08:25 +0200 <xsperry> perhaps it might be easier to understand polymorphic values outside of Applicative context. for example minBound
2021-10-14 17:08:31 +0200 <xsperry> :t minBound
2021-10-14 17:08:32 +0200 <lambdabot> Bounded a => a
2021-10-14 17:08:37 +0200 <xsperry> > minBound :: Int
2021-10-14 17:08:39 +0200 <lambdabot> -9223372036854775808
2021-10-14 17:08:42 +0200 <xsperry> > minBound :: Char
2021-10-14 17:08:44 +0200 <lambdabot> '\NUL'
2021-10-14 17:08:58 +0200 <xsperry> > [minBound ..] :: [Char]
2021-10-14 17:09:00 +0200 <lambdabot> "\NUL\SOH\STX\ETX\EOT\ENQ\ACK\a\b\t\n\v\f\r\SO\SI\DLE\DC1\DC2\DC3\DC4\NAK\SY...
2021-10-14 17:09:09 +0200 <merijn> hippoid: You can think of it as solving a bunch of equations. In the "fromMaybe 0 (pure 10)' case, then we have two pieces of information: 1) 'pure 10 :: Applicative f => f Int' and 2) 'pure 10 :: Maybe Int' (from the type of fromMaybe)
2021-10-14 17:09:15 +0200 <maerwald> > minBound
2021-10-14 17:09:17 +0200 <lambdabot> ()
2021-10-14 17:09:34 +0200 <maerwald> > [minBound ..]
2021-10-14 17:09:36 +0200 <lambdabot> [()]
2021-10-14 17:09:43 +0200 <xsperry> maerwald, I doubt that helps :P
2021-10-14 17:09:55 +0200 <merijn> hippoid: Now typechecking is a matter of "is there a solution where these types line up?" answer "yes *iff* 'f' = 'Maybe'"
2021-10-14 17:09:58 +0200 <maerwald> > maxBound
2021-10-14 17:10:00 +0200 <lambdabot> ()
2021-10-14 17:10:00 +0200 <maerwald> :D
2021-10-14 17:10:31 +0200 <hippoid> Are all these what is known as type unification?
2021-10-14 17:10:39 +0200 <hippoid> *ideas
2021-10-14 17:10:56 +0200 <merijn> hippoid: Type unification is part of the mechanical process of type checking/inference, yes
2021-10-14 17:11:50 +0200 <hippoid> ahh ok, and you all are showing me examples of how to apply the logic of type checking/inference
2021-10-14 17:12:03 +0200 <merijn> hippoid: Basically you assign every (sub)expression a new "unification" variable and then try to solve "is there a single mapping of 1 type to each unification variable that matches all restrictions"
2021-10-14 17:13:05 +0200 <merijn> hippoid: In my example you have to try to unify "Maybe a" and "Applicative f => f Int" which works IFF 'a' = Int and 'f' = Maybe
2021-10-14 17:13:33 +0200doyougnu(~user@c-73-25-202-122.hsd1.or.comcast.net)
2021-10-14 17:13:38 +0200 <hippoid> and that's what you mean by "both sides", there's an = in the middle, and then you can infer things from either side of that equal sign
2021-10-14 17:13:44 +0200 <merijn> Right
2021-10-14 17:14:38 +0200 <hippoid> ok, this has been very illuminating. Thanks merijn, xsperry, maerwald et al!
2021-10-14 17:14:44 +0200 <lortabac> in practice unification alone is not sufficient to check a user-provided signature against the corresponding inferred type
2021-10-14 17:15:06 +0200 <lortabac> you also need to check that the signature is more generic (or equal) than the inferred type
2021-10-14 17:15:13 +0200 <lortabac> but I'm just nitpicking
2021-10-14 17:15:45 +0200 <hippoid> right, because there can be many solutions, so you want the most generic one?
2021-10-14 17:16:44 +0200 <lortabac> sorry I meant the inferred type is more generic than the signature
2021-10-14 17:16:52 +0200 <carbolymer> if `MonadReader r m | m -> r`, why does this compile: https://bpa.st/YTRQ ? Is ghc assuming that there may be two different `MonadReader r m` for `m` at the same time?
2021-10-14 17:17:21 +0200 <merijn> carbolymer: 'm' uniquely determines 'r'
2021-10-14 17:17:25 +0200 <merijn> carbolymer: Not the other way around
2021-10-14 17:17:46 +0200 <merijn> carbolymer: Now, obviously the same 'm' can't map to different 'r' and *you* know that
2021-10-14 17:18:13 +0200 <merijn> carbolymer: But GHC won't discover that until you try and specify a *specific* 'm'
2021-10-14 17:18:13 +0200 <carbolymer> merijn: I know that, but doesn't ghc too?
2021-10-14 17:18:14 +0200 <lortabac> hippoid: so that this is valid (id :: Int -> Int; id x = x) but this is not (id :: a -> a; id x = x + 1)
2021-10-14 17:18:18 +0200 <merijn> carbolymer: How?
2021-10-14 17:18:28 +0200 <merijn> carbolymer: 'm' is unknown, so GHC knows nothing about it
2021-10-14 17:18:37 +0200 <carbolymer> merijn: idk, just because functional dependency in MonadReader exists?
2021-10-14 17:18:44 +0200 <merijn> GHC knows that *a specific* 'm' maps to a single unique 'r'
2021-10-14 17:19:19 +0200 <hippoid> lortabac: because you can't use + on any type a
2021-10-14 17:20:06 +0200 <lortabac> hippoid: exactly, a -> a means the function should be valid whatever 'a' is
2021-10-14 17:21:07 +0200 <hippoid> lortabac: that's where that forall... stuff shows up. What is that called, that forall a.b... whatever notation?
2021-10-14 17:22:14 +0200zebrag(~chris@user/zebrag)
2021-10-14 17:22:47 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2021-10-14 17:23:03 +0200slack1256(~slack1256@45.4.2.52) (Remote host closed the connection)
2021-10-14 17:23:04 +0200 <lortabac> I don't know, I call it forall :)
2021-10-14 17:24:04 +0200 <lortabac> I have to go, sorry
2021-10-14 17:24:16 +0200 <hippoid> thanks for your help
2021-10-14 17:24:19 +0200 <hippoid> lortabac++
2021-10-14 17:24:26 +0200geekosaur(~geekosaur@xmonad/geekosaur)
2021-10-14 17:24:31 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:d23a:63c3:dec2:f7ab) (Quit: WeeChat 2.8)
2021-10-14 17:24:52 +0200hendursa1(~weechat@user/hendursaga) (Quit: hendursa1)
2021-10-14 17:25:31 +0200hendursaga(~weechat@user/hendursaga)
2021-10-14 17:26:13 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:ac5a:4bd6:3f7c:fb35)
2021-10-14 17:28:20 +0200 <c_wraith> kuribas: I just remembered it's absolutely trivial to rewrite that code without the call to error. [] type-checks there, and by construction that case cannot happen, so anything is fine. The problem is that's actually less reader-friendly to make it look like a normal case when it's actually a logical contradiction.
2021-10-14 17:29:55 +0200 <kuribas> c_wraith: add a comment?
2021-10-14 17:30:12 +0200 <c_wraith> comments only mean something if they're read
2021-10-14 17:30:57 +0200 <merijn> hippoid: RankNTypes (or one of the others)
2021-10-14 17:31:30 +0200 <merijn> hippoid: Note that (in the underlying theory/language used within GHC) all types have an *implicit* forall for every type variable
2021-10-14 17:31:48 +0200 <merijn> hippoid: So GHC internally considers "id :: a -> a" as if it is "id :: forall a . a -> a"
2021-10-14 17:32:54 +0200 <carbolymer> merijn: hmm, I need to meditate on that
2021-10-14 17:33:43 +0200 <dminuoso> c_wraith: I think the real problem is that "logical contradiction" part. The reason we have bugs in the first place, is because we assume invariants to hold. Sometimes, yes, they are provably correct. Otherwise they are not, or they become bugged on some future refactoring.
2021-10-14 17:33:58 +0200 <dminuoso> If we were always right about our assumptions, we wouldn't have bugs in the first place.
2021-10-14 17:34:09 +0200 <c_wraith> that's exactly why the error message says you refactored it wrong.
2021-10-14 17:34:20 +0200justsomeguy(~justsomeg@user/justsomeguy)
2021-10-14 17:34:31 +0200slack1256(~slack1256@45.4.2.52)
2021-10-14 17:34:33 +0200 <c_wraith> If you end up in that case, you refactored it wrong, even if it was total
2021-10-14 17:34:51 +0200 <c_wraith> I think it's better to be told you got it wrong, instead of silently working incorrectly
2021-10-14 17:35:18 +0200 <dminuoso> c_wraith: Not if it spontaneously takes down a critical application.
2021-10-14 17:35:30 +0200 <dminuoso> Think the previous discussion was really about how `error` can really blow up entire programs.
2021-10-14 17:36:52 +0200 <dminuoso> And these error dont always show during development
2021-10-14 17:36:54 +0200 <kuribas> dminuoso: unsafePerformIO to show a warning instead?
2021-10-14 17:37:22 +0200 <dminuoso> kuribas: Heh, imprecise exceptions means you cant even properly catch that exceptoin.
2021-10-14 17:37:36 +0200 <dminuoso> And inside pure code, this is an even tricker business
2021-10-14 17:38:27 +0200 <dminuoso> You're giving up a lot of nice properties about your pure code, which is why we didnt have IO in the first place...
2021-10-14 17:38:36 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2021-10-14 17:39:09 +0200rond_(~rond_@2a02:a31a:a23c:f480:2fd7:e087:5546:a438)
2021-10-14 17:42:44 +0200 <c_wraith> I really actually mean "logical contradiction". Not just "that shouldn't happen". If you end up in that case, you have a thunk that needs to branch on the result of evaluating itself. The program will <<loop>> before it can throw that error.
2021-10-14 17:43:04 +0200ec(~ec@gateway/tor-sasl/ec)
2021-10-14 17:43:09 +0200 <c_wraith> So you're crashing anyway
2021-10-14 17:43:15 +0200 <c_wraith> the call to error is just documentation
2021-10-14 17:43:25 +0200 <merijn> carbolymer: Basically, functional dependencies are nice an easy, 'cause you only have to "reason in one direction"
2021-10-14 17:43:37 +0200 <merijn> carbolymer: Which simplifies how complicated things are to implement
2021-10-14 17:44:11 +0200 <merijn> carbolymer: You are, effectively, asking "why doesn't GHC also reason *backwards*?" to which the answer is "because that's hard and why do hard things when you don't have to"
2021-10-14 17:45:03 +0200 <kuribas> dminuoso: logging some warning, and returning a default value could be a decent alternative to simply crashing with an exception.
2021-10-14 17:45:37 +0200 <kuribas> dminuoso: Then in pure code you could return Either err a
2021-10-14 17:46:06 +0200 <merijn> carbolymer: Which happens to be super simple in the your example (because it's a super simple case), but doing that "in general" is hard
2021-10-14 17:46:28 +0200 <dminuoso> kuribas: I would not, simply because due to the way IO works, that gives me no guarantees.
2021-10-14 17:46:35 +0200lavaman(~lavaman@98.38.249.169)
2021-10-14 17:46:37 +0200 <dminuoso> Maybe this logs never, maybe this logs once, maybe this logs a thousand times
2021-10-14 17:46:47 +0200mbuf(~Shakthi@122.178.118.100) (Quit: Leaving)
2021-10-14 17:46:49 +0200 <dminuoso> If you already have this inside Either err, just feed it outside to IO
2021-10-14 17:46:52 +0200 <dminuoso> Or feed IO in there
2021-10-14 17:47:15 +0200 <dminuoso> Ive come to appreciate unsafePerformIO as a strong code smell that you probably should move what you have into IO
2021-10-14 17:47:30 +0200 <dminuoso> Too many ways Ive been bitten poorly, unsafePerformIO is really dangerous in some strange ways
2021-10-14 17:47:33 +0200 <jollygood2> I asked yesterday, so if I can repeat my question again, as I need to decide which xml library to use now. file is only 200 kB and I am reading it once, so I'm wondering which of the half a dozen xml libraries are the simplest to use?
2021-10-14 17:47:34 +0200 <kuribas> dminuoso: then return "Maybe a" in pure code. if it's nothing log the warning (in IO), and return a default value.
2021-10-14 17:47:45 +0200 <jollygood2> performance shouldn't matter
2021-10-14 17:48:07 +0200 <dminuoso> kuribas: Whats the value of the Nothing then?
2021-10-14 17:48:17 +0200 <dminuoso> You're throwing away information now, and have shitty IO semantics for logging.
2021-10-14 17:48:18 +0200 <kuribas> dminuoso: use the Default typeclass.
2021-10-14 17:48:36 +0200 <kuribas> dminuoso: I mean, the goal is to continue, right?
2021-10-14 17:48:36 +0200 <dminuoso> kuribas: I do something similar, but I dont use unsafePerformIO
2021-10-14 17:48:41 +0200 <dminuoso> kuribas: In our SDN compiler we have this
2021-10-14 17:49:12 +0200 <kuribas> yeah, unsafePerformIO will likely give a miserable experience.
2021-10-14 17:49:54 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2021-10-14 17:50:16 +0200 <dminuoso> kuribas: I have some `data CompEnv a = CompEnv { _comp_warnings :: IORef [OdinWarning], _comp_errors :: IORef [OdinError] }`
2021-10-14 17:50:42 +0200 <dminuoso> And then my own `class UselessDefault a where useless :: a`
2021-10-14 17:51:12 +0200 <kuribas> dminuoso: why not use Default then?
2021-10-14 17:51:16 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
2021-10-14 17:51:24 +0200 <dminuoso> And then I have critical errors that bail out immediately and phase critical errors that allow the compiler to continue its current phase and then abort
2021-10-14 17:51:27 +0200 <kuribas> dminuoso: it's just as useless :)
2021-10-14 17:51:28 +0200 <dminuoso> kuribas: because Default has no semantics
2021-10-14 17:51:52 +0200 <dminuoso> With UselessDefault every type I have generates special magic values that are still recognizable
2021-10-14 17:51:58 +0200 <dminuoso> should I ever use it in the wrong place
2021-10-14 17:52:08 +0200 <dminuoso> So now I do stuff like:
2021-10-14 17:52:31 +0200 <dminuoso> useless <$ configErr "Something bad has happened"
2021-10-14 17:53:08 +0200 <dminuoso> And additional combinators like `>|>` allow me conditional sequencing if no errors are present, >> will just proceed, so my compiler phases/stages use `>|>` between them
2021-10-14 17:53:30 +0200 <dminuoso> That way my compiler can go as long as it can, collecting as many errors as it can
2021-10-14 17:54:23 +0200 <kuribas> right
2021-10-14 17:55:05 +0200 <dminuoso> IORefs are great things. :)
2021-10-14 17:59:17 +0200lbseale(~lbseale@user/ep1ctetus)
2021-10-14 18:01:10 +0200rond_(~rond_@2a02:a31a:a23c:f480:2fd7:e087:5546:a438) (Quit: Client closed)
2021-10-14 18:03:21 +0200mc47(~mc47@xmonad/TheMC47)
2021-10-14 18:03:27 +0200econo(uid147250@user/econo)
2021-10-14 18:05:00 +0200justsomeguy(~justsomeg@user/justsomeguy) (Ping timeout: 260 seconds)
2021-10-14 18:06:45 +0200ec(~ec@gateway/tor-sasl/ec)
2021-10-14 18:07:27 +0200stiell(~stiell@gateway/tor-sasl/stiell) (Ping timeout: 276 seconds)
2021-10-14 18:08:50 +0200fgaz(~fgaz@2001:470:69fc:105::842) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:50 +0200jneira[m](~jneiramat@2001:470:69fc:105::d729) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:50 +0200maerwald[m](~maerwaldm@2001:470:69fc:105::1ee) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:50 +0200siraben(~siraben@user/siraben) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:50 +0200MatrixTravelerbo(~voyagert2@2001:470:69fc:105::22) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:50 +0200sm(~sm@plaintextaccounting/sm) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:50 +0200shiraeeshi[m](~shiraeesh@2001:470:69fc:105::1:77) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:51 +0200unrooted(~unrooted@2001:470:69fc:105::a4a) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:51 +0200psydroid(~psydroid@user/psydroid) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:51 +0200peddie(~peddie@2001:470:69fc:105::25d) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:51 +0200cdsmith(~cdsmithma@2001:470:69fc:105::284) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:51 +0200rednaZ[m](~r3dnazmat@2001:470:69fc:105::ba70) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:51 +0200ServerStatsDisco(~serversta@2001:470:69fc:105::1a) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:51 +0200quantum(~quantum@user/quantum/x-8556232) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:51 +0200Tisoxin(~ikosit@user/ikosit) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:51 +0200Arathorn(~arathorn@2001:470:69fc:105::1f) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:51 +0200denbrahe[m](~denbrahem@2001:470:69fc:105::19c0) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:51 +0200ongy[m](~ongymatri@2001:470:69fc:105::5018) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:51 +0200jophish(~jophish@2001:470:69fc:105::670) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:51 +0200YoungChiefBTW(~youngchie@user/youngchiefbtw) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:51 +0200PotatoHatsue(~berberman@2001:470:69fc:105::b488) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:51 +0200kadoban(~kadoban@user/kadoban) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:51 +0200wildsebastian(~wildsebas@2001:470:69fc:105::1:14b1) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:51 +0200maralorn(~maralorn@2001:470:69fc:105::251) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:51 +0200zwro[m](~zwromatri@2001:470:69fc:105::1d4) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:51 +0200ericson2314(~ericson23@2001:470:69fc:105::70c) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:51 +0200vaibhavsagar[m](~vaibhavsa@2001:470:69fc:105::ffe) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:51 +0200the-coot[m](~the-cootm@2001:470:69fc:105::95f) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:51 +0200carmysilna(~brightly-@2001:470:69fc:105::2190) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:51 +0200Topik[m](~topikmatr@2001:470:69fc:105::a082) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:51 +0200bitonic(~bitonic@2001:470:69fc:105::1812) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:51 +0200zfnmxt(~zfnmxtzfn@2001:470:69fc:105::2b32) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:51 +0200Deide(~deide@user/deide) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:51 +0200Christoph[m](~hpotsirhc@2001:470:69fc:105::2ff8) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:51 +0200kar1(~kar1@2001:470:69fc:105::c308) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:52 +0200tsmc[m](~tsmcmatri@2001:470:69fc:105::1:7e1) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:52 +0200Morrow[m](~morrowmma@2001:470:69fc:105::1d0) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:52 +0200Artem[m](~artemtype@2001:470:69fc:105::75b) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:52 +0200Ollie[m](~ollieocha@2001:470:69fc:105::41a5) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:52 +0200moats(~oats@user/oats) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:52 +0200schuelermine[m](~schuelerm@user/schuelermine) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:52 +0200amesgen[m](~amesgenm]@2001:470:69fc:105::82b) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:52 +0200SawyerBergeron[m(~sawyerber@2001:470:69fc:105::3036) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:52 +0200alexfmpe[m](~alexfmpem@2001:470:69fc:105::38ba) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:52 +0200Drew[m](~drewefenw@2001:470:69fc:105::c8c4) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:52 +0200Magnus[m](~magthetch@2001:470:69fc:105::d1a7) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:52 +0200ManofLetters[m](~manoflett@2001:470:69fc:105::3be) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:52 +0200fcortesi(~fcortesi@2001:470:69fc:105::f3a9) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:52 +0200smichel17[m](~smichel17@2001:470:69fc:105::2d32) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:52 +0200kevin[m]1(~pnotequal@2001:470:69fc:105::a54) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:52 +0200jmcantrell(~jmcantrel@user/jmcantrell) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:52 +0200santiagopim[m](~santiagop@2001:470:69fc:105::e57d) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:52 +0200hsek[m](~hsekmatri@2001:470:69fc:105::d18f) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:52 +0200marinelli[m](~marinelli@2001:470:69fc:105::2d8) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:52 +0200reddishblue[m](~reddishbl@2001:470:69fc:105::21eb) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:52 +0200unclechu(~unclechu@2001:470:69fc:105::354) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:52 +0200aidy(~aidy@2001:470:69fc:105::c7b4) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:52 +0200fendor[m](~fendormat@2001:470:69fc:105::fcbd) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:52 +0200srid[m](~sridmatri@2001:470:69fc:105::1c2) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:53 +0200ru0mad[m](~ru0madmat@2001:470:69fc:105::9b2) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:53 +0200thomasjm[m](~thomasjmm@2001:470:69fc:105::c6d9) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:53 +0200hjulle[m](~hjullemat@2001:470:69fc:105::1dd) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:53 +0200mekeor[m](~mekeormat@2001:470:69fc:105::17e4) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:53 +0200hughjfchen[m](~hughjfche@2001:470:69fc:105::c29d) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:53 +0200razor[m](~razormone@2001:470:69fc:105::f048) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:53 +0200bb010g(~bb010g@2001:470:69fc:105::9a5) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:53 +0200bakinonion[m](~bakinonio@2001:470:69fc:105::ddb3) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:53 +0200Deewiant(~deewiant@2001:470:69fc:105::2fd3) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:53 +0200dualinverter[m](~dualinver@2001:470:69fc:105::16a7) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:53 +0200oak-(~oakuniver@2001:470:69fc:105::fcd) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:53 +0200ixlun(~ixlun@2001:470:69fc:105::41b3) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:53 +0200jesser[m](~jessermat@2001:470:69fc:105::d5ae) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:53 +0200jinsun_(~jinsun@user/jinsun) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:53 +0200reza[m](~rezaphone@2001:470:69fc:105::3eda) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:53 +0200Orbstheorem(~orbstheor@2001:470:69fc:105::a56) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:54 +0200gdhffd[m](~gdhffdmat@2001:470:69fc:105::1:799) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:54 +0200afotgkmnzj7asv3r(~afotgkmnz@2001:470:69fc:105::c24b) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:54 +0200asdofindia-m(~akshaymat@2001:470:69fc:105::831) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:54 +0200craige[m](~craigemcw@2001:470:69fc:105::35f1) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:54 +0200soft(~soft-matr@2001:470:69fc:105::c75) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:54 +0200alex[m]1234567(~alexchete@2001:470:69fc:105::1:1001) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:54 +0200justosophy[m](~justosoph@2001:470:69fc:105::572f) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:54 +0200fakehacker[m](~fakehacke@2001:470:69fc:105::b5f0) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:54 +0200IgnatInsarov[m](~kindaroma@2001:470:69fc:105::f5d9) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:54 +0200dexmad[m](~dexmadmat@2001:470:69fc:105::e056) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:54 +0200monadfritz[m](~ahdytmatr@2001:470:69fc:105::e1f1) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:54 +0200wysteriary[m](~wysteriar@2001:470:69fc:105::a42e) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:54 +0200cloudy(~cloudy@2001:470:69fc:105::50c0) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:54 +0200sam[m]12(~sammtopoi@2001:470:69fc:105::e887) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:54 +0200TomasJakl[m](~jaklttchn@2001:470:69fc:105::a42) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:54 +0200ilkecan[m](~ilkecanma@2001:470:69fc:105::1:79b) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:54 +0200codygman[m](~codygman@2001:470:69fc:105::b4ba) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:54 +0200stoicswe[m](~deadlette@2001:470:69fc:105::d277) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:55 +0200xosdy[m](~xosdyalet@2001:470:69fc:105::31f7) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:55 +0200Tavi[m](~factoidde@2001:470:69fc:105::1:819) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:55 +0200jchia[m](~jchiamatr@2001:470:69fc:105::c50b) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:55 +0200RosarioPulella[m(~rosariopu@2001:470:69fc:105::a57) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:55 +0200ftzm[m](~ftzmmatri@2001:470:69fc:105::1:dfc) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:08:58 +0200hsiktas[m](~hsiktasma@2001:470:69fc:105::30d4) (Quit: Bridge terminating on SIGTERM)
2021-10-14 18:10:05 +0200_ht(~quassel@82-169-194-8.biz.kpn.net)
2021-10-14 18:10:31 +0200azeem(~azeem@emp-85-170.eduroam.uu.se) (Read error: Connection reset by peer)
2021-10-14 18:12:06 +0200trillp(~trillp@69.233.98.238) (Quit: nyaa~)
2021-10-14 18:12:22 +0200azeem(~azeem@emp-85-170.eduroam.uu.se)
2021-10-14 18:13:10 +0200jchia[m](~jchiamatr@2001:470:69fc:105::c50b)
2021-10-14 18:14:26 +0200hippoid(~idris@184.105.6.88) (Quit: leaving)
2021-10-14 18:16:33 +0200hendursaga(~weechat@user/hendursaga) (Ping timeout: 276 seconds)
2021-10-14 18:16:40 +0200azeem(~azeem@emp-85-170.eduroam.uu.se) (Ping timeout: 260 seconds)
2021-10-14 18:17:01 +0200justsomeguy(~justsomeg@user/justsomeguy)
2021-10-14 18:17:51 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2021-10-14 18:19:09 +0200stiell(~stiell@gateway/tor-sasl/stiell)
2021-10-14 18:19:52 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-10-14 18:22:44 +0200azeem(~azeem@2a00:801:44b:8c08:deb2:1ae7:691a:354c)
2021-10-14 18:23:29 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2021-10-14 18:24:04 +0200cfricke(~cfricke@user/cfricke) (Quit: WeeChat 3.3)
2021-10-14 18:24:46 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
2021-10-14 18:25:44 +0200oxide(~lambda@user/oxide) (Ping timeout: 265 seconds)
2021-10-14 18:25:44 +0200 <jollygood2> is anyone familiar with tagsoup? I can't figure out how to get tag's children
2021-10-14 18:25:45 +0200MatrixTravelerbo(~voyagert2@2001:470:69fc:105::22)
2021-10-14 18:25:45 +0200dualinverter[m](~dualinver@2001:470:69fc:105::16a7)
2021-10-14 18:25:45 +0200fgaz(~fgaz@2001:470:69fc:105::842)
2021-10-14 18:25:45 +0200peddie(~peddie@2001:470:69fc:105::25d)
2021-10-14 18:25:45 +0200cdsmith(~cdsmithma@2001:470:69fc:105::284)
2021-10-14 18:25:45 +0200Morrow[m](~morrowmma@2001:470:69fc:105::1d0)
2021-10-14 18:25:45 +0200thomasjm[m](~thomasjmm@2001:470:69fc:105::c6d9)
2021-10-14 18:25:46 +0200hsek[m](~hsekmatri@2001:470:69fc:105::d18f)
2021-10-14 18:25:46 +0200ru0mad[m](~ru0madmat@2001:470:69fc:105::9b2)
2021-10-14 18:25:58 +0200gdhffd[m](~gdhffdmat@2001:470:69fc:105::1:799)
2021-10-14 18:25:58 +0200bb010g(~bb010g@2001:470:69fc:105::9a5)
2021-10-14 18:25:58 +0200ServerStatsDisco(~serversta@2001:470:69fc:105::1a)
2021-10-14 18:25:58 +0200amesgen[m](~amesgenm]@2001:470:69fc:105::82b)
2021-10-14 18:25:58 +0200the-coot[m](~the-cootm@2001:470:69fc:105::95f)
2021-10-14 18:25:59 +0200moats(~oats@user/oats)
2021-10-14 18:26:11 +0200soft(~soft-matr@2001:470:69fc:105::c75)
2021-10-14 18:26:11 +0200zfnmxt(~zfnmxtzfn@2001:470:69fc:105::2b32)
2021-10-14 18:26:26 +0200oak-(~oakuniver@2001:470:69fc:105::fcd)
2021-10-14 18:26:28 +0200kadoban(~kadoban@user/kadoban)
2021-10-14 18:26:28 +0200bitonic(~bitonic@2001:470:69fc:105::1812)
2021-10-14 18:26:28 +0200jophish(~jophish@2001:470:69fc:105::670)
2021-10-14 18:26:28 +0200ericson2314(~ericson23@2001:470:69fc:105::70c)
2021-10-14 18:26:28 +0200Arathorn(~arathorn@2001:470:69fc:105::1f)
2021-10-14 18:26:29 +0200Ollie[m](~ollieocha@2001:470:69fc:105::41a5)
2021-10-14 18:26:29 +0200PotatoHatsue(~berberman@2001:470:69fc:105::b488)
2021-10-14 18:26:29 +0200ixlun(~ixlun@2001:470:69fc:105::41b3)
2021-10-14 18:26:29 +0200unclechu(~unclechu@2001:470:69fc:105::354)
2021-10-14 18:26:29 +0200Deewiant(~deewiant@2001:470:69fc:105::2fd3)
2021-10-14 18:26:29 +0200unrooted(~unrooted@2001:470:69fc:105::a4a)
2021-10-14 18:26:29 +0200rednaZ[m](~r3dnazmat@2001:470:69fc:105::ba70)
2021-10-14 18:26:30 +0200maralorn(~maralorn@2001:470:69fc:105::251)
2021-10-14 18:26:30 +0200denbrahe[m](~denbrahem@2001:470:69fc:105::19c0)
2021-10-14 18:26:35 +0200chele(~chele@user/chele) (Remote host closed the connection)
2021-10-14 18:26:42 +0200jesser[m](~jessermat@2001:470:69fc:105::d5ae)
2021-10-14 18:26:43 +0200reza[m](~rezaphone@2001:470:69fc:105::3eda)
2021-10-14 18:26:43 +0200quantum(~quantum@user/quantum/x-8556232)
2021-10-14 18:26:43 +0200marinelli[m](~marinelli@2001:470:69fc:105::2d8)
2021-10-14 18:26:43 +0200hsiktas[m](~hsiktasma@2001:470:69fc:105::30d4)
2021-10-14 18:26:43 +0200Orbstheorem(~orbstheor@2001:470:69fc:105::a56)
2021-10-14 18:26:43 +0200craige[m](~craigemcw@2001:470:69fc:105::35f1)
2021-10-14 18:26:43 +0200afotgkmnzj7asv3r(~afotgkmnz@2001:470:69fc:105::c24b)
2021-10-14 18:26:43 +0200schuelermine[m](~schuelerm@user/schuelermine)
2021-10-14 18:26:43 +0200razor[m](~razormone@2001:470:69fc:105::f048)
2021-10-14 18:26:43 +0200sm(~sm@plaintextaccounting/sm)
2021-10-14 18:26:44 +0200reddishblue[m](~reddishbl@2001:470:69fc:105::21eb)
2021-10-14 18:26:56 +0200justosophy[m](~justosoph@2001:470:69fc:105::572f)
2021-10-14 18:26:56 +0200kevin[m]1(~pnotequal@2001:470:69fc:105::a54)
2021-10-14 18:26:56 +0200Deide(~deide@user/deide)
2021-10-14 18:27:08 +0200fakehacker[m](~fakehacke@2001:470:69fc:105::b5f0)
2021-10-14 18:27:08 +0200hughjfchen[m](~hughjfche@2001:470:69fc:105::c29d)
2021-10-14 18:27:08 +0200Artem[m](~artemtype@2001:470:69fc:105::75b)
2021-10-14 18:27:20 +0200IgnatInsarov[m](~kindaroma@2001:470:69fc:105::f5d9)
2021-10-14 18:27:20 +0200srid[m](~sridmatri@2001:470:69fc:105::1c2)
2021-10-14 18:27:20 +0200psydroid(~psydroid@user/psydroid)
2021-10-14 18:27:20 +0200Christoph[m](~hpotsirhc@2001:470:69fc:105::2ff8)
2021-10-14 18:27:31 +0200dka(~code-is-a@ns3059207.ip-193-70-33.eu) (Quit: My Ex-Girlfriend once told me: I'm not a slut, I'm just popular)
2021-10-14 18:27:32 +0200wysteriary[m](~wysteriar@2001:470:69fc:105::a42e)
2021-10-14 18:27:32 +0200YoungChiefBTW(~youngchie@2001:470:69fc:105::214c)
2021-10-14 18:27:32 +0200zwro[m](~zwromatri@2001:470:69fc:105::1d4)
2021-10-14 18:27:44 +0200stoicswe[m](~deadlette@2001:470:69fc:105::d277)
2021-10-14 18:27:45 +0200sam[m]12(~sammtopoi@2001:470:69fc:105::e887)
2021-10-14 18:27:45 +0200Topik[m](~topikmatr@2001:470:69fc:105::a082)
2021-10-14 18:27:45 +0200kar1(~kar1@2001:470:69fc:105::c308)
2021-10-14 18:27:45 +0200ongy[m](~ongymatri@2001:470:69fc:105::5018)
2021-10-14 18:27:45 +0200alexfmpe[m](~alexfmpem@2001:470:69fc:105::38ba)
2021-10-14 18:27:45 +0200asdofindia-m(~akshaymat@2001:470:69fc:105::831)
2021-10-14 18:27:45 +0200hjulle[m](~hjullemat@2001:470:69fc:105::1dd)
2021-10-14 18:27:45 +0200Drew[m](~drewefenw@2001:470:69fc:105::c8c4)
2021-10-14 18:27:45 +0200jneira[m](~jneiramat@2001:470:69fc:105::d729)
2021-10-14 18:27:46 +0200Magnus[m](~magthetch@2001:470:69fc:105::d1a7)
2021-10-14 18:27:46 +0200siraben(~siraben@user/siraben)
2021-10-14 18:27:46 +0200dexmad[m](~dexmadmat@2001:470:69fc:105::e056)
2021-10-14 18:27:46 +0200smichel17[m](~smichel17@2001:470:69fc:105::2d32)
2021-10-14 18:27:46 +0200SawyerBergeron[m(~sawyerber@2001:470:69fc:105::3036)
2021-10-14 18:27:46 +0200Tisoxin(~ikosit@user/ikosit)
2021-10-14 18:27:58 +0200monadfritz[m](~ahdytmatr@2001:470:69fc:105::e1f1)
2021-10-14 18:27:58 +0200bakinonion[m](~bakinonio@2001:470:69fc:105::ddb3)
2021-10-14 18:27:58 +0200alex[m]123(~alexchete@2001:470:69fc:105::1:1001)
2021-10-14 18:27:58 +0200fcortesi(~fcortesi@2001:470:69fc:105::f3a9)
2021-10-14 18:27:58 +0200ManofLetters[m](~manoflett@2001:470:69fc:105::3be)
2021-10-14 18:27:58 +0200cloudy(~cloudy@2001:470:69fc:105::50c0)
2021-10-14 18:27:59 +0200carmysilna(~brightly-@2001:470:69fc:105::2190)
2021-10-14 18:27:59 +0200fendor[m](~fendormat@2001:470:69fc:105::fcbd)
2021-10-14 18:27:59 +0200aidy(~aidy@2001:470:69fc:105::c7b4)
2021-10-14 18:28:11 +0200TomasJakl[m](~jaklttchn@2001:470:69fc:105::a42)
2021-10-14 18:28:11 +0200shiraeeshi[m](~shiraeesh@2001:470:69fc:105::1:77)
2021-10-14 18:28:14 +0200dka(~code-is-a@ns3059207.ip-193-70-33.eu)
2021-10-14 18:28:23 +0200ilkecan[m](~ilkecanma@2001:470:69fc:105::1:79b)
2021-10-14 18:28:23 +0200tsmc[m](~tsmcmatri@2001:470:69fc:105::1:7e1)
2021-10-14 18:28:39 +0200codygman[m](~codygman@2001:470:69fc:105::b4ba)
2021-10-14 18:28:39 +0200xosdy[m](~xosdyalet@2001:470:69fc:105::31f7)
2021-10-14 18:28:39 +0200vaibhavsagar[m](~vaibhavsa@2001:470:69fc:105::ffe)
2021-10-14 18:28:39 +0200santiagopim[m](~santiagop@2001:470:69fc:105::e57d)
2021-10-14 18:28:51 +0200Tavi[m](~factoidde@2001:470:69fc:105::1:819)
2021-10-14 18:28:52 +0200mekeor[m](~mekeormat@2001:470:69fc:105::17e4)
2021-10-14 18:28:52 +0200jmcantrell(~jmcantrel@user/jmcantrell)
2021-10-14 18:28:53 +0200maerwald[m](~maerwaldm@2001:470:69fc:105::1ee)
2021-10-14 18:28:53 +0200RosarioPulella[m(~rosariopu@2001:470:69fc:105::a57)
2021-10-14 18:29:01 +0200tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net)
2021-10-14 18:29:05 +0200ftzm[m](~ftzmmatri@2001:470:69fc:105::1:dfc)
2021-10-14 18:29:05 +0200wildsebastian(~wildsebas@2001:470:69fc:105::1:14b1)
2021-10-14 18:29:05 +0200jinsun_(~jinsun@user/jinsun)
2021-10-14 18:29:17 +0200mekeor[m](~mekeormat@2001:470:69fc:105::17e4) ()
2021-10-14 18:29:21 +0200ec(~ec@gateway/tor-sasl/ec)
2021-10-14 18:32:21 +0200mekeor[m](~mekeormat@2001:470:69fc:105::17e4)
2021-10-14 18:41:58 +0200justsomeguy(~justsomeg@user/justsomeguy) (Quit: WeeChat 3.2)
2021-10-14 18:42:30 +0200pavonia(~user@user/siracusa) (Quit: Bye!)
2021-10-14 18:43:33 +0200kuribas(~user@ip-188-118-57-242.reverse.destiny.be) (Quit: ERC (IRC client for Emacs 26.3))
2021-10-14 18:45:02 +0200 <geekosaur> jollygood2, one issue with tagsoup is that it's exactly that. (it's intended for parsing badly formed html where you can't even assume "children" is a thing)
2021-10-14 18:45:32 +0200 <geekosaur> I mean, it manages to handle <a><b></a></b>
2021-10-14 18:48:54 +0200 <maerwald> any gui library that works on windows and can be shipped reasonably?
2021-10-14 18:48:58 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 252 seconds)
2021-10-14 18:50:44 +0200Null_A(~null_a@2601:645:8700:2290:6ce1:5557:ad33:ef82)
2021-10-14 18:51:00 +0200 <geekosaur> in haskell? you already lost with "any gui library" imo
2021-10-14 18:51:22 +0200 <geekosaur> I mean, there's gi-gtk, but bleargh
2021-10-14 18:51:36 +0200 <maerwald> gtk can't be linked statically afair
2021-10-14 18:51:58 +0200 <geekosaur> indeed it can't. and especially gi-gtk
2021-10-14 18:52:39 +0200Null_A_(~null_a@2601:645:8700:2290:e4f7:cf97:bec9:9d10)
2021-10-14 18:52:50 +0200ars23(~ars23@2a02:2f09:3e0b:6000:ecb0:eb26:7827:8e)
2021-10-14 18:54:54 +0200 <maerwald> it seems you can only get haskellers attention about GUI when you mix it with "FRP"
2021-10-14 18:55:04 +0200 <maerwald> and yet, nothing practical came out of it
2021-10-14 18:55:31 +0200 <monochrom> A long time ago wx was quite preferred for covering Windows. I don't know about now.
2021-10-14 18:55:38 +0200 <maerwald> it's abandoned
2021-10-14 18:55:43 +0200 <maerwald> the issue tracker is on source forge
2021-10-14 18:55:49 +0200 <maerwald> seems to not even build with v2
2021-10-14 18:55:56 +0200Null_A(~null_a@2601:645:8700:2290:6ce1:5557:ad33:ef82) (Ping timeout: 245 seconds)
2021-10-14 18:56:52 +0200 <geekosaur> wx kept changing faster than the haskell bindings could keep up :(
2021-10-14 18:59:07 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2021-10-14 19:01:22 +0200turlando_(~turlando@93-42-250-112.ip89.fastwebnet.it) (Quit: turlando_)
2021-10-14 19:02:27 +0200turlando(~turlando@93-42-250-112.ip89.fastwebnet.it)
2021-10-14 19:02:28 +0200turlando(~turlando@93-42-250-112.ip89.fastwebnet.it) (Changing host)
2021-10-14 19:02:28 +0200turlando(~turlando@user/turlando)
2021-10-14 19:11:30 +0200zebrag(~chris@user/zebrag) (Quit: Konversation terminated!)
2021-10-14 19:17:13 +0200hendursaga(~weechat@user/hendursaga)
2021-10-14 19:18:56 +0200 <jollygood2> geekosaur, so tagsoup can't do that? what xml parsing library can?
2021-10-14 19:19:43 +0200cheater(~Username@user/cheater) (Ping timeout: 265 seconds)
2021-10-14 19:19:49 +0200mei6(~mei@user/mei) (Quit: mei6)
2021-10-14 19:19:55 +0200 <sm> g'day all
2021-10-14 19:20:28 +0200 <sm> maerwald: fltk-hs or monomer ? worth a look
2021-10-14 19:21:23 +0200 <monochrom> Perhaps the next thing worth trying is https://hackage.haskell.org/package/xml
2021-10-14 19:21:47 +0200 <maerwald> sm: do they work on windows without dynamic linking?
2021-10-14 19:23:01 +0200theproffesor(~theproffe@user/theproffesor)
2021-10-14 19:23:57 +0200 <sm> I don't know about the linking
2021-10-14 19:24:13 +0200fizzsegfaultbuzz(~segfaultf@135-180-0-138.static.sonic.net)
2021-10-14 19:27:00 +0200emf(~emf@2620:10d:c090:400::5:c2a5)
2021-10-14 19:28:04 +0200emf(~emf@2620:10d:c090:400::5:c2a5) (Client Quit)
2021-10-14 19:30:09 +0200Null_A_(~null_a@2601:645:8700:2290:e4f7:cf97:bec9:9d10) (Remote host closed the connection)
2021-10-14 19:30:28 +0200amk(~amk@109.255.169.126) (Remote host closed the connection)
2021-10-14 19:30:44 +0200Null_A(~null_a@2601:645:8700:2290:e4f7:cf97:bec9:9d10)
2021-10-14 19:31:30 +0200amk(~amk@109.255.169.126)
2021-10-14 19:32:09 +0200Null_A(~null_a@2601:645:8700:2290:e4f7:cf97:bec9:9d10) (Remote host closed the connection)
2021-10-14 19:32:24 +0200Null_A(~null_a@2601:645:8700:2290:e4f7:cf97:bec9:9d10)
2021-10-14 19:39:12 +0200emf(~emf@163.114.132.1)
2021-10-14 19:39:45 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2021-10-14 19:45:05 +0200Null_A(~null_a@2601:645:8700:2290:e4f7:cf97:bec9:9d10) (Remote host closed the connection)
2021-10-14 19:45:25 +0200emf(~emf@163.114.132.1) (Read error: Connection reset by peer)
2021-10-14 19:45:37 +0200emf_(~emf@2620:10d:c090:400::5:c2a5)
2021-10-14 19:47:14 +0200cheater(~Username@user/cheater)
2021-10-14 19:47:55 +0200gay(~quassel@77-120-141-90.kha.volia.net) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
2021-10-14 19:51:00 +0200ubert1(~Thunderbi@178.115.37.32.wireless.dyn.drei.com) (Remote host closed the connection)
2021-10-14 19:53:00 +0200Null_A(~null_a@2601:645:8700:2290:e4f7:cf97:bec9:9d10)
2021-10-14 19:54:58 +0200Inst(~Inst@2601:6c4:4080:3f80:4860:840:17cf:1bbb) (Ping timeout: 252 seconds)
2021-10-14 19:57:45 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Remote host closed the connection)
2021-10-14 19:59:23 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2021-10-14 20:00:31 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Client Quit)
2021-10-14 20:01:19 +0200CiaoSen(~Jura@p200300c95730dd002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
2021-10-14 20:03:52 +0200waleee(~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
2021-10-14 20:14:38 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2021-10-14 20:20:29 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-10-14 20:23:26 +0200MQ-17J(~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer)
2021-10-14 20:23:58 +0200MQ-17J(~MQ-17J@d192-24-122-179.try.wideopenwest.com)
2021-10-14 20:24:11 +0200YoungChiefBTW(~youngchie@2001:470:69fc:105::214c) (Changing host)
2021-10-14 20:24:11 +0200YoungChiefBTW(~youngchie@user/youngchiefbtw)
2021-10-14 20:26:41 +0200Pickchea(~private@user/pickchea)
2021-10-14 20:28:42 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2021-10-14 20:30:57 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2021-10-14 20:32:29 +0200wonko(~wjc@62.115.229.50)
2021-10-14 20:35:57 +0200meinside(uid24933@id-24933.helmsley.irccloud.com) (Quit: Connection closed for inactivity)
2021-10-14 20:37:14 +0200_bo(~bo@217.18.216.247)
2021-10-14 20:37:21 +0200dyeplexer(~dyeplexer@user/dyeplexer) (Remote host closed the connection)
2021-10-14 20:41:21 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2021-10-14 20:49:40 +0200Lycurgus(~juan@98.4.112.204)
2021-10-14 20:51:44 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2021-10-14 20:54:06 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:ac5a:4bd6:3f7c:fb35) (Remote host closed the connection)
2021-10-14 20:54:56 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
2021-10-14 20:56:32 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2021-10-14 21:00:39 +0200wrengr_awaywrengr
2021-10-14 21:01:47 +0200[exa](exa@srv3.blesmrt.net) (Remote host closed the connection)
2021-10-14 21:02:03 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Quit: FinnElija)
2021-10-14 21:05:55 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643)
2021-10-14 21:07:54 +0200 <shapr> Is hinotify the best way to do file watching on Linux these days?
2021-10-14 21:09:34 +0200 <dminuoso> The only, really.
2021-10-14 21:09:56 +0200 <dminuoso> I mean you can simply poll of course
2021-10-14 21:10:07 +0200coot(~coot@37.30.52.44.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
2021-10-14 21:11:39 +0200Lycurgus(~juan@98.4.112.204) (Quit: Exeunt)
2021-10-14 21:13:12 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2021-10-14 21:17:51 +0200d34df00d(~d34df00d@2600:1700:8c60:3a10::48)
2021-10-14 21:18:00 +0200 <d34df00d> Hi!
2021-10-14 21:18:26 +0200 <geekosaur> œ
2021-10-14 21:18:44 +0200 <maerwald> shapr: it's a good library
2021-10-14 21:19:16 +0200 <d34df00d> I'm trying to add https://github.com/input-output-hk/plutus as an extra-dep to my stack-based project, basically via `extra-deps: - github: ...`.
2021-10-14 21:19:45 +0200 <maerwald> d34df00d: you shouldn't use stack for plutus
2021-10-14 21:19:45 +0200 <d34df00d> The error I'm getting is `No cabal file found for Archive from https://github.com/input-output-hk/plutus/archive/e2cd641501d13715120329092b3a93df35493a44.tar.gz` — which is true, there's only cabal.project.
2021-10-14 21:19:56 +0200 <d34df00d> maerwald: what should I use instead?
2021-10-14 21:19:59 +0200 <maerwald> cabal
2021-10-14 21:20:02 +0200 <d34df00d> Ah ok.
2021-10-14 21:20:45 +0200 <d34df00d> I was kinda bitten recently by a to vague bound in a plutus dep, which surprisingly didn't bite other folks working on the same code base, so I was hoping stack would give me something more reproducible.
2021-10-14 21:20:54 +0200 <d34df00d> s/a to /a too /
2021-10-14 21:21:11 +0200 <maerwald> use a freeze file to make it reproducible
2021-10-14 21:21:35 +0200 <d34df00d> TIL cabal freeze files
2021-10-14 21:21:39 +0200 <geekosaur> more completely, plutus is a collection of packages, not just one package, and you'd have to inspect the cabal.project to determine the subprojects and their cabal files, and possibly which checkouts if they're separate fromn plutus itself
2021-10-14 21:22:04 +0200 <maerwald> but I don't think you can expect the plutus script itself to be reproducible (I mean the actual script that you generate to submit to the chain)
2021-10-14 21:22:14 +0200 <maerwald> GHC version and other stuff might leak into tit
2021-10-14 21:22:15 +0200 <d34df00d> Ah, I don't care abou that.
2021-10-14 21:22:19 +0200 <maerwald> ok
2021-10-14 21:22:35 +0200 <d34df00d> I'm writing some purely haskell stuff around plutus ecosystem, no smart contracts yet.
2021-10-14 21:22:51 +0200 <geekosaur> (cabal.project very roughly serves the sanme purpose as stack.yaml)
2021-10-14 21:22:53 +0200jgeerds(~jgeerds@55d4da80.access.ecotel.net) (Ping timeout: 264 seconds)
2021-10-14 21:22:55 +0200 <d34df00d> But that's interesting, thanks for the heads-up!
2021-10-14 21:23:04 +0200 <maerwald> the stack file in plutus repo is outdated often. The developers use cabal primarily
2021-10-14 21:24:20 +0200emf_(~emf@2620:10d:c090:400::5:c2a5) (Quit: emf_)
2021-10-14 21:29:30 +0200tdaeayusr^^(~tdaeayusr@70.166.66.234)
2021-10-14 21:30:04 +0200MQ-17J(~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer)
2021-10-14 21:30:17 +0200MQ-17J(~MQ-17J@d192-24-122-179.try.wideopenwest.com)
2021-10-14 21:30:43 +0200coot(~coot@37.30.52.44.nat.umts.dynamic.t-mobile.pl)
2021-10-14 21:32:08 +0200 <d34df00d> Good to know. Thanks! I'll stick with cabal.
2021-10-14 21:34:21 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Remote host closed the connection)
2021-10-14 21:37:26 +0200abhixec(~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Remote host closed the connection)
2021-10-14 21:40:24 +0200abhixec(~abhixec@c-67-169-139-16.hsd1.ca.comcast.net)
2021-10-14 21:41:55 +0200bontaq(~user@ool-45779fe5.dyn.optonline.net) (Remote host closed the connection)
2021-10-14 21:46:36 +0200benin(~benin@183.82.206.194)
2021-10-14 21:49:43 +0200emf(~emf@2620:10d:c090:400::5:c2a5)
2021-10-14 21:50:25 +0200bitdex_(~bitdex@gateway/tor-sasl/bitdex)
2021-10-14 21:53:00 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 276 seconds)
2021-10-14 21:53:01 +0200dsf(~dsf@cpe-66-75-56-205.san.res.rr.com) (Ping timeout: 245 seconds)
2021-10-14 21:53:59 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2021-10-14 21:54:30 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:1cce:2f0c:1ac6:f97f)
2021-10-14 21:58:51 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:1cce:2f0c:1ac6:f97f) (Ping timeout: 245 seconds)
2021-10-14 22:01:19 +0200Null_A(~null_a@2601:645:8700:2290:e4f7:cf97:bec9:9d10) (Remote host closed the connection)
2021-10-14 22:02:43 +0200pavonia(~user@user/siracusa)
2021-10-14 22:04:18 +0200Null_A(~null_a@2601:645:8700:2290:e4f7:cf97:bec9:9d10)
2021-10-14 22:04:46 +0200benin(~benin@183.82.206.194) (Ping timeout: 252 seconds)
2021-10-14 22:05:19 +0200juhp(~juhp@128.106.188.220) (Ping timeout: 252 seconds)
2021-10-14 22:07:47 +0200juhp(~juhp@128.106.188.220)
2021-10-14 22:09:20 +0200Lycurgus(~juan@98.4.112.204)
2021-10-14 22:12:08 +0200neurocyte0132889(~neurocyte@213.188.113.91)
2021-10-14 22:12:08 +0200neurocyte0132889(~neurocyte@213.188.113.91) (Changing host)
2021-10-14 22:12:08 +0200neurocyte0132889(~neurocyte@user/neurocyte)
2021-10-14 22:13:46 +0200Pickchea(~private@user/pickchea) (Quit: Leaving)
2021-10-14 22:14:37 +0200alx741(~alx741@181.196.69.128) (Ping timeout: 252 seconds)
2021-10-14 22:16:12 +0200hexology(~hexology@user/hexology) (Quit: hex on you ...)
2021-10-14 22:20:08 +0200fvr(uid503686@id-503686.uxbridge.irccloud.com)
2021-10-14 22:20:42 +0200fluxit(~fluxit@techsmix.net)
2021-10-14 22:21:13 +0200mc47(~mc47@xmonad/TheMC47) (Remote host closed the connection)
2021-10-14 22:22:45 +0200aegon(~mike@174.127.249.180)
2021-10-14 22:22:53 +0200wyrd(~wyrd@gateway/tor-sasl/wyrd) (Quit: leaving)
2021-10-14 22:24:20 +0200_ht(~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection)
2021-10-14 22:30:32 +0200coot(~coot@37.30.52.44.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
2021-10-14 22:32:11 +0200wonko(~wjc@62.115.229.50) (Ping timeout: 245 seconds)
2021-10-14 22:34:30 +0200neurocyte0132889(~neurocyte@user/neurocyte) (Ping timeout: 265 seconds)
2021-10-14 22:36:26 +0200ars23(~ars23@2a02:2f09:3e0b:6000:ecb0:eb26:7827:8e) (Quit: Leaving)
2021-10-14 22:37:46 +0200tom_(~tom@2a00:23c8:970c:4801:5b6a:e81b:79dc:f684) (Ping timeout: 252 seconds)
2021-10-14 22:39:37 +0200Lycurgus(~juan@98.4.112.204) (K-Lined)
2021-10-14 22:41:09 +0200zincy(~tom@2a00:23c8:970c:4801:5b6a:e81b:79dc:f684)
2021-10-14 22:42:46 +0200zincy(~tom@2a00:23c8:970c:4801:5b6a:e81b:79dc:f684) (Read error: Connection reset by peer)
2021-10-14 22:45:23 +0200Tuplanolla(~Tuplanoll@91-159-69-50.elisa-laajakaista.fi)
2021-10-14 22:46:12 +0200takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2021-10-14 22:46:23 +0200lavaman(~lavaman@98.38.249.169)
2021-10-14 22:48:46 +0200dhouthoo(~dhouthoo@178-117-36-167.access.telenet.be) (Quit: WeeChat 3.3)
2021-10-14 22:49:41 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2021-10-14 22:50:31 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 245 seconds)
2021-10-14 22:51:59 +0200__monty__(~toonn@user/toonn)
2021-10-14 22:53:32 +0200Neuromancer(~Neuromanc@user/neuromancer)
2021-10-14 22:55:05 +0200Cajun(~Cajun@user/cajun) (Ping timeout: 256 seconds)
2021-10-14 22:56:44 +0200acidjnk_new(~acidjnk@p200300d0c703cb2624cf652eb5c49df1.dip0.t-ipconnect.de)
2021-10-14 22:56:47 +0200alzgh(~alzgh@user/alzgh) (Ping timeout: 256 seconds)
2021-10-14 22:56:56 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:21fb:d4a:1e2:e3eb)
2021-10-14 23:01:15 +0200jgeerds(~jgeerds@55d4da80.access.ecotel.net)
2021-10-14 23:01:45 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:21fb:d4a:1e2:e3eb) (Ping timeout: 268 seconds)
2021-10-14 23:07:33 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:21fb:d4a:1e2:e3eb)
2021-10-14 23:17:31 +0200ubert(~Thunderbi@178.115.37.32.wireless.dyn.drei.com) (Ping timeout: 265 seconds)
2021-10-14 23:17:37 +0200echoone(~echoone@2a02:8109:a1c0:5d05:58b9:5c9f:8b69:dc13)
2021-10-14 23:20:53 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:21fb:d4a:1e2:e3eb) (Remote host closed the connection)
2021-10-14 23:21:56 +0200Null_A(~null_a@2601:645:8700:2290:e4f7:cf97:bec9:9d10) (Remote host closed the connection)
2021-10-14 23:24:34 +0200notzmv(~zmv@user/notzmv) (Ping timeout: 268 seconds)
2021-10-14 23:25:02 +0200Lord_of_Life_(~Lord@user/lord-of-life/x-2819915)
2021-10-14 23:26:22 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 265 seconds)
2021-10-14 23:26:22 +0200Lord_of_Life_Lord_of_Life
2021-10-14 23:27:15 +0200Null_A(~null_a@2601:645:8700:2290:e4f7:cf97:bec9:9d10)
2021-10-14 23:27:52 +0200wyrd(~wyrd@gateway/tor-sasl/wyrd)
2021-10-14 23:32:00 +0200rembo10(~rembo10@remulis.com) (Quit: ZNC 1.8.2 - https://znc.in)
2021-10-14 23:32:16 +0200rembo10(~rembo10@remulis.com)
2021-10-14 23:33:45 +0200chexum_(~quassel@gateway/tor-sasl/chexum) (Ping timeout: 276 seconds)
2021-10-14 23:33:45 +0200jpds(~jpds@gateway/tor-sasl/jpds) (Ping timeout: 276 seconds)
2021-10-14 23:33:53 +0200chexum(~quassel@gateway/tor-sasl/chexum)
2021-10-14 23:34:52 +0200jpds(~jpds@gateway/tor-sasl/jpds)
2021-10-14 23:37:11 +0200Null_A(~null_a@2601:645:8700:2290:e4f7:cf97:bec9:9d10) (Remote host closed the connection)
2021-10-14 23:44:14 +0200michalz(~michalz@185.246.204.93) (Remote host closed the connection)
2021-10-14 23:49:08 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-10-14 23:55:35 +0200xff0x(~xff0x@2001:1a81:5210:a600:f14:89c2:cfb:bd25) (Ping timeout: 260 seconds)
2021-10-14 23:56:32 +0200xff0x(~xff0x@2001:1a81:5210:a600:1bfc:35a2:5bfe:31)