2020/11/18

2020-11-18 00:01:37 +0100 <unclechu> it is still impossible in GHC to use higher-order type families? i mean that i can’t use partially applied type family as an argument for another type family
2020-11-18 00:02:32 +0100 <dolio> I don't think you should expect to be able to do that.
2020-11-18 00:04:03 +0100 <monochrom> _deepfire: Maybe do you have a name clash of two distinct "Foo"s hanging around?
2020-11-18 00:04:31 +0100 <unclechu> dolio: why not?
2020-11-18 00:04:51 +0100 <unclechu> it would be extremely useful and straightforward
2020-11-18 00:05:19 +0100cosimone(~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd) (Remote host closed the connection)
2020-11-18 00:05:41 +0100cosimone(~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd)
2020-11-18 00:05:41 +0100 <unclechu> i could reduce amount of type families a lot by using “polymorphic” type famillies
2020-11-18 00:05:47 +0100 <dolio> Because type families are definition by recursive matching on types, and type families are not generators the kind of types.
2020-11-18 00:05:52 +0100inkbottle(~inkbottle@aaubervilliers-654-1-104-55.w86-212.abo.wanadoo.fr)
2020-11-18 00:06:17 +0100zebrag(~inkbottle@aaubervilliers-654-1-89-20.w86-212.abo.wanadoo.fr) (Ping timeout: 265 seconds)
2020-11-18 00:07:44 +0100 <unclechu> dolio: maybe then i should expect instead to have an another way to define “type-level functions”?
2020-11-18 00:08:18 +0100 <unclechu> or maybe i should expect dependent types implementation in GHC so this ability would be delivered with it?
2020-11-18 00:09:32 +0100 <unclechu> does it makes sense? i’m probably not the only one who wants to define type-level `fmap`
2020-11-18 00:09:36 +0100nuncanada(~dude@179.235.160.168) (Read error: Connection reset by peer)
2020-11-18 00:09:50 +0100 <_deepfire> monochrom: no, it turns out that 'cabal clean' fixed it..
2020-11-18 00:10:13 +0100 <monochrom> Hrm that's a strange one indeed.
2020-11-18 00:10:24 +0100 <dolio> Term-level functions don't allow this, either. You can't write definitions by higher-order matching against arbitrary other functions.
2020-11-18 00:10:47 +0100 <_deepfire> I'm using a bit old cabal 3.0, so that might explain the occasional roughness..
2020-11-18 00:11:20 +0100 <monochrom> Standard tech support drone script: 1. have you saved? 2. have you cabal cleaned? 3. have you tried rebooting? 4. have you read the docs?
2020-11-18 00:11:25 +0100 <unclechu> dolio: but i’m not trying to do any matching, i just use variables to use them as functions
2020-11-18 00:12:40 +0100 <unclechu> dolio: i can reformulate my question as: is it still impossible in GHC to define `fmap`/`map` in type-level?
2020-11-18 00:14:23 +0100 <_deepfire> monochrom: yeah.. : -)
2020-11-18 00:15:31 +0100cosimone(~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd) (Remote host closed the connection)
2020-11-18 00:15:51 +0100cosimone(~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd)
2020-11-18 00:19:41 +0100servo(~servo@41.92.32.131)
2020-11-18 00:21:28 +0100 <dolio> Oh, I see what you mean. I'm not sure if they're attempting to deliver that before all the dependent type stuff.
2020-11-18 00:22:24 +0100conal(~conal@64.71.133.70)
2020-11-18 00:25:09 +0100 <monochrom> I haven't checked whether map is definable or not. I worry more about possible use sites. At the use sites, you cannot have type-level lambda, you cannot have partially applied Haskell 2010 type aliases (so nevermind type families), so your map is not going to enjoy much desired use.
2020-11-18 00:32:42 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2020-11-18 00:34:39 +0100 <dolio> I guess I would check if LiberalTypeSynonyms works, but I would guess it won't.
2020-11-18 00:34:55 +0100 <dolio> I mean, it works, but not for that, I assume.
2020-11-18 00:36:06 +0100nuncanada(~dude@179.235.160.168)
2020-11-18 00:36:42 +0100iqubic(~user@2601:602:9500:4870:3952:b8cb:aec4:a935) ("ERC (IRC client for Emacs 28.0.50)")
2020-11-18 00:37:03 +0100 <dolio> Of course, it couldn't possibly work except for concrete lists.
2020-11-18 00:39:13 +0100DavidEichmann(~david@62.110.198.146.dyn.plus.net) (Ping timeout: 264 seconds)
2020-11-18 00:41:06 +0100 <dolio> I would also guess they aren't trying to provide this before whatever dependent type plan goes through, because with the current type checker, you'd probably be guaranteed to have to use a bunch of explicit type annotations on anything that used this.
2020-11-18 00:41:15 +0100cr3(~cr3@192-222-143-195.qc.cable.ebox.net)
2020-11-18 00:41:56 +0100 <dolio> Type applications, even.
2020-11-18 00:42:22 +0100 <dolio> But maybe I'm wrong about that.
2020-11-18 00:45:27 +0100xerox__(~xerox@unaffiliated/xerox)
2020-11-18 00:45:38 +0100nineonine(~textual@50.216.62.2) (Read error: Connection reset by peer)
2020-11-18 00:46:01 +0100 <unclechu> monochrom: actually you can have partially applied type family if it’s kind is `Constraint` if i’m not mistaken
2020-11-18 00:46:46 +0100wroathe_(~wroathe@c-73-24-27-54.hsd1.mn.comcast.net)
2020-11-18 00:47:03 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 272 seconds)
2020-11-18 00:47:19 +0100 <dolio> I'd be surprised.
2020-11-18 00:48:20 +0100xerox_(~xerox@unaffiliated/xerox) (Ping timeout: 256 seconds)
2020-11-18 00:48:39 +0100wroathe_wroathe
2020-11-18 00:48:46 +0100xerox__xerox_
2020-11-18 00:49:49 +0100Varis(~Tadas@unaffiliated/varis) (Remote host closed the connection)
2020-11-18 00:50:35 +0100 <unclechu> maybe i’m mixing up something in my memory. i just remember some conclusion i made from long ago
2020-11-18 00:51:28 +0100Sonderblade(~helloman@94.191.137.65.mobile.tre.se)
2020-11-18 00:52:02 +0100olligobber(olligobber@gateway/vpn/privateinternetaccess/olligobber)
2020-11-18 00:54:54 +0100Tuplanolla(~Tuplanoll@91-159-68-239.elisa-laajakaista.fi) (Quit: Leaving.)
2020-11-18 00:55:14 +0100 <Axman6> there's a trick where you define a class which has other classes as superclasses, and have a single instance, is that what you're talking about?
2020-11-18 00:55:16 +0100 <unclechu> hmm... maybe i mean type-classes back then, not type families
2020-11-18 00:55:25 +0100Varis(~Tadas@unaffiliated/varis)
2020-11-18 00:55:30 +0100 <unclechu> > f :: (a ~ MonadReader Int, m ~ b IO) => Proxy m -> String; f Proxy = mempty
2020-11-18 00:55:32 +0100 <lambdabot> <hint>:1:58: error: <hint>:1:58: error: parse error on input ‘;’
2020-11-18 00:55:43 +0100 <unclechu> > f :: (a ~ MonadReader Int, m ~ b IO) => Proxy m -> String
2020-11-18 00:55:44 +0100 <lambdabot> error:
2020-11-18 00:55:44 +0100 <lambdabot> • Could not deduce (FromExpr [Char]) arising from a use of ‘f’
2020-11-18 00:55:44 +0100 <lambdabot> from the context: (a ~ MonadReader Int, m ~ b1 IO)
2020-11-18 00:55:45 +0100 <Axman6> class (Foo a, Bar a) => Baz a; instance (Foo a, Bar a) => Baz a
2020-11-18 00:56:02 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-18 00:56:46 +0100 <unclechu> > f :: (a ~ MonadReader Int, m ~ a IO) => Proxy m -> String
2020-11-18 00:56:48 +0100 <lambdabot> error:
2020-11-18 00:56:48 +0100 <lambdabot> • Could not deduce (FromExpr [Char]) arising from a use of ‘f’
2020-11-18 00:56:48 +0100 <lambdabot> from the context: (a ~ MonadReader Int, m ~ a IO)
2020-11-18 00:56:59 +0100 <unclechu> anyway, that works in ghci
2020-11-18 00:58:01 +0100hackagepredicate-typed 0.7.4.4 - Predicates, Refinement types and Dsl https://hackage.haskell.org/package/predicate-typed-0.7.4.4 (gbwey)
2020-11-18 00:59:14 +0100 <unclechu> Axman6: i was talking about type families explicitly. what i want is if i have a `type family (x :: a) :: b` i want to make `type family (x :: [a]) :: [b]` of it without adding a new type family
2020-11-18 00:59:44 +0100ystael(~ystael@209.6.50.55) (Ping timeout: 256 seconds)
2020-11-18 01:00:01 +0100havenwood1(~havenwood@185.204.1.185) ()
2020-11-18 01:00:36 +0100nut(~user@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 240 seconds)
2020-11-18 01:00:58 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
2020-11-18 01:01:06 +0100juri_(~juri@178.63.35.222) (Ping timeout: 272 seconds)
2020-11-18 01:01:10 +0100 <unclechu> currently i have define a type family and another type family which is a multiple version of first one
2020-11-18 01:02:04 +0100jedws(~jedws@101.184.175.183)
2020-11-18 01:02:41 +0100juri_(~juri@178.63.35.222)
2020-11-18 01:02:45 +0100peutri(~peutri@ns317027.ip-94-23-46.eu) (Ping timeout: 240 seconds)
2020-11-18 01:02:52 +0100peutri(~peutri@ns317027.ip-94-23-46.eu)
2020-11-18 01:02:54 +0100 <unclechu> like `type family FooMultiple (a ∷ [κ]) ∷ [b] where FooMultiple '[] = '[]; FooMultiple (x ': xs) = Foo x ': FooMultiple xs`
2020-11-18 01:03:14 +0100jzl(~jzl@ip238.ip-149-56-250.net)
2020-11-18 01:03:14 +0100jzl(~jzl@ip238.ip-149-56-250.net) (Changing host)
2020-11-18 01:03:14 +0100jzl(~jzl@unaffiliated/jzl)
2020-11-18 01:03:52 +0100ericsagn1(~ericsagne@2405:6580:0:5100:94c2:72b2:8a99:7096) (Ping timeout: 260 seconds)
2020-11-18 01:04:12 +0100cosimone(~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd) (Ping timeout: 260 seconds)
2020-11-18 01:04:31 +0100cosimone(~cosimone@5.171.25.59)
2020-11-18 01:06:15 +0100ben_m(~ben_m@unaffiliated/ben-m/x-8385872) (Quit: ZNC 1.7.5 - https://znc.in)
2020-11-18 01:06:34 +0100ben_m(~ben_m@56.ip-51-38-127.eu)
2020-11-18 01:06:34 +0100ben_m(~ben_m@56.ip-51-38-127.eu) (Changing host)
2020-11-18 01:06:34 +0100ben_m(~ben_m@unaffiliated/ben-m/x-8385872)
2020-11-18 01:07:46 +0100lemald(~eddie@capybara.lemald.org) (Ping timeout: 246 seconds)
2020-11-18 01:10:04 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Read error: Connection reset by peer)
2020-11-18 01:10:10 +0100raehik1(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2020-11-18 01:14:03 +0100mbomba(~mbomba@bras-base-toroon2719w-grc-49-142-114-9-241.dsl.bell.ca)
2020-11-18 01:14:09 +0100gehmehgeh(~ircuser1@gateway/tor-sasl/gehmehgeh) (Quit: Leaving)
2020-11-18 01:15:31 +0100mputz(~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de) (Quit: mputz)
2020-11-18 01:15:56 +0100ericsagn1(~ericsagne@2405:6580:0:5100:1bc1:d518:fbf:6e25)
2020-11-18 01:20:04 +0100jedws(~jedws@101.184.175.183) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-18 01:21:52 +0100Nolar(~Nolar@185.163.110.116)
2020-11-18 01:24:38 +0100arw_(~arw@impulse.informatik.uni-erlangen.de)
2020-11-18 01:25:07 +0100AWizzArd_(~code@gehrels.uberspace.de)
2020-11-18 01:25:07 +0100w2gz(~do@159.89.11.133)
2020-11-18 01:25:37 +0100w1gz(~do@159.89.11.133) (Ping timeout: 260 seconds)
2020-11-18 01:25:37 +0100arw(~arw@impulse.informatik.uni-erlangen.de) (Ping timeout: 260 seconds)
2020-11-18 01:25:37 +0100AWizzArd(~code@unaffiliated/awizzard) (Ping timeout: 260 seconds)
2020-11-18 01:26:42 +0100mputz(~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de)
2020-11-18 01:26:49 +0100dxld(~dxld@80-109-136-248.cable.dynamic.surfer.at) (Quit: Bye)
2020-11-18 01:28:34 +0100daGrevis(~daGrevis@unaffiliated/dagrevis) (Ping timeout: 256 seconds)
2020-11-18 01:28:35 +0100dxld(~dxld@rush.pub.dxld.at)
2020-11-18 01:28:43 +0100daGrevis(~daGrevis@unaffiliated/dagrevis)
2020-11-18 01:29:07 +0100LKoen(~LKoen@9.253.88.92.rev.sfr.net) (Quit: “It’s only logical. First you learn to talk, then you learn to think. Too bad it’s not the other way round.”)
2020-11-18 01:29:17 +0100da39a3ee5e6b4b0d(~da39a3ee5@cm-171-98-78-149.revip7.asianet.co.th)
2020-11-18 01:31:23 +0100jb55(~jb55@gateway/tor-sasl/jb55) (Ping timeout: 240 seconds)
2020-11-18 01:31:48 +0100jb55(~jb55@gateway/tor-sasl/jb55)
2020-11-18 01:33:11 +0100mputz(~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de) (Quit: mputz)
2020-11-18 01:33:45 +0100jedws(~jedws@101.184.175.183)
2020-11-18 01:34:17 +0100hekkaidekapus_(~tchouri@gateway/tor-sasl/hekkaidekapus)
2020-11-18 01:34:41 +0100st8less(~st8less@2603:a060:11fd:0:68fe:5aed:dd91:2111) (Quit: WeeChat 2.7.1)
2020-11-18 01:34:57 +0100lemald(~eddie@capybara.lemald.org)
2020-11-18 01:36:03 +0100hekkaidekapus(~tchouri@gateway/tor-sasl/hekkaidekapus) (Ping timeout: 240 seconds)
2020-11-18 01:36:55 +0100fendor_(~fendor@77.119.128.218.wireless.dyn.drei.com)
2020-11-18 01:37:35 +0100carlomagno(~cararell@148.87.23.12)
2020-11-18 01:38:37 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:95c1:f982:82e4:2d79) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-18 01:39:49 +0100fendor(~fendor@178.115.128.157.wireless.dyn.drei.com) (Ping timeout: 264 seconds)
2020-11-18 01:40:13 +0100alp(~alp@2a01:e0a:58b:4920:ac08:1079:c3a9:84b6) (Remote host closed the connection)
2020-11-18 01:43:55 +0100shatriff(~vitaliish@176.52.219.10) (Remote host closed the connection)
2020-11-18 01:44:11 +0100shatriff(~vitaliish@176.52.219.10)
2020-11-18 01:44:13 +0100benjamingr__(uid23465@gateway/web/irccloud.com/x-hiupvfuftqbhepbs) (Quit: Connection closed for inactivity)
2020-11-18 01:44:41 +0100conal(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2020-11-18 01:44:43 +0100shatriff(~vitaliish@176.52.219.10) (Remote host closed the connection)
2020-11-18 01:45:00 +0100shatriff(~vitaliish@176.52.219.10)
2020-11-18 01:45:19 +0100ph88(~ph88@2a02:8109:9e00:7e5c:bc50:2174:75e6:7e22) (Ping timeout: 272 seconds)
2020-11-18 01:45:32 +0100shatriff(~vitaliish@176.52.219.10) (Remote host closed the connection)
2020-11-18 01:45:49 +0100shatriff(~vitaliish@176.52.219.10)
2020-11-18 01:46:18 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:95c1:f982:82e4:2d79)
2020-11-18 01:46:20 +0100shatriff(~vitaliish@176.52.219.10) (Remote host closed the connection)
2020-11-18 01:46:38 +0100shatriff(~vitaliish@176.52.219.10)
2020-11-18 01:47:08 +0100shatriff(~vitaliish@176.52.219.10) (Remote host closed the connection)
2020-11-18 01:49:31 +0100hackageFrames-streamly 0.1.0.1 - A streamly layer for Frames I/O https://hackage.haskell.org/package/Frames-streamly-0.1.0.1 (adamCS)
2020-11-18 01:52:29 +0100Aquazi(uid312403@gateway/web/irccloud.com/x-fwnbgopbizdwfbcr) (Quit: Connection closed for inactivity)
2020-11-18 01:52:29 +0100elfets(~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de) (Quit: Leaving)
2020-11-18 01:53:47 +0100 <koz_> When GHC describes a type variable as 'rigid', what does it mean exactly?
2020-11-18 01:58:22 +0100 <dolio> koz_: It means it can't be unified with any type but itself, basically.
2020-11-18 02:01:25 +0100dcoutts_(~duncan@33.14.75.194.dyn.plus.net) (Ping timeout: 240 seconds)
2020-11-18 02:06:15 +0100gentauro(~gentauro@unaffiliated/gentauro) (Read error: Connection reset by peer)
2020-11-18 02:06:42 +0100gentauro(~gentauro@unaffiliated/gentauro)
2020-11-18 02:07:40 +0100jedws(~jedws@101.184.175.183) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-18 02:08:10 +0100crdrost(~crdrost@c-98-207-102-156.hsd1.ca.comcast.net) (Quit: This computer has gone to sleep)
2020-11-18 02:09:13 +0100m0rphism(~m0rphism@HSI-KBW-095-208-098-207.hsi5.kabel-badenwuerttemberg.de) (Ping timeout: 264 seconds)
2020-11-18 02:09:39 +0100jedws(~jedws@101.184.175.183)
2020-11-18 02:21:28 +0100cole-h(~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) (Ping timeout: 260 seconds)
2020-11-18 02:21:42 +0100ManiacTwister(~Twister@2a01:4f8:171:4de::40:2) (Quit: Servus!)
2020-11-18 02:22:02 +0100pjb(~t@2a01cb04063ec5006d6abee34943d090.ipv6.abo.wanadoo.fr) (Ping timeout: 260 seconds)
2020-11-18 02:22:24 +0100ManiacTwister(~Twister@2a01:4f8:171:4de::40:2)
2020-11-18 02:22:38 +0100ddellacosta(dd@gateway/vpn/mullvad/ddellacosta) (Ping timeout: 260 seconds)
2020-11-18 02:23:50 +0100 <koz_> dolio: Ah.
2020-11-18 02:26:30 +0100 <jchia> Any general guidelines for making Arbitrary instances for my own types especially wrt orphaned instances?
2020-11-18 02:27:02 +0100 <dibblego> newtype or use hedgehog
2020-11-18 02:28:12 +0100falafel(~falafel@2601:547:1303:b30:7811:313f:d0f3:f9f4) (Ping timeout: 260 seconds)
2020-11-18 02:28:13 +0100Kaiepi(~Kaiepi@nwcsnbsc03w-47-55-225-82.dhcp-dynamic.fibreop.nb.bellaliant.net)
2020-11-18 02:28:15 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:95c1:f982:82e4:2d79) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-18 02:28:35 +0100Guest_87(b644cd01@182.68.205.1)
2020-11-18 02:28:37 +0100conal(~conal@64.71.133.70)
2020-11-18 02:31:58 +0100Lord_of_Life_(~Lord@46.217.217.18)
2020-11-18 02:33:05 +0100Lord_of_Life(~Lord@46.217.219.70) (Ping timeout: 240 seconds)
2020-11-18 02:33:25 +0100abrar(~abrar@static-108-30-103-121.nycmny.fios.verizon.net)
2020-11-18 02:34:09 +0100 <koz_> You can also avoid the need for Arbitrary if you just define 'Gen a' for your stuff, and use combinators like https://hackage.haskell.org/package/QuickCheck-2.14.2/docs/Test-QuickCheck.html#v:forAll
2020-11-18 02:34:22 +0100 <koz_> Or rather, define stuff like 'genFoo :: Gen Foo' and use those.
2020-11-18 02:34:45 +0100 <koz_> It's more tedious though.
2020-11-18 02:36:44 +0100Audentity(~Audentity@4e69b241.skybroadband.com) (Ping timeout: 272 seconds)
2020-11-18 02:40:22 +0100Audentity(~Audentity@4e69b241.skybroadband.com)
2020-11-18 02:44:07 +0100ddellacosta(dd@gateway/vpn/mullvad/ddellacosta)
2020-11-18 02:48:52 +0100thc202(~thc202@unaffiliated/thc202) (Ping timeout: 260 seconds)
2020-11-18 02:50:31 +0100hackageFrames-streamly 0.1.0.2 - A streamly layer for Frames I/O https://hackage.haskell.org/package/Frames-streamly-0.1.0.2 (adamCS)
2020-11-18 02:51:33 +0100drbean(~drbean@TC210-63-209-39.static.apol.com.tw)
2020-11-18 02:52:27 +0100 <Axman6> unclechu: ah sorry, I hadn't read all the history
2020-11-18 02:54:00 +0100Guest_87(b644cd01@182.68.205.1) (Remote host closed the connection)
2020-11-18 02:54:54 +0100dustypacer(~pi@2600:6c50:80:2f4a:e9d0:6569:1cea:d1d4)
2020-11-18 02:56:21 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-18 02:57:50 +0100Audentity(~Audentity@4e69b241.skybroadband.com) (Ping timeout: 260 seconds)
2020-11-18 03:01:09 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2020-11-18 03:01:27 +0100Audentity(~Audentity@4e69b241.skybroadband.com)
2020-11-18 03:09:23 +0100livvy(~livvy@gateway/tor-sasl/livvy) (Ping timeout: 240 seconds)
2020-11-18 03:11:43 +0100kotrcka(~peter@ip-94-112-194-11.net.upcbroadband.cz)
2020-11-18 03:11:47 +0100Entertainment(~entertain@104.246.132.210) ()
2020-11-18 03:13:51 +0100nuncanada(~dude@179.235.160.168) (Read error: Connection reset by peer)
2020-11-18 03:14:28 +0100raehik1(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 246 seconds)
2020-11-18 03:14:53 +0100raehik1(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2020-11-18 03:15:07 +0100Tario(~Tario@201.192.165.173) (Read error: Connection reset by peer)
2020-11-18 03:20:08 +0100alx741(~alx741@181.196.68.148) (Quit: alx741)
2020-11-18 03:21:05 +0100Audentity(~Audentity@4e69b241.skybroadband.com) (Ping timeout: 240 seconds)
2020-11-18 03:25:02 +0100Audentity(~Audentity@4e69b241.skybroadband.com)
2020-11-18 03:25:36 +0100solonarv(~solonarv@astrasbourg-653-1-156-155.w90-6.abo.wanadoo.fr) (Ping timeout: 240 seconds)
2020-11-18 03:26:01 +0100cr3(~cr3@192-222-143-195.qc.cable.ebox.net) (Ping timeout: 272 seconds)
2020-11-18 03:26:18 +0100raehik1(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 260 seconds)
2020-11-18 03:30:13 +0100toorevitimirp(~tooreviti@117.182.180.118)
2020-11-18 03:31:26 +0100ddellacosta(dd@gateway/vpn/mullvad/ddellacosta) (Ping timeout: 260 seconds)
2020-11-18 03:32:57 +0100guest1118(~user@49.5.6.87)
2020-11-18 03:33:15 +0100Deide(~Deide@217.155.19.23) (Quit: Seeee yaaaa)
2020-11-18 03:34:13 +0100jchia__(~jchia@58.32.37.146) (Quit: Leaving.)
2020-11-18 03:34:32 +0100jchia__(~jchia@58.32.37.146)
2020-11-18 03:34:47 +0100jchia__(~jchia@58.32.37.146) (Client Quit)
2020-11-18 03:34:56 +0100drbean(~drbean@TC210-63-209-39.static.apol.com.tw) (Ping timeout: 240 seconds)
2020-11-18 03:35:06 +0100jchia__(~jchia@58.32.37.146)
2020-11-18 03:35:21 +0100jchia__(~jchia@58.32.37.146) (Client Quit)
2020-11-18 03:35:41 +0100jchia__(~jchia@58.32.37.146)
2020-11-18 03:35:55 +0100jchia__(~jchia@58.32.37.146) (Client Quit)
2020-11-18 03:36:19 +0100jchia__(~jchia@58.32.37.146)
2020-11-18 03:36:29 +0100jchia__(~jchia@58.32.37.146) (Client Quit)
2020-11-18 03:39:01 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:95c1:f982:82e4:2d79)
2020-11-18 03:41:26 +0100xff0x(~fox@2001:1a81:52d5:6a00:7dc4:a65f:e69e:5679) (Ping timeout: 264 seconds)
2020-11-18 03:43:19 +0100xff0x(~fox@2001:1a81:5310:3c00:eddd:290e:8cac:b048)
2020-11-18 03:43:56 +0100da39a3ee5e6b4b0d(~da39a3ee5@cm-171-98-78-149.revip7.asianet.co.th) (Ping timeout: 240 seconds)
2020-11-18 03:44:26 +0100Tario(~Tario@garza.riseup.net)
2020-11-18 03:47:05 +0100wroathe_(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-11-18 03:47:45 +0100jedws(~jedws@101.184.175.183) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-18 03:48:13 +0100wroathe(~wroathe@c-73-24-27-54.hsd1.mn.comcast.net) (Ping timeout: 264 seconds)
2020-11-18 03:48:39 +0100jedws(~jedws@101.184.175.183)
2020-11-18 03:49:17 +0100wroathe_wroathe
2020-11-18 03:51:19 +0100Tario(~Tario@garza.riseup.net) (Read error: Connection reset by peer)
2020-11-18 03:51:29 +0100Tario(~Tario@201.192.165.173)
2020-11-18 03:53:50 +0100lucasb(uid333435@gateway/web/irccloud.com/x-gwvbkmucegxpihno) (Quit: Connection closed for inactivity)
2020-11-18 03:54:16 +0100Feuermagier(~Feuermagi@213.178.26.41) (Ping timeout: 256 seconds)
2020-11-18 03:54:20 +0100Stanley00(~stanley00@unaffiliated/stanley00)
2020-11-18 03:54:49 +0100urdh(~urdh@unaffiliated/urdh) (Ping timeout: 264 seconds)
2020-11-18 04:00:01 +0100Nolar(~Nolar@185.163.110.116) ()
2020-11-18 04:00:48 +0100jedws(~jedws@101.184.175.183) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-18 04:02:49 +0100Feuermagier(~Feuermagi@213.178.26.41)
2020-11-18 04:04:12 +0100boxscape(54a35f37@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.95.55)
2020-11-18 04:06:55 +0100urodna(~urodna@unaffiliated/urodna) (Quit: urodna)
2020-11-18 04:15:21 +0100bqv(~bqv@2a02:8010:674f:0:d65d:64ff:fe52:5efe) (Quit: WeeChat 2.9)
2020-11-18 04:17:05 +0100pjb(~t@2a01cb04063ec500fcb709f072569e15.ipv6.abo.wanadoo.fr)
2020-11-18 04:17:20 +0100da39a3ee5e6b4b0d(~da39a3ee5@cm-171-98-78-149.revip7.asianet.co.th)
2020-11-18 04:23:01 +0100zaquest(~notzaques@5.128.210.178) (Ping timeout: 264 seconds)
2020-11-18 04:32:39 +0100mbomba(~mbomba@bras-base-toroon2719w-grc-49-142-114-9-241.dsl.bell.ca) (Quit: WeeChat 3.0)
2020-11-18 04:35:01 +0100Audentity(~Audentity@4e69b241.skybroadband.com) (Ping timeout: 265 seconds)
2020-11-18 04:35:37 +0100zaquest(~notzaques@5.128.210.178)
2020-11-18 04:35:47 +0100wei2912(~wei2912@unaffiliated/wei2912)
2020-11-18 04:37:28 +0100kaeru(~kaeru@185.163.110.116) (Remote host closed the connection)
2020-11-18 04:38:12 +0100Audentity(~Audentity@4e69b241.skybroadband.com)
2020-11-18 04:43:37 +0100jedws(~jedws@101.184.175.183)
2020-11-18 04:46:09 +0100Tario(~Tario@201.192.165.173) (Read error: Connection reset by peer)
2020-11-18 04:46:23 +0100Tario(~Tario@201.192.165.173)
2020-11-18 04:46:30 +0100vacm(~vacwm@70.23.92.191) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-18 04:46:43 +0100lagothrix(~lagothrix@unaffiliated/lagothrix) (Killed (hitchcock.freenode.net (Nickname regained by services)))
2020-11-18 04:46:51 +0100lagothrix(~lagothrix@unaffiliated/lagothrix)
2020-11-18 04:50:27 +0100nados(~dan@69-165-210-185.cable.teksavvy.com) (Remote host closed the connection)
2020-11-18 04:50:49 +0100ystael(~ystael@209.6.50.55)
2020-11-18 04:50:55 +0100nados(~dan@69-165-210-185.cable.teksavvy.com)
2020-11-18 04:53:43 +0100theDon(~td@muedsl-82-207-238-136.citykom.de) (Ping timeout: 260 seconds)
2020-11-18 04:55:12 +0100theDon(~td@94.134.91.119)
2020-11-18 04:56:42 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-18 04:59:44 +0100cosimone(~cosimone@5.171.25.59) (Quit: cosimone)
2020-11-18 05:00:09 +0100da39a3ee5e6b4b0d(~da39a3ee5@cm-171-98-78-149.revip7.asianet.co.th) (Ping timeout: 256 seconds)
2020-11-18 05:00:10 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 246 seconds)
2020-11-18 05:00:38 +0100renzhi(~renzhi@2607:fa49:655f:e600::28da) (Ping timeout: 264 seconds)
2020-11-18 05:00:51 +0100g3762(~g3762@190.84.119.211)
2020-11-18 05:00:56 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2020-11-18 05:08:31 +0100johnw(~johnw@haskell/developer/johnw) (Read error: Connection reset by peer)
2020-11-18 05:08:50 +0100kotrcka(~peter@ip-94-112-194-11.net.upcbroadband.cz) (Quit: Konversation terminated!)
2020-11-18 05:09:08 +0100johnw(~johnw@haskell/developer/johnw)
2020-11-18 05:10:26 +0100g3762(~g3762@190.84.119.211) (Quit: Leaving)
2020-11-18 05:11:26 +0100ericsagn1(~ericsagne@2405:6580:0:5100:1bc1:d518:fbf:6e25) (Ping timeout: 264 seconds)
2020-11-18 05:11:32 +0100christo(~chris@81.96.113.213) (Remote host closed the connection)
2020-11-18 05:14:37 +0100Tario(~Tario@201.192.165.173) (Ping timeout: 264 seconds)
2020-11-18 05:16:27 +0100christo(~chris@81.96.113.213)
2020-11-18 05:20:45 +0100christo(~chris@81.96.113.213) (Ping timeout: 240 seconds)
2020-11-18 05:23:12 +0100ericsagn1(~ericsagne@2405:6580:0:5100:9e:a33:1504:d5f7)
2020-11-18 05:28:43 +0100ksamak(~ksamak@195.206.169.184)
2020-11-18 05:31:36 +0100cads(~cads@ip-64-72-99-232.lasvegas.net)
2020-11-18 05:31:47 +0100howdoi(uid224@gateway/web/irccloud.com/x-hhaciizupxxisicz) (Quit: Connection closed for inactivity)
2020-11-18 05:32:43 +0100jb55(~jb55@gateway/tor-sasl/jb55) (Ping timeout: 240 seconds)
2020-11-18 05:33:02 +0100acidjnk_new(~acidjnk@p200300d0c719ff874cf537f47d61e6af.dip0.t-ipconnect.de) (Ping timeout: 264 seconds)
2020-11-18 05:34:44 +0100jb55(~jb55@gateway/tor-sasl/jb55)
2020-11-18 05:44:12 +0100Audentity(~Audentity@4e69b241.skybroadband.com) (Ping timeout: 256 seconds)
2020-11-18 05:44:50 +0100da39a3ee5e6b4b0d(~da39a3ee5@cm-171-98-78-149.revip7.asianet.co.th)
2020-11-18 05:45:14 +0100Noldorin(~noldorin@unaffiliated/noldorin)
2020-11-18 05:46:10 +0100Noldorin(~noldorin@unaffiliated/noldorin) (Client Quit)
2020-11-18 05:48:11 +0100Audentity(~Audentity@4e69b241.skybroadband.com)
2020-11-18 05:50:34 +0100conal(~conal@64.71.133.70) (Read error: Connection reset by peer)
2020-11-18 06:00:22 +0100spake(~spake@84.39.117.57)
2020-11-18 06:01:17 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Remote host closed the connection)
2020-11-18 06:01:40 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-11-18 06:03:30 +0100hackagehyraxAbif 0.2.3.26 - Modules for parsing, generating and manipulating AB1 files. https://hackage.haskell.org/package/hyraxAbif-0.2.3.26 (andrevdm)
2020-11-18 06:10:00 +0100plutoniix(~q@ppp-27-55-83-124.revip3.asianet.co.th)
2020-11-18 06:10:41 +0100ericsagn1(~ericsagne@2405:6580:0:5100:9e:a33:1504:d5f7) (Ping timeout: 272 seconds)
2020-11-18 06:11:30 +0100hackagehyraxAbif 0.2.3.27 - Modules for parsing, generating and manipulating AB1 files. https://hackage.haskell.org/package/hyraxAbif-0.2.3.27 (andrevdm)
2020-11-18 06:15:13 +0100logicmoodmiles
2020-11-18 06:15:33 +0100texasmynsted(~texasmyns@212.102.45.118) (Ping timeout: 265 seconds)
2020-11-18 06:15:49 +0100da39a3ee5e6b4b0d(~da39a3ee5@cm-171-98-78-149.revip7.asianet.co.th) (Ping timeout: 264 seconds)
2020-11-18 06:18:15 +0100guest111`(~user@49.5.6.87)
2020-11-18 06:19:58 +0100boxscape(54a35f37@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.95.55) (Ping timeout: 246 seconds)
2020-11-18 06:20:50 +0100justanotheruser(~justanoth@unaffiliated/justanotheruser)
2020-11-18 06:22:42 +0100guest1118(~user@49.5.6.87) (Ping timeout: 260 seconds)
2020-11-18 06:23:01 +0100ericsagn1(~ericsagne@2405:6580:0:5100:eb39:3323:4fa4:f361)
2020-11-18 06:26:00 +0100day_(~Unknown@unaffiliated/day)
2020-11-18 06:27:24 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:95c1:f982:82e4:2d79) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-18 06:29:23 +0100day(~Unknown@unaffiliated/day) (Ping timeout: 260 seconds)
2020-11-18 06:29:24 +0100day_day
2020-11-18 06:34:31 +0100Sanchayan(~Sanchayan@106.201.35.233)
2020-11-18 06:43:45 +0100falafel(~falafel@2601:547:1303:b30:7811:313f:d0f3:f9f4)
2020-11-18 06:46:00 +0100guest111`(~user@49.5.6.87) (Ping timeout: 265 seconds)
2020-11-18 06:53:43 +0100larou(5eae2591@gateway/web/cgi-irc/kiwiirc.com/ip.94.174.37.145)
2020-11-18 06:53:53 +0100 <larou> hello!
2020-11-18 06:57:02 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-18 06:57:59 +0100 <larou> unclechu your looking for defunctionalisation
2020-11-18 06:58:26 +0100da39a3ee5e6b4b0d(~da39a3ee5@cm-171-98-78-149.revip7.asianet.co.th)
2020-11-18 07:00:01 +0100ksamak(~ksamak@195.206.169.184) ()
2020-11-18 07:00:27 +0100 <larou> <unclechu> it is still impossible in GHC to use higher-order type families? i mean that i can’t use partially applied type family as an argument for another type family
2020-11-18 07:00:30 +0100 <larou> yes you can
2020-11-18 07:00:33 +0100 <larou> defunctionalise it
2020-11-18 07:01:08 +0100 <larou> type level functions as first class citizens, modulo, defunctionalization
2020-11-18 07:01:41 +0100 <larou> then your type level map is easy
2020-11-18 07:01:55 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
2020-11-18 07:02:45 +0100 <larou> type family Map :: (f :: a ~> b) -> m a -> m b
2020-11-18 07:03:12 +0100 <larou> erg, Map :: (f a ~> b) -> m a -> m b
2020-11-18 07:03:29 +0100 <larou> Map :: (a ~> b) -> m a -> m b
2020-11-18 07:03:31 +0100 <larou> sorry
2020-11-18 07:05:08 +0100 <larou> type family Map (f :: a ~> b) (xs :: [] a) :: m b where Map _ '[] = '[]; Map f (x ': xs) = f @@ x ': Map f xs
2020-11-18 07:05:25 +0100 <larou> that @@ is because f :: a ~> b, not f :: a -> b
2020-11-18 07:06:51 +0100 <larou> https://pastebin.com/raw/U4Bd48Cq
2020-11-18 07:07:21 +0100 <larou> and you make type instances for Apply for defunctionalisation symbols
2020-11-18 07:07:44 +0100 <larou> that you want to apply using Map
2020-11-18 07:08:07 +0100 <larou> that is, for every ~> you use, in order to get something of that type, you have to "defunctionalise it"
2020-11-18 07:08:26 +0100 <larou> which consists of writing a datatype and making it an instance of apply
2020-11-18 07:09:00 +0100jedws(~jedws@101.184.175.183) (Remote host closed the connection)
2020-11-18 07:09:10 +0100 <larou> the type of the datatype you make has the same type signature as the type family you defunctionalising, except with ~> instead of ->
2020-11-18 07:09:25 +0100 <larou> and you need one extra symbol for each arrow you change
2020-11-18 07:09:36 +0100jedws(~jedws@101.184.175.183)
2020-11-18 07:09:55 +0100 <larou> the instance takes the function and its arguments, what it means to "Apply" the datatype
2020-11-18 07:10:30 +0100 <larou> and simply calls the type family, or another defunctionalisation symbol that has fewer ~>
2020-11-18 07:11:09 +0100 <larou> in order to build up all the symbols allowing apply to be chained over multiple inputs like f @@ x @@ y
2020-11-18 07:15:14 +0100 <unclechu> larou: thanks! i’ll dive into this later
2020-11-18 07:15:26 +0100zenzike(uid257060@gateway/web/irccloud.com/x-ekbwjbhyjbwovlhi) (Quit: Connection closed for inactivity)
2020-11-18 07:18:07 +0100falafel(~falafel@2601:547:1303:b30:7811:313f:d0f3:f9f4) (Ping timeout: 260 seconds)
2020-11-18 07:21:05 +0100Audentity(~Audentity@4e69b241.skybroadband.com) (Ping timeout: 240 seconds)
2020-11-18 07:24:52 +0100Audentity(~Audentity@4e69b241.skybroadband.com)
2020-11-18 07:29:35 +0100Sonderblade(~helloman@94.191.137.65.mobile.tre.se) (Quit: Konversation terminated!)
2020-11-18 07:30:30 +0100supercoven(~Supercove@dsl-hkibng31-54fae0-18.dhcp.inet.fi)
2020-11-18 07:31:49 +0100takuan(~takuan@178-116-218-225.access.telenet.be)
2020-11-18 07:32:54 +0100coot(~coot@37.30.49.253.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
2020-11-18 07:41:47 +0100hereEthereal(4913050a@c-73-19-5-10.hsd1.wa.comcast.net)
2020-11-18 07:43:55 +0100 <Axman6> @hoogle (@@)
2020-11-18 07:43:56 +0100 <lambdabot> Data.Singletons (
2020-11-18 07:43:56 +0100 <lambdabot> Data.Singletons type a
2020-11-18 07:43:56 +0100 <lambdabot> Diagrams.Angle (
2020-11-18 07:48:26 +0100benjamingr__(uid23465@gateway/web/irccloud.com/x-aztrejkfdpbhytuo)
2020-11-18 07:50:44 +0100danvet(~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa)
2020-11-18 07:53:43 +0100Audentity(~Audentity@4e69b241.skybroadband.com) (Ping timeout: 260 seconds)
2020-11-18 07:54:23 +0100PacoV(~pcoves@16.194.31.93.rev.sfr.net) (Quit: leaving)
2020-11-18 07:57:03 +0100Audentity(~Audentity@4e69b241.skybroadband.com)
2020-11-18 07:57:53 +0100forcer1(~forcer@s91904426.blix.com)
2020-11-18 08:00:11 +0100danvet_(~danvet@2a02:168:57f4:0:5f80:650d:c6e6:3453)
2020-11-18 08:05:14 +0100bitmagie(~Thunderbi@200116b806bfae005d76ad0c90a5d25b.dip.versatel-1u1.de)
2020-11-18 08:07:25 +0100Varis(~Tadas@unaffiliated/varis) (Remote host closed the connection)
2020-11-18 08:07:42 +0100plutoniix(~q@ppp-27-55-83-124.revip3.asianet.co.th) (Quit: Leaving)
2020-11-18 08:08:33 +0100bliminse(~bliminse@host109-156-197-211.range109-156.btcentralplus.com) (Ping timeout: 260 seconds)
2020-11-18 08:08:36 +0100da39a3ee5e6b4b0d(~da39a3ee5@cm-171-98-78-149.revip7.asianet.co.th) (Ping timeout: 240 seconds)
2020-11-18 08:09:00 +0100bliminse(~bliminse@host109-156-197-211.range109-156.btcentralplus.com)
2020-11-18 08:09:21 +0100bitmagie(~Thunderbi@200116b806bfae005d76ad0c90a5d25b.dip.versatel-1u1.de) (Client Quit)
2020-11-18 08:10:17 +0100Bigcheese(~quassel@unaffiliated/bigcheese) (Ping timeout: 260 seconds)
2020-11-18 08:10:36 +0100Rudd0(~Rudd0@185.189.115.98) (Ping timeout: 240 seconds)
2020-11-18 08:11:37 +0100rprije(~rprije@124.148.131.132) (Ping timeout: 264 seconds)
2020-11-18 08:12:08 +0100urdh(~urdh@unaffiliated/urdh)
2020-11-18 08:12:13 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2020-11-18 08:13:11 +0100Bigcheese(~quassel@unaffiliated/bigcheese)
2020-11-18 08:15:08 +0100cole-h(~cole-h@c-73-48-197-220.hsd1.ca.comcast.net)
2020-11-18 08:15:14 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-18 08:16:47 +0100sord937(~sord937@gateway/tor-sasl/sord937)
2020-11-18 08:19:16 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2020-11-18 08:20:10 +0100alp(~alp@2a01:e0a:58b:4920:f15e:f3ed:dd53:300e)
2020-11-18 08:20:39 +0100larou(5eae2591@gateway/web/cgi-irc/kiwiirc.com/ip.94.174.37.145) (Quit: Connection closed)
2020-11-18 08:24:01 +0100hackagesubG 0.2.1.0 - Some extension to the Foldable and Monoid classes. https://hackage.haskell.org/package/subG-0.2.1.0 (OleksandrZhabenko)
2020-11-18 08:28:26 +0100aplainzetakind(~johndoe@captainludd.powered.by.lunarbnc.net) (Ping timeout: 268 seconds)
2020-11-18 08:32:12 +0100bliminse(~bliminse@host109-156-197-211.range109-156.btcentralplus.com) (Quit: leaving)
2020-11-18 08:32:56 +0100codeAlways(uid272474@gateway/web/irccloud.com/x-gprgopjmphvaootv)
2020-11-18 08:33:40 +0100aplainzetakind(~johndoe@captainludd.powered.by.lunarbnc.net)
2020-11-18 08:34:45 +0100ajmcmiddlin(sid284402@gateway/web/irccloud.com/x-esnyudzmonhtpktj) (Ping timeout: 240 seconds)
2020-11-18 08:35:24 +0100ajmcmiddlin(sid284402@gateway/web/irccloud.com/x-rzusuwaofduhllmt)
2020-11-18 08:35:45 +0100bliminse(~bliminse@host109-156-197-211.range109-156.btcentralplus.com)
2020-11-18 08:41:19 +0100kritzefitz(~kritzefit@fw-front.credativ.com)
2020-11-18 08:44:26 +0100dragestil(~quassel@185.137.175.104)
2020-11-18 08:48:30 +0100dragestil(~quassel@185.137.175.104) (Client Quit)
2020-11-18 08:48:34 +0100 <dminuoso> koz_: A rigid type variable is one that is not wobbly...
2020-11-18 08:48:57 +0100 <dminuoso> https://www.microsoft.com/en-us/research/publication/wobbly-types-type-inference-for-generalised-a…
2020-11-18 08:54:03 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-18 08:54:43 +0100 <dminuoso> dolio: Also, are you sure about your characterization that a rigid will not unify with anything else? Does it not unify with a unificational variable?
2020-11-18 08:58:56 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds)
2020-11-18 09:01:22 +0100justanotheruser(~justanoth@unaffiliated/justanotheruser) (Ping timeout: 260 seconds)
2020-11-18 09:01:29 +0100jespada(~jespada@90.254.245.49) (Quit: Leaving)
2020-11-18 09:02:06 +0100jespada(~jespada@90.254.245.49)
2020-11-18 09:02:48 +0100chele(~chele@ip5b416ea2.dynamic.kabel-deutschland.de)
2020-11-18 09:12:15 +0100da39a3ee5e6b4b0d(~da39a3ee5@cm-171-98-78-149.revip7.asianet.co.th)
2020-11-18 09:12:47 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-11-18 09:14:51 +0100cfricke(~cfricke@unaffiliated/cfricke)
2020-11-18 09:15:40 +0100oish(~charlie@228.25.169.217.in-addr.arpa)
2020-11-18 09:16:41 +0100Aquazi(uid312403@gateway/web/irccloud.com/x-dkkwvspwitpqcrse)
2020-11-18 09:17:16 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 240 seconds)
2020-11-18 09:20:13 +0100chaosmasttter(~chaosmast@p200300c4a70b2a01fdbe436b20b9f284.dip0.t-ipconnect.de)
2020-11-18 09:21:11 +0100Varis(~Tadas@unaffiliated/varis)
2020-11-18 09:21:27 +0100mananamenos(~mananamen@84.122.202.215.dyn.user.ono.com)
2020-11-18 09:27:36 +0100dhouthoo(~dhouthoo@ptr-eiv6509pb4ifhdr9lsd.18120a2.ip6.access.telenet.be)
2020-11-18 09:28:40 +0100infinity0(~infinity0@freenet/developer/infinity0) (Remote host closed the connection)
2020-11-18 09:29:40 +0100coot(~coot@37.30.49.253.nat.umts.dynamic.t-mobile.pl)
2020-11-18 09:30:49 +0100infinity0(~infinity0@freenet/developer/infinity0)
2020-11-18 09:31:26 +0100guest111`(~user@49.5.6.87)
2020-11-18 09:33:33 +0100kuribas(~user@ptr-25vy0ia1gi47vc0v7ie.18120a2.ip6.access.telenet.be)
2020-11-18 09:37:25 +0100revprez_anzio(~revprez_a@pool-108-49-213-40.bstnma.fios.verizon.net) (Ping timeout: 264 seconds)
2020-11-18 09:37:49 +0100raichoo(~raichoo@dslb-178-001-021-225.178.001.pools.vodafone-ip.de)
2020-11-18 09:37:52 +0100revprez_anzio(~revprez_a@pool-108-49-213-40.bstnma.fios.verizon.net)
2020-11-18 09:37:53 +0100isacl___(uid13263@gateway/web/irccloud.com/x-yofapmbxdjxmgdaw)
2020-11-18 09:38:33 +0100britva(~britva@31-10-157-156.cgn.dynamic.upc.ch)
2020-11-18 09:41:07 +0100petersen(~petersen@redhat/juhp) (Quit: petersen)
2020-11-18 09:41:25 +0100Ariakenom(~Ariakenom@h-98-128-229-104.NA.cust.bahnhof.se)
2020-11-18 09:41:48 +0100petersen(~petersen@redhat/juhp)
2020-11-18 09:42:45 +0100coco(~coco@212-51-146-87.fiber7.init7.net) (Quit: WeeChat 2.9)
2020-11-18 09:45:34 +0100Yumasi(~guillaume@2a01cb09b06b29ea21daa97718c35c9f.ipv6.abo.wanadoo.fr)
2020-11-18 09:46:36 +0100cole-h(~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) (Ping timeout: 240 seconds)
2020-11-18 09:46:53 +0100britva(~britva@31-10-157-156.cgn.dynamic.upc.ch) (Quit: This computer has gone to sleep)
2020-11-18 09:49:07 +0100britva(~britva@31-10-157-156.cgn.dynamic.upc.ch)
2020-11-18 09:51:12 +0100oish(~charlie@228.25.169.217.in-addr.arpa) (Ping timeout: 272 seconds)
2020-11-18 09:51:58 +0100ridcully(~ridcully@p57b5259e.dip0.t-ipconnect.de) (Quit: update)
2020-11-18 09:53:00 +0100ridcully(~ridcully@p57b5259e.dip0.t-ipconnect.de)
2020-11-18 09:54:16 +0100Sgeo(~Sgeo@ool-18b982ad.dyn.optonline.net) (Read error: Connection reset by peer)
2020-11-18 09:54:32 +0100invaser(~Thunderbi@31.148.23.125)
2020-11-18 09:55:11 +0100borne(~fritjof@200116b864880600f1dc39039d201adf.dip.versatel-1u1.de)
2020-11-18 09:57:37 +0100thc202(~thc202@unaffiliated/thc202)
2020-11-18 09:58:40 +0100jakob_(~textual@dynamic-093-135-025-031.93.135.pool.telefonica.de)
2020-11-18 09:59:17 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-11-18 10:00:01 +0100forcer1(~forcer@s91904426.blix.com) ()
2020-11-18 10:00:15 +0100oish(~charlie@228.25.169.217.in-addr.arpa)
2020-11-18 10:00:31 +0100Boomerang(~Boomerang@xd520f68c.cust.hiper.dk)
2020-11-18 10:03:45 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds)
2020-11-18 10:06:16 +0100oish(~charlie@228.25.169.217.in-addr.arpa) (Ping timeout: 240 seconds)
2020-11-18 10:07:16 +0100is_null(~jpic@pdpc/supporter/professional/is-null) (Remote host closed the connection)
2020-11-18 10:07:40 +0100da39a3ee5e6b4b0d(~da39a3ee5@cm-171-98-78-149.revip7.asianet.co.th) (Ping timeout: 272 seconds)
2020-11-18 10:11:26 +0100ericsagn1(~ericsagne@2405:6580:0:5100:eb39:3323:4fa4:f361) (Ping timeout: 264 seconds)
2020-11-18 10:11:54 +0100acidjnk_new(~acidjnk@p200300d0c719ff876dbcfe4d3d96265f.dip0.t-ipconnect.de)
2020-11-18 10:14:06 +0100britva(~britva@31-10-157-156.cgn.dynamic.upc.ch) (Quit: This computer has gone to sleep)
2020-11-18 10:14:16 +0100nados(~dan@69-165-210-185.cable.teksavvy.com) (Ping timeout: 240 seconds)
2020-11-18 10:17:33 +0100britva(~britva@31-10-157-156.cgn.dynamic.upc.ch)
2020-11-18 10:23:14 +0100ericsagn1(~ericsagne@2405:6580:0:5100:bdf6:510e:2b42:888e)
2020-11-18 10:25:14 +0100a3Dman(~3Dman@unaffiliated/a3dman) (Ping timeout: 246 seconds)
2020-11-18 10:25:23 +0100christo(~chris@81.96.113.213)
2020-11-18 10:26:07 +0100DavidEichmann(~david@62.110.198.146.dyn.plus.net)
2020-11-18 10:29:06 +0100a3Dman(~3Dman@unaffiliated/a3dman)
2020-11-18 10:30:18 +0100kqr(~kqr@vps.xkqr.org) (Ping timeout: 256 seconds)
2020-11-18 10:32:04 +0100nh(~NextHendr@unaffiliated/nexthendrix) (Quit: ZNC 1.7.5+deb4 - https://znc.in)
2020-11-18 10:32:24 +0100nh(~NextHendr@finickitively.co.uk)
2020-11-18 10:32:48 +0100nhGuest8782
2020-11-18 10:32:54 +0100hnOsmium0001(uid453710@gateway/web/irccloud.com/x-eaonyjbsdauymoqz) (Quit: Connection closed for inactivity)
2020-11-18 10:35:46 +0100kqr(~kqr@vps.xkqr.org)
2020-11-18 10:35:51 +0100 <tomsmeding> funny how lambdabot apparently considers '@' to be the line end when reading from hoohle?
2020-11-18 10:35:56 +0100 <tomsmeding> *hoogle
2020-11-18 10:36:41 +0100jakob_(~textual@dynamic-093-135-025-031.93.135.pool.telefonica.de) (Quit: My Laptop has gone to sleep. ZZZzzz…)
2020-11-18 10:39:20 +0100ubert(~Thunderbi@p200300ecdf1e53c9e6b318fffe838f33.dip0.t-ipconnect.de)
2020-11-18 10:41:12 +0100zaquest(~notzaques@5.128.210.178) (Quit: Leaving)
2020-11-18 10:43:33 +0100jakob_(~textual@dynamic-093-135-025-031.93.135.pool.telefonica.de)
2020-11-18 10:43:38 +0100Axman6(~Axman6@pdpc/supporter/student/Axman6) (Read error: Connection reset by peer)
2020-11-18 10:43:42 +0100Axma80880(~Axman6@pdpc/supporter/student/Axman6)
2020-11-18 10:43:57 +0100zaquest(~notzaques@5.128.210.178)
2020-11-18 10:45:26 +0100gehmehgeh(~ircuser1@gateway/tor-sasl/gehmehgeh)
2020-11-18 10:46:42 +0100da39a3ee5e6b4b0d(~da39a3ee5@ppp-27-55-83-106.revip3.asianet.co.th)
2020-11-18 10:47:06 +0100phaazon(~phaazon@ns378376.ip-5-196-95.eu) (Quit: WeeChat 2.8)
2020-11-18 10:47:44 +0100jakob_(~textual@dynamic-093-135-025-031.93.135.pool.telefonica.de) (Client Quit)
2020-11-18 10:49:16 +0100Varis(~Tadas@unaffiliated/varis) (Remote host closed the connection)
2020-11-18 10:50:48 +0100phaazon(~phaazon@2001:41d0:a:fe76::1)
2020-11-18 10:50:54 +0100hereEthereal(4913050a@c-73-19-5-10.hsd1.wa.comcast.net) (Ping timeout: 245 seconds)
2020-11-18 10:51:41 +0100kritzefitz(~kritzefit@fw-front.credativ.com) (Remote host closed the connection)
2020-11-18 10:51:54 +0100jlamothe(~jlamothe@198.251.55.207) (Ping timeout: 256 seconds)
2020-11-18 10:53:02 +0100Axma80880Axman6
2020-11-18 10:54:12 +0100AWizzArd_AWizzArd
2020-11-18 10:54:26 +0100AWizzArd(~code@gehrels.uberspace.de) (Changing host)
2020-11-18 10:54:26 +0100AWizzArd(~code@unaffiliated/awizzard)
2020-11-18 10:55:26 +0100Fiver(~Fiver@s91904426.blix.com)
2020-11-18 10:56:12 +0100FreeBirdLjj(~freebirdl@101.228.42.108)
2020-11-18 10:56:20 +0100Guest8782(~NextHendr@finickitively.co.uk) (Changing host)
2020-11-18 10:56:20 +0100Guest8782(~NextHendr@unaffiliated/nexthendrix)
2020-11-18 10:56:21 +0100Guest8782nh
2020-11-18 10:57:56 +0100Varis(~Tadas@unaffiliated/varis)
2020-11-18 10:59:17 +0100jakob_(~textual@dynamic-093-135-025-031.93.135.pool.telefonica.de)
2020-11-18 11:00:25 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-11-18 11:01:06 +0100kritzefitz(~kritzefit@fw-front.credativ.com)
2020-11-18 11:01:30 +0100FreeBirdLjj(~freebirdl@101.228.42.108) (Ping timeout: 272 seconds)
2020-11-18 11:04:34 +0100Rudd0(~Rudd0@185.189.115.103)
2020-11-18 11:04:56 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds)
2020-11-18 11:06:15 +0100oish(~charlie@228.25.169.217.in-addr.arpa)
2020-11-18 11:08:56 +0100graf_blutwurst(~user@2001:171b:226e:adc0:bd9e:1b6a:d045:2128)
2020-11-18 11:09:05 +0100Franciman(~francesco@host-82-56-223-169.retail.telecomitalia.it)
2020-11-18 11:11:38 +0100wei2912(~wei2912@unaffiliated/wei2912) (Remote host closed the connection)
2020-11-18 11:13:25 +0100alp(~alp@2a01:e0a:58b:4920:f15e:f3ed:dd53:300e) (Ping timeout: 272 seconds)
2020-11-18 11:17:33 +0100da39a3ee5e6b4b0d(~da39a3ee5@ppp-27-55-83-106.revip3.asianet.co.th) (Ping timeout: 256 seconds)
2020-11-18 11:18:24 +0100guest111`(~user@49.5.6.87) (Quit: ERC (IRC client for Emacs 27.1))
2020-11-18 11:18:36 +0100christo(~chris@81.96.113.213) (Remote host closed the connection)
2020-11-18 11:21:55 +0100comerijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-18 11:22:33 +0100alp(~alp@2a01:e0a:58b:4920:6901:cad7:f91c:94b1)
2020-11-18 11:23:20 +0100bitmagie(~Thunderbi@200116b806bfae005d76ad0c90a5d25b.dip.versatel-1u1.de)
2020-11-18 11:23:27 +0100christo(~chris@81.96.113.213)
2020-11-18 11:25:08 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
2020-11-18 11:28:04 +0100bitmagie(~Thunderbi@200116b806bfae005d76ad0c90a5d25b.dip.versatel-1u1.de) (Client Quit)
2020-11-18 11:28:10 +0100christo(~chris@81.96.113.213) (Ping timeout: 256 seconds)
2020-11-18 11:40:13 +0100jonatanb(~jonatanb@83.24.155.27.ipv4.supernova.orange.pl)
2020-11-18 11:47:25 +0100cods(~fred@tuxee.net) (Ping timeout: 240 seconds)
2020-11-18 11:48:38 +0100cods(~fred@tuxee.net)
2020-11-18 11:49:22 +0100vicfred(~vicfred@unaffiliated/vicfred) (Quit: Leaving)
2020-11-18 11:53:34 +0100jakob_(~textual@dynamic-093-135-025-031.93.135.pool.telefonica.de) (Quit: My Laptop has gone to sleep. ZZZzzz…)
2020-11-18 11:56:43 +0100jakob_(~textual@dynamic-093-135-025-031.93.135.pool.telefonica.de)
2020-11-18 11:56:58 +0100__monty__(~toonn@unaffiliated/toonn)
2020-11-18 11:57:15 +0100isacl___(uid13263@gateway/web/irccloud.com/x-yofapmbxdjxmgdaw) (Quit: Connection closed for inactivity)
2020-11-18 12:01:00 +0100hackagesubG 0.3.0.0 - Some extension to the Foldable and Monoid classes. https://hackage.haskell.org/package/subG-0.3.0.0 (OleksandrZhabenko)
2020-11-18 12:01:27 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-11-18 12:01:37 +0100m0rphism(~m0rphism@HSI-KBW-095-208-098-207.hsi5.kabel-badenwuerttemberg.de)
2020-11-18 12:03:54 +0100CRTified[m](schnecfkru@gateway/shell/matrix.org/x-qudvjaxqzetifqrv)
2020-11-18 12:05:21 +0100denisse_(~spaceCat@gateway/tor-sasl/alephzer0)
2020-11-18 12:05:23 +0100denisse(~spaceCat@gateway/tor-sasl/alephzer0) (Ping timeout: 240 seconds)
2020-11-18 12:06:27 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 265 seconds)
2020-11-18 12:06:45 +0100LKoen(~LKoen@169.244.88.92.rev.sfr.net)
2020-11-18 12:07:53 +0100madog(~madog@163.ip-51-254-203.eu) (Quit: )
2020-11-18 12:09:05 +0100jokester_jokester
2020-11-18 12:09:07 +0100madog(~madog@163.ip-51-254-203.eu)
2020-11-18 12:09:19 +0100Sk01(~sky3@1aac.wls.metu.edu.tr)
2020-11-18 12:09:30 +0100hackagehttp-conduit-downloader 1.1.3 - HTTP downloader tailored for web-crawler needs. https://hackage.haskell.org/package/http-conduit-downloader-1.1.3 (VladimirShabanov)
2020-11-18 12:09:31 +0100jokester(~mono@unaffiliated/jokester) (Quit: WeeChat 2.9)
2020-11-18 12:11:19 +0100boxscape(54a35f37@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.95.55)
2020-11-18 12:15:40 +0100foursaph(~foursaph@dynamic-077-006-006-064.77.6.pool.telefonica.de)
2020-11-18 12:17:42 +0100Stanley00(~stanley00@unaffiliated/stanley00) (Remote host closed the connection)
2020-11-18 12:17:51 +0100jokester(~mono@unaffiliated/jokester)
2020-11-18 12:17:54 +0100solonarv(~solonarv@astrasbourg-653-1-156-155.w90-6.abo.wanadoo.fr)
2020-11-18 12:18:06 +0100da39a3ee5e6b4b0d(~da39a3ee5@ppp-223-24-153-25.revip6.asianet.co.th)
2020-11-18 12:20:16 +0100comerijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2020-11-18 12:22:00 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-18 12:29:38 +0100jchia__(~jchia@45.32.62.73)
2020-11-18 12:30:39 +0100jchia__(~jchia@45.32.62.73) (Remote host closed the connection)
2020-11-18 12:31:26 +0100jchia__(~jchia@45.32.62.73)
2020-11-18 12:32:27 +0100jchia__(~jchia@45.32.62.73) (Remote host closed the connection)
2020-11-18 12:33:32 +0100jchia__(~jchia@45.32.62.73)
2020-11-18 12:34:34 +0100jchia__(~jchia@45.32.62.73) (Remote host closed the connection)
2020-11-18 12:35:01 +0100jchia__(~jchia@45.32.62.73)
2020-11-18 12:36:03 +0100jchia__(~jchia@45.32.62.73) (Remote host closed the connection)
2020-11-18 12:36:38 +0100jchia__(~jchia@45.32.62.73)
2020-11-18 12:37:58 +0100jchia__(~jchia@45.32.62.73) (Remote host closed the connection)
2020-11-18 12:38:40 +0100solonarv(~solonarv@astrasbourg-653-1-156-155.w90-6.abo.wanadoo.fr) (Ping timeout: 246 seconds)
2020-11-18 12:39:03 +0100jchia__(~jchia@45.32.62.73)
2020-11-18 12:39:17 +0100ggole(~ggole@2001:8003:8119:7200:f828:bf:5160:1d23)
2020-11-18 12:40:17 +0100jchia__(~jchia@45.32.62.73) (Remote host closed the connection)
2020-11-18 12:40:35 +0100solonarv(~solonarv@astrasbourg-653-1-156-4.w90-6.abo.wanadoo.fr)
2020-11-18 12:41:09 +0100jchia__(~jchia@45.32.62.73)
2020-11-18 12:42:11 +0100jchia__(~jchia@45.32.62.73) (Remote host closed the connection)
2020-11-18 12:42:37 +0100jchia__(~jchia@45.32.62.73)
2020-11-18 12:45:55 +0100jchia__(~jchia@45.32.62.73) (Remote host closed the connection)
2020-11-18 12:46:51 +0100jchia__(~jchia@45.32.62.73)
2020-11-18 12:47:43 +0100Martinsos(~user@cpe-188-129-116-164.dynamic.amis.hr) (Ping timeout: 260 seconds)
2020-11-18 12:48:43 +0100jchia__(~jchia@45.32.62.73) (Remote host closed the connection)
2020-11-18 12:49:26 +0100jchia__(~jchia@45.32.62.73)
2020-11-18 12:50:29 +0100jchia__(~jchia@45.32.62.73) (Remote host closed the connection)
2020-11-18 12:50:51 +0100jchia__(~jchia@58.32.37.146)
2020-11-18 12:51:06 +0100chaosmasttter(~chaosmast@p200300c4a70b2a01fdbe436b20b9f284.dip0.t-ipconnect.de) (Quit: WeeChat 2.9)
2020-11-18 12:52:13 +0100alp(~alp@2a01:e0a:58b:4920:6901:cad7:f91c:94b1) (Ping timeout: 272 seconds)
2020-11-18 12:53:25 +0100da39a3ee5e6b4b0d(~da39a3ee5@ppp-223-24-153-25.revip6.asianet.co.th) (Ping timeout: 240 seconds)
2020-11-18 12:53:29 +0100Yumasi(~guillaume@2a01cb09b06b29ea21daa97718c35c9f.ipv6.abo.wanadoo.fr) (Ping timeout: 272 seconds)
2020-11-18 12:53:57 +0100 <boxscape> is there a way to make this type family work? Or alternatively, another way to construct and store a proof that one symbol is less than another? https://gist.github.com/JakobBruenker/7e9cae27d2e7d5ef0f9bf93a640a2a42
2020-11-18 12:54:56 +0100chaosmasttter(~chaosmast@p200300c4a70b2a01c0445547f28d17ad.dip0.t-ipconnect.de)
2020-11-18 12:56:00 +0100invaser(~Thunderbi@31.148.23.125) (Ping timeout: 256 seconds)
2020-11-18 12:57:26 +0100spake(~spake@84.39.117.57) (Remote host closed the connection)
2020-11-18 12:58:07 +0100kritzefitz_(~kritzefit@fw-front.credativ.com)
2020-11-18 12:58:17 +0100fendor_fendor
2020-11-18 12:58:36 +0100kritzefitz(~kritzefit@fw-front.credativ.com) (Ping timeout: 240 seconds)
2020-11-18 12:59:40 +0100 <nshepperd> at the type level? proofs have to be values
2020-11-18 13:00:01 +0100Fiver(~Fiver@s91904426.blix.com) ()
2020-11-18 13:00:09 +0100 <dminuoso> boxscape: https://hackage.haskell.org/package/constraints-0.12/docs/Data-Constraint.html#v:withDict
2020-11-18 13:00:51 +0100 <boxscape> I'll take a look at that, thanks
2020-11-18 13:02:32 +0100PacoV(~pcoves@16.194.31.93.rev.sfr.net)
2020-11-18 13:02:35 +0100 <PacoV> Hi.
2020-11-18 13:02:43 +0100 <boxscape> hi
2020-11-18 13:02:45 +0100 <dminuoso> Mmm, promoted gadts... what are these constraints even?
2020-11-18 13:02:54 +0100 <dminuoso> Does the kind system support constraints too?
2020-11-18 13:03:13 +0100 <boxscape> dminuoso I don't really think so but it's where my path led me
2020-11-18 13:03:32 +0100 <dminuoso> The diagnostic certainly reads strangely
2020-11-18 13:04:15 +0100 <dminuoso> boxscape: Im curious, what are you trying to do here? What is that tyfam supposed to be used for?
2020-11-18 13:05:03 +0100 <PacoV> I'm looking for someone who know the Hakyll library. I'd like to know if it's possible to use a url field to generate a route. I went to #hakyll but it's been dead for hours so I give here a shot.
2020-11-18 13:05:05 +0100 <nshepperd> i don't think promoted GADTs are really a thing
2020-11-18 13:05:36 +0100 <boxscape> dminuoso I'm trying to have an expression type that stores the free variables in that expression at the type level, in an ordered list. So if you combine two expressions, I take the union - and while trying to write that function I had to construct a new proof that one symbol is smaller than another
2020-11-18 13:06:01 +0100 <boxscape> dminuoso though in retrospect maybe I wouldn't be able to construct a type-level value of that type to begin with
2020-11-18 13:06:46 +0100 <dminuoso> % data Foo a where MkFoo Int -> Foo Int
2020-11-18 13:06:46 +0100 <yahb> dminuoso: ; <interactive>:186:24: error: parse error on input `Int'
2020-11-18 13:06:50 +0100 <dminuoso> % data Foo a where MkFoo :: Int -> Foo Int
2020-11-18 13:06:50 +0100 <yahb> dminuoso:
2020-11-18 13:07:18 +0100 <nshepperd> there's no type level equivalent of GADT case expressions so even if you could make that 'proof' it would be impossible to do anything useful with it
2020-11-18 13:07:36 +0100 <dminuoso> % type family TyF (s :: *) :: Foo s
2020-11-18 13:07:36 +0100 <yahb> dminuoso:
2020-11-18 13:07:43 +0100 <boxscape> RIght, that makes sense, I thought that a case expression is basically needed here
2020-11-18 13:07:45 +0100 <merijn> boxscape: RIP your sanity :p
2020-11-18 13:08:09 +0100 <dminuoso> % type instance TyF Int = MkFoo 1
2020-11-18 13:08:10 +0100 <yahb> dminuoso: ; <interactive>:191:31: error:; * Expected kind `Int', but `1' has kind `GHC.Types.Nat'; * In the first argument of `MkFoo', namely `1'; In the type `MkFoo 1'; In the type instance declaration for `TyF'
2020-11-18 13:08:11 +0100 <dminuoso> Mmm
2020-11-18 13:08:18 +0100 <dminuoso> % data Foo a where MkFoo :: Foo Int
2020-11-18 13:08:18 +0100 <yahb> dminuoso:
2020-11-18 13:08:23 +0100 <dminuoso> % type family TyF (s :: *) :: Foo s
2020-11-18 13:08:23 +0100 <yahb> dminuoso:
2020-11-18 13:08:26 +0100 <dminuoso> % type instance TyF Int = MkFoo
2020-11-18 13:08:26 +0100 <yahb> dminuoso:
2020-11-18 13:08:33 +0100 <boxscape> merijn mind you, I would never use haskell type level machinery I'm not allowed to just give up on at the moment :)
2020-11-18 13:08:47 +0100 <boxscape> for anything I'm not allowed *
2020-11-18 13:08:50 +0100 <dminuoso> nshepperd: At least its liftable...
2020-11-18 13:09:30 +0100 <boxscape> dminuoso is that even a GADS under the hood?
2020-11-18 13:09:36 +0100 <boxscape> GADT, rather
2020-11-18 13:09:45 +0100 <boxscape> or wait
2020-11-18 13:09:48 +0100 <boxscape> yes it is
2020-11-18 13:11:13 +0100 <boxscape> Hmmm maybe I could do it if I were to make my own type-level String type
2020-11-18 13:13:06 +0100bliminse(~bliminse@host109-156-197-211.range109-156.btcentralplus.com) (Remote host closed the connection)
2020-11-18 13:13:21 +0100bliminse(~bliminse@host109-156-197-211.range109-156.btcentralplus.com)
2020-11-18 13:13:37 +0100johnw(~johnw@haskell/developer/johnw) (Ping timeout: 260 seconds)
2020-11-18 13:15:38 +0100johnw(~johnw@haskell/developer/johnw)
2020-11-18 13:16:50 +0100Tario(~Tario@201.192.165.173)
2020-11-18 13:17:34 +0100da39a3ee5e6b4b0d(~da39a3ee5@cm-171-98-78-149.revip7.asianet.co.th)
2020-11-18 13:19:49 +0100Stanley00(~stanley00@unaffiliated/stanley00)
2020-11-18 13:26:42 +0100omega8cc(~omega8cc@185.204.1.185)
2020-11-18 13:27:40 +0100bliminse(~bliminse@host109-156-197-211.range109-156.btcentralplus.com) (Ping timeout: 246 seconds)
2020-11-18 13:28:17 +0100bliminse(~bliminse@host109-156-197-211.range109-156.btcentralplus.com)
2020-11-18 13:28:28 +0100 <boxscape> Is there an UnsafeCoerce for the type level?
2020-11-18 13:28:39 +0100Entertainment(~entertain@104.246.132.210)
2020-11-18 13:28:47 +0100jakob_(~textual@dynamic-093-135-025-031.93.135.pool.telefonica.de) (Quit: My Laptop has gone to sleep. ZZZzzz…)
2020-11-18 13:29:02 +0100shatriff(~vitaliish@176.52.219.10)
2020-11-18 13:29:07 +0100todda7(~torstein@2a02:587:d96:adb6:c7fc:9428:5ead:614f)
2020-11-18 13:29:17 +0100bliminse(~bliminse@host109-156-197-211.range109-156.btcentralplus.com) (Client Quit)
2020-11-18 13:29:56 +0100olligobber(olligobber@gateway/vpn/privateinternetaccess/olligobber) (Ping timeout: 240 seconds)
2020-11-18 13:36:42 +0100Tario(~Tario@201.192.165.173) (Read error: Connection reset by peer)
2020-11-18 13:41:31 +0100britva(~britva@31-10-157-156.cgn.dynamic.upc.ch) (Quit: This computer has gone to sleep)
2020-11-18 13:42:34 +0100vacm(~vacwm@70.23.92.191)
2020-11-18 13:44:02 +0100tomsmedingshudders
2020-11-18 13:45:37 +0100alp(~alp@2a01:e0a:58b:4920:c9d2:961b:b0f5:7405)
2020-11-18 13:46:07 +0100jakob_(~textual@dynamic-093-135-025-031.93.135.pool.telefonica.de)
2020-11-18 13:46:15 +0100vacm(~vacwm@70.23.92.191) (Client Quit)
2020-11-18 13:46:59 +0100Stanley00(~stanley00@unaffiliated/stanley00) ()
2020-11-18 13:48:51 +0100Tario(~Tario@201.192.165.173)
2020-11-18 13:49:23 +0100jakob_(~textual@dynamic-093-135-025-031.93.135.pool.telefonica.de) (Client Quit)
2020-11-18 13:49:47 +0100texasmynsted(~texasmyns@212.102.45.121)
2020-11-18 13:51:27 +0100invaser(~Thunderbi@31.148.23.125)
2020-11-18 13:54:39 +0100DavidEichmann(~david@62.110.198.146.dyn.plus.net) (Remote host closed the connection)
2020-11-18 13:55:40 +0100DavidEichmann(~david@62.110.198.146.dyn.plus.net)
2020-11-18 13:55:56 +0100servo(~servo@41.92.32.131) (Remote host closed the connection)
2020-11-18 13:55:57 +0100 <ziman> is there an (probably associated) type family that would give me the inner type of a newtype?
2020-11-18 13:57:57 +0100 <ziman> `Coercible` helps me only when I know the inner type already
2020-11-18 13:59:07 +0100 <idnar> which crc32 lib do I want?
2020-11-18 14:00:30 +0100 <idnar> ziman: https://hackage.haskell.org/package/lens-4.19.2/docs/Control-Lens-Wrapped.html#t:Unwrapped
2020-11-18 14:00:58 +0100 <ziman> oh, right, generics, thanks!
2020-11-18 14:01:17 +0100 <dminuoso> 13:28:28 boxscape | Is there an UnsafeCoerce for the type level?
2020-11-18 14:01:34 +0100 <dminuoso> You want what?
2020-11-18 14:02:05 +0100 <boxscape> I'm about 5% certain that it could help me out :)
2020-11-18 14:02:27 +0100da39a3ee5e6b4b0d(~da39a3ee5@cm-171-98-78-149.revip7.asianet.co.th) (Ping timeout: 256 seconds)
2020-11-18 14:02:28 +0100Uniaikacocks her musket
2020-11-18 14:03:26 +0100 <hc> idnar: depends on what you're trying to do
2020-11-18 14:04:13 +0100sis7_(~user@2001:15e8:110:473e::1) (Quit: sis7_)
2020-11-18 14:04:30 +0100hackagehaskoin-store 0.38.3 - Storage and index for Bitcoin and Bitcoin Cash https://hackage.haskell.org/package/haskoin-store-0.38.3 (jprupp)
2020-11-18 14:05:33 +0100britva(~britva@2a02:aa13:7240:2980:7da5:a1a0:c038:90b4)
2020-11-18 14:06:58 +0100 <hc> idnar: the zip library seems to be using the digest package ( https://hackage.haskell.org/package/digest )
2020-11-18 14:07:30 +0100 <idnar> hc: I'm implementing this madness: https://docs.kraken.com/websockets/#book-checksum
2020-11-18 14:08:12 +0100 <hc> ah okay, so you specifically need CRC32. Then I'd say what works for the best zip library available for haskell (afaict) might work for you as well :)
2020-11-18 14:08:18 +0100danvet_(~danvet@2a02:168:57f4:0:5f80:650d:c6e6:3453) (Quit: Leaving)
2020-11-18 14:10:00 +0100 <dminuoso> Wait.. CRC32 is used as a poor mans MAC_
2020-11-18 14:10:11 +0100 <dminuoso> That's gross.
2020-11-18 14:10:57 +0100britva(~britva@2a02:aa13:7240:2980:7da5:a1a0:c038:90b4) (Quit: This computer has gone to sleep)
2020-11-18 14:11:56 +0100 <idnar> dminuoso: it's more of an actual checksum
2020-11-18 14:13:10 +0100 <hc> dminuoso: "TLS with SNI (Server Name Indication) is required in order to establish a Kraken WebSockets API connection."
2020-11-18 14:13:17 +0100britva(~britva@2a02:aa13:7240:2980:7da5:a1a0:c038:90b4)
2020-11-18 14:13:28 +0100 <hc> I'd say one layer of transport security should be enough (though, arguably, tls might not be the best choice;=)
2020-11-18 14:14:22 +0100 <dminuoso> Im honestly a bit unsure what the CRC32 even helps with.
2020-11-18 14:14:30 +0100 <hc> nothing, afaict ;p
2020-11-18 14:15:01 +0100hackagesubG 0.4.0.0 - Some extension to the Foldable and Monoid classes. https://hackage.haskell.org/package/subG-0.4.0.0 (OleksandrZhabenko)
2020-11-18 14:17:24 +0100 <dminuoso> "to verify that your data is correct and up to date"
2020-11-18 14:17:46 +0100 <idnar> there's an incrementally updated data structure shared between server and client, this lets the client detect an incorrectly applied update
2020-11-18 14:17:46 +0100 <idnar> but this whole API is madness
2020-11-18 14:17:49 +0100 <dminuoso> If you feed the CRC32 with bad data, you still get a valid CRC hash...
2020-11-18 14:18:24 +0100 <dminuoso> So the only thing this seems to protect against, is a modification in transport. But like hc pointed out, TLS gives us the guarantee of no modification already.
2020-11-18 14:18:42 +0100thc202(~thc202@unaffiliated/thc202) (Ping timeout: 260 seconds)
2020-11-18 14:19:04 +0100 <dminuoso> 14:17:46 idnar | there's an incrementally updated data structure shared between server and client, this lets the client detect an incorrectly applied update
2020-11-18 14:19:06 +0100 <dminuoso> oh
2020-11-18 14:19:10 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca)
2020-11-18 14:19:13 +0100geekosaur(82659a09@host154-009.vpn.uakron.edu)
2020-11-18 14:19:16 +0100 <dminuoso> So this is a poor mans merkle tree?
2020-11-18 14:19:27 +0100 <dminuoso> With CRC32 instead of a cryptographic hash?
2020-11-18 14:19:35 +0100 <idnar> sort of
2020-11-18 14:19:42 +0100 <dminuoso> Shameful. They should just dub it "a blockchain" and make that much more money.
2020-11-18 14:19:49 +0100 <dminuoso> And trick investors
2020-11-18 14:19:52 +0100ericsagn1(~ericsagne@2405:6580:0:5100:bdf6:510e:2b42:888e) (Ping timeout: 260 seconds)
2020-11-18 14:19:59 +0100 <hc> lol, true
2020-11-18 14:20:21 +0100 <int-e> cyclic redundancy blockchain?
2020-11-18 14:20:22 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2020-11-18 14:20:55 +0100 <dminuoso> I mean to be absolutely fair, a merkle tree with CRC is a perfectly valid thing to do.
2020-11-18 14:21:08 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-11-18 14:21:12 +0100 <dminuoso> It just has a much larger attack surface.
2020-11-18 14:21:18 +0100__monty__(~toonn@unaffiliated/toonn) (Ping timeout: 265 seconds)
2020-11-18 14:21:26 +0100 <dminuoso> And it gives less guarantees
2020-11-18 14:21:51 +0100 <dminuoso> If you have a high volume/low latency situation, then it's possible a cryptographic hash might just be too expensive
2020-11-18 14:22:19 +0100Sk01(~sky3@1aac.wls.metu.edu.tr) (Quit: WeeChat 2.9)
2020-11-18 14:23:00 +0100 <int-e> secretly you've always wanted mutable Merkle trees
2020-11-18 14:23:27 +0100 <hc> =)
2020-11-18 14:23:35 +0100 <dminuoso> Oh boy. "mutable merkle trees"
2020-11-18 14:23:46 +0100 <dminuoso> int-e: Can I expect a publication from you about this? :>
2020-11-18 14:23:46 +0100 <hc> you might even sell it
2020-11-18 14:24:05 +0100 <hc> too bad the mit paper generator only lets you choose the authors, not title
2020-11-18 14:24:10 +0100 <dminuoso> https://github.com/EdgyEdgemond/mutable_merkle
2020-11-18 14:24:13 +0100 <dminuoso> Good lord. This already exists.
2020-11-18 14:24:32 +0100dminuososcratches his head
2020-11-18 14:25:15 +0100 <boxscape> hm, I think I can use the symbols library and 26 individual comparison cases (or 64 for upper and lower case + digits) to get a comparison type I can construct at the type level :)
2020-11-18 14:25:23 +0100 <boxscape> for symbols
2020-11-18 14:25:47 +0100da39a3ee5e6b4b0d(~da39a3ee5@cm-171-98-78-149.revip7.asianet.co.th)
2020-11-18 14:26:35 +0100 <int-e> dminuoso: that's just a persistent data structure, I think
2020-11-18 14:27:16 +0100 <int-e> (and every update changes the root hash (with high probability, blah), which is how it's supposed to work)
2020-11-18 14:27:24 +0100 <dminuoso> int-e: I think it's rather sort of like `git rebase -i`, where it just recalculates/resigns the entire tree
2020-11-18 14:27:58 +0100__monty__(~toonn@unaffiliated/toonn)
2020-11-18 14:28:12 +0100 <int-e> dminuoso: But it's a tree and you can still reuse the subtrees that haven't changed.
2020-11-18 14:28:47 +0100SanchayanMaity(~Sanchayan@106.201.35.233)
2020-11-18 14:28:55 +0100 <int-e> (though hmm, the structure has to be very rigid for this to work; so it will have rewrite the whole tree on occasion at least)
2020-11-18 14:29:05 +0100 <int-e> hve -> have to.
2020-11-18 14:29:15 +0100 <dminuoso> "sub-trees", you partial nodes from above
2020-11-18 14:29:23 +0100 <dminuoso> (or partial sub-trees above the mutation points)
2020-11-18 14:29:42 +0100 <dminuoso> which is pretty much what git rebase does
2020-11-18 14:30:16 +0100 <int-e> Oh, you're looking at the whole repo as a tree, not just the commit objects as a blockchain.
2020-11-18 14:30:20 +0100 <dminuoso> right
2020-11-18 14:30:44 +0100 <dminuoso> (so perhaps rather in the sense of a zipper)
2020-11-18 14:30:56 +0100SanchayanMaity(~Sanchayan@106.201.35.233) (Client Quit)
2020-11-18 14:30:57 +0100 <dminuoso> We could have zippers for merkle trees I guess
2020-11-18 14:31:04 +0100 <int-e> indeed
2020-11-18 14:31:25 +0100thc202(~thc202@unaffiliated/thc202)
2020-11-18 14:31:32 +0100 <dminuoso> It's an interesting thought. Coupled with lazyness, that could have some nice properties
2020-11-18 14:31:55 +0100ericsagn1(~ericsagne@2405:6580:0:5100:53e4:af5e:8890:d6d0)
2020-11-18 14:32:00 +0100 <dminuoso> Could lead to relatively cheap mutations, even closer to the root, if you dont need the hashes on all the leafs all the time
2020-11-18 14:32:14 +0100 <dminuoso> I dont just dont have any problems that require merkle trees, sadly
2020-11-18 14:32:34 +0100 <int-e> I really think the persistent data structure analogy is perfect. The property that is problematic is that they want to ensure that if they have the same key-value map, they also end up with the same root hash, which means they need to have the same underlying tree structure regardless of the history of insertions and deletion.
2020-11-18 14:33:01 +0100 <int-e> (or is it just keys? I didn't pay enough attention)
2020-11-18 14:33:45 +0100 <dminuoso> Well, if the hash differs, they wont have the same "ancestory"
2020-11-18 14:33:57 +0100 <dminuoso> Dunno if merkle trees exist in both directions
2020-11-18 14:34:10 +0100Axman6(~Axman6@pdpc/supporter/student/Axman6) (Remote host closed the connection)
2020-11-18 14:34:25 +0100Axman6(~Axman6@pdpc/supporter/student/Axman6)
2020-11-18 14:34:30 +0100 <dminuoso> (say where the root of the tree is the cumulative signing of all leafs, or in the other direction where the leafs are the cumulative signing of the entire path from the root)
2020-11-18 14:35:58 +0100 <dminuoso> oh wait, it's just the first
2020-11-18 14:36:02 +0100jakob_(~textual@dynamic-093-135-025-031.93.135.pool.telefonica.de)
2020-11-18 14:36:05 +0100 <int-e> Typeable is based on Merkle trees <-- can't remember seeing it put like that anywhere.
2020-11-18 14:36:09 +0100SanchayanMaity(~Sanchayan@106.201.35.233)
2020-11-18 14:37:13 +0100geekosaur(82659a09@host154-009.vpn.uakron.edu) (Remote host closed the connection)
2020-11-18 14:37:21 +0100Sanchayan(~Sanchayan@106.201.35.233) (Quit: leaving)
2020-11-18 14:38:04 +0100 <int-e> (It's not a pure Merkle tree in that there are several node types, and they have varying degree. And you never look at paths from the root, only at the root identity, so... it's not perfect.)
2020-11-18 14:38:22 +0100geekosaur(82659a09@host154-009.vpn.uakron.edu)
2020-11-18 14:39:04 +0100oish(~charlie@228.25.169.217.in-addr.arpa) (Ping timeout: 256 seconds)
2020-11-18 14:41:45 +0100Yumasi(~guillaume@2a01cb09b06b29ea21daa97718c35c9f.ipv6.abo.wanadoo.fr)
2020-11-18 14:43:07 +0100 <int-e> Hmm, if you make a perfectly size-balanced binary tree (L <= R <= L+1, where L is the size of the left child and R is the size of the right child) then insertions and deletions should take the usual O(log(n)) time, and you get the property that the tree shape is determined by the number of nodes. In other words, you *can* avoid having to update the whole tree for a single insertion or deletion.
2020-11-18 14:44:29 +0100vacm(~vacwm@70.23.92.191)
2020-11-18 14:44:34 +0100dcoutts_(~duncan@33.14.75.194.dyn.plus.net)
2020-11-18 14:44:50 +0100vacm(~vacwm@70.23.92.191) (Client Quit)
2020-11-18 14:46:25 +0100FreeBirdLjj(~freebirdl@101.228.42.108)
2020-11-18 14:46:31 +0100hackagezydiskell 0.1.0.0 - Haskell language binding for the Zydis library, a x86/x86-64 disassembler. https://hackage.haskell.org/package/zydiskell-0.1.0.0 (nerded)
2020-11-18 14:47:28 +0100alx741(~alx741@181.196.68.148)
2020-11-18 14:48:41 +0100bliminse(~bliminse@host109-156-197-211.range109-156.btcentralplus.com)
2020-11-18 14:50:27 +0100SanchayanMaity(~Sanchayan@106.201.35.233) (Quit: SanchayanMaity)
2020-11-18 14:50:34 +0100Sanchayan(~Sanchayan@106.201.35.233)
2020-11-18 14:51:05 +0100PacoV(~pcoves@16.194.31.93.rev.sfr.net) (Ping timeout: 240 seconds)
2020-11-18 14:51:16 +0100SanchayanMaity(~Sanchayan@106.201.35.233)
2020-11-18 14:52:06 +0100Sanchayan(~Sanchayan@106.201.35.233) (Client Quit)
2020-11-18 14:53:58 +0100urodna(~urodna@unaffiliated/urodna)
2020-11-18 14:56:21 +0100todda7(~torstein@2a02:587:d96:adb6:c7fc:9428:5ead:614f) (Ping timeout: 272 seconds)
2020-11-18 14:57:15 +0100Chi1thangoo(~Chi1thang@87.112.60.168)
2020-11-18 15:00:15 +0100dftxbs3e(~dftxbs3e@unaffiliated/dftxbs3e) (Remote host closed the connection)
2020-11-18 15:00:30 +0100Tario(~Tario@201.192.165.173) (Read error: Connection reset by peer)
2020-11-18 15:00:34 +0100LKoen(~LKoen@169.244.88.92.rev.sfr.net) (Quit: “It’s only logical. First you learn to talk, then you learn to think. Too bad it’s not the other way round.”)
2020-11-18 15:02:07 +0100dftxbs3e(~dftxbs3e@unaffiliated/dftxbs3e)
2020-11-18 15:03:29 +0100jlamothe(~jlamothe@198.251.55.207)
2020-11-18 15:03:30 +0100hackagegraphula-core 2.0.0.1 - A declarative library for describing dependencies between data https://hackage.haskell.org/package/graphula-core-2.0.0.1 (PatrickBrisbin)
2020-11-18 15:03:35 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-11-18 15:06:31 +0100rezajan(~rezajan@151.243.221.71)
2020-11-18 15:06:50 +0100rezajan(~rezajan@151.243.221.71) (Client Quit)
2020-11-18 15:08:13 +0100jb55(~jb55@gateway/tor-sasl/jb55) (Remote host closed the connection)
2020-11-18 15:08:35 +0100jakob_(~textual@dynamic-093-135-025-031.93.135.pool.telefonica.de) (Quit: My Laptop has gone to sleep. ZZZzzz…)
2020-11-18 15:08:36 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 256 seconds)
2020-11-18 15:08:38 +0100jb55(~jb55@gateway/tor-sasl/jb55)
2020-11-18 15:08:56 +0100supercoven(~Supercove@dsl-hkibng31-54fae0-18.dhcp.inet.fi) (Read error: Connection reset by peer)
2020-11-18 15:09:06 +0100pie_(~pie_bnc]@unaffiliated/pie-/x-0787662) (Ping timeout: 256 seconds)
2020-11-18 15:09:10 +0100vancz(~vancz@unaffiliated/vancz) (Ping timeout: 256 seconds)
2020-11-18 15:11:09 +0100haskellian(565d4710@86-93-71-16.fixed.kpn.net)
2020-11-18 15:11:16 +0100cosimone(~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd)
2020-11-18 15:11:25 +0100vancz(~vancz@unaffiliated/vancz)
2020-11-18 15:11:25 +0100pie_(~pie_bnc]@unaffiliated/pie-/x-0787662)
2020-11-18 15:11:44 +0100mirrorbird(~psutcliff@mail.stylishbroker.com)
2020-11-18 15:12:30 +0100brisbin(~patrick@pool-173-49-158-4.phlapa.fios.verizon.net) (Ping timeout: 256 seconds)
2020-11-18 15:13:27 +0100jakob_(~textual@dynamic-093-135-025-031.93.135.pool.telefonica.de)
2020-11-18 15:14:06 +0100brisbin(~patrick@199.66.179.204)
2020-11-18 15:17:30 +0100hackageflashblast 0.0.9.0 - Generate language learning flashcards from video. https://hackage.haskell.org/package/flashblast-0.0.9.0 (locallycompact)
2020-11-18 15:17:57 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-11-18 15:22:25 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 240 seconds)
2020-11-18 15:22:55 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:95c1:f982:82e4:2d79)
2020-11-18 15:26:04 +0100bitmapper(uid464869@gateway/web/irccloud.com/x-asjzblgwwtdcvjsz) (Quit: Connection closed for inactivity)
2020-11-18 15:30:16 +0100darjeeling_(~darjeelin@122.245.211.11) (Ping timeout: 240 seconds)
2020-11-18 15:31:01 +0100renzhi(~renzhi@2607:fa49:655f:e600::28da)
2020-11-18 15:35:09 +0100LKoen(~LKoen@169.244.88.92.rev.sfr.net)
2020-11-18 15:36:24 +0100oish(~charlie@228.25.169.217.in-addr.arpa)
2020-11-18 15:36:36 +0100dftxbs3e(~dftxbs3e@unaffiliated/dftxbs3e) (Remote host closed the connection)
2020-11-18 15:37:06 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:95c1:f982:82e4:2d79) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-18 15:37:08 +0100sqrt2_sqrt2
2020-11-18 15:43:03 +0100geekosaur(82659a09@host154-009.vpn.uakron.edu) (Remote host closed the connection)
2020-11-18 15:43:32 +0100acidjnk_new(~acidjnk@p200300d0c719ff876dbcfe4d3d96265f.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2020-11-18 15:46:19 +0100w2gzw1gz
2020-11-18 15:47:35 +0100cfricke(~cfricke@unaffiliated/cfricke) (Quit: WeeChat 2.9)
2020-11-18 15:50:22 +0100darjeeling_(~darjeelin@122.245.211.11)
2020-11-18 15:52:47 +0100haskellian(565d4710@86-93-71-16.fixed.kpn.net) (Remote host closed the connection)
2020-11-18 15:55:39 +0100oish(~charlie@228.25.169.217.in-addr.arpa) (Quit: leaving)
2020-11-18 15:55:59 +0100acidjnk_new(~acidjnk@p200300d0c719ff57608036dc958592ad.dip0.t-ipconnect.de)
2020-11-18 15:57:05 +0100dftxbs3e(~dftxbs3e@unaffiliated/dftxbs3e)
2020-11-18 16:00:02 +0100da39a3ee5e6b4b0d(~da39a3ee5@cm-171-98-78-149.revip7.asianet.co.th) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-18 16:00:04 +0100LKoen(~LKoen@169.244.88.92.rev.sfr.net) (Read error: Connection reset by peer)
2020-11-18 16:00:39 +0100LKoen(~LKoen@169.244.88.92.rev.sfr.net)
2020-11-18 16:04:45 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-11-18 16:09:49 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 264 seconds)
2020-11-18 16:11:08 +0100Sgeo(~Sgeo@ool-18b982ad.dyn.optonline.net)
2020-11-18 16:16:14 +0100jakob_(~textual@dynamic-093-135-025-031.93.135.pool.telefonica.de) (Quit: My Laptop has gone to sleep. ZZZzzz…)
2020-11-18 16:16:47 +0100roconnor(~roconnor@host-104-157-230-3.dyn.295.ca) (Ping timeout: 260 seconds)
2020-11-18 16:16:51 +0100jakob_(~textual@dynamic-093-135-025-031.93.135.pool.telefonica.de)
2020-11-18 16:18:21 +0100christo(~chris@81.96.113.213)
2020-11-18 16:18:41 +0100kuribas(~user@ptr-25vy0ia1gi47vc0v7ie.18120a2.ip6.access.telenet.be) (Ping timeout: 272 seconds)
2020-11-18 16:19:41 +0100Martinsos(~user@cpe-188-129-116-164.dynamic.amis.hr)
2020-11-18 16:20:55 +0100jakob_(~textual@dynamic-093-135-025-031.93.135.pool.telefonica.de) (Client Quit)
2020-11-18 16:22:39 +0100graf_blutwurst(~user@2001:171b:226e:adc0:bd9e:1b6a:d045:2128) (Remote host closed the connection)
2020-11-18 16:22:50 +0100mirrorbird_(~psutcliff@89.40.182.215)
2020-11-18 16:22:52 +0100toorevitimirp(~tooreviti@117.182.180.118) (Remote host closed the connection)
2020-11-18 16:23:50 +0100sszark(~sszark@h-213-180.A392.priv.bahnhof.se) (Quit: Lost terminal)
2020-11-18 16:24:56 +0100mirrorbird(~psutcliff@mail.stylishbroker.com) (Ping timeout: 240 seconds)
2020-11-18 16:25:49 +0100knupfer(~Thunderbi@200116b8244bd600704b43fffe5fc0ce.dip.versatel-1u1.de)
2020-11-18 16:25:51 +0100knupfer(~Thunderbi@200116b8244bd600704b43fffe5fc0ce.dip.versatel-1u1.de) (Client Quit)
2020-11-18 16:25:52 +0100borne(~fritjof@200116b864880600f1dc39039d201adf.dip.versatel-1u1.de) (Ping timeout: 260 seconds)
2020-11-18 16:26:03 +0100knupfer(~Thunderbi@200116b8244bd600953b9562e9fc25b9.dip.versatel-1u1.de)
2020-11-18 16:27:34 +0100nuncanada(~dude@179.235.160.168)
2020-11-18 16:28:54 +0100brisbin(~patrick@199.66.179.204) (Read error: Connection reset by peer)
2020-11-18 16:30:50 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-11-18 16:31:07 +0100acidjnk_new(~acidjnk@p200300d0c719ff57608036dc958592ad.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2020-11-18 16:31:56 +0100codeAlways(uid272474@gateway/web/irccloud.com/x-gprgopjmphvaootv) (Quit: Connection closed for inactivity)
2020-11-18 16:31:57 +0100roconnor(~roconnor@host-104-157-230-3.dyn.295.ca)
2020-11-18 16:34:26 +0100brisbin(~patrick@199.66.179.204)
2020-11-18 16:39:56 +0100christo(~chris@81.96.113.213) (Remote host closed the connection)
2020-11-18 16:40:56 +0100christo(~chris@81.96.113.213)
2020-11-18 16:41:24 +0100cr3(~cr3@192-222-143-195.qc.cable.ebox.net)
2020-11-18 16:43:24 +0100carlomagno(~cararell@148.87.23.12) (Remote host closed the connection)
2020-11-18 16:45:04 +0100 <dolio> dminuoso: No, but I think it's close enough. That kind of thing can never be absolutely the case in GHC's type checking, because it doesn't exactly work by 'unification'. A local constraint could always be introduced that allows you to solve an equation between a rigid variable and something else.
2020-11-18 16:45:42 +0100 <dolio> But it's much longer to say whatever is completely accurate, and is no better for intuition.
2020-11-18 16:47:26 +0100 <tomjaguarpaw> I'm confused what I'm supposed to do when my package has a library and an executable. The executable depends on the library, naturally, but if I put it in build-depends then cabal says The package has an extraneous version range for a dependency on an
2020-11-18 16:47:44 +0100 <tomjaguarpaw> internal library: packagename -any && ==0.0.0.0. ...
2020-11-18 16:47:51 +0100 <merijn> tomjaguarpaw: Yeah, ignore that
2020-11-18 16:47:57 +0100 <tomjaguarpaw> Oh OK
2020-11-18 16:48:15 +0100 <tomjaguarpaw> It's one of those, is it?
2020-11-18 16:48:37 +0100carlomagno(~cararell@148.87.23.12)
2020-11-18 16:48:54 +0100 <merijn> tomjaguarpaw: Essentially cabal now supports multiple libraries per package too, and one of the (planned, non-existent) features is to allow packages to depend on only *some* libraries of other packages
2020-11-18 16:48:55 +0100zephyz(~zephyz@4e69715d.skybroadband.com) (Quit: zephyz)
2020-11-18 16:49:32 +0100 <merijn> tomjaguarpaw: A weird interaction between code preparing for that future and the current "simply depending on a library in the same package" triggers that warning
2020-11-18 16:50:15 +0100bergey(~user@pool-74-108-99-127.nycmny.fios.verizon.net)
2020-11-18 16:50:46 +0100 <merijn> tomjaguarpaw: I think it's something like "the version is fixed by being in the same package, but other code is inferring it as a constraint and then later on those facts result in 'hey, this (inferred) constraint is extraneous!'"
2020-11-18 16:53:49 +0100omega8cc(~omega8cc@185.204.1.185) (Remote host closed the connection)
2020-11-18 16:53:52 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:1c60:9ba4:8bf9:ee34)
2020-11-18 16:56:03 +0100britva(~britva@2a02:aa13:7240:2980:7da5:a1a0:c038:90b4) (Quit: This computer has gone to sleep)
2020-11-18 16:56:22 +0100 <tomjaguarpaw> Aha, I see, two constraints from different places
2020-11-18 16:57:41 +0100raehik1(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2020-11-18 16:58:06 +0100nados(~dan@69-165-210-185.cable.teksavvy.com)
2020-11-18 17:01:54 +0100todda7(~torstein@ppp-2-84-17-169.home.otenet.gr)
2020-11-18 17:05:55 +0100 <merijn> Which cabal-install, btw? I think it might be fixed in one of the newest ones
2020-11-18 17:06:49 +0100 <merijn> 3.2 or 3.4 release candidate, but not 100% I remember that correctly
2020-11-18 17:08:07 +0100mastarija(~mastarija@93-136-96-155.adsl.net.t-com.hr)
2020-11-18 17:08:16 +0100ddellacosta(dd@gateway/vpn/mullvad/ddellacosta)
2020-11-18 17:10:24 +0100ph88(~ph88@ip5f5af6cd.dynamic.kabel-deutschland.de)
2020-11-18 17:11:02 +0100hekkaidekapus_hekkaidekapus
2020-11-18 17:11:40 +0100 <hekkaidekapus> merijn: It is not yet fixed, AFAIR. Paging fgaz ^^^
2020-11-18 17:11:49 +0100the-smug-one(~user@h188-122-129-70.cust.a3fiber.se)
2020-11-18 17:13:04 +0100luto1(~luto@84.39.117.57)
2020-11-18 17:14:02 +0100 <fgaz> multiple libraries? it pretty much works for source packages
2020-11-18 17:14:18 +0100dftxbs3e(~dftxbs3e@unaffiliated/dftxbs3e) (Remote host closed the connection)
2020-11-18 17:14:58 +0100kritzefitz_(~kritzefit@fw-front.credativ.com) (Remote host closed the connection)
2020-11-18 17:14:59 +0100 <merijn> fgaz: It was about the "extraneous constraint" warning when your executable depends on a library in the same package
2020-11-18 17:15:24 +0100 <hekkaidekapus> <https://github.com/haskell/cabal/issues/5119> and <https://github.com/haskell/cabal/issues/5660>
2020-11-18 17:16:07 +0100ClaudiusMaximus(~claude@198.123.199.146.dyn.plus.net)
2020-11-18 17:16:07 +0100ClaudiusMaximus(~claude@198.123.199.146.dyn.plus.net) (Changing host)
2020-11-18 17:16:07 +0100ClaudiusMaximus(~claude@unaffiliated/claudiusmaximus)
2020-11-18 17:16:24 +0100 <fgaz> hekkaidekapus: afaik those two tickets have nothing to do with each other
2020-11-18 17:17:01 +0100dftxbs3e(~dftxbs3e@unaffiliated/dftxbs3e)
2020-11-18 17:17:26 +0100 <hekkaidekapus> If an executable depends on a sublib and the warning is emitted, does that not relate to 5660?
2020-11-18 17:17:59 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-11-18 17:18:12 +0100 <fgaz> this also happens with the main library I think
2020-11-18 17:18:32 +0100 <fgaz> also 5660 refers to public sublibs
2020-11-18 17:18:46 +0100 <fgaz> that warning gets triggered on any sublib
2020-11-18 17:18:59 +0100 <the-smug-one> Hi, I solved a small toy problem for fun in Haskell and uploaded it to my website. It's very "explicit" (passing around state of visited vertices, etc.) and I want to know if there's obvious ways to make it more idiomatic. The link is here: https://jsjolen.github.io/#/structuraltyping the function is isSubtypeOf I'd really appreciate any eyes on it :-).
2020-11-18 17:19:00 +0100elfets(~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de)
2020-11-18 17:19:18 +0100 <hekkaidekapus> fgaz: Right. So, the discussion above was merely about 5119.
2020-11-18 17:19:30 +0100 <fgaz> According to one of the first comments in #5119, the cause was https://github.com/haskell/cabal/pull/4383
2020-11-18 17:20:46 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2020-11-18 17:20:58 +0100invaser(~Thunderbi@31.148.23.125) (Ping timeout: 260 seconds)
2020-11-18 17:22:45 +0100cads(~cads@ip-64-72-99-232.lasvegas.net) (Ping timeout: 240 seconds)
2020-11-18 17:24:47 +0100 <fgaz> merijn hekkaidekapus: I just read your messages more thoroughly, and yes, I see what you mean, sorry, it was indeed in preparation to public sublibraries
2020-11-18 17:25:24 +0100 <hekkaidekapus> No problem.
2020-11-18 17:25:27 +0100invaser(~Thunderbi@31.148.23.125)
2020-11-18 17:26:51 +0100 <hekkaidekapus> fgaz: I pinged you since you seem to have taken over A. Williams’s work on public sublibs (beside Oleg, of course).
2020-11-18 17:27:04 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-11-18 17:27:49 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2020-11-18 17:29:32 +0100mastarija(~mastarija@93-136-96-155.adsl.net.t-com.hr) (Quit: Leaving)
2020-11-18 17:29:50 +0100pavonia(~user@unaffiliated/siracusa) (Quit: Bye!)
2020-11-18 17:31:20 +0100mirrorb2rd(~psutcliff@89.40.182.152)
2020-11-18 17:31:24 +0100Tuplanolla(~Tuplanoll@91-159-68-239.elisa-laajakaista.fi)
2020-11-18 17:31:33 +0100ph88(~ph88@ip5f5af6cd.dynamic.kabel-deutschland.de) (Ping timeout: 256 seconds)
2020-11-18 17:32:00 +0100kritzefitz(~kritzefit@212.86.56.80)
2020-11-18 17:32:08 +0100p0a(~user@unaffiliated/p0a)
2020-11-18 17:32:20 +0100FreeBirdLjj(~freebirdl@101.228.42.108) (Remote host closed the connection)
2020-11-18 17:32:25 +0100 <p0a> Hello in f >>= g, is it guaranteed that all of the side effects of f will take effect before g's?
2020-11-18 17:32:55 +0100FreeBirdLjj(~freebirdl@101.228.42.108)
2020-11-18 17:33:41 +0100 <p0a> I'm looking at mapM magic (take 10 [1..]) >>= mapM_ print . takeWhile (< 18) where magic x = print x; return x*2, for example
2020-11-18 17:33:50 +0100 <tdammers> p0a: there are no side effects
2020-11-18 17:33:56 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds)
2020-11-18 17:33:56 +0100ph88(~ph88@ip5f5af6cd.dynamic.kabel-deutschland.de)
2020-11-18 17:34:00 +0100st8less(~st8less@2603:a060:11fd:0:d56c:a5ec:de50:ff91)
2020-11-18 17:34:05 +0100mirrorbird_(~psutcliff@89.40.182.215) (Ping timeout: 240 seconds)
2020-11-18 17:34:36 +0100 <int-e> ordering of effects (if any) depends on the monad
2020-11-18 17:34:55 +0100 <int-e> In IO, effects of f will happen before effects of g, with the exception of lazy IO.
2020-11-18 17:35:09 +0100 <tdammers> there is some kind of implied ordering to >>=, but it's a bit more subtle than "happens before/after"
2020-11-18 17:35:26 +0100 <int-e> so your code will print 1..10, then 2,4..16.
2020-11-18 17:35:31 +0100 <p0a> Why is my example not lazy?
2020-11-18 17:36:05 +0100 <tdammers> it could be lazy, depending on how `magic` is implemented
2020-11-18 17:36:30 +0100 <p0a> Why is this magic not lazy then?
2020-11-18 17:36:42 +0100 <tdammers> why do you think it's not?
2020-11-18 17:36:56 +0100 <int-e> It is lazy. It returns an IO value. It has no effect by itself.
2020-11-18 17:37:29 +0100 <tdammers> it could return an IO value that specifies a lazy-IO operation though
2020-11-18 17:37:32 +0100FreeBirdLjj(~freebirdl@101.228.42.108) (Ping timeout: 265 seconds)
2020-11-18 17:37:34 +0100 <int-e> The effects happen when an IO value is run... either from the main function or from another Haskell thread. And that execution sequentializes IO effects.
2020-11-18 17:37:38 +0100 <tdammers> (lazy IO /= lazy evaluation!)
2020-11-18 17:38:19 +0100 <Ariakenom> lazy IO isnt different from threads in that sense
2020-11-18 17:38:23 +0100 <int-e> lazy IO is based on a dirty hack that suspends an IO action to be run when its result is needed
2020-11-18 17:38:46 +0100 <int-e> :t System.IO.Unsafe.unsafeInterleaveIO
2020-11-18 17:38:47 +0100 <lambdabot> IO a -> IO a
2020-11-18 17:39:02 +0100 <Ariakenom> so its not important to bring up as an exception
2020-11-18 17:39:03 +0100nuncanada(~dude@179.235.160.168) (Ping timeout: 260 seconds)
2020-11-18 17:39:07 +0100 <p0a> AH, I thought Lazy IO dependent on lazy evaluation or something like that
2020-11-18 17:39:10 +0100 <tdammers> my point is that "lazy IO" and an expression being lazy are two different and somewhat unrelated things
2020-11-18 17:39:23 +0100 <p0a> depended*
2020-11-18 17:39:43 +0100 <p0a> it's a good point tdammers, I didn't know that
2020-11-18 17:39:53 +0100 <int-e> p0a: Oh, it does. Lazy evaluation provides a mechanism to detect when a value is needed.
2020-11-18 17:40:09 +0100 <tdammers> ^ yeah, this is how they are related, hence "somewhat" unrelated
2020-11-18 17:40:23 +0100 <p0a> int-e: so the hack is the suspension?
2020-11-18 17:40:29 +0100 <int-e> yes
2020-11-18 17:40:51 +0100 <tdammers> without lazy evaluation, lazy IO would be completely transparent, because the value would be demanded immediately, and the "suspension" mechanism used in lazy IO would be undone straight away
2020-11-18 17:41:02 +0100 <p0a> lazy IO is not visible in the type system though, right?
2020-11-18 17:41:07 +0100 <tdammers> nope
2020-11-18 17:41:14 +0100 <tdammers> :t Data.Text.readFile
2020-11-18 17:41:16 +0100 <lambdabot> error:
2020-11-18 17:41:16 +0100 <lambdabot> Not in scope: ‘Data.Text.readFile’
2020-11-18 17:41:16 +0100 <lambdabot> No module named ‘Data.Text’ is imported.
2020-11-18 17:41:28 +0100justanotheruser(~justanoth@unaffiliated/justanotheruser)
2020-11-18 17:41:29 +0100 <tdammers> @let import qualified Data.Text.IO
2020-11-18 17:41:31 +0100 <lambdabot> Defined.
2020-11-18 17:41:34 +0100 <tdammers> @let import qualified Data.Text.Lazy.IO
2020-11-18 17:41:36 +0100 <lambdabot> Defined.
2020-11-18 17:41:40 +0100 <tdammers> :t Data.Text.IO.readFile
2020-11-18 17:41:41 +0100 <lambdabot> FilePath -> IO Data.Text.Internal.Text
2020-11-18 17:41:48 +0100 <tdammers> :t Data.Text.Lazy.IO.readFile
2020-11-18 17:41:49 +0100 <lambdabot> FilePath -> IO Data.Text.Internal.Lazy.Text
2020-11-18 17:41:49 +0100 <int-e> :t T.readFile
2020-11-18 17:41:50 +0100 <lambdabot> error:
2020-11-18 17:41:50 +0100 <lambdabot> Not in scope: ‘T.readFile’
2020-11-18 17:41:50 +0100 <lambdabot> Perhaps you meant one of these:
2020-11-18 17:41:56 +0100lagothrix(~lagothrix@unaffiliated/lagothrix) (Ping timeout: 240 seconds)
2020-11-18 17:41:57 +0100mananamenos_(~mananamen@84.122.202.215.dyn.user.ono.com)
2020-11-18 17:42:09 +0100 <Ariakenom> lazy IO is not popular, recommended or important. although I think its interesting and I've used it for some things
2020-11-18 17:42:30 +0100 <tdammers> it is important to know that it exists, because you can easily cause some surprising and subtle bugs with it
2020-11-18 17:42:31 +0100hackagephonetic-languages-general 0.3.0.0 - A generalization of the uniqueness-periods-vector-general functionality. https://hackage.haskell.org/package/phonetic-languages-general-0.3.0.0 (OleksandrZhabenko)
2020-11-18 17:42:41 +0100 <p0a> I'm trying to learn a bit on conduit
2020-11-18 17:42:53 +0100 <int-e> @where L.hs
2020-11-18 17:42:53 +0100 <lambdabot> what lambdabot has in scope is at https://silicon.int-e.eu/lambdabot/State/Pristine.hs
2020-11-18 17:43:48 +0100 <int-e> . o O ( nobody needs text )
2020-11-18 17:44:23 +0100 <dminuoso> lazy IO tends to be useful for short "Im writing a 30 lines one-off program"
2020-11-18 17:44:29 +0100sfvm(~sfvm@37.228.215.148)
2020-11-18 17:44:40 +0100 <dminuoso> Especially when all you want is in base, so you dont even need cabal to get access to conduit and friends
2020-11-18 17:44:53 +0100mananamenos(~mananamen@84.122.202.215.dyn.user.ono.com) (Ping timeout: 260 seconds)
2020-11-18 17:44:59 +0100 <p0a> ah I know, it's mapM that guarantees the sequence
2020-11-18 17:45:11 +0100 <p0a> That's what makes it print 1..10 before going to the doubles
2020-11-18 17:45:29 +0100 <int-e> . o O ( And lazy IO is terrible if you want to read the first 100 bytes of all files in your home directory. )
2020-11-18 17:46:12 +0100 <int-e> (it's a good way to run out of file descriptors)
2020-11-18 17:46:36 +0100 <p0a> hehe maybe the kernel is lazy too int-e
2020-11-18 17:46:50 +0100 <Ariakenom> dminuoso: yeah, like the upcoming #adventofcode
2020-11-18 17:47:46 +0100 <dminuoso> Ariakenom: Right. If you want to beat those "solution within 30 seconds" folks, then you can't afford to spend a second on creating a cabal project or managing build-depends.
2020-11-18 17:48:38 +0100cole-h(~cole-h@c-73-48-197-220.hsd1.ca.comcast.net)
2020-11-18 17:48:43 +0100 <int-e> main = interact $ ... is the way to go for rapid one-time-tool development ;)
2020-11-18 17:49:18 +0100 <Ariakenom> int-e: indeed. the beginning of almost all of my advent coding
2020-11-18 17:49:32 +0100justsomeguy(~justsomeg@216.186.218.241)
2020-11-18 17:49:32 +0100justsomeguy(~justsomeg@216.186.218.241) (Changing host)
2020-11-18 17:49:32 +0100justsomeguy(~justsomeg@unaffiliated/--/x-3805311)
2020-11-18 17:50:01 +0100adamwespiser(~adamwespi@107.181.19.30)
2020-11-18 17:50:09 +0100 <int-e> Ariakenom: right... main = interact $ unlines . return . show . solve . lines
2020-11-18 17:50:42 +0100 <Ariakenom> ex. interact (show.sum.map read.map words)
2020-11-18 17:50:43 +0100 <int-e> Ariakenom: (most common `main` from my AoC solutions last year)
2020-11-18 17:51:00 +0100 <int-e> s/map//
2020-11-18 17:51:03 +0100 <int-e> err
2020-11-18 17:51:07 +0100 <int-e> the second, not the first
2020-11-18 17:51:31 +0100 <int-e> And not having spaces around . is ugly.
2020-11-18 17:51:36 +0100 <boxscape> Do all haskell packages that are used within a project have to be compiled with the same version of ghc? More specifically, I was wondering if the cached nix haskell binaries are separate for each ghc version
2020-11-18 17:51:41 +0100 <Ariakenom> for me not because its fast but because its easy dminuoso
2020-11-18 17:51:55 +0100 <Ariakenom> int-e: both true
2020-11-18 17:51:57 +0100lagothrix(~lagothrix@unaffiliated/lagothrix)
2020-11-18 17:52:27 +0100 <int-e> (I don't feel strongly about $ ... vs. (...))
2020-11-18 17:53:08 +0100 <boxscape> With multiline expressions I strongly prefer $
2020-11-18 17:53:32 +0100 <tdammers> not having spaces around . isn't just ugly, it's also a potential source of bugs
2020-11-18 17:54:01 +0100britva(~britva@2a02:aa13:7240:2980:7da5:a1a0:c038:90b4)
2020-11-18 17:54:08 +0100 <hekkaidekapus> (Which will be disallowed in future GHC releases.)
2020-11-18 17:54:11 +0100 <dminuoso> boxscape: Yes
2020-11-18 17:54:14 +0100 <tdammers> because foo.bar parses as "foo compose bar", but Foo.bar parses as "identifier bar in namespace Foo"
2020-11-18 17:54:17 +0100 <maralorn> boxscape: Yes and yes
2020-11-18 17:54:21 +0100 <dminuoso> boxscape: The ABI is unstable
2020-11-18 17:54:22 +0100 <boxscape> okay, thanks
2020-11-18 17:54:27 +0100 <int-e> Ariakenom: https://paste.debian.net/1173010/ :-)
2020-11-18 17:54:28 +0100britva(~britva@2a02:aa13:7240:2980:7da5:a1a0:c038:90b4) (Client Quit)
2020-11-18 17:54:47 +0100 <texasmynsted> This might be bike-shedding but I have created haskell templates and noticed that sometimes I have the main files start with a capital and sometimes with a lower case character.
2020-11-18 17:54:57 +0100 <dminuoso> boxscape: You can find some of the reasons here https://wiki.haskell.org/Shared_libraries_and_GHC
2020-11-18 17:55:05 +0100 <maralorn> And even if the former wouldn‘t be true in some specific circumstances, the later i.e. nix builds would probably always depend on the used ghc version.
2020-11-18 17:55:06 +0100 <boxscape> thanks
2020-11-18 17:55:16 +0100Yumasi(~guillaume@2a01cb09b06b29ea21daa97718c35c9f.ipv6.abo.wanadoo.fr) (Read error: Connection reset by peer)
2020-11-18 17:55:22 +0100 <texasmynsted> The modules are always stared with an upper case. What is more common?
2020-11-18 17:55:31 +0100jwynn6(~jwynn6@050-088-122-078.res.spectrum.com)
2020-11-18 17:55:35 +0100alp(~alp@2a01:e0a:58b:4920:c9d2:961b:b0f5:7405) (Ping timeout: 272 seconds)
2020-11-18 17:55:45 +0100 <texasmynsted> and why?
2020-11-18 17:55:57 +0100 <dminuoso> texasmynsted: It's more common that the files/directories follow the casing used in the modules.
2020-11-18 17:56:06 +0100 <hekkaidekapus> tdammers: foo.bar might also mean field bar of record bar in RecordDotStuff…
2020-11-18 17:56:15 +0100 <dminuoso> I cant speak for why people do it, perhaps its just consistency
2020-11-18 17:56:31 +0100 <texasmynsted> So start with an upper case character then?
2020-11-18 17:56:36 +0100 <p0a> texasmynsted: afiak there's OSes where capital and lowercase make no difference, and it was even proposed for the linux kernel
2020-11-18 17:56:45 +0100 <p0a> talking about filenames
2020-11-18 17:56:58 +0100 <texasmynsted> I am talking specifically about file names.
2020-11-18 17:56:59 +0100 <tdammers> I like to use lowercase filenames for main, to emphasize the fact that they are not intended to be imported
2020-11-18 17:57:13 +0100 <sm[m]> I thought all files except the main one had to be capitalised, like the module name
2020-11-18 17:57:21 +0100 <dolio> That depends on the filesystem, not the OS.
2020-11-18 17:57:22 +0100hnOsmium0001(uid453710@gateway/web/irccloud.com/x-rpvaqdolaahudqno)
2020-11-18 17:57:23 +0100 <texasmynsted> tdammers: Ah perfect! Thank you.
2020-11-18 17:57:25 +0100LKoen(~LKoen@169.244.88.92.rev.sfr.net) (Remote host closed the connection)
2020-11-18 17:57:30 +0100 <sm[m]> except on case-vague filesystems, of course
2020-11-18 17:57:34 +0100 <p0a> dolio: thanks, I misspoke
2020-11-18 17:58:15 +0100 <texasmynsted> I care more that I write the file name deliberately rather than care how the filesystem sees it.
2020-11-18 17:58:22 +0100 <Ariakenom> int-e: return!? let me show my reaction with a smiley (:[])
2020-11-18 17:58:51 +0100 <int-e> Ariakenom: I expected you to suggest `pure`
2020-11-18 17:58:56 +0100 <Ariakenom> but that's very consistent :D
2020-11-18 17:59:08 +0100 <Ariakenom> yeah but the smiley is funnier
2020-11-18 17:59:19 +0100 <texasmynsted> tdammers: So is your test suite main file also lower case for the same reason?
2020-11-18 17:59:26 +0100 <sm[m]> texasmynsted: capitalise all files except main ones
2020-11-18 17:59:30 +0100 <int-e> Ariakenom: it's hard to type :P
2020-11-18 17:59:48 +0100 <maerwald> I saw a job posting of a company transitioning from haskell to Go... it made me wonder what happened there. :D
2020-11-18 17:59:50 +0100 <int-e> while `return` vs. `pure` is a sign of age
2020-11-18 18:00:04 +0100 <texasmynsted> Okay then the same would go for test "main" files.
2020-11-18 18:00:12 +0100 <sm[m]> yep
2020-11-18 18:00:16 +0100 <texasmynsted> :-)
2020-11-18 18:00:17 +0100 <texasmynsted> Thank you.
2020-11-18 18:00:23 +0100 <sm[m]> if you look at projects you'll see that's the pattern
2020-11-18 18:00:45 +0100 <tdammers> int-e: I oscillate back and forth between religiously using 'pure' and consistently using 'return' for things that are monads and reserving 'pure' for non-monad functors
2020-11-18 18:01:07 +0100Yumasi(~guillaume@2a01cb09b06b29ea21daa97718c35c9f.ipv6.abo.wanadoo.fr)
2020-11-18 18:01:14 +0100 <p0a> I think allowing for bugs is a feature that helps prop development, which may explain why some shy away from haskell
2020-11-18 18:01:25 +0100 <p0a> not that haskell code can't have bugs
2020-11-18 18:01:25 +0100idhugo(~idhugo@80-62-116-101-mobile.dk.customer.tdc.net)
2020-11-18 18:01:43 +0100 <texasmynsted> tdammers: why not use pure everywhere it applies. It makes more sense.
2020-11-18 18:01:52 +0100 <int-e> > fix error -- is it bad that this still amuses me?
2020-11-18 18:01:53 +0100 <boxscape> p0a -fdefer-type-errors :)
2020-11-18 18:01:54 +0100 <lambdabot> "*Exception: *Exception: *Exception: *Exception: *Exception: *Exception: *Ex...
2020-11-18 18:01:58 +0100 <tdammers> texasmynsted: I do that too, but I go through phases.
2020-11-18 18:02:07 +0100 <texasmynsted> Hehh I understand
2020-11-18 18:02:37 +0100stree_(~stree@50-108-91-191.adr01.mskg.mi.frontiernet.net) (Ping timeout: 264 seconds)
2020-11-18 18:02:46 +0100 <maerwald> p0a: was that in response to me?
2020-11-18 18:03:01 +0100 <Ariakenom> my first instinct in do-notation is to type return, but I always use pure
2020-11-18 18:03:04 +0100LKoen(~LKoen@169.244.88.92.rev.sfr.net)
2020-11-18 18:03:05 +0100 <p0a> maerwald: yeah
2020-11-18 18:03:35 +0100 <int-e> tdammers: yeah I tend to use `return` for monads, but I think that if I had learned Haskell 10 years later I'd be in the pure `pure` camp.
2020-11-18 18:03:41 +0100 <maerwald> the only thing I can think of is that they have some low-latency requriements, which GHCs GC cannot deliver
2020-11-18 18:04:29 +0100conal_(~conal@64.71.133.70)
2020-11-18 18:04:51 +0100 <tdammers> maerwald: it can, just not consistently :P
2020-11-18 18:05:20 +0100stree(~stree@50-108-97-52.adr01.mskg.mi.frontiernet.net)
2020-11-18 18:05:25 +0100 <maerwald> I remember this is a problem in "real-time" ads bidding I think
2020-11-18 18:05:40 +0100nuncanada(~dude@179.235.160.168)
2020-11-18 18:05:41 +0100 <tdammers> oh yes
2020-11-18 18:05:42 +0100 <p0a> maerwald: my opinion is not molded by experience or shapen by facts, just something I conjured out of thin air. :P
2020-11-18 18:05:53 +0100 <tdammers> I definitely wouldn't use Haskell for the tight parts of that
2020-11-18 18:06:16 +0100 <tdammers> although the parallel GC could probably do it just fine, but it's still kind of icky that reasoning about perf in Haskell is so bloody hard
2020-11-18 18:06:26 +0100 <maerwald> tdammers: could write it in rust, make a nice C interface and use it in haskell
2020-11-18 18:06:42 +0100 <tdammers> yeah, write it in whatever performs well enough, and then orchestrate it from Haskell
2020-11-18 18:06:50 +0100 <tdammers> C, C++, rust, golang, whatever
2020-11-18 18:07:04 +0100 <maerwald> but a more reasonable assumption might be: their CTO fled the country :p
2020-11-18 18:07:10 +0100 <tdammers> yeah
2020-11-18 18:07:18 +0100 <tdammers> IME, it's usually unreasonable expectations
2020-11-18 18:07:21 +0100 <maerwald> and they were left with an esoteric haskell stack and one junior dev
2020-11-18 18:07:36 +0100 <boxscape> oh no I upgraded to ghc 8.10 and now the type level code I spent today writing doesn't work anymore
2020-11-18 18:07:38 +0100 <tdammers> yep. the "unreasonably enthusiastic junior dev" problem
2020-11-18 18:08:00 +0100hackagearray-chunks 0.1.2.0 - Lists of chunks https://hackage.haskell.org/package/array-chunks-0.1.2.0 (andrewthad)
2020-11-18 18:08:25 +0100 <idnar> is there something like `take` that takes from the end?
2020-11-18 18:08:38 +0100alp(~alp@88.126.45.36)
2020-11-18 18:08:41 +0100 <maerwald> not lazily
2020-11-18 18:08:42 +0100 <maerwald> :p
2020-11-18 18:08:54 +0100 <merijn> :t \n -> reverse . take n . reverse -- *ducks*
2020-11-18 18:08:55 +0100 <lambdabot> error:
2020-11-18 18:08:55 +0100 <lambdabot> Ambiguous occurrence ‘reverse’
2020-11-18 18:08:55 +0100 <lambdabot> It could refer to
2020-11-18 18:09:03 +0100 <merijn> wut
2020-11-18 18:09:05 +0100 <merijn> @undefine
2020-11-18 18:09:05 +0100 <lambdabot> Undefined.
2020-11-18 18:09:09 +0100 <merijn> :t \n -> reverse . take n . reverse -- *ducks*
2020-11-18 18:09:11 +0100 <lambdabot> Int -> [a] -> [a]
2020-11-18 18:09:30 +0100 <maerwald> that's probably fine for small lists
2020-11-18 18:09:37 +0100 <tdammers> https://hackage.haskell.org/package/extra-1.7.8/docs/Data-List-Extra.html#v:takeEnd
2020-11-18 18:09:52 +0100 <merijn> maerwald: For big ones to if you do it infrequently enough :p
2020-11-18 18:10:05 +0100hidedagger(~nate@unaffiliated/hidedagger)
2020-11-18 18:10:15 +0100 <tdammers> for very big ones, "infrequently enough" means "once per universe"
2020-11-18 18:10:42 +0100 <boxscape> not even that if you're dealing with [0..]
2020-11-18 18:10:49 +0100hidedagger(~nate@unaffiliated/hidedagger) (Client Quit)
2020-11-18 18:10:55 +0100 <boxscape> unless you count a non-terminating evaluation as "once"
2020-11-18 18:11:20 +0100 <tdammers> right yeah, if you don't need it to terminate, then you can spawn as many of these as you want
2020-11-18 18:11:44 +0100 <maerwald> You add RAM as you go
2020-11-18 18:12:24 +0100 <p0a> that's what scalable means
2020-11-18 18:12:37 +0100 <idnar> oh I need it reversed anyway and I'm starting with a Map so toDescList + take
2020-11-18 18:13:03 +0100 <hekkaidekapus> If the list is finite, see also Data.Sequence.
2020-11-18 18:13:08 +0100 <p0a> What is an example of a simple monad transformer?
2020-11-18 18:13:24 +0100 <maerwald> p0a: none
2020-11-18 18:13:30 +0100 <idnar> IdentityT :P
2020-11-18 18:13:44 +0100 <maerwald> but there are plenty examples of non-simple transformers :p
2020-11-18 18:13:49 +0100 <p0a> are monad transformers like natural transformations?
2020-11-18 18:13:58 +0100 <tdammers> there's this concept of theoretical size of information, I don't remember the details, but the idea is to calculate how small you could theoretically make a data store for a given amount of information until you hit the limitations of the speed of light (or quantum physics? it's been a while)
2020-11-18 18:14:14 +0100st8less(~st8less@2603:a060:11fd:0:d56c:a5ec:de50:ff91) (Quit: WeeChat 2.9)
2020-11-18 18:14:17 +0100 <tdammers> which implies that the amount of information that can be stored in a finite universe is also finite
2020-11-18 18:14:48 +0100 <koz_> Something something Bekenstein bound.
2020-11-18 18:14:54 +0100 <maerwald> p0a: check out ExceptT, most other transformers are non-sense anyway
2020-11-18 18:14:55 +0100ggole(~ggole@2001:8003:8119:7200:f828:bf:5160:1d23) (Quit: Leaving)
2020-11-18 18:15:23 +0100 <p0a> maerwald: thank you
2020-11-18 18:16:01 +0100hackagejson-syntax 0.1.2.0 - High-performance JSON parser and encoder https://hackage.haskell.org/package/json-syntax-0.1.2.0 (andrewthad)
2020-11-18 18:16:08 +0100 <tdammers> maerwald: ExceptT Dynamic RWST Dynamic Dynamic Dynamic IO, a.k.a. the "I give up" monad
2020-11-18 18:16:16 +0100jakob_(~textual@p200300f49f162200855785b1c0c4761c.dip0.t-ipconnect.de)
2020-11-18 18:16:38 +0100ubert1(~Thunderbi@p200300ecdf1e53a7e6b318fffe838f33.dip0.t-ipconnect.de)
2020-11-18 18:17:01 +0100hackagesay-my-name 0.1.0.0 - Require explicit type application for some type variables. https://hackage.haskell.org/package/say-my-name-0.1.0.0 (mnoonan)
2020-11-18 18:18:07 +0100ubert(~Thunderbi@p200300ecdf1e53c9e6b318fffe838f33.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2020-11-18 18:18:08 +0100ubert1ubert
2020-11-18 18:18:18 +0100 <maerwald> at least we can say that the design space of monads has been exhaustively researched in haskell
2020-11-18 18:18:57 +0100 <maerwald> many tears have been shed, but it is what it is
2020-11-18 18:20:12 +0100ericsagn1(~ericsagne@2405:6580:0:5100:53e4:af5e:8890:d6d0) (Ping timeout: 260 seconds)
2020-11-18 18:20:47 +0100 <koz_> maerwald: Press F in chat for monads.
2020-11-18 18:22:05 +0100ubert(~Thunderbi@p200300ecdf1e53a7e6b318fffe838f33.dip0.t-ipconnect.de) (Remote host closed the connection)
2020-11-18 18:23:29 +0100ubert(~Thunderbi@p200300ecdf1e53a7e6b318fffe838f33.dip0.t-ipconnect.de)
2020-11-18 18:24:05 +0100 <int-e> > let ekat n xs = last $ zipWith const (replicate n xs ++ tails xs) (tails xs) in map (ekat 3) ["", "ab", "abc", "abcd"]
2020-11-18 18:24:07 +0100 <lambdabot> ["","ab","abc","bcd"]
2020-11-18 18:24:49 +0100 <int-e> . o O ( cotake )
2020-11-18 18:25:00 +0100hackagearray-builder 0.1.1.0 - Builders for arrays https://hackage.haskell.org/package/array-builder-0.1.1.0 (andrewthad)
2020-11-18 18:25:47 +0100Tario(~Tario@201.192.165.173)
2020-11-18 18:25:48 +0100random(~random@46.254.129.126)
2020-11-18 18:25:50 +0100geekosaur(82659a09@host154-009.vpn.uakron.edu)
2020-11-18 18:26:00 +0100 <random> hey guys
2020-11-18 18:26:20 +0100 <random> is there a way to get all types used by a Servant API?
2020-11-18 18:26:23 +0100 <random> like, a ready made library or something?
2020-11-18 18:27:39 +0100Ariakenom(~Ariakenom@h-98-128-229-104.NA.cust.bahnhof.se) (Ping timeout: 256 seconds)
2020-11-18 18:28:18 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-11-18 18:28:19 +0100knupfer(~Thunderbi@200116b8244bd600953b9562e9fc25b9.dip.versatel-1u1.de) (Remote host closed the connection)
2020-11-18 18:28:27 +0100knupfer(~Thunderbi@200116b8244bd600859a1b799407ebc4.dip.versatel-1u1.de)
2020-11-18 18:30:14 +0100 <texasmynsted> Could with write what you can in Haskell and what you must, in C/Rust.
2020-11-18 18:30:28 +0100 <texasmynsted> oh yikes. I missed much scrollback
2020-11-18 18:31:20 +0100 <maerwald> Yeah, I think exploring rust and haskell in a single stack is interesting.
2020-11-18 18:31:22 +0100 <idnar> does `Scientific` preserve trailing zeroes?
2020-11-18 18:31:36 +0100cgfuh(~cgfuh@181.167.191.58)
2020-11-18 18:32:06 +0100ericsagn1(~ericsagne@2405:6580:0:5100:b570:65da:9eeb:ab03)
2020-11-18 18:33:07 +0100 <texasmynsted> Yes, that is my plan at least
2020-11-18 18:33:18 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 260 seconds)
2020-11-18 18:33:25 +0100AlterEgo-(~ladew@124-198-158-163.dynamic.caiway.nl)
2020-11-18 18:33:49 +0100Ariakenom(~Ariakenom@h-98-128-229-104.NA.cust.bahnhof.se)
2020-11-18 18:35:30 +0100 <texasmynsted> I tried two almost the same projects. One in Haskell and one in Rust. Just to see how they feel and compare. Rust feels verbose and awkward when encountering complexity.
2020-11-18 18:35:33 +0100 <merijn> idnar: Probably not
2020-11-18 18:36:23 +0100 <texasmynsted> But when getting closer to the metal language options shrink dramatically.
2020-11-18 18:37:02 +0100Boomerang(~Boomerang@xd520f68c.cust.hiper.dk) (Remote host closed the connection)
2020-11-18 18:37:13 +0100cgfuh(~cgfuh@181.167.191.58) (Quit: WeeChat 2.9)
2020-11-18 18:37:26 +0100cgfuh(~cgfuh@181.167.191.58)
2020-11-18 18:38:14 +0100jonatanb(~jonatanb@83.24.155.27.ipv4.supernova.orange.pl) (Quit: Leaving...)
2020-11-18 18:40:08 +0100 <merijn> Pet peeve "C is not close to the metal"
2020-11-18 18:40:30 +0100hackagespake2 0.4.3 - Implementation of the SPAKE2 Password-Authenticated Key Exchange algorithm https://hackage.haskell.org/package/spake2-0.4.3 (rkrishnan)
2020-11-18 18:41:39 +0100 <dolio> What do you mean? It allows perfectly for my 128-bit machine characters.
2020-11-18 18:42:38 +0100 <merijn> dolio: Sure, but that wasn't even what I was getting at
2020-11-18 18:42:49 +0100 <dolio> Yeah, I know.
2020-11-18 18:43:03 +0100 <hekkaidekapus> |> coefficient (scientific 010 2)
2020-11-18 18:43:08 +0100the-smug-one(~user@h188-122-129-70.cust.a3fiber.se) (Remote host closed the connection)
2020-11-18 18:43:14 +0100 <hekkaidekapus> |> 10 -- idnar
2020-11-18 18:43:23 +0100 <merijn> C is close to the metal...as long as you don't acknowledge your "metal" changed into a superscalar, deeply pipelined, out of order, speculatively executing CPU about 2 decades ago :p
2020-11-18 18:43:37 +0100 <texasmynsted> merijn: What do you use for close to the metal projects? Mostly I see C an assembly.
2020-11-18 18:44:10 +0100 <int-e> vhdl?
2020-11-18 18:44:16 +0100 <merijn> What I use is C or C++, but don't go around those are much closer to the metal than Haskell or Rust
2020-11-18 18:44:32 +0100 <dolio> C is heavily-optimized-for.
2020-11-18 18:44:40 +0100 <merijn> texasmynsted: See also: https://queue.acm.org/detail.cfm?id=3212479
2020-11-18 18:44:51 +0100 <merijn> Which is conveniently titled "C Is Not a Low-level Language" ;)
2020-11-18 18:44:56 +0100 <texasmynsted> I have found C++ is too bulky and difficult to control.
2020-11-18 18:45:05 +0100cads(~cads@ip-64-72-99-232.lasvegas.net)
2020-11-18 18:45:17 +0100 <merijn> texasmynsted: In my experience there are two C's
2020-11-18 18:45:26 +0100 <texasmynsted> okay. I am listening
2020-11-18 18:46:00 +0100 <merijn> texasmynsted: 1) C, the language that 90% of C programmers *think* they are writing, and 2) C the actual language as defined by the spec and that compilers attempt to implement
2020-11-18 18:46:13 +0100 <merijn> These two things are, surprisingly *massively* different
2020-11-18 18:46:50 +0100 <merijn> But you don't notice those difference and if no one ever told you anything about modern CPU design *nor* modern compilers, then I can understand how you might imagine that 2 is like 1
2020-11-18 18:46:58 +0100 <p0a> the interface with the metal is the compiler, not the language
2020-11-18 18:47:28 +0100 <int-e> . o O ( 2) is the thing that turns every C program into a puzzle whether it contains undefined behavior or not )
2020-11-18 18:47:32 +0100 <texasmynsted> p0a +1
2020-11-18 18:48:10 +0100 <merijn> p0a: Right, but that just means it becomes impossible to know what code does without also knowing which *exact* version of which *exact* compiler people were using
2020-11-18 18:48:16 +0100 <int-e> . o O ( or, more realistically, into a puzzle to figure out *why* it contains undefined behavior )
2020-11-18 18:48:29 +0100 <merijn> The point of having a spec is that you can write code and know what it does *without* error prone trial and error
2020-11-18 18:48:33 +0100 <dolio> Yeah, the answer is almost always, "it does," no? :)
2020-11-18 18:48:45 +0100 <texasmynsted> what p0a says aligns with my experience. Typically a manufactured chip has a compiler that will compile a "subset" of C for the chip.
2020-11-18 18:48:49 +0100 <merijn> dolio: Some cases are super fun, though
2020-11-18 18:48:59 +0100 <merijn> dolio: Like "whether this code is undefined is implementation defined"
2020-11-18 18:49:04 +0100 <merijn> dolio: No joke!
2020-11-18 18:49:29 +0100 <dolio> Really? I didn't notice that when I was reading, but I didn't think too hard.
2020-11-18 18:49:35 +0100 <merijn> texasmynsted: Right, but then you're not writing C, you're writing a custom ad hoc underspecified DSL that happens to resemble C
2020-11-18 18:49:36 +0100alp(~alp@88.126.45.36) (Ping timeout: 256 seconds)
2020-11-18 18:49:47 +0100 <texasmynsted> yes. I understand your point now.
2020-11-18 18:49:48 +0100conal_(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2020-11-18 18:49:57 +0100 <merijn> dolio: Signed integer overflow is UB, right?
2020-11-18 18:50:03 +0100 <dolio> Yeah.
2020-11-18 18:50:15 +0100 <merijn> dolio: Fun fact: the signedness of "char" is implementation defined :)
2020-11-18 18:50:20 +0100 <dolio> Oh, and you don't know how big they are.
2020-11-18 18:50:24 +0100bitmapper(uid464869@gateway/web/irccloud.com/x-xpsufctbszodgohs)
2020-11-18 18:50:47 +0100 <merijn> dolio: So you can construct code the is signed overflow if char is signed, but whether it is, is implementation defined
2020-11-18 18:50:53 +0100 <texasmynsted> most things are "implementation defined". The sizes are defined by the chipset
2020-11-18 18:51:02 +0100 <merijn> texasmynsted: I wish
2020-11-18 18:51:07 +0100 <dolio> Ah, yeah.
2020-11-18 18:51:20 +0100britva(~britva@2a02:aa13:7240:2980:7da5:a1a0:c038:90b4)
2020-11-18 18:51:22 +0100conal(~conal@64.71.133.70)
2020-11-18 18:51:24 +0100 <merijn> If we took the C spec as-is and said "all undefined behaviour is implementation defined" we'd be massively better off
2020-11-18 18:51:43 +0100conal(~conal@64.71.133.70) (Client Quit)
2020-11-18 18:51:44 +0100 <int-e> implementations with sufficient fire-proofing use unsinged characters
2020-11-18 18:51:45 +0100 <texasmynsted> Or turn it around.
2020-11-18 18:52:09 +0100 <texasmynsted> Okay. I am all in. What language do you propose?
2020-11-18 18:52:24 +0100 <merijn> int-e: That's massively inconsistent, though, because all other integers without a sign specifier default to signed
2020-11-18 18:52:27 +0100 <texasmynsted> Because it will not be C and it will not be Rust and it will not be Haskell.
2020-11-18 18:52:31 +0100 <int-e> ("unsinged" may be my most common typo when writing C)
2020-11-18 18:52:36 +0100 <merijn> texasmynsted: For what purpose?
2020-11-18 18:53:19 +0100jb55(~jb55@gateway/tor-sasl/jb55) (Remote host closed the connection)
2020-11-18 18:53:21 +0100 <int-e> merijn: Yes, I agree that was an awful choice.
2020-11-18 18:53:32 +0100 <texasmynsted> Firmware development. Close enough to the metal that the only code running on the chip is what it specifically written.
2020-11-18 18:53:40 +0100jb55(~jb55@gateway/tor-sasl/jb55)
2020-11-18 18:53:42 +0100 <merijn> texasmynsted: Ivory? :)
2020-11-18 18:53:43 +0100 <geekosaur> I think I made my editor autofix that one
2020-11-18 18:53:47 +0100 <int-e> 5 compiler writers in a room, all trying to ensure that their own compiler is standards-compliant.
2020-11-18 18:53:51 +0100 <merijn> texasmynsted: Haskell based DSL that generates C
2020-11-18 18:53:52 +0100 <dolio> I think the point was not, "don't use C," but, "don't perpetuate myths about C."
2020-11-18 18:54:07 +0100 <merijn> dolio++
2020-11-18 18:54:31 +0100texasmynstedfacepalm
2020-11-18 18:55:05 +0100 <Chousuke> I don't see why you couldn't use Rust for firmware development. People seem to be rather interested in doing just that.
2020-11-18 18:55:08 +0100 <dolio> Because the myths are part of what keep people from developing viable alternatives to C.
2020-11-18 18:55:09 +0100 <texasmynsted> I have never heard of Ivory. I need to check this out.
2020-11-18 18:55:11 +0100 <merijn> texasmynsted: dolio: Well, to be fair "don't perpetuate myths" was the mainpoint, but "don't handwrite C whenever you can possibly help it" was a solid 2nd point
2020-11-18 18:55:21 +0100 <texasmynsted> Is it strict?
2020-11-18 18:55:21 +0100jakob_(~textual@p200300f49f162200855785b1c0c4761c.dip0.t-ipconnect.de) (Quit: My Laptop has gone to sleep. ZZZzzz…)
2020-11-18 18:55:42 +0100 <merijn> texasmynsted: It was developed specifically for embedded/systems stuff where you want statically validated properties, but the tooling requires C
2020-11-18 18:56:06 +0100 <srk> only ivory-backend-c
2020-11-18 18:56:14 +0100 <merijn> texasmynsted: https://ivorylang.org/ivory-concepts.html
2020-11-18 18:56:16 +0100 <srk> which uses language-c
2020-11-18 18:56:26 +0100nut(~user@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
2020-11-18 18:56:29 +0100 <srk> there are other backends for verification purposes
2020-11-18 18:56:33 +0100jakob_(~textual@p200300f49f1622000c6d85cd02bcc449.dip0.t-ipconnect.de)
2020-11-18 18:56:39 +0100 <texasmynsted> Soooo you are writing in a "different" C DSL.
2020-11-18 18:56:46 +0100 <Chousuke> I mean, the fact that often you *have* to use C for firmware development doesn't mean C is particularly well suited for the task. That's just how it happens to be, for mostly historical reasons. :/
2020-11-18 18:56:52 +0100 <texasmynsted> that compiles to a C DSL
2020-11-18 18:57:01 +0100 <merijn> texasmynsted: No, you are writing in *Haskell* DSL :)
2020-11-18 18:57:08 +0100gecko_(~gecko@2001:19f0:5:10f4:5400:3ff:fe0f:15cb) ()
2020-11-18 18:57:25 +0100dcoutts_(~duncan@33.14.75.194.dyn.plus.net) (Ping timeout: 240 seconds)
2020-11-18 18:57:26 +0100 <texasmynsted> Okay. You are writing in a Haskell DSL that compiles to a C DSL.
2020-11-18 18:57:30 +0100hackagezydiskell 0.1.0.1 - Haskell language binding for the Zydis library, a x86/x86-64 disassembler. https://hackage.haskell.org/package/zydiskell-0.1.0.1 (nerded)
2020-11-18 18:57:33 +0100 <srk> compiles to C
2020-11-18 18:57:34 +0100 <merijn> texasmynsted: Developed by a company that develops tools specifically for crypto/embedded stuff
2020-11-18 18:57:36 +0100 <texasmynsted> And this is better why?
2020-11-18 18:57:41 +0100 <srk> safe
2020-11-18 18:57:56 +0100 <srk> and.. embedded in Haskell! :)
2020-11-18 18:58:03 +0100 <maerwald> why is it safe?
2020-11-18 18:58:04 +0100brisbin(~patrick@199.66.179.204) (Read error: Connection reset by peer)
2020-11-18 18:58:06 +0100 <merijn> texasmynsted: Because that compiler and the people who wrote it are better at C than you are
2020-11-18 18:58:13 +0100 <srk> (bunch of other things as well)
2020-11-18 18:58:23 +0100 <texasmynsted> Because if this can sell, the F*** Rust.
2020-11-18 18:58:23 +0100 <merijn> maerwald: No null pointers (or really heap allocation, tbh)
2020-11-18 18:58:39 +0100britva(~britva@2a02:aa13:7240:2980:7da5:a1a0:c038:90b4) (Quit: This computer has gone to sleep)
2020-11-18 18:58:40 +0100 <p0a> is there heap allocation in firmware?
2020-11-18 18:58:42 +0100 <texasmynsted> s/the/then/
2020-11-18 18:58:43 +0100 <maerwald> that's not much to throw around "safe"
2020-11-18 18:58:51 +0100 <p0a> I have never programmed anything like firmware, I don't even know what it is
2020-11-18 18:58:52 +0100 <merijn> maerwald: Define "safe"
2020-11-18 18:59:00 +0100 <srk> p0a: yup, ivory-tower uses heap for FreeRTOS tasks
2020-11-18 18:59:06 +0100 <merijn> maerwald: Definitely safer than hand-written C
2020-11-18 18:59:09 +0100 <maerwald> merijn: formally verified at least
2020-11-18 18:59:11 +0100 <merijn> maerwald: Sure, that's not a high bar
2020-11-18 18:59:27 +0100 <merijn> maerwald: It plugs into formal verification tools as possible backends, that's one of the points/goals :p
2020-11-18 18:59:39 +0100 <texasmynsted> Example: I have written firmware to control the hardware in a water meter and let the water meter communicate over radio.
2020-11-18 18:59:46 +0100howdoi(uid224@gateway/web/irccloud.com/x-xcriusnvhpaknzlz)
2020-11-18 18:59:51 +0100 <merijn> maerwald: Per the Ivory webpage: "The C language backend supports rendering Ivory assertions for static checking with the CBMC model checker. The SMACCMPilot project build system includes integration for CBMC verification of the SMACCMPilot source code."
2020-11-18 18:59:55 +0100 <merijn> We also provide our own symbolic simulator for verifying Ivory assertions using CVC4.
2020-11-18 19:00:09 +0100 <texasmynsted> I have written code for the head unit in automobiles
2020-11-18 19:00:18 +0100 <maerwald> ok, you're all hired :p
2020-11-18 19:00:18 +0100 <p0a> srk: I had no idea how 'large' firmware can be. I didn't know OSes run on them. I know very little about it :P
2020-11-18 19:00:27 +0100 <texasmynsted> That is what I mean by firmware
2020-11-18 19:00:37 +0100Klobbinger(543b08ef@dslb-084-059-008-239.084.059.pools.vodafone-ip.de)
2020-11-18 19:00:42 +0100motherfsck(~motherfsc@unaffiliated/motherfsck) (Remote host closed the connection)
2020-11-18 19:00:51 +0100 <merijn> texasmynsted: Iirc Ivory was originally developed for crypto/firmware applications for DARPA/US Dept of Defense
2020-11-18 19:01:24 +0100 <merijn> texasmynsted: So it's *very* much intended for stuff like "car firmware"
2020-11-18 19:01:31 +0100 <texasmynsted> maerwald: Excellent. What are we building?
2020-11-18 19:01:41 +0100Klobbinger(543b08ef@dslb-084-059-008-239.084.059.pools.vodafone-ip.de) (Remote host closed the connection)
2020-11-18 19:01:42 +0100 <maerwald> a stupid backend :D
2020-11-18 19:01:50 +0100crdrost(~crdrost@c-98-207-102-156.hsd1.ca.comcast.net)
2020-11-18 19:01:50 +0100 <p0a> nice!
2020-11-18 19:01:53 +0100 <merijn> Oh, that's easy
2020-11-18 19:01:57 +0100 <merijn> I've build tons of those
2020-11-18 19:02:18 +0100 <srk> p0a: depends, I'm typically using STM32 MCUs ranging from 8kb to 512kb SRAM (64kb - 1/2Mb flash)
2020-11-18 19:02:26 +0100 <texasmynsted> maerwald: More specifically please. That pretty much describes everything.]
2020-11-18 19:02:45 +0100motherfsck(~motherfsc@unaffiliated/motherfsck)
2020-11-18 19:02:47 +0100 <maerwald> I dunno... is there anything other than backends out there?
2020-11-18 19:02:47 +0100vicfred(~vicfred@unaffiliated/vicfred)
2020-11-18 19:02:54 +0100 <merijn> p0a: It depends on your chip too
2020-11-18 19:03:12 +0100 <monochrom> merijn: Do you happen to know why they chose the name Ivory? Is it about "yes this is from the ivory power, bite me"? :)
2020-11-18 19:03:15 +0100 <merijn> p0a: Embedded chips powerful enough to run regular linux or pretty cheap
2020-11-18 19:03:21 +0100 <merijn> monochrom: Probably?
2020-11-18 19:03:27 +0100 <srk> it's explained in one of the papers
2020-11-18 19:03:43 +0100 <merijn> monochrom: Considering there's an associated language mentioned on their website called "tower"...
2020-11-18 19:03:44 +0100 <srk> something like 'to bring embedded development down from ivory tower'
2020-11-18 19:03:52 +0100 <monochrom> hahaha neat
2020-11-18 19:03:58 +0100Klobbinger(543b08ef@dslb-084-059-008-239.084.059.pools.vodafone-ip.de)
2020-11-18 19:04:01 +0100brisbin(~patrick@pool-173-49-158-4.phlapa.fios.verizon.net)
2020-11-18 19:04:03 +0100britva(~britva@31-10-157-156.cgn.dynamic.upc.ch)
2020-11-18 19:04:04 +0100 <monochrom> thanks merijn and srk
2020-11-18 19:04:25 +0100nut(~user@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 240 seconds)
2020-11-18 19:04:48 +0100 <merijn> monochrom: That's why the clash people had to figure out something else to name clash ;)
2020-11-18 19:04:58 +0100 <merijn> (statement not actually based in facts)
2020-11-18 19:05:08 +0100 <monochrom> hahahahaha name clash
2020-11-18 19:05:55 +0100 <texasmynsted> Hmm. I would love to see people describe their experience with various commodity chips.
2020-11-18 19:06:17 +0100 <merijn> I'm just sad Habit died
2020-11-18 19:06:40 +0100 <monochrom> In other news, today I showed my students the fibonacci joke "This Fibonacci joke is as bad as the last two you heard combined." and the originating tweet URL https://twitter.com/sigfpe/status/776420034419658752
2020-11-18 19:06:46 +0100jakob_(~textual@p200300f49f1622000c6d85cd02bcc449.dip0.t-ipconnect.de) (Quit: My Laptop has gone to sleep. ZZZzzz…)
2020-11-18 19:08:17 +0100 <merijn> heh, so according to reddit Haskell job openings it's "hard to find people with 5+ years experience", so clearly I need to start demanding rockstar salary by now >.>
2020-11-18 19:09:04 +0100 <Ariakenom> texasmynsted: A colleague had an awesome patch for an avr8. It just rearranged members in a struct.
2020-11-18 19:09:38 +0100 <texasmynsted> merijn: You should.
2020-11-18 19:10:01 +0100 <Ariakenom> the compiled code was smaller because the members were in nicer locations. he find out where to place them by trying all of them in a script
2020-11-18 19:10:12 +0100 <texasmynsted> Where do you work?
2020-11-18 19:10:16 +0100cosimone(~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd) (Quit: cosimone)
2020-11-18 19:10:41 +0100 <Ariakenom> we needed that because we were running out of flash storage on them
2020-11-18 19:10:44 +0100 <merijn> texasmynsted: Well currently I don't write Haskell to begin with, or rather, at least not officially :p
2020-11-18 19:10:52 +0100 <texasmynsted> What?
2020-11-18 19:10:55 +0100 <texasmynsted> That is crazy
2020-11-18 19:11:01 +0100britva(~britva@31-10-157-156.cgn.dynamic.upc.ch) (Quit: This computer has gone to sleep)
2020-11-18 19:11:03 +0100 <texasmynsted> What do you write?
2020-11-18 19:11:37 +0100 <maerwald> IRC
2020-11-18 19:11:42 +0100 <texasmynsted> So like many of us Haskell is your guilty pleasure?
2020-11-18 19:11:42 +0100 <maerwald> look at his IRC stats
2020-11-18 19:11:44 +0100 <maerwald> :p
2020-11-18 19:11:45 +0100 <merijn> maerwald: shush
2020-11-18 19:11:46 +0100 <texasmynsted> LOLOL
2020-11-18 19:11:47 +0100conal(~conal@64.71.133.70)
2020-11-18 19:11:51 +0100 <p0a> Ariakenom: can't you just pack a struct?
2020-11-18 19:12:04 +0100 <merijn> maerwald: dminuoso is still in first because (thank god) Chris Done's ircbrowse stats got lost
2020-11-18 19:12:23 +0100tomsmeding. o O ( it will grow over time )
2020-11-18 19:12:28 +0100 <texasmynsted> I think you could argue you are promoting your haskell mentoring
2020-11-18 19:12:39 +0100 <Ariakenom> p0a: it wasnt to reduce memory. it was to reduce code size :D
2020-11-18 19:13:04 +0100 <merijn> texasmynsted: Currently C, C++, Fortran90, Python, within the organisation probably "basically everything besides, like, PHP and perl" :p
2020-11-18 19:13:10 +0100 <texasmynsted> His handle must not be chrisdone
2020-11-18 19:13:34 +0100 <texasmynsted> Fortran90. Interesting.
2020-11-18 19:13:37 +0100britva(~britva@2a02:aa13:7240:2980:7da5:a1a0:c038:90b4)
2020-11-18 19:13:50 +0100 <merijn> texasmynsted: That's for the lucky people not dealing with Fortran77 :p
2020-11-18 19:14:11 +0100 <p0a> Ariakenom: I'm confused, but I believe you :)
2020-11-18 19:14:20 +0100 <texasmynsted> I am trying to determine where you work where Fortran90 would be used. . .
2020-11-18 19:14:32 +0100 <merijn> texasmynsted: Oh, I still write Haskell stuff at work, because no one's around to tell me no :p
2020-11-18 19:16:32 +0100valdyn(~valdyn@host-88-217-143-53.customer.m-online.net)
2020-11-18 19:16:35 +0100 <texasmynsted> Well it sound interesting
2020-11-18 19:18:37 +0100 <texasmynsted> I like how some people say they use Haskell for "prototyping"
2020-11-18 19:19:07 +0100knupfer(~Thunderbi@200116b8244bd600859a1b799407ebc4.dip.versatel-1u1.de) (Ping timeout: 260 seconds)
2020-11-18 19:20:04 +0100 <dolio> Haskell is too mainstream for prototyping.
2020-11-18 19:20:12 +0100 <dolio> Prototype your Haskell stuff in Agda.
2020-11-18 19:20:33 +0100 <texasmynsted> or Idris
2020-11-18 19:20:57 +0100 <dolio> Yeah. Although if you prototype in Idris you might find you can just use the prototype. :þ
2020-11-18 19:21:35 +0100 <texasmynsted> yes. That is the point. A Haskell prototype likely works better and is more maintainable than the target language
2020-11-18 19:21:55 +0100jedai42(~jedai@lfbn-dij-1-708-251.w90-100.abo.wanadoo.fr)
2020-11-18 19:22:00 +0100 <monochrom> Programmers seldom grow out of their prototypes.
2020-11-18 19:22:09 +0100 <merijn> Prototype in Haskell, because we all know prototypes become production and never stop, so now they gotta hire more haskellers to support it
2020-11-18 19:22:14 +0100 <merijn> Boom. Haskell shop
2020-11-18 19:22:15 +0100chele(~chele@ip5b416ea2.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
2020-11-18 19:22:22 +0100 <monochrom> Especially, a lot of FOSS software is intentionally forever in beta.
2020-11-18 19:22:28 +0100Lycurgus(~niemand@cpe-45-46-142-188.buffalo.res.rr.com)
2020-11-18 19:22:51 +0100 <texasmynsted> If only I could think of an app to write.
2020-11-18 19:22:51 +0100 <merijn> monochrom: My FOSS isn't in beta. It's "free as in puppies"
2020-11-18 19:23:05 +0100 <texasmynsted> If I could ever think of one I would do it.
2020-11-18 19:23:18 +0100 <geekosaur> does it breed like them, too?
2020-11-18 19:23:22 +0100 <merijn> monochrom: You can pick it up for free, but you'll have to pay to get it fixed ;)
2020-11-18 19:23:27 +0100 <monochrom> Namely, those who follows ESR's bazaar model. The bazaar model is euphemism for intentional perpetual beta.
2020-11-18 19:23:32 +0100 <dolio> Commercial software doesn't really seem that different from the inside.
2020-11-18 19:23:46 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-11-18 19:23:56 +0100 <dolio> You only believe it's not still in beta because you bought it.
2020-11-18 19:24:08 +0100 <texasmynsted> The difference is in that you paid for it.
2020-11-18 19:24:10 +0100 <geekosaur> there is that, isn't there?
2020-11-18 19:25:25 +0100jedai(~jedai@lfbn-dij-1-708-251.w90-100.abo.wanadoo.fr) (Ping timeout: 240 seconds)
2020-11-18 19:26:08 +0100alp(~alp@2a01:e0a:58b:4920:61ca:7518:9e8a:5ce1)
2020-11-18 19:26:35 +0100 <dolio> I guess people pay for beta commercial software these days, too.
2020-11-18 19:26:43 +0100 <merijn> monochrom: You might like PHK's take: https://queue.acm.org/detail.cfm?id=2349257 :)
2020-11-18 19:26:48 +0100 <monochrom> Right, I don't contend that.
2020-11-18 19:27:18 +0100 <dolio> At least video games. Lots of people buying perpetual beta games. :)
2020-11-18 19:27:44 +0100jakob_(~textual@p200300f49f1622000c29800dbc05d17e.dip0.t-ipconnect.de)
2020-11-18 19:29:00 +0100 <texasmynsted> I buy books from manning that are not even to alpha stage yet
2020-11-18 19:29:50 +0100darjeeling_(~darjeelin@122.245.211.11) (Ping timeout: 256 seconds)
2020-11-18 19:30:17 +0100ishutin(~Ishutin@92-249-179-45.pool.digikabel.hu)
2020-11-18 19:33:25 +0100ishutin_(~Ishutin@91-83-11-228.pool.digikabel.hu) (Ping timeout: 246 seconds)
2020-11-18 19:34:04 +0100fraktor(~walt@129.93.191.18) (Quit: WeeChat 2.8)
2020-11-18 19:34:05 +0100boxscape(54a35f37@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.95.55) (Quit: Connection closed)
2020-11-18 19:34:24 +0100u0_a298(~user@47.206.148.226)
2020-11-18 19:34:47 +0100jakob_(~textual@p200300f49f1622000c29800dbc05d17e.dip0.t-ipconnect.de) (Quit: My Laptop has gone to sleep. ZZZzzz…)
2020-11-18 19:37:36 +0100u0_a298(~user@47.206.148.226) (Read error: Connection reset by peer)
2020-11-18 19:37:50 +0100conal(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2020-11-18 19:38:00 +0100 <maerwald> video games is a brutal industry anyway
2020-11-18 19:38:01 +0100u0_a298(~user@47.206.148.226)
2020-11-18 19:38:36 +0100 <texasmynsted> video game industry is a gold rush
2020-11-18 19:39:51 +0100knupfer(~Thunderbi@200116b8244bd600d8ff78fffe37ebfb.dip.versatel-1u1.de)
2020-11-18 19:40:17 +0100knupfer(~Thunderbi@200116b8244bd600d8ff78fffe37ebfb.dip.versatel-1u1.de) (Remote host closed the connection)
2020-11-18 19:40:25 +0100knupfer(~Thunderbi@200116b8244bd6009cdc066a89cb8c22.dip.versatel-1u1.de)
2020-11-18 19:42:18 +0100Lord_of_Life_Lord_of_Life
2020-11-18 19:42:37 +0100 <idnar> hekkaidekapus: aha
2020-11-18 19:43:06 +0100Ariakenom(~Ariakenom@h-98-128-229-104.NA.cust.bahnhof.se) (Quit: Leaving)
2020-11-18 19:44:53 +0100darjeeling_(~darjeelin@122.245.211.11)
2020-11-18 19:45:03 +0100 <hekkaidekapus> idnar: Are you parsing stuff? I’m wondering whether you are actually after Data.Fixed.
2020-11-18 19:46:58 +0100 <idnar> hekkaidekapus: JSON numbers, kinda
2020-11-18 19:47:21 +0100 <hekkaidekapus> Parsing it is, then.
2020-11-18 19:47:39 +0100Ariakenom(~Ariakenom@h-98-128-229-104.NA.cust.bahnhof.se)
2020-11-18 19:48:56 +0100conal(~conal@64.71.133.70)
2020-11-18 19:49:07 +0100kritzefitz(~kritzefit@212.86.56.80) (Ping timeout: 260 seconds)
2020-11-18 19:51:00 +0100 <hekkaidekapus> @hackage scientific-notation <== idnar: Check out that.
2020-11-18 19:51:00 +0100 <lambdabot> https://hackage.haskell.org/package/scientific-notation <== idnar: Check out that.
2020-11-18 19:51:05 +0100 <idnar> hekkaidekapus: I'm implementing this madness: https://docs.kraken.com/websockets/#book-checksum
2020-11-18 19:51:33 +0100SanchayanMaity(~Sanchayan@106.201.35.233) (Quit: SanchayanMaity)
2020-11-18 19:52:25 +0100jespada(~jespada@90.254.245.49) (Quit: Leaving)
2020-11-18 19:52:34 +0100geekosaur(82659a09@host154-009.vpn.uakron.edu) (Ping timeout: 245 seconds)
2020-11-18 19:52:38 +0100 <idnar> hekkaidekapus: ooh this is handy
2020-11-18 19:52:44 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:1c60:9ba4:8bf9:ee34) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-18 19:53:01 +0100jespada(~jespada@90.254.245.49)
2020-11-18 19:54:12 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:1c60:9ba4:8bf9:ee34)
2020-11-18 19:55:22 +0100 <idnar> hekkaidekapus: thanks!
2020-11-18 19:56:07 +0100knupfer(~Thunderbi@200116b8244bd6009cdc066a89cb8c22.dip.versatel-1u1.de) (Ping timeout: 260 seconds)
2020-11-18 19:56:20 +0100 <dminuoso> idnar: You could also look at https://hackage.haskell.org/package/scientific-0.3.6.2/docs/Data-Scientific.html which is what aeson uses
2020-11-18 19:56:30 +0100 <hekkaidekapus> You’re welcome. That Kraken thing has speed requirements. You will appreciate this line: “The scientific-notation parser outperforms the scientific parser that ships with aeson by a factor of five on small numbers.”
2020-11-18 19:56:59 +0100 <hekkaidekapus> dminuoso: Raced :) ^^^
2020-11-18 19:57:37 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-11-18 20:00:02 +0100u0_a298(~user@47.206.148.226) (Read error: Connection reset by peer)
2020-11-18 20:00:19 +0100u0_a298(~user@47.206.148.226)
2020-11-18 20:02:36 +0100u0_a298(~user@47.206.148.226) (Read error: Connection reset by peer)
2020-11-18 20:02:41 +0100 <idnar> hekkaidekapus: yeah, for what I'm doing, it's very useful to have a fast parse to something I can do trivial ops on; I need a more complicated conversion after that, but the converted values often go unused so I don't have to pay
2020-11-18 20:02:51 +0100u0_a298(~user@47.206.148.226)
2020-11-18 20:03:24 +0100berberman(~berberman@unaffiliated/berberman)
2020-11-18 20:03:42 +0100berberman_(~berberman@unaffiliated/berberman) (Ping timeout: 260 seconds)
2020-11-18 20:03:56 +0100 <idnar> dminuoso: I am currently parsing to that :)
2020-11-18 20:06:13 +0100u0_a298(~user@47.206.148.226) (Read error: Connection reset by peer)
2020-11-18 20:06:30 +0100u0_a298(~user@47.206.148.226)
2020-11-18 20:07:15 +0100dragestil(~quassel@185.137.175.104)
2020-11-18 20:07:20 +0100 <idnar> hekkaidekapus: blah, I could do with an Ord instance though
2020-11-18 20:08:47 +0100 <hekkaidekapus> The parsed numbers are not meant to be used as such. Refer to the ‘Consume’ section of haddocks instead.
2020-11-18 20:10:00 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 256 seconds)
2020-11-18 20:10:39 +0100wroathe(~wroathe@c-73-24-27-54.hsd1.mn.comcast.net)
2020-11-18 20:11:39 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2020-11-18 20:11:52 +0100nados(~dan@69-165-210-185.cable.teksavvy.com) (Quit: Leaving)
2020-11-18 20:12:57 +0100texasmynsted(~texasmyns@212.102.45.121) (Remote host closed the connection)
2020-11-18 20:13:32 +0100texasmynsted(~texasmyns@212.102.45.121)
2020-11-18 20:14:11 +0100geekosaur(82659a09@host154-009.vpn.uakron.edu)
2020-11-18 20:14:48 +0100dragestil(~quassel@185.137.175.104) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
2020-11-18 20:16:52 +0100ubert(~Thunderbi@p200300ecdf1e53a7e6b318fffe838f33.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2020-11-18 20:17:52 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-11-18 20:19:08 +0100texasmynsted(~texasmyns@212.102.45.121) (Ping timeout: 256 seconds)
2020-11-18 20:20:44 +0100Jonno_FTW(~come@api.carswap.me) (Ping timeout: 272 seconds)
2020-11-18 20:21:46 +0100cosimone(~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd)
2020-11-18 20:22:28 +0100knupfer(~Thunderbi@200116b8244bd6003ce66efffe6f5e29.dip.versatel-1u1.de)
2020-11-18 20:22:29 +0100knupfer(~Thunderbi@200116b8244bd6003ce66efffe6f5e29.dip.versatel-1u1.de) (Client Quit)
2020-11-18 20:22:43 +0100mastarija(~mastarija@93-136-96-155.adsl.net.t-com.hr)
2020-11-18 20:22:45 +0100knupfer(~Thunderbi@i5E86B4DB.versanet.de)
2020-11-18 20:23:36 +0100 <mastarija> I'm having some trouble writing instances for generics.
2020-11-18 20:23:40 +0100cr3(~cr3@192-222-143-195.qc.cable.ebox.net) (Ping timeout: 256 seconds)
2020-11-18 20:23:56 +0100 <mastarija> I have these two instances
2020-11-18 20:23:58 +0100 <mastarija> instance {-# OVERLAPPABLE #-} EncOpaque' v => EncOpaque' ( S1 s v ) where
2020-11-18 20:24:05 +0100 <mastarija> instance EncOpaque' v => EncOpaque' ( S1 ('MetaSel ( 'Just f ) x y z ) v ) where
2020-11-18 20:24:31 +0100 <mastarija> problem is that in the second I want to get name of the field 'f'
2020-11-18 20:24:43 +0100 <mastarija> for that I have to use Selector class
2020-11-18 20:24:53 +0100 <mastarija> if I do something like this:
2020-11-18 20:25:15 +0100 <mastarija> instance ( Selector s , EncOpaque' v ) => EncOpaque' ( S1 s v ) where
2020-11-18 20:25:47 +0100 <mastarija> then i can't match instance to specific case where s is 'MetaSel ( 'Just f ) x y z
2020-11-18 20:25:58 +0100 <jle`> i would recommend trying to avoid overlappable instances if possible
2020-11-18 20:26:10 +0100 <jle`> but in your case it looks like you just need a Selector ('MetaSel ('Just f) x y z) constraint
2020-11-18 20:26:23 +0100kritzefitz(~kritzefit@212.86.56.80)
2020-11-18 20:26:28 +0100 <mastarija> oh
2020-11-18 20:26:31 +0100 <mastarija> I'm an idiot
2020-11-18 20:26:50 +0100 <mastarija> I was trying things like ( Selector s , s ~ ( 'MetaSel ( 'Just f ) x y z ) , EncOpaque' v )
2020-11-18 20:26:51 +0100 <glguy> You could avoid the overlap by expanding the other instance to match on Nothing
2020-11-18 20:27:01 +0100acidjnk_new(~acidjnk@p200300d0c719ff57608036dc958592ad.dip0.t-ipconnect.de)
2020-11-18 20:27:05 +0100 <jle`> yeah, or enumerate whatever you would want to exclude
2020-11-18 20:27:24 +0100 <mastarija> glguy, yes that was the next step but I had a brain freeze on this problem
2020-11-18 20:27:30 +0100 <mastarija> thanks
2020-11-18 20:27:36 +0100Jonno_FTW(~come@api.carswap.me)
2020-11-18 20:28:03 +0100 <jle`> np :)
2020-11-18 20:28:19 +0100 <jle`> hm, why is there no type family to compare Type's :'(
2020-11-18 20:28:24 +0100 <jle`> there is an Ord instance for TypeRep
2020-11-18 20:28:27 +0100 <jle`> so it should be possible
2020-11-18 20:29:30 +0100hackagebank-holidays-england 0.2.0.6 - Calculation of bank holidays in England and Wales https://hackage.haskell.org/package/bank-holidays-england-0.2.0.6 (dten)
2020-11-18 20:30:01 +0100Lycurgus(~niemand@cpe-45-46-142-188.buffalo.res.rr.com) (Quit: Exeunt)
2020-11-18 20:30:07 +0100Yumasi(~guillaume@2a01cb09b06b29ea21daa97718c35c9f.ipv6.abo.wanadoo.fr) (Ping timeout: 272 seconds)
2020-11-18 20:30:13 +0100cr3(~cr3@192-222-143-195.qc.cable.ebox.net)
2020-11-18 20:31:12 +0100justan0theruser(~justanoth@unaffiliated/justanotheruser)
2020-11-18 20:31:39 +0100 <mastarija> jle`, quick question, with your suggested solution I'm getting a simplifiable constraint warning
2020-11-18 20:32:23 +0100 <jle`> what's the warning?
2020-11-18 20:32:30 +0100 <mastarija> The constraint `Selector ('MetaSel ('Just f) x y z)' matches instance (SingI mn, SingI su, SingI ss, SingI ds) => Selector ('MetaSel mn su ss ds
2020-11-18 20:32:54 +0100 <mastarija> jle`, SingI is not exported from Generics module so I can't use it
2020-11-18 20:33:04 +0100 <jle`> hm, that's interseting. i guess it's saying that you can use those constraints instead of Selector
2020-11-18 20:33:08 +0100 <jle`> is it from the singletons library, maybe?
2020-11-18 20:33:17 +0100justanotheruser(~justanoth@unaffiliated/justanotheruser) (Ping timeout: 272 seconds)
2020-11-18 20:33:22 +0100 <mastarija> No, I think it's something ad hoc from Generics module
2020-11-18 20:33:47 +0100 <mastarija> I also thought it's from singletons, but generics defines its own SingI class
2020-11-18 20:33:49 +0100 <jle`> whoops
2020-11-18 20:33:57 +0100 <jle`> then yeah, you can't really do anything about that
2020-11-18 20:34:02 +0100 <jle`> that i know of
2020-11-18 20:34:05 +0100 <mastarija> :D
2020-11-18 20:34:12 +0100 <mastarija> thanks anyway
2020-11-18 20:34:31 +0100 <jle`> np D:
2020-11-18 20:36:42 +0100 <glguy> mastarija: just merge the two instances into one
2020-11-18 20:36:43 +0100 <mastarija> jle`, when I enable GADTs (and MonoLocalBinds) the warning goes away
2020-11-18 20:36:46 +0100st8less(~st8less@2603:a060:11fd:0:9539:fd10:c1ca:1d78)
2020-11-18 20:36:52 +0100 <jle`> oh nice
2020-11-18 20:37:09 +0100 <glguy> Check if selName is "" and branch on that
2020-11-18 20:37:57 +0100 <mastarija> glguy, I was thinking about it, but it kind of seemed messy and I'd had to do a lot of extra work in other instances
2020-11-18 20:38:03 +0100 <mastarija> Dunno, will think about it
2020-11-18 20:38:10 +0100invaser(~Thunderbi@31.148.23.125) (Ping timeout: 246 seconds)
2020-11-18 20:38:40 +0100hidedagger(~nate@unaffiliated/hidedagger)
2020-11-18 20:38:57 +0100texasmynsted(~texasmyns@212.102.45.121)
2020-11-18 20:39:13 +0100codecaveman(58deaa27@88.222.170.39)
2020-11-18 20:40:05 +0100hidedagger(~nate@unaffiliated/hidedagger) (Client Quit)
2020-11-18 20:40:15 +0100alp(~alp@2a01:e0a:58b:4920:61ca:7518:9e8a:5ce1) (Ping timeout: 272 seconds)
2020-11-18 20:40:46 +0100conal(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2020-11-18 20:41:20 +0100cosimone(~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd) (Quit: cosimone)
2020-11-18 20:42:06 +0100borne(~fritjof@200116b864880600f1dc39039d201adf.dip.versatel-1u1.de)
2020-11-18 20:42:25 +0100conal_(~conal@64.71.133.70)
2020-11-18 20:42:46 +0100jakob_(~textual@p200300f49f162200756a589588d5c172.dip0.t-ipconnect.de)
2020-11-18 20:44:37 +0100 <gehmehgeh> Am I correct in that Data.Map doesn't have a function to see whether or not a Data.Map is empty? Meaning, you *have* to compare with an empty Data.Map?
2020-11-18 20:44:46 +0100 <merijn> It does
2020-11-18 20:44:55 +0100 <gehmehgeh> ah?
2020-11-18 20:44:57 +0100raichoo(~raichoo@dslb-178-001-021-225.178.001.pools.vodafone-ip.de) (Quit: Lost terminal)
2020-11-18 20:44:58 +0100 <merijn> Probably "null"?
2020-11-18 20:45:01 +0100 <merijn> :t M.null
2020-11-18 20:45:06 +0100 <lambdabot> M.Map k a -> Bool
2020-11-18 20:45:08 +0100 <gehmehgeh> ah!
2020-11-18 20:45:11 +0100 <gehmehgeh> Thank you!
2020-11-18 20:45:18 +0100 <gehmehgeh> (Sorry, I was a bit confused)
2020-11-18 20:45:48 +0100 <gehmehgeh> I *did* look at https://hackage.haskell.org/package/containers-0.3.0.0/docs/Data-Map.html, but missed it somehow..
2020-11-18 20:45:53 +0100 <gehmehgeh> Thanks :)
2020-11-18 20:45:56 +0100 <davean> gehmehgeh: Is there something that could have made that more obvious?
2020-11-18 20:45:59 +0100Guest42(56ca6780@gateway/web/cgi-irc/kiwiirc.com/ip.86.202.103.128)
2020-11-18 20:46:01 +0100conal_(~conal@64.71.133.70) (Client Quit)
2020-11-18 20:46:03 +0100 <merijn> gehmehgeh: Note the "module Data.Map.Lazy" line there
2020-11-18 20:46:15 +0100 <merijn> gehmehgeh: That indicates a re-export of stuff from Data.Map.Lazy
2020-11-18 20:46:37 +0100 <merijn> gehmehgeh: There's some work in haddock to make re-exports more obvious, but it's not done yet, I think?
2020-11-18 20:47:05 +0100 <merijn> gehmehgeh: So most of the actualy API of Map is Data.Map.Lazy and Data.Map.Strict
2020-11-18 20:47:12 +0100 <gehmehgeh> davean: no, it was my fault. I simply overlooked the word "empty" in one instance of the website. THis normally doesn't happen to me ;)
2020-11-18 20:47:35 +0100kritzefitz_(~kritzefit@212.86.56.80)
2020-11-18 20:47:35 +0100SanchayanMaity(~Sanchayan@106.201.35.233)
2020-11-18 20:47:56 +0100 <gehmehgeh> It even says: "O(1). Is the map empty?"
2020-11-18 20:48:22 +0100 <merijn> gehmehgeh: Comparing with == would be bad, because that doesn't work if your values aren't an instance of Eq :)
2020-11-18 20:48:23 +0100 <glguy> davean: naming it isEmpty instead of null could help
2020-11-18 20:48:31 +0100 <gehmehgeh> merijn: That's exactly right.
2020-11-18 20:48:38 +0100 <gehmehgeh> merijn: This is actually why I asked.
2020-11-18 20:48:55 +0100 <merijn> glguy: On the one hand, yes. On the other hand "null" is consistent across a whole bunch of packages and Foldable currently
2020-11-18 20:49:05 +0100kritzefitz(~kritzefit@212.86.56.80) (Ping timeout: 240 seconds)
2020-11-18 20:49:36 +0100 <glguy> Yeah, it's a shame we got stuck with that name due to inertia
2020-11-18 20:49:43 +0100codecaveman(58deaa27@88.222.170.39) (Remote host closed the connection)
2020-11-18 20:49:53 +0100 <merijn> It's a shame that we're stuck with lots of things due to inertia :)
2020-11-18 20:50:12 +0100 <monochrom> One of the rare instances when Scheme is admirable because it allows the name to be "null?"
2020-11-18 20:50:40 +0100 <dolio> Yeah, I wish we could put question marks in names.
2020-11-18 20:50:50 +0100 <merijn> Braindead specification of Enum, god awful Enum instance for Double, lack of API for safely handling over-/underflow in numerical conversions
2020-11-18 20:51:09 +0100 <dminuoso> Given `f :: a -> (Word32 -> P -> b) -> b`, I wanted to move `(Word32 -> P -> b) -> b` into a type alias, but that suddenly requires RankNTypes, is there a different route without demanding that extension everywhere?
2020-11-18 20:51:14 +0100 <davean> ∅?
2020-11-18 20:51:16 +0100 <merijn> The inability to mix qualified imports and import lists
2020-11-18 20:51:18 +0100takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2020-11-18 20:51:40 +0100 <merijn> dminuoso: "add a type variable to the alias"?
2020-11-18 20:51:40 +0100raehik1(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Read error: Connection reset by peer)
2020-11-18 20:51:45 +0100 <dolio> You can mix those, I think.
2020-11-18 20:51:48 +0100mananamenos(~mananamen@84.122.202.215.dyn.user.ono.com)
2020-11-18 20:51:58 +0100 <merijn> dolio: You can, but what that does is dumb as hell
2020-11-18 20:52:09 +0100 <davean> merijn: So I REALLY don't like our numerical tower.
2020-11-18 20:52:11 +0100 <merijn> dolio: That just means you only import those names qualified
2020-11-18 20:52:20 +0100 <dolio> Oh, I see what you mean.
2020-11-18 20:52:21 +0100 <merijn> davean: I don't like it, but fixing that is less obvious
2020-11-18 20:52:25 +0100mananamenos_(~mananamen@84.122.202.215.dyn.user.ono.com) (Ping timeout: 264 seconds)
2020-11-18 20:52:28 +0100 <merijn> davean: So I'm willing to firgive that
2020-11-18 20:52:34 +0100 <monochrom> merijn: Are we listing a few warts of Haskell now?
2020-11-18 20:52:36 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2020-11-18 20:53:02 +0100 <merijn> dolio: Haskell would be so much better if I could write "import qualified Data.Map as M (Map)" and having "Map" imported unqualified :(
2020-11-18 20:53:11 +0100 <davean> merijn: I think theres a few obvious ones. It depends on if you're willing to evolve it (it doesn't seem we are) or insist on jumping to a perfect solution.
2020-11-18 20:53:33 +0100 <merijn> davean: I haven't seen any "improvements" that were "strictly better"
2020-11-18 20:53:33 +0100 <monochrom> I just have one to gripe about, all the others I really don't mind. This one: The tendency of the community to pretend that it is a dependently typed language.
2020-11-18 20:53:36 +0100 <dolio> I think most of the 'perfect solutions' are probably actually not that good.
2020-11-18 20:53:43 +0100 <merijn> monochrom: Oh, definitely
2020-11-18 20:53:47 +0100 <merijn> dolio++
2020-11-18 20:54:04 +0100 <davean> merijn: well making it so most Num instances don't have undefineds ...
2020-11-18 20:54:05 +0100 <dminuoso> merijn: Mmm, I dont like that either.
2020-11-18 20:54:18 +0100 <dolio> They generally assume that borrowing dozens of mathematical classificationsn is good.
2020-11-18 20:54:19 +0100 <monochrom> Ah yeah that would be a nice feature merijn.
2020-11-18 20:54:19 +0100 <merijn> I don't want "mathematically accurate" I want "useful for practical things in the real world" :p
2020-11-18 20:54:26 +0100 <dminuoso> Ah, perhaps I can just stick it in a newtype, that would only require RankNTypes on the definition site
2020-11-18 20:54:55 +0100 <merijn> Who gives a fuck that double operations aren't associative? Just let me safely turn Int64 into Int32 in a remotely safe and sane way...
2020-11-18 20:55:30 +0100 <monochrom> But I think I have a better syntax. Here is the full form, and you can omit various parts: import Data.Map (Map, (!)) qualified as M (null, insert)
2020-11-18 20:55:49 +0100 <merijn> monochrom: That would require a change to the parser, etc.
2020-11-18 20:55:58 +0100 <monochrom> likewise for hiding, e.g., import Data.Map hiding (null) qualified as M hiding (insert)
2020-11-18 20:56:19 +0100 <monochrom> Yeah I know, but it is both more complete and less ambiguous
2020-11-18 20:56:20 +0100 <merijn> Qualified re-exports would be a killer feature too, tbh
2020-11-18 20:56:34 +0100 <monochrom> I mean s/less ambiguous/more guessable/
2020-11-18 20:56:36 +0100 <geekosaur> but it's not an incompatible change
2020-11-18 20:56:40 +0100falafel(~falafel@2601:547:1303:b30:7811:313f:d0f3:f9f4)
2020-11-18 20:56:52 +0100 <geekosaur> I think qualified re-exports require help from the linker though
2020-11-18 20:56:54 +0100 <merijn> geekosaur: Which one?
2020-11-18 20:57:20 +0100 <geekosaur> monochrom's suggested import syntax
2020-11-18 20:57:31 +0100 <merijn> monochrom: Actually, I have a major objection to your proposed syntax
2020-11-18 20:58:11 +0100mananamenos(~mananamen@84.122.202.215.dyn.user.ono.com) (Ping timeout: 260 seconds)
2020-11-18 20:58:46 +0100 <merijn> monochrom: You violated the key principle (that IMO should be a core value in syntax design) of "accommodate a non-awkward way of linewrapping this when import lists get long..."
2020-11-18 20:58:49 +0100mananamenos(~mananamen@84.122.202.215.dyn.user.ono.com)
2020-11-18 20:58:59 +0100 <dolio> Didn't one of the recent versions add an option for 'qualified' later in the import?
2020-11-18 20:59:05 +0100 <merijn> Haskell's current syntax fails that horribly too
2020-11-18 20:59:27 +0100 <merijn> dolio: All that does is let you write "import Data.Map qualified" instead of "import qualified Data.Map"
2020-11-18 20:59:33 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:1c60:9ba4:8bf9:ee34) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-11-18 20:59:34 +0100 <dolio> Right, okay.
2020-11-18 20:59:35 +0100 <davean> merijn: Don't like int-cast?
2020-11-18 20:59:36 +0100 <merijn> gratuitously breaking all haskell source/parse thigns
2020-11-18 21:00:14 +0100 <monochrom> I think my proposal respects that principle.
2020-11-18 21:00:15 +0100 <merijn> davean: The fact that it's not built into Num is gross negligence
2020-11-18 21:00:39 +0100 <merijn> monochrom: How do you line wrap when the import list becomes, like, 10 entries long?
2020-11-18 21:00:55 +0100 <davean> merijn: but we don't have to build it into Num, and I don't think it makes sense to. A lot don't have sensible conversions?
2020-11-18 21:01:11 +0100 <merijn> davean: Also, no, int-cast's intCastMaybe isn't good enough
2020-11-18 21:01:47 +0100 <merijn> Ideally you have "intCastDynamic :: (Integral a, Integral b) => a -> Either (a, b) b"
2020-11-18 21:01:58 +0100 <merijn> i.e. don't just fail, give me the max possible value + remainder
2020-11-18 21:02:14 +0100 <merijn> That's much more useful
2020-11-18 21:02:28 +0100mastarija(~mastarija@93-136-96-155.adsl.net.t-com.hr) (Ping timeout: 265 seconds)
2020-11-18 21:02:39 +0100 <monochrom> https://paste.tomsmeding.com/Fxc7LZRQ
2020-11-18 21:02:51 +0100 <merijn> davean: We have fromIntegral in Num
2020-11-18 21:02:54 +0100 <davean> monochrom: its built in to https://hackage.haskell.org/package/base-4.13.0.0/docs/Data-Bits.html Because thats where it makes some sense.
2020-11-18 21:03:15 +0100 <merijn> eh, fromInteger, I mean
2020-11-18 21:03:32 +0100 <merijn> Why is having only an unsafe fromInteger better/more sensible then a checking variant?
2020-11-18 21:03:55 +0100 <merijn> monochrom: Yeah, that's a super ugly and awkward way to line wrap :p
2020-11-18 21:04:24 +0100 <monochrom> OK, what is a nicer way to line-wrap?
2020-11-18 21:04:29 +0100 <davean> merijn: why is "negate" there too? Because Num is broken.
2020-11-18 21:04:33 +0100 <merijn> I haven't thought of one yet
2020-11-18 21:04:52 +0100 <merijn> davean: Didn't you *just* say that "it's broken" wasn't a reason to not improve things? :p
2020-11-18 21:05:18 +0100 <monochrom> What is super ugly and awkward about it?
2020-11-18 21:05:23 +0100 <davean> merijn: yes, but you asked why "fromInteger" is there, I think "Num wasn't thought out, and is fundimentally broken" is the reason.
2020-11-18 21:05:42 +0100 <merijn> davean: "to convert numerical literals" is why
2020-11-18 21:05:55 +0100 <merijn> But converting numerical literals in a silently corrupting way is bad
2020-11-18 21:05:57 +0100 <juri_> davean: try looking at Rational sometime.
2020-11-18 21:05:57 +0100nbloomf(~nbloomf@2600:1700:ad14:3020:d091:432d:3cee:b0b2)
2020-11-18 21:06:02 +0100 <davean> juri_: Trust me I have
2020-11-18 21:06:13 +0100 <merijn> Actually, what we *really* need is https://hackage.haskell.org/package/validated-literals built into base
2020-11-18 21:06:15 +0100 <davean> MOST of my problems programming Haskell these days come from our Numeric classes being wrong.
2020-11-18 21:06:23 +0100 <merijn> or rather, GHC
2020-11-18 21:06:27 +0100 <davean> You simply can't be generic in your number type with Haskell's tower.
2020-11-18 21:06:30 +0100unfixpoint(1f0a965a@31-10-150-90.cgn.dynamic.upc.ch)
2020-11-18 21:06:33 +0100 <davean> Because all the classes are just lies.
2020-11-18 21:06:34 +0100mirrorb2rd(~psutcliff@89.40.182.152) (Quit: Leaving)
2020-11-18 21:07:27 +0100 <unfixpoint> I'm having problems with some data type that uses RankNTypes.. I'm trying to abstract the way I connect to a database with holding `(Connection -> IO a) -> IO a` in a reader thing.
2020-11-18 21:07:39 +0100 <unfixpoint> I condensed the problem to this: https://pastebin.com/raw/geEHaeFk
2020-11-18 21:08:05 +0100 <merijn> unfixpoint: That's not a RankNType, that's an existential
2020-11-18 21:08:13 +0100SanchayanMaity(~Sanchayan@106.201.35.233) (Quit: SanchayanMaity)
2020-11-18 21:08:18 +0100 <merijn> Which means the forall is in the wrong place
2020-11-18 21:08:32 +0100heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2020-11-18 21:08:36 +0100 <merijn> Because it's current location already has an implicit one in haskell
2020-11-18 21:08:46 +0100 <monochrom> I'm pretty sure all you need is exposing the "a" as a type parameter.
2020-11-18 21:08:47 +0100 <unfixpoint> Though the errors slightly changed, now it says '(Connection -> IO a1) -> IO a1' cannot be matched with '(forall a. (Connection -> IO a) -> IO a)' but in the actual problem it is 'a' cannot matched 'a0'
2020-11-18 21:09:08 +0100 <monochrom> data R a = R ((Connection -> IO a) -> IO a)
2020-11-18 21:09:15 +0100hidedagger(~nate@unaffiliated/hidedagger)
2020-11-18 21:09:45 +0100 <koz_> Am I the only person who mis-spells Data.Vector's (!?) as (?!) all the time?
2020-11-18 21:10:12 +0100 <monochrom> Heh. Yesterday I kept misspelling "dictionary" as "directory".
2020-11-18 21:10:28 +0100dxld(~dxld@rush.pub.dxld.at) (Quit: Bye)
2020-11-18 21:10:30 +0100 <koz_> monochrom: Lol... some similarities there for sure.
2020-11-18 21:10:50 +0100 <merijn> unfixpoint: Anyway, RankN isn't what you want here, you either want existential quantification or just a parametric 'R' as monochrom suggests
2020-11-18 21:10:52 +0100 <unfixpoint> monochrom: Not sure if it will work?
2020-11-18 21:11:29 +0100 <unfixpoint> But when I write it GHC yelled at me I should be using RankN. Is Existential implied by RankN
2020-11-18 21:11:31 +0100 <unfixpoint> ?
2020-11-18 21:11:59 +0100 <merijn> No, they're different things
2020-11-18 21:12:06 +0100gumbish(4913050a@c-73-19-5-10.hsd1.wa.comcast.net)
2020-11-18 21:12:25 +0100 <merijn> unfixpoint: "GHC tells you to enable extension X" is only loosely correlated with "actually needing/wanting X"
2020-11-18 21:12:31 +0100 <monochrom> That's an XY problem.
2020-11-18 21:12:48 +0100 <merijn> unfixpoint: GHC guess you need RankN from what you *wrote*, not from what you *want*
2020-11-18 21:13:00 +0100 <monochrom> Are you an expert? Because GHC suggestions assume you're an expert and you merely made a typo.
2020-11-18 21:13:11 +0100dxld(~dxld@80-109-136-248.cable.dynamic.surfer.at)
2020-11-18 21:13:25 +0100 <gumbish> XY problem?
2020-11-18 21:13:29 +0100Boomerang(~Boomerang@xd520f68c.cust.hiper.dk)
2020-11-18 21:13:37 +0100 <tomjaguarpaw> I think that's a YX problem.
2020-11-18 21:13:39 +0100rekahsoft(~rekahsoft@cpe0008a20f982f-cm64777d666260.cpe.net.cable.rogers.com)
2020-11-18 21:13:42 +0100 <monochrom> It never realizes that 99% of these errors are because you made a wrong design and you tried an overkill.
2020-11-18 21:13:45 +0100 <merijn> gumbish: https://xyproblem.info/
2020-11-18 21:13:48 +0100 <unfixpoint> monochrom: I'm not trying to argue this, not an expert
2020-11-18 21:14:15 +0100 <unfixpoint> tomjaguarpaw: What do I actually want to do?
2020-11-18 21:14:17 +0100 <geekosaur> ghc has to guess what you intended from what you wrote. In this case its guess was wrong
2020-11-18 21:14:22 +0100AlterEgo-(~ladew@124-198-158-163.dynamic.caiway.nl) (Quit: Leaving)
2020-11-18 21:15:37 +0100 <merijn> unfixpoint: That depends what your intention for 'R' is
2020-11-18 21:15:38 +0100 <geekosaur> It doesn't try very hard because it can't really know what you intended, it just went by what would make what you wrote syntactically correct. But only syntactically, not semantically
2020-11-18 21:16:54 +0100 <unfixpoint> The 'R' basically holds information how to connect among other things (ie. has other fields as well)
2020-11-18 21:17:31 +0100 <merijn> unfixpoint: Right, but why does the 'a' have to be hidden? Why does monochrom's suggestion of just writing 'R a' not work?
2020-11-18 21:17:43 +0100 <unfixpoint> I could in theory have a `data R = R { connectInfo :: (Host,Port,Creds) , ... }` actually
2020-11-18 21:18:01 +0100hidedagger(~nate@unaffiliated/hidedagger) (Quit: WeeChat 2.9)
2020-11-18 21:18:31 +0100hackagehaveibeenpwned 0.2.0.0 - Library for checking for weak/compromised passwords. https://hackage.haskell.org/package/haveibeenpwned-0.2.0.0 (abrar)
2020-11-18 21:18:50 +0100AlterEgo-(~ladew@124-198-158-163.dynamic.caiway.nl)
2020-11-18 21:18:54 +0100 <unfixpoint> It was a question, I'm not sure whether it will work.
2020-11-18 21:19:33 +0100idhugo(~idhugo@80-62-116-101-mobile.dk.customer.tdc.net) (Ping timeout: 260 seconds)
2020-11-18 21:19:36 +0100 <merijn> unfixpoint: You can certainly do *that*, because I have, but that sounds more like something where you'll want existentials, depending on the exact design
2020-11-18 21:19:50 +0100hidedagger(~nate@unaffiliated/hidedagger)
2020-11-18 21:20:22 +0100 <unfixpoint> geekosaur: I'm sure someone meant well with those error messages (probably a lot of work), but maybe it should only try what is possible or make sure that the error is actually what it says.
2020-11-18 21:20:28 +0100hidedagger(~nate@unaffiliated/hidedagger) (Client Quit)
2020-11-18 21:20:44 +0100 <merijn> the error is what it is, the suggested fix isn't always
2020-11-18 21:20:50 +0100 <unfixpoint> merijn: I see, I'll try where I get from here.
2020-11-18 21:21:07 +0100 <monochrom> This is why IMO such "helpful" hints are evil.
2020-11-18 21:21:11 +0100 <merijn> unfixpoint: I like to call that "OO" Haskell
2020-11-18 21:21:26 +0100 <monochrom> And I say that the poeple who promoted those hints are do-gooders.
2020-11-18 21:21:30 +0100hackagehaveibeenpwned 0.2.0.1 - Library for checking for weak/compromised passwords. https://hackage.haskell.org/package/haveibeenpwned-0.2.0.1 (abrar)
2020-11-18 21:21:31 +0100 <unfixpoint> Wait, why OO-Haskell?
2020-11-18 21:21:33 +0100 <merijn> unfixpoint: persistent uses it, so maybe you wanna have a alook at what they do
2020-11-18 21:22:08 +0100 <merijn> unfixpoint: Because having a datatype that exposes abstract API that you can use without knowing its internals is basically just OO interfaces? :)
2020-11-18 21:22:32 +0100 <dminuoso> Unsure what that has to do with "object oriented" though
2020-11-18 21:22:40 +0100 <dminuoso> That's just encapsulation. :)
2020-11-18 21:22:44 +0100Deide(~Deide@217.155.19.23)
2020-11-18 21:22:46 +0100 <unfixpoint> I guess that's true, yeah. I always considered typeclasses as that
2020-11-18 21:23:00 +0100rekahsoft(~rekahsoft@cpe0008a20f982f-cm64777d666260.cpe.net.cable.rogers.com) (Remote host closed the connection)
2020-11-18 21:23:30 +0100 <merijn> unfixpoint: I find typeclass rather "entirely unlike OO" the more you consider them :)
2020-11-18 21:23:43 +0100 <merijn> unfixpoint: You might wanna look at this and the code that uses it to get inspiration? https://github.com/yesodweb/persistent/blob/a819276a883b89ac898bf61ff7a1cc8a8bf3cd50/persistent/Da…
2020-11-18 21:23:59 +0100 <unfixpoint> The interface part though.
2020-11-18 21:24:06 +0100 <dminuoso> merijn: Arguably, the core theme that makes OO OO, is one of two things. It's either smalltalk-esque message passing, or its subtyping. Or a combination of both. The "methods" and "internals/externals" is just language ergonomics that has nothing to do with object orientation.
2020-11-18 21:24:23 +0100boxscape(54a35f37@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.95.55)
2020-11-18 21:24:24 +0100 <unfixpoint> merijn: ty!
2020-11-18 21:24:36 +0100 <merijn> unfixpoint: And how it gets used: https://github.com/yesodweb/persistent/blob/master/persistent-sqlite/Database/Persist/Sqlite.hs#L2…
2020-11-18 21:24:44 +0100rekahsoft(~rekahsoft@cpe0008a20f982f-cm64777d666260.cpe.net.cable.rogers.com)
2020-11-18 21:25:00 +0100 <dminuoso> That is, whether you write `f->g()`, `f.g()`, `f(g)`, `g f` these are just visual considerations, trying to nudge your thinking into one direction
2020-11-18 21:25:10 +0100 <boxscape> it's weird, sometimes programming with type families actually feels more convenient than with regular functions, because they already support visible dependent as well as relevant quantification without Singletons
2020-11-18 21:25:50 +0100 <boxscape> Though I imagine I'll lose that feeling once I actually start writing term-level functions that use these type families ....
2020-11-18 21:25:50 +0100cosimone(~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd)
2020-11-18 21:27:16 +0100knupfer(~Thunderbi@i5E86B4DB.versanet.de) (Ping timeout: 240 seconds)
2020-11-18 21:28:09 +0100 <unfixpoint> Not sure if he's right (he was kind of arrogant) but my prof claimed the invention of *information hiding* and his language (Eiffel) sure was/is OO
2020-11-18 21:28:41 +0100 <unfixpoint> Then again just because an XY-language introduces a feature doesn't mean it's inherent to XY-languages
2020-11-18 21:28:47 +0100 <boxscape> OO means many different things to different people, especially the person who came up with the term
2020-11-18 21:28:49 +0100 <ski> abstract data types is also about "information hiding" (and is different from OO)
2020-11-18 21:29:11 +0100 <dminuoso> unfixpoint: information hiding can appear at many different levels. it can happen across systems, architecturally, across libraries, modules
2020-11-18 21:30:07 +0100luto1(~luto@84.39.117.57) (Ping timeout: 256 seconds)
2020-11-18 21:30:17 +0100 <ski> with parametric polymorphism and type classes, you can say `maximum :: Ord a => [a] -> a'. you can't really say that, with OO
2020-11-18 21:30:37 +0100 <dminuoso> Well.. you can..
2020-11-18 21:31:00 +0100 <dminuoso> elixir protocols explore that mixture
2020-11-18 21:31:30 +0100 <ski> with bounded polymorphism, you can say something akin to that. but that's assuming you also have (bounded) parametric polymorphism
2020-11-18 21:31:39 +0100 <unfixpoint> interface Ordering<X> { maximum :: List<X> -> X } or something. I haven't OO'ed for a while
2020-11-18 21:31:45 +0100AlterEgo-(~ladew@124-198-158-163.dynamic.caiway.nl) (Quit: Leaving)
2020-11-18 21:31:57 +0100 <ski> right, the `<X>' there implies parametric polymorphism
2020-11-18 21:32:28 +0100 <unfixpoint> Lol true, so which OO-language doesn't have parametric polymorphism then?
2020-11-18 21:32:40 +0100 <dminuoso> C++ for starters
2020-11-18 21:32:43 +0100 <merijn> unfixpoint: Some do (in some forms)
2020-11-18 21:32:56 +0100 <monochrom> The <X> was definitely alien to OO.
2020-11-18 21:32:58 +0100 <merijn> unfixpoint: Java/C# generics are (basically) parametric polymorphism
2020-11-18 21:32:59 +0100 <dminuoso> The existence of template specializations puts a nail into that coffin.
2020-11-18 21:33:28 +0100 <merijn> oh, wait, the question was "which doesn't"
2020-11-18 21:33:36 +0100 <merijn> Python :p
2020-11-18 21:33:50 +0100 <dolio> Java didn't have it until version 5.
2020-11-18 21:34:19 +0100 <monochrom> Java learned <X> from Wadler's Pizza. Not even from C++.
2020-11-18 21:34:20 +0100 <boxscape> seems kind of weird to even ask the question of whether a language without static typing has parametric polymorphism
2020-11-18 21:34:35 +0100 <ski> OO bundles methods with an object. type classes doesn't do that
2020-11-18 21:34:38 +0100 <boxscape> It's quite possible that the correct answer is "no" but it almost feels to me like it should be "undefined"
2020-11-18 21:34:39 +0100 <monochrom> perhaps apart from borrowing the notation
2020-11-18 21:35:30 +0100 <monochrom> A dynamically typed language has maximum polymorphism and non-existent parametric.
2020-11-18 21:35:42 +0100 <boxscape> I see
2020-11-18 21:36:00 +0100 <monochrom> (To remind you that there are many different, conflicting polymorphisms, too.)
2020-11-18 21:36:09 +0100 <dminuoso> unfixpoint: Also recall, there's two different notions of "object-oriented". One is the heritage ranging all the way back to smalltalk, and the other with simula (they both have possibly more ancient ancestors)
2020-11-18 21:36:28 +0100 <ski> @where on-understanding
2020-11-18 21:36:28 +0100 <lambdabot> "On Understanding Types, Data Abstraction, and Polymorphism" by Luca Cardelli,Peter Wegner in 1985-12 at <http://lucacardelli.name/Papers/OnUnderstanding.A4.pdf>
2020-11-18 21:37:16 +0100 <dminuoso> Often nowadays people understand it as the second, as class with inheritance and everything that belongs to it, though the original idea largely influenced by Alan Kay and others is more about message passing.
2020-11-18 21:38:11 +0100 <dminuoso> Very broadly where program parts are conceptual objects with internal state, exchanging messages and thus interacting with each other
2020-11-18 21:38:32 +0100 <dminuoso> A style certainly not respected by Java enthusiasts as much
2020-11-18 21:38:34 +0100 <boxscape> https://i.imgur.com/iag7eoN.png
2020-11-18 21:38:36 +0100 <unfixpoint> I understand it as the latter then, message passing is separate to me. But I'm young it seems (certainly did I never program in Java 5)
2020-11-18 21:40:29 +0100 <ski> given `interface Counter { int tick(); void reset(); }' in Java, the object type `Counter' corresponds in Haskell to `exists a. Counter a *> a', assuming `class Counter a where tick :: a -> IO Int; reset :: a -> IO ()', alternatively corresponds to `exists a. (a,a -> IO Int,a -> IO ())'
2020-11-18 21:40:30 +0100kritzefitz_(~kritzefit@212.86.56.80) (Read error: Connection reset by peer)
2020-11-18 21:40:35 +0100knupfer(~Thunderbi@200116b8244bd600401750fffecef6b8.dip.versatel-1u1.de)
2020-11-18 21:40:53 +0100kritzefitz(~kritzefit@212.86.56.80)
2020-11-18 21:40:54 +0100kritzefitz(~kritzefit@212.86.56.80) (Client Quit)
2020-11-18 21:41:00 +0100 <dolio> You can tell most OO folks don't care about the smalltalk perspective, because if they did, they'd be all about proper tail calls.
2020-11-18 21:41:02 +0100knupfer(~Thunderbi@200116b8244bd600401750fffecef6b8.dip.versatel-1u1.de) (Remote host closed the connection)
2020-11-18 21:41:05 +0100rekahsoft(~rekahsoft@cpe0008a20f982f-cm64777d666260.cpe.net.cable.rogers.com) (Ping timeout: 240 seconds)
2020-11-18 21:41:08 +0100nuncanada(~dude@179.235.160.168) (Ping timeout: 260 seconds)
2020-11-18 21:41:14 +0100 <dolio> Instead they use loops they borrowed from C.
2020-11-18 21:41:15 +0100knupfer(~Thunderbi@200116b8244bd600690e470b1c9f0b95.dip.versatel-1u1.de)
2020-11-18 21:42:11 +0100 <ski> `exists a. Counter a *> a' expresses "bundling methods with object state". but in Haskell, we can also express e.g. `exists a. (Ord a,Widget a) *> [a]' where we bundle not an individual object with methods, but rather attach them to a whole collection of objects
2020-11-18 21:44:09 +0100 <ski> (in the case of `exists a. (a,a -> IO Int,a -> IO ())', a shorter way (normally implemented by closures) to express this is `(IO Int,IO ())' .. but this method of removing the existential doesn't always work, e.g. if some method take multiple `a's as input (so-called "binary methods", like a comparision. also see "clone methods"))
2020-11-18 21:45:05 +0100 <unfixpoint> Why *> instead of =>? Never used the singletons but in this case is it not the same?
2020-11-18 21:45:19 +0100 <ski> not at all the same, rather the "opposite"
2020-11-18 21:46:20 +0100 <boxscape> does it actually have to do with singletons?
2020-11-18 21:46:21 +0100 <unfixpoint> So given [a] we can Ord and Widget it? Instead of Given that we can Ord, Widget an a we have [a]? Wat?
2020-11-18 21:47:01 +0100 <unfixpoint> Idk, I didn't know (*>) as type operator so I looked it up on Hoogle
2020-11-18 21:47:09 +0100 <dminuoso> unfixpoint: It's not, it's pseudo haskell
2020-11-18 21:47:26 +0100 <ski> if you have `foo :: Blah => ...', then the caller/consumer/user of `foo' must provide evidence of `Blah', before being able to call/use `foo' (with type `...'). and the callee/implementor/producer of `foo' can simply take the evidence of `Blah' for granted, can e.g. call methods (and other operations relying on those methods) from `Blah'
2020-11-18 21:47:30 +0100 <boxscape> (the singletons version is just the lifted version of Applicative's *>)
2020-11-18 21:47:37 +0100 <dminuoso> If we had exists in addition to forall, then it'd make sense to have a *> variant of => instead
2020-11-18 21:48:05 +0100 <dminuoso> Not even sure who introduced the syntax of *>, but I wouldn't be surprised if it was ski themselves. :)
2020-11-18 21:48:17 +0100 <monochrom> It's related to: "for all positive x, P(x)" = "for all x, positive x implies P(x)", but "for some positive x, P(x)" = "for some x, positive x and P(x)"
2020-11-18 21:48:44 +0100 <monochrom> You simply don't use "implies" in the existential version.
2020-11-18 21:48:45 +0100conal(~conal@64.71.133.70)
2020-11-18 21:49:22 +0100 <ski> if you have `foo :: Blah *> ...', then the callee/producer/implementor of `foo' can simply take the evidence of `Blah' for granted (and also use the value of type `...'). but the caller/user/consumer of `foo' must produce evidence of `Blah' (together with constructing a value of type `...')
2020-11-18 21:49:27 +0100 <ski> dminuoso : yes
2020-11-18 21:49:50 +0100falafel(~falafel@2601:547:1303:b30:7811:313f:d0f3:f9f4) (Ping timeout: 264 seconds)
2020-11-18 21:50:18 +0100 <monochrom> So given that "and" is somewhat analogous to multiplication, and it would be nice to keep the ">" part, some of us chose the pseudocode *> notation.
2020-11-18 21:50:30 +0100Franciman(~francesco@host-82-56-223-169.retail.telecomitalia.it) (Quit: Leaving)
2020-11-18 21:50:43 +0100 <ski> the distinction `Blah => ...' vs. `Blah *> ...' is similar to the distinction `T -> U' vs. `(T,U)', and the distinction `forall a. ..a..' vs. `exists a. ..a..'
2020-11-18 21:51:06 +0100 <boxscape> can you encode *> analogously to how you can encode exists?
2020-11-18 21:51:20 +0100 <ski> and yes, this `*>' is just pseudo-code that some of us sometimes use to express this "dual" concept to `=>'
2020-11-18 21:51:31 +0100hackagephonetic-languages-examples 0.6.1.0 - A generalization of the uniqueness-periods-vector-examples functionality. https://hackage.haskell.org/package/phonetic-languages-examples-0.6.1.0 (OleksandrZhabenko)
2020-11-18 21:51:55 +0100 <dminuoso> boxscape: Sure, as we can encode exists with forall.
2020-11-18 21:52:06 +0100 <boxscape> okay, neat
2020-11-18 21:52:07 +0100 <dminuoso> boxscape: So in that encoding => takes the role of *>
2020-11-18 21:52:16 +0100 <boxscape> oh, that's pretty straightforward
2020-11-18 21:52:21 +0100dragestil(~quassel@fsf/member/dragestil)
2020-11-18 21:53:07 +0100 <ski> yes, you can write `data cxt *> a = cxt => Provide a' alternatively `data cxt *> a where Provide :: cxt => a -> cxt *> a'
2020-11-18 21:53:12 +0100 <monochrom> Like this? "data X = forall a. Show a => X [a]" becomes "forall a. Show a => ([a] -> c) -> c"
2020-11-18 21:53:22 +0100 <ski> (compare `Provide' with `(,) :: a -> b -> (a,b)')
2020-11-18 21:53:26 +0100crdrost(~crdrost@c-98-207-102-156.hsd1.ca.comcast.net) (Quit: This computer has gone to sleep)
2020-11-18 21:53:32 +0100 <monochrom> Now, allow me to replace => by ->. Hell, there was a GHC version that did this by mistake. >:)
2020-11-18 21:53:55 +0100 <monochrom> "forall a. Show a -> ([a] -> c) -> c
2020-11-18 21:54:14 +0100 <monochrom> "forall a. (Show a, [a] -> c) -> c"
2020-11-18 21:54:28 +0100 <ski> a value of type `cxt *> a' is like a pair of evidence for (a "dictrionary"/"vtable" for) `cxt', together (bundled) with a value of type `a'
2020-11-18 21:55:19 +0100pavonia(~user@unaffiliated/siracusa)
2020-11-18 21:55:27 +0100 <boxscape> monochrom do you mean this (timestamped) video rae uploaded a few days ago where it happened or a much older ghc version? https://youtu.be/l5veKgGxXd4?t=262
2020-11-18 21:55:45 +0100 <boxscape> or, let's say, the bug in this video or a bug from an older ghc version
2020-11-18 21:55:46 +0100 <dminuoso> boxscape: Note, the above things are mashed into the library `constraints` with slightly altered ergonomics
2020-11-18 21:55:52 +0100 <geekosaur> much older version
2020-11-18 21:55:55 +0100 <ski> unfixpoint : makes any sense ?
2020-11-18 21:55:55 +0100 <boxscape> ah, that library keeps coming up
2020-11-18 21:56:09 +0100 <boxscape> geekosaur I see
2020-11-18 21:56:33 +0100 <unfixpoint> Not yet
2020-11-18 21:56:36 +0100 <monochrom> Yeah, a few years ago.
2020-11-18 21:56:41 +0100 <unfixpoint> I'll re-read
2020-11-18 21:56:59 +0100Aquazi(uid312403@gateway/web/irccloud.com/x-dkkwvspwitpqcrse) (Quit: Connection closed for inactivity)
2020-11-18 21:57:14 +0100 <monochrom> I don't know whether that video uses the GHC version I have in mind. Too lazy to check.
2020-11-18 21:57:31 +0100 <dminuoso> boxscape: Roughly, constraints just gives you a bare data: Dict :: Constraint -> * where Dict :: a => Dict a
2020-11-18 21:57:39 +0100 <boxscape> monochrom it uses something pretty close to HEAD so you've answered the question with your previous comment :)
2020-11-18 21:57:42 +0100 <monochrom> But certainly not >= 8.6 when I noticed it.
2020-11-18 21:57:51 +0100 <dminuoso> (So it comes with *just* the constraint, not the value ski used above)
2020-11-18 21:58:12 +0100 <boxscape> dminuoso I see
2020-11-18 21:58:31 +0100 <dminuoso> And it turns out GHC has this cool behavior that when you pattern match on that, the dictionary is brought into scope and it can be used to discharge obligations for it
2020-11-18 21:58:58 +0100 <boxscape> right, that's what we talked about earlier today when I wasn't able to do it in a type class :)
2020-11-18 21:59:04 +0100 <boxscape> type family
2020-11-18 21:59:04 +0100 <boxscape> rather
2020-11-18 21:59:16 +0100 <ski> unfixpoint : `forall' vs. `exists' flips the rôle of caller/user/consumer and the rôle of callee/implementor/producer. with `forall a. ..a..', the caller picks the type to use in place of `a', while the callee have to make do with whatever choise was made (can't even know, in general, which choice was made). with `exists a. ..a..' the callee picks the concrete type that is forgotten, hidden by `a',
2020-11-18 21:59:22 +0100 <ski> and the caller has to be prepared for any choice (and can't know which was chosen, in general)
2020-11-18 22:00:23 +0100 <dminuoso> boxscape: The old version has this cool and mindboggingly simple implementation of:
2020-11-18 22:00:32 +0100 <dminuoso> withDict :: Dict a -> (a => r) -> r; withDict d r = case d of Dict -> r
2020-11-18 22:00:33 +0100 <unfixpoint> It makes sense but why does one end up needing a library like `constraints`
2020-11-18 22:00:55 +0100 <dminuoso> Which might look like magic at first glance. :)
2020-11-18 22:01:14 +0100 <boxscape> does look fairly strange, yeah
2020-11-18 22:01:42 +0100 <boxscape> but I think it makes sense to me
2020-11-18 22:02:01 +0100 <ski> unfixpoint : similarly, `cxt => a' vs. `cxt *> a' also flips that rôle, wrt how `cxt' is treated. with `=>', the caller has to provide evidence of `cxt', and the callee can just assume the evidence will be provided to it. with `*>', the callee has to provide the evidence for `cxt', while the caller can rely on it being given / handed to it, along with the value
2020-11-18 22:02:27 +0100 <unfixpoint> I imagine these are ad-hoc solutions to the crappy module system?
2020-11-18 22:03:20 +0100 <dminuoso> It's quite surprising that constraints has *that* many downloads..
2020-11-18 22:03:47 +0100 <ski> @where on-understanding-revisited
2020-11-18 22:03:47 +0100 <lambdabot> "On Understanding Data Abstraction, Revisited" by William R. Cook in 2009-10 at <http://www.cs.utexas.edu/~wcook/Drafts/2009/essay.pdf>
2020-11-18 22:04:15 +0100 <ski> has a discussion on OO vs. Abstract Data Types (and mentions relation of both to existentials), iirc
2020-11-18 22:05:52 +0100moth(~moth@s91904426.blix.com)
2020-11-18 22:06:12 +0100 <p0a> I was told to look into ExceptT
2020-11-18 22:06:14 +0100 <ski> unfixpoint : "So given [a] we can Ord and Widget it? Instead of Given that we can Ord, Widget an a we have [a]? Wat?" -- having a value of type `exists a. (Ord a,Widget a) *> [a]' means that you have a list of values of some (common) unknown/forgotten/hidden type `a', about which you only know that it's an instance of `Ord' and `Widget' (so you can only really process the values in the list, by passing them
2020-11-18 22:06:20 +0100 <ski> to the methods of those two type classes)
2020-11-18 22:06:26 +0100 <p0a> is it from mtl or transformers?
2020-11-18 22:07:16 +0100 <dminuoso> p0a: mtl provides Monad* typeclasses, transformers provides *T type constructors.
2020-11-18 22:07:21 +0100 <dminuoso> Though mtl re-exports some of transformers.
2020-11-18 22:07:25 +0100 <ski> unfixpoint : otoh, `exists a. (Ord a,Widget a) => [a]' would be very different. you'd still have a list of values of a (common) unknown type, but now, to be able to access them, you must now magically somehow conjure up `Ord' and `Widget' instances (for this type `a' that you know nothing about) .. i hope you can see that this is fairly useless
2020-11-18 22:07:36 +0100 <p0a> dminuoso: got it, thank you
2020-11-18 22:08:07 +0100crdrost(~crdrost@c-98-207-102-156.hsd1.ca.comcast.net)
2020-11-18 22:08:29 +0100boxscape59(54a35f37@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.95.55)
2020-11-18 22:09:09 +0100 <hekkaidekapus> idnar: Now that I got a real machine handy, take a look at this: <https://paste.tomsmeding.com/llmymcm4>.
2020-11-18 22:10:06 +0100Franciman(~francesco@host-82-56-223-169.retail.telecomitalia.it)
2020-11-18 22:10:14 +0100Klobbinger(543b08ef@dslb-084-059-008-239.084.059.pools.vodafone-ip.de) (Remote host closed the connection)
2020-11-18 22:10:30 +0100 <unfixpoint> Yeah, I wouldn't know when I'd need that
2020-11-18 22:11:50 +0100 <ski> `*>' typically goes with `exists', like `=>' typically goes with `forall'
2020-11-18 22:12:46 +0100 <unfixpoint> By typically you mean freenode#haskell or in general (eg. research)?
2020-11-18 22:12:49 +0100boxscape(54a35f37@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.95.55) (Ping timeout: 264 seconds)
2020-11-18 22:13:01 +0100crdrost(~crdrost@c-98-207-102-156.hsd1.ca.comcast.net) (Quit: This computer has gone to sleep)
2020-11-18 22:13:18 +0100 <dminuoso> Mmm, how many other languages have type systems involving quantification and constraints?
2020-11-18 22:13:56 +0100 <ski> Clean,Mercury
2020-11-18 22:14:40 +0100 <dminuoso> unfixpoint: Note, this exists and *> is not even Haskell. It's just a pseudo haskell some of us pretend existed.
2020-11-18 22:15:08 +0100 <ski> unfixpoint : by "typically", i mean that, in practice, most of the times you'd want to express `*>', is in direct conjunction with expressing `exists'; and most of the times you want `=>', it's in direct conjunction with `forall'
2020-11-18 22:15:30 +0100hackagegraphula 2.0.0.1 - A declarative library for describing dependencies between data https://hackage.haskell.org/package/graphula-2.0.0.1 (PatrickBrisbin)
2020-11-18 22:15:40 +0100 <dminuoso> ski: Mm, can you actually express the `exists a. (Ord a,Widget a) => [a]` confusion with a forall encoding?
2020-11-18 22:15:48 +0100 <dminuoso> (that is the forall continuation encoding)
2020-11-18 22:16:01 +0100 <dminuoso> Ah I think you should be able to
2020-11-18 22:16:28 +0100sord937(~sord937@gateway/tor-sasl/sord937) (Quit: sord937)
2020-11-18 22:16:33 +0100 <dminuoso> presumably it'd be: (forall a. [(Ord a, Widget a) => a] -> b) -> b
2020-11-18 22:16:33 +0100 <ski> and yes, `exists' and `*>' are not valid Haskell (even with extensions) (maybe we'll get `exists', some day. there was another Haskell implementation which had limited support for it). regardless, imho, it's useful to reason in terms of `exists' and `*>', in pseudo-Haskell code, before getting to encoding it (in one of two main ways), in Haskell (with extensions)
2020-11-18 22:16:38 +0100britva(~britva@2a02:aa13:7240:2980:7da5:a1a0:c038:90b4) (Quit: This computer has gone to sleep)
2020-11-18 22:16:54 +0100 <dminuoso> or... no that doesnt look quite right
2020-11-18 22:17:00 +0100dhouthoo(~dhouthoo@ptr-eiv6509pb4ifhdr9lsd.18120a2.ip6.access.telenet.be) (Quit: WeeChat 2.9)
2020-11-18 22:17:04 +0100britva(~britva@31-10-157-156.cgn.dynamic.upc.ch)
2020-11-18 22:17:14 +0100 <ski> dminuoso : not sure what you mean by "express the [..] confusion"
2020-11-18 22:17:27 +0100 <dminuoso> ski: `exists a. (Ord a,Widget a) => [a]`
2020-11-18 22:17:42 +0100 <ski> what is the confusion that you want to express ?
2020-11-18 22:17:50 +0100 <dminuoso> ski: Can you express that term in haskell with forall
2020-11-18 22:17:58 +0100 <ski> (or do you just mean to express that type, in Haskell with extensions ?)
2020-11-18 22:18:01 +0100 <dminuoso> Right
2020-11-18 22:18:09 +0100 <dminuoso> All extensions allowed.
2020-11-18 22:18:13 +0100 <ski> exists a. (Ord a,Widget a) => [a]
2020-11-18 22:18:30 +0100unfixpoint(1f0a965a@31-10-150-90.cgn.dynamic.upc.ch) (Remote host closed the connection)
2020-11-18 22:18:30 +0100 <ski> = forall o. ((exists a. (Ord a,Widget a) => [a]) -> o) -> o
2020-11-18 22:18:46 +0100 <ski> = forall o. (forall a. ((Ord a,Widget a) => [a]) -> o) -> o
2020-11-18 22:19:12 +0100 <ski> (that's using `RankNTypes')
2020-11-18 22:19:13 +0100 <dminuoso> Ah indeed.
2020-11-18 22:19:33 +0100dcoutts_(~duncan@33.14.75.194.dyn.plus.net)
2020-11-18 22:19:36 +0100unfixpoint(1f0a965a@31-10-150-90.cgn.dynamic.upc.ch)
2020-11-18 22:19:48 +0100 <dminuoso> Oh! And thus answering a question that arised over a year ago, for which I never got a satisfactory answer
2020-11-18 22:19:54 +0100 <ski> oh ?
2020-11-18 22:20:56 +0100 <dminuoso> Don't even know the context, but I was wondering about the meaning of `forall a. (ctxt ... => ...)` as opposed to `forall a. ctxt ... => ...`
2020-11-18 22:22:12 +0100 <dexterfoo> foldr (\i m -> Map.insert i "value" m) Map.empty [1..100]
2020-11-18 22:22:13 +0100 <dexterfoo> Should i use foldr or foldl'? The Map is strict
2020-11-18 22:22:48 +0100boxscape59(54a35f37@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.95.55) (Quit: Connection closed)
2020-11-18 22:22:55 +0100britva(~britva@31-10-157-156.cgn.dynamic.upc.ch) (Quit: This computer has gone to sleep)
2020-11-18 22:23:02 +0100 <ski> dminuoso : er, the precedence i'm using, those two should be the same thing
2020-11-18 22:23:11 +0100boxscape(54a35f37@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.95.55)
2020-11-18 22:23:37 +0100 <Guest42> Hi, I have a lambda calucus question. I have to show that if s ⇒βi
2020-11-18 22:23:37 +0100 <Guest42> s' and s' is in head normal form then s is also in head normal form. Can someone help ?
2020-11-18 22:23:44 +0100 <ski> ("quantifiers extend/scopes as far right as possible")
2020-11-18 22:25:34 +0100 <ski> ⌜⇒βi⌝ being ?
2020-11-18 22:26:29 +0100 <dminuoso> ski: Mmm. Im having a hard time remembering it might have been 2 years ago in fact, my logs dont reach that far back.
2020-11-18 22:27:32 +0100ericsagn1(~ericsagne@2405:6580:0:5100:b570:65da:9eeb:ab03) (Ping timeout: 260 seconds)
2020-11-18 22:27:55 +0100borne(~fritjof@200116b864880600f1dc39039d201adf.dip.versatel-1u1.de) (Ping timeout: 272 seconds)
2020-11-18 22:28:15 +0100 <boxscape> dminuoso do you remember if ctxt is supposed to depend on a?
2020-11-18 22:28:17 +0100 <dminuoso> Roughly, I was looking into where forall and => could go, and there were some combinations I just couldn't make sense of
2020-11-18 22:28:31 +0100 <dminuoso> Similar to, but not quite like: withDict :: HasDict c e => e -> (c => r) -> r
2020-11-18 22:28:54 +0100britva(~britva@2a02:aa13:7240:2980:7da5:a1a0:c038:90b4)
2020-11-18 22:29:32 +0100 <ski> ok
2020-11-18 22:29:51 +0100 <ski> (boxscape : presumably ?)
2020-11-18 22:29:56 +0100 <Guest42> =>βi is the smallet relation that is reflexive and s.t if s => s' then λx.s ⇒β λx.s
2020-11-18 22:29:56 +0100 <Guest42> ,
2020-11-18 22:30:03 +0100 <Guest42> and if
2020-11-18 22:30:27 +0100 <boxscape> I was thinking maaaybe it could have been forall a . ctxt ... => ... vs cxt => forall a . ..., but of course that wouldn't make sense in that case
2020-11-18 22:30:34 +0100 <dminuoso> It arised from the question whether: (Show a => a -> IO ()) -> IO () was the same as forall a. (Show a => a -> IO ()) -> IO ()
2020-11-18 22:30:39 +0100 <Guest42> s ⇒β s
2020-11-18 22:30:39 +0100 <Guest42> and t ⇒β t
2020-11-18 22:30:40 +0100 <Guest42> alors s t ⇒β s
2020-11-18 22:30:40 +0100 <Guest42> 0
2020-11-18 22:30:41 +0100 <Guest42> t
2020-11-18 22:30:41 +0100 <dminuoso> That was the story, and my logs do reach that far. :)
2020-11-18 22:30:41 +0100 <Guest42> 0
2020-11-18 22:30:42 +0100 <Guest42> et (λx.s)t ⇒β s
2020-11-18 22:30:42 +0100 <Guest42> 0
2020-11-18 22:30:43 +0100 <Guest42> [t
2020-11-18 22:30:43 +0100 <Guest42> 0/x
2020-11-18 22:30:45 +0100cads(~cads@ip-64-72-99-232.lasvegas.net) (Ping timeout: 256 seconds)
2020-11-18 22:30:57 +0100 <dminuoso> Guest42: please use a pasting service, you can find one linked in the topic
2020-11-18 22:31:06 +0100 <tomsmeding> copying from a pdf? ;)
2020-11-18 22:31:06 +0100borne(~fritjof@200116b864880600f1dc39039d201adf.dip.versatel-1u1.de)
2020-11-18 22:31:12 +0100 <Guest42> yeah
2020-11-18 22:31:13 +0100 <ski> dminuoso : definitely not the same
2020-11-18 22:32:00 +0100hackagephonetic-languages-examples 0.6.2.0 - A generalization of the uniqueness-periods-vector-examples functionality. https://hackage.haskell.org/package/phonetic-languages-examples-0.6.2.0 (OleksandrZhabenko)
2020-11-18 22:32:50 +0100cosimone(~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd) (Quit: cosimone)
2020-11-18 22:32:51 +0100nuncanada(~dude@179.235.160.168)
2020-11-18 22:32:51 +0100 <boxscape> % testing42 :: (Show a => a -> IO ()) -> IO (); testing42 = undefined
2020-11-18 22:32:52 +0100 <yahb> boxscape:
2020-11-18 22:32:54 +0100 <boxscape> % :t +v testing42
2020-11-18 22:32:54 +0100 <yahb> boxscape: forall a. (Show a => a -> IO ()) -> IO ()
2020-11-18 22:32:59 +0100 <boxscape> is that not the second one?
2020-11-18 22:33:17 +0100 <boxscape> seems like ghc infers them to be the same?
2020-11-18 22:33:29 +0100 <boxscape> s/infer/does something to them
2020-11-18 22:33:52 +0100 <ski> Guest42 : hm, so beta-reducing some number of parallel subexpressions (including reducing under lambda)
2020-11-18 22:34:55 +0100 <ski> boxscape : in that context, the former is interpreted to have an implicit/elided `forall', and so is equivalent to the latter (with some caveats like `ScopedTypeVariables' ..)
2020-11-18 22:35:22 +0100 <boxscape> ski so that means the context in dminuoso's question was implied to be different?
2020-11-18 22:35:44 +0100 <ski> boxscape : but consider `data Foo a = MkFoo {testing42 :: (Show a => a -> IO ()) -> IO ()}' vs. `data Foo a = MkFoo {testing42 :: forall a. (Show a => a -> IO ()) -> IO ()}' -- these are not the same
2020-11-18 22:35:53 +0100 <boxscape> ah, that's fair
2020-11-18 22:35:53 +0100 <unfixpoint> I will never understand how ScopedTypeVariables is not default
2020-11-18 22:35:59 +0100alp(~alp@2a01:e0a:58b:4920:7462:8d66:154:f167)
2020-11-18 22:36:03 +0100 <koz_> unfixpoint: Because Haskell2010 doesn't have it.
2020-11-18 22:36:06 +0100 <dminuoso> unfixpoint: historical reasons.
2020-11-18 22:36:09 +0100 <dolio> dminuoso: Those types are the same.
2020-11-18 22:36:13 +0100 <unfixpoint> Yeah, I know.. but wtf
2020-11-18 22:36:16 +0100 <koz_> dminuoso: Was about to say 'hysterical raisins'.
2020-11-18 22:36:17 +0100 <ski> `(Show a => a -> IO ()) -> IO ()' is a type expression with a free (type) variable. `forall a. (Show a => a -> IO ()) -> IO ()' isn't
2020-11-18 22:36:19 +0100cads(~cads@ip-64-72-99-232.lasvegas.net)
2020-11-18 22:36:31 +0100 <dminuoso> dolio: I know
2020-11-18 22:36:32 +0100 <koz_> unfixpoint: Hysterical raisins is an explanation of many wtf phenomena, Haskell or otherwise.
2020-11-18 22:36:39 +0100 <dolio> Oh, okay.
2020-11-18 22:36:43 +0100 <boxscape> apparently there's some infelicities with ScopedTypeVariables that, if the stars align just right, might be fixed before something like it becomes standard, but I don't quite remember what they were
2020-11-18 22:36:44 +0100 <Guest42> => is the beta parrallell reduction
2020-11-18 22:36:49 +0100 <ski> imho, the behaviour of `ScopedTypeVariables' is the opposite of what it ought to be ..
2020-11-18 22:36:56 +0100cr3(~cr3@192-222-143-195.qc.cable.ebox.net) (Ping timeout: 240 seconds)
2020-11-18 22:37:00 +0100 <dminuoso> dolio: I copied the line that, roughly, was at the starting point of all of this.
2020-11-18 22:37:08 +0100 <dminuoso> % foo :: forall a. (Show a => a -> IO ()) -> IO (); foo = undefined
2020-11-18 22:37:08 +0100 <yahb> dminuoso:
2020-11-18 22:37:10 +0100 <ski> Guest42 : single-parallel-step, yes
2020-11-18 22:37:14 +0100 <dminuoso> % bar :: (forall a. Show a => a -> IO ()) -> IO (); bar = undefined
2020-11-18 22:37:14 +0100 <yahb> dminuoso:
2020-11-18 22:37:25 +0100britva(~britva@2a02:aa13:7240:2980:7da5:a1a0:c038:90b4) (Quit: This computer has gone to sleep)
2020-11-18 22:37:38 +0100 <Guest42> ski: i think the i notes how many steps
2020-11-18 22:37:42 +0100 <unfixpoint> At least it makes me crack up everytime because I always misspell it. So it will suggest me NoScopedTypevariables too. I don't even play video games but I know about no scoping >.>
2020-11-18 22:37:45 +0100 <Guest42> but i'm not sure
2020-11-18 22:38:30 +0100 <dexterfoo> any help with my question about foldr/foldl'?
2020-11-18 22:38:36 +0100 <ski> Guest42 : hm, just noticed the ⌜i⌝ isn't there in what you wrote after "the smallet relation that"
2020-11-18 22:39:02 +0100 <Guest42> yeah beause I think I made a mistake
2020-11-18 22:39:21 +0100ericsagn1(~ericsagne@2405:6580:0:5100:8c9:42ac:c0f6:8508)
2020-11-18 22:39:38 +0100knupfer(~Thunderbi@200116b8244bd600690e470b1c9f0b95.dip.versatel-1u1.de) (Ping timeout: 264 seconds)
2020-11-18 22:40:23 +0100 <Guest42> I have to write what it is in a paste website thing. I'll send the link once I'm finished
2020-11-18 22:41:02 +0100 <unfixpoint> Use foldl' as you want to fold everything, but you could also just use fromList I think.
2020-11-18 22:41:16 +0100 <ski> boxscape : imho, with `foo :: forall a. ..a..; foo = ...', the `a' bound by `forall a.' in the signature ought not to be in scope in the body `...'; while with `foo :: ..a..; foo = ...' (and an extension), it could make sense for `a' to be in scope in `...'
2020-11-18 22:41:51 +0100 <dminuoso> dexterfoo: hard to say in general without knowing the details
2020-11-18 22:41:59 +0100 <c_wraith> dexterfoo: foldl', for two reasons. 1) there's no meaningful result from evaluating just some of the list. 2) The result is a single value that you want to not have referring to previous versions of itself
2020-11-18 22:42:27 +0100 <dminuoso> dexterfoo: Roughly, foldr is a good and safe default (because of how it plays with lazyness), foldl' is more rarely a better choice unless you know you will force the entire structure anyway.
2020-11-18 22:42:55 +0100 <dexterfoo> dminuoso: thank you. i pasted a line of code that builds a Strict Map
2020-11-18 22:42:59 +0100 <c_wraith> dexterfoo: and FWIW, in that case the fact that it's Data.Map.Strict is irrelevant. It will do the exact same thing with Data.Map.Lazy
2020-11-18 22:43:03 +0100 <dminuoso> dexterfoo: the example seems contrived.
2020-11-18 22:43:09 +0100 <ski> (should there be two versions of `TypeApplications', one only allowing it with values which have been given a type with explicit `forall's ?)
2020-11-18 22:43:45 +0100 <dminuoso> ski: There's an accepted proposal to provide value level binders.
2020-11-18 22:44:21 +0100 <dminuoso> With a syntax like `f @a x = ...`
2020-11-18 22:44:23 +0100chkno(~chkno@75-7-2-127.lightspeed.sntcca.sbcglobal.net)
2020-11-18 22:44:23 +0100 <ski> i recall hearing about it, i think, but it not being finished then
2020-11-18 22:44:43 +0100 <unfixpoint> TIL `id @(forall a. a -> a) 101` won't work
2020-11-18 22:45:09 +0100coot(~coot@37.30.49.253.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
2020-11-18 22:45:28 +0100 <unfixpoint> dminuoso: Can you not have `f (x :: a) = ...`, does it not bind `a`?
2020-11-18 22:45:32 +0100 <dminuoso> dexterfoo: but yeah, for inserting into a map, a foldl' is likely the better candidate
2020-11-18 22:45:37 +0100 <ski> yea, makes sense (apart from it appearing confusingly similar to as-patterns). so `foo :: forall a. ..a..; foo @a = ..a..' would make sense, but those would be two different `a' type variables
2020-11-18 22:45:40 +0100geekosaur(82659a09@host154-009.vpn.uakron.edu) (Remote host closed the connection)
2020-11-18 22:46:46 +0100 <ski> % id @(forall a. a -> a) id 101
2020-11-18 22:46:46 +0100 <yahb> ski: 101
2020-11-18 22:47:00 +0100 <dexterfoo> thank you unfixpoint dminuoso c_wraith
2020-11-18 22:47:09 +0100 <ski> % id @(forall a. a -> a) False
2020-11-18 22:47:10 +0100 <yahb> ski: ; <interactive>:211:24: error:; * Couldn't match expected type `a1 -> a1' with actual type `Bool'; * In the second argument of `id', namely `False'; In the expression: id @(forall a. a -> a) False; In an equation for `it': it = id @(forall a. a -> a) False
2020-11-18 22:47:22 +0100 <unfixpoint> TypeApplication is meant to apply though, what is the proposal?
2020-11-18 22:47:37 +0100 <dminuoso> https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0155-type-lambda.rst
2020-11-18 22:47:50 +0100 <unfixpoint> Binding with `::` is good enough :S
2020-11-18 22:48:31 +0100 <ski> unfixpoint : doesn't specify ordering too clearly
2020-11-18 22:50:05 +0100ski. o O ( `(map _) [] = []; map_f@(map f) ((f -> y):(map_f -> ys)) = y:ys' )
2020-11-18 22:50:08 +0100 <Guest42> we define an internal parralel reduction rule inductively by with the following rules: https://imgur.com/a/heRxIIw Intuitively it the parralel reduction we forbid to reduce the redex in head. Show that if s => s' and s' in normal head form then s is in normal head form.
2020-11-18 22:50:29 +0100gumbish(4913050a@c-73-19-5-10.hsd1.wa.comcast.net) (Ping timeout: 245 seconds)
2020-11-18 22:50:47 +0100stree(~stree@50-108-97-52.adr01.mskg.mi.frontiernet.net) (Quit: Caught exception)
2020-11-18 22:51:02 +0100 <Guest42> Intuitively it is the parrallel reduction where we forbid*
2020-11-18 22:51:02 +0100 <dminuoso> unfixpoint: GHC uses a variant of System F as its intermediate language, which essentially provides binders for type variables. So rather than `\x.x` you'd write `/\t.\x^t.x`. TypeApplications exist both to elaborate programs during type checking, as well as providing a more convenient and explicit way to do this on the Haskell level.
2020-11-18 22:51:08 +0100stree(~stree@50-108-97-52.adr01.mskg.mi.frontiernet.net)
2020-11-18 22:51:25 +0100 <hekkaidekapus> ski: Bring back PatternSignatures?
2020-11-18 22:51:28 +0100brodie_(~brodie@207.53.253.137)
2020-11-18 22:51:28 +0100 <dminuoso> unfixpoint: The above proposal just brings this to a conclusion and makes the TypeApplications consistent with that.
2020-11-18 22:52:17 +0100mbomba(~mbomba@bras-base-toroon2719w-grc-49-142-114-9-241.dsl.bell.ca)
2020-11-18 22:52:20 +0100 <ski> hekkaidekapus : yea, i'd like being able to say `map (f :: a -> b) (xs :: [a]) :: [b] = ...' (including result ascription)
2020-11-18 22:52:48 +0100 <dminuoso> Also, the pattern type signatures of ScopedTypeVariables is relatively noisy because it adds an unnecessary dimension
2020-11-18 22:52:55 +0100 <hekkaidekapus> ski: I agree. That sentence is the title of a proposal, IIRC.
2020-11-18 22:52:57 +0100falafel(~falafel@2601:547:1303:b30:7811:313f:d0f3:f9f4)
2020-11-18 22:53:03 +0100 <ski> (or `map @a @b (f :: a -> b) (xs :: [a]) :: [b] = ...', if combined with the above proposal)
2020-11-18 22:53:16 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2020-11-18 22:53:19 +0100Ariakenom(~Ariakenom@h-98-128-229-104.NA.cust.bahnhof.se) (Quit: Leaving)
2020-11-18 22:53:33 +0100 <hekkaidekapus> (But I was rejected I don’t recall for what reasons.)
2020-11-18 22:53:38 +0100brodie_(~brodie@207.53.253.137) (Client Quit)
2020-11-18 22:54:07 +0100 <dminuoso> unfixpoint: In the lambda cube, we say that polymorphism gives us terms binding types. So why not provide proper binders for what we semantically already have. :)
2020-11-18 22:54:21 +0100 <dolio> At the very least, there needs to be another way of accomplishing that, because that syntax is awful.
2020-11-18 22:54:25 +0100 <unfixpoint> Wait how did you get `id @(forall a . a -> a ) id 101` to work?
2020-11-18 22:54:45 +0100 <unfixpoint> Do I need newer GHC than 8.4.4?
2020-11-18 22:54:57 +0100Franciman(~francesco@host-82-56-223-169.retail.telecomitalia.it) (Quit: Leaving)
2020-11-18 22:55:08 +0100 <hekkaidekapus> ski: Result ascription has another proposal, dunno its state.
2020-11-18 22:55:25 +0100 <unfixpoint> why is my GHC so old..
2020-11-18 22:55:29 +0100 <ski> Guest42 : hm, so no beta at top-level (nor in operator position, if top-level is an application, continuing heriditarily)
2020-11-18 22:55:33 +0100 <dminuoso> hekkaidekapus: Is result ascriptions akin to how we ascript tyfams?
2020-11-18 22:55:57 +0100 <ski> unfixpoint : you forgot to pass `id' as argument
2020-11-18 22:55:59 +0100 <dminuoso> (also, can we get separate type family kind signatures?)
2020-11-18 22:56:01 +0100 <hekkaidekapus> dminuoso: See ski’s example.
2020-11-18 22:56:14 +0100 <dminuoso> hekkaidekapus: Ah indeed it looks like it.
2020-11-18 22:56:46 +0100 <ski> (the MLs have result ascriptions)
2020-11-18 22:57:25 +0100 <hekkaidekapus> dminuoso: Isn’t TF kind signatures realised by StandaloneKindSigs?
2020-11-18 22:57:33 +0100 <unfixpoint> Yeah, but even so. It gives "GHC doesn't yet support impredicative polymorphism" for me
2020-11-18 22:57:37 +0100 <dminuoso> unfixpoint: You just need to flip on ImpredicativeTypes
2020-11-18 22:57:49 +0100 <boxscape> just pretend it supports them
2020-11-18 22:57:51 +0100 <dminuoso> A notoriously buggy extension
2020-11-18 22:58:04 +0100 <dminuoso> It crashes GHC, or your program, or who knows.
2020-11-18 22:58:10 +0100 <p0a> Guest42: This channel is about Haskell...
2020-11-18 22:58:11 +0100 <boxscape> though HEAD now has a new implementation, so that's nice
2020-11-18 22:58:14 +0100 <unfixpoint> I'd rather not enable something that is "extremely flaky support"
2020-11-18 22:58:20 +0100 <ski> iirc, there was a new idea for how to implement it, recently
2020-11-18 22:58:40 +0100 <dolio> I don't think ImpredicativeTypes crashes anything.
2020-11-18 22:58:45 +0100 <dolio> It just doesn't work very well.
2020-11-18 22:58:48 +0100 <unfixpoint> Aaanyway, I should focus on other things for now. Thanks for all the help and interesting discussions
2020-11-18 22:59:03 +0100 <boxscape> ski https://gitlab.haskell.org/ghc/ghc/-/merge_requests/3220
2020-11-18 22:59:09 +0100 <unfixpoint> Thanks for the papers too, I'll check them later
2020-11-18 22:59:23 +0100 <chkno> Is there a better way to do a lint-style check for partial function usage than egrep -wr '!!|fromJust|head|init|last|maximum|minimum|read|tail' ?
2020-11-18 23:00:01 +0100 <dminuoso> chkno: You could also use a different prelude I guess.
2020-11-18 23:00:06 +0100rprije(~rprije@124.148.131.132)
2020-11-18 23:00:22 +0100 <unfixpoint> Solve Halting problem first
2020-11-18 23:00:28 +0100seanparsons(~sean@cpc145088-gill21-2-0-cust281.20-1.cable.virginm.net) (Quit: ZNC 1.8.1 - https://znc.in)
2020-11-18 23:00:30 +0100Varis(~Tadas@unaffiliated/varis) (Read error: Connection reset by peer)
2020-11-18 23:00:50 +0100 <dminuoso> chkno: You also forgot `throw` btw :)
2020-11-18 23:00:56 +0100 <ski> Guest42 : how do you define "normal head form" ?
2020-11-18 23:01:18 +0100 <unfixpoint> And `read` ;)
2020-11-18 23:01:26 +0100seanparsons(~sean@cpc145088-gill21-2-0-cust281.20-1.cable.virginm.net)
2020-11-18 23:01:35 +0100 <unfixpoint> It's there haha
2020-11-18 23:01:39 +0100 <unfixpoint> I go
2020-11-18 23:01:44 +0100 <Guest42> head normal form is a λ-term that has a top-level abstraction where the body does not have λ-subterms that can have β-reductions applied to them.
2020-11-18 23:02:36 +0100 <justsomeguy> Is that like weak head normal form?
2020-11-18 23:03:27 +0100 <dolio> It is like it, but not the same.
2020-11-18 23:03:40 +0100 <ski> that definition is a bit unclear, to me
2020-11-18 23:03:41 +0100 <boxscape> is there a way to have ghc warn you about missing equations in type families?
2020-11-18 23:03:57 +0100 <boxscape> (closed type families)
2020-11-18 23:03:58 +0100ulidtko(~ulidtko@193.111.48.79) (Read error: Connection reset by peer)
2020-11-18 23:04:04 +0100 <ski> does it mean that ⌜x⌝ is not in head normal form (since it's not a λ-abstraction) ?
2020-11-18 23:04:06 +0100Varis(~Tadas@unaffiliated/varis)
2020-11-18 23:04:25 +0100ulidtko(~ulidtko@193.111.48.79)
2020-11-18 23:04:33 +0100 <Guest42> i think so
2020-11-18 23:04:37 +0100abhixec(~abhixec@c-67-169-141-95.hsd1.ca.comcast.net)
2020-11-18 23:04:39 +0100 <dminuoso> dolio: Dunno, issues like this are not reassuring https://gitlab.haskell.org/ghc/ghc/-/issues/17332
2020-11-18 23:04:55 +0100 <ski> (is there a more formal definition available ?)
2020-11-18 23:05:22 +0100 <boxscape> dminuoso that was before quick look though
2020-11-18 23:05:28 +0100 <dminuoso> boxscape: Sure.
2020-11-18 23:05:44 +0100Boomerang(~Boomerang@xd520f68c.cust.hiper.dk) (Ping timeout: 256 seconds)
2020-11-18 23:06:20 +0100 <dolio> dminuoso: Ah, that's pretty weird. I'm not exactly sure what some of those types even mean.
2020-11-18 23:06:31 +0100 <ski> is ⌜λ x ↦ x (λ y ↦ (λ z ↦ z) y)⌝ not in head normal form (since the body does contain a β-redex) ?
2020-11-18 23:07:32 +0100 <Guest42> A head normal form is a term that does not contain a beta redex in head position, i.e. that cannot be further reduced bya head reduction a head reduction
2020-11-18 23:08:22 +0100 <Guest42> yeah I think
2020-11-18 23:08:41 +0100 <Guest42> at least thats what I understand from the definition
2020-11-18 23:09:01 +0100 <dminuoso> dolio: They are just things out of `constraints`
2020-11-18 23:09:19 +0100 <dolio> No, those aren't the parts I'm confused about. :)
2020-11-18 23:10:29 +0100 <dolio> I guess the `forall a. a` has `a :: Constraint`, but I'm not sure why GHC thinks it has one of those.
2020-11-18 23:11:10 +0100 <dminuoso> data Dict c = c => Dict
2020-11-18 23:11:12 +0100 <dolio> It seems like the Bottom declaration doesn't actually need it to be a superclass, either, because it's never given an instance.
2020-11-18 23:11:51 +0100 <dminuoso> Well that's the point of it.
2020-11-18 23:12:13 +0100 <ski> Guest42 : does that mean it's the union of all abstractions ⌜λ x ↦ M⌝, with the smallest subset of λ-terms that contain all variables ⌜x⌝; and all applications ⌜M N⌝, provided ⌜M⌝ is already in this subset ?
2020-11-18 23:12:26 +0100 <dminuoso> Think the more recent version uses Any instead of forall a. a as a superclass
2020-11-18 23:12:31 +0100unfixpoint(1f0a965a@31-10-150-90.cgn.dynamic.upc.ch) (Remote host closed the connection)
2020-11-18 23:12:51 +0100 <dminuoso> Without that superclass, you could write instances for it
2020-11-18 23:12:57 +0100 <boxscape> hmm so the case expression with (forall a . a) means that now every possible constraint is fulfilled in that scope?
2020-11-18 23:13:36 +0100 <boxscape> I guess there's no case expression
2020-11-18 23:13:38 +0100 <boxscape> pattern guard
2020-11-18 23:14:11 +0100 <dminuoso> Or.. mmm.
2020-11-18 23:14:19 +0100 <boxscape> ..so therefore, the Bottom constraints is part of the set of all constraints and therefore you can call "no"?
2020-11-18 23:14:32 +0100 <dolio> Yeah.
2020-11-18 23:14:38 +0100 <boxscape> ok
2020-11-18 23:15:56 +0100u0_a298(~user@47.206.148.226) (Ping timeout: 256 seconds)
2020-11-18 23:17:40 +0100 <ski> (hm, shouldn't it require `aux :: (forall a. a) => Dict (forall a. a)', if anything ?)
2020-11-18 23:18:29 +0100 <dolio> Presumably. For some reason it thinks it just has such an instance in that case, though.
2020-11-18 23:18:43 +0100gehmehgeh(~ircuser1@gateway/tor-sasl/gehmehgeh) (Ping timeout: 240 seconds)
2020-11-18 23:19:00 +0100 <dolio> But I guess not when trying to define instances for Bottom.
2020-11-18 23:19:54 +0100gehmehgeh(~ircuser1@gateway/tor-sasl/gehmehgeh)
2020-11-18 23:20:14 +0100 <dolio> Or, who knows what's going on. I guess ImpredicativeTypes was enabling some code path that makes no sense.
2020-11-18 23:21:40 +0100darjeeling_(~darjeelin@122.245.211.11) (Ping timeout: 265 seconds)
2020-11-18 23:21:51 +0100 <ski> mm
2020-11-18 23:23:11 +0100 <dolio> I guess it wouldn't be too surprising if it's just a bunch of checks sprinkled throughout the code that no one has bothered thinking about in conjunction with other developments (like quantified constraints).
2020-11-18 23:24:16 +0100iqubic(~user@2601:602:9500:4870:18b7:5f73:2db2:1881)
2020-11-18 23:26:28 +0100anon1252(5ec1fe17@5ec1fe17.skybroadband.com)
2020-11-18 23:26:35 +0100hexfive(~hexfive@50-47-142-195.evrt.wa.frontiernet.net)
2020-11-18 23:27:02 +0100yogani(sid42623@gateway/web/irccloud.com/x-rolajygghowodpbd) (Ping timeout: 260 seconds)
2020-11-18 23:27:02 +0100PoliticsII______(sid193551@gateway/web/irccloud.com/x-ykrgnddgnwhyshpo) (Ping timeout: 260 seconds)
2020-11-18 23:27:02 +0100benl23(sid284234@gateway/web/irccloud.com/x-zcormuhggyweibpr) (Ping timeout: 260 seconds)
2020-11-18 23:27:02 +0100benwr____(sid372383@gateway/web/irccloud.com/x-wqbchwbubajgshwl) (Ping timeout: 260 seconds)
2020-11-18 23:27:02 +0100edwinb(sid69486@gateway/web/irccloud.com/x-ucpbbzlyfldprgqw) (Ping timeout: 260 seconds)
2020-11-18 23:27:06 +0100ulidtko(~ulidtko@193.111.48.79) (Remote host closed the connection)
2020-11-18 23:27:09 +0100yogani(sid42623@gateway/web/irccloud.com/x-xwocvhxoqauihzue)
2020-11-18 23:27:24 +0100ulidtko(~ulidtko@193.111.48.79)
2020-11-18 23:27:37 +0100aristid(sid1599@gateway/web/irccloud.com/x-ieumvqzkylmookgw) (Ping timeout: 260 seconds)
2020-11-18 23:27:37 +0100psydruid(psydruidma@gateway/shell/matrix.org/x-onpwsguylfwyjnoj) (Ping timeout: 260 seconds)
2020-11-18 23:27:37 +0100aizen_s(sid462968@gateway/web/irccloud.com/x-rpdggkhwylxxzxar) (Ping timeout: 260 seconds)
2020-11-18 23:27:48 +0100benl23(sid284234@gateway/web/irccloud.com/x-hgqgnkygwwcwddwc)
2020-11-18 23:28:05 +0100 <hekkaidekapus> dolio: Is the awful syntax you were talking about earlier this one: `foo :: F = bar`?
2020-11-18 23:28:12 +0100Amras(~Amras@unaffiliated/amras0000) (Ping timeout: 260 seconds)
2020-11-18 23:28:12 +0100rednaZ[m](r3dnazmatr@gateway/shell/matrix.org/x-gpnsxbbsvkfpdeul) (Ping timeout: 260 seconds)
2020-11-18 23:28:12 +0100jesser[m](jessermatr@gateway/shell/matrix.org/x-goezqreqcnfmgjgv) (Ping timeout: 260 seconds)
2020-11-18 23:28:12 +0100tersetears[m](tersetears@gateway/shell/matrix.org/x-wmhwjlekxzvfgxue) (Ping timeout: 260 seconds)
2020-11-18 23:28:12 +0100kaychaks_riot(kaychaksma@gateway/shell/matrix.org/x-csnlnomioxxbbnnm) (Ping timeout: 260 seconds)
2020-11-18 23:28:12 +0100srid(sridmatrix@gateway/shell/matrix.org/x-vidxbchrzjfqulmd) (Ping timeout: 260 seconds)
2020-11-18 23:28:34 +0100edwinb(sid69486@gateway/web/irccloud.com/x-ttfxxggsnhwcnlbe)
2020-11-18 23:28:40 +0100tinwood_(~tinwood@general.default.akavanagh.uk0.bigv.io)
2020-11-18 23:28:43 +0100aristid(sid1599@gateway/web/irccloud.com/x-hkziwpbxvyapwndr)
2020-11-18 23:28:47 +0100tinwood(~tinwood@general.default.akavanagh.uk0.bigv.io) (Ping timeout: 260 seconds)
2020-11-18 23:28:47 +0100benwr____(sid372383@gateway/web/irccloud.com/x-zroyfovbhqhiqzax)
2020-11-18 23:28:47 +0100chaosmasttter(~chaosmast@p200300c4a70b2a01c0445547f28d17ad.dip0.t-ipconnect.de) (Quit: WeeChat 2.9)
2020-11-18 23:28:51 +0100 <iqubic> So, I'm trying to compile a haskell project using Cabal and GHC 8.8.4 I have this cabal file: https://dpaste.com/H5CTS2V6R
2020-11-18 23:28:52 +0100 <dolio> hekkaidekapus: The one where you put all the types on the same line as the arguments. It eats way too much horizontal space.
2020-11-18 23:29:00 +0100hackagerosebud 0.1.0.0 - Common rose tree/forest functions https://hackage.haskell.org/package/rosebud-0.1.0.0 (jship)
2020-11-18 23:29:03 +0100PoliticsII______(sid193551@gateway/web/irccloud.com/x-ifhtanwghthhvmbn)
2020-11-18 23:29:03 +0100aizen_s(sid462968@gateway/web/irccloud.com/x-ighywpehicgiourx)
2020-11-18 23:29:07 +0100 <iqubic> Here's the error I'm getting: https://dpaste.com/4JTTNNPTC
2020-11-18 23:29:30 +0100 <iqubic> Anyone know what the issue is here?
2020-11-18 23:29:42 +0100tersetears[m](tersetears@gateway/shell/matrix.org/x-sudqunulnrivtufh)
2020-11-18 23:29:56 +0100 <hekkaidekapus> dolio: So, it turns out the proposal is accepted but not yet implemented, including ascribing arguments.
2020-11-18 23:29:57 +0100Amras(~Amras@unaffiliated/amras0000)
2020-11-18 23:30:03 +0100jesser[m](jessermatr@gateway/shell/matrix.org/x-fnrjbdbcxycnmdhs)
2020-11-18 23:30:08 +0100rednaZ[m](r3dnazmatr@gateway/shell/matrix.org/x-uudppykggjqnwgdt)
2020-11-18 23:30:21 +0100 <dolio> I don't care if it's an option. I just want another option, because I'll never use that one. :)
2020-11-18 23:30:34 +0100 <hekkaidekapus> ski: One pet peeve down: <https://github.com/ghc-proposals/ghc-proposals/pull/228>
2020-11-18 23:30:40 +0100srid(sridmatrix@gateway/shell/matrix.org/x-wcquiejsxgjdmcxb)
2020-11-18 23:30:40 +0100mananamenos(~mananamen@84.122.202.215.dyn.user.ono.com) (Ping timeout: 256 seconds)
2020-11-18 23:30:43 +0100 <anon1252> iqubic: Slightly offtopic but what font is that?
2020-11-18 23:31:23 +0100jedws(~jedws@101.184.175.183) (Ping timeout: 260 seconds)
2020-11-18 23:31:56 +0100kaychaks_riot(kaychaksma@gateway/shell/matrix.org/x-mkllmseyzgoebiyk)
2020-11-18 23:32:04 +0100 <hekkaidekapus> dolio: If I’m getting what you want, annotating the result if okay, but ugly for arguments.
2020-11-18 23:32:06 +0100 <iqubic> What font is what?
2020-11-18 23:32:30 +0100psydruid(psydruidma@gateway/shell/matrix.org/x-tkomzubgcyrydslv)
2020-11-18 23:32:35 +0100 <anon1252> iqubic: Sorry, nevermind, I thought it was a screenshot but it's not so I've got it.
2020-11-18 23:32:50 +0100 <iqubic> anon1252: I posted a total of 0 images, so whatever font it is must be coming from your computer.
2020-11-18 23:32:50 +0100 <dolio> I just don't want any other feature to require you to use this sort of annotation.
2020-11-18 23:32:58 +0100 <hekkaidekapus> heh
2020-11-18 23:32:59 +0100 <iqubic> I have no idea what font your computer is using.
2020-11-18 23:33:07 +0100 <dolio> I want to be able to write signatures on their own line.
2020-11-18 23:33:44 +0100 <iqubic> So, anyone know why my thing won't compile?
2020-11-18 23:34:32 +0100 <hekkaidekapus> Euh, haven’t re-read the full proposal but I don’t think there is another feature requiring to use the new syntax. It’s just an option.
2020-11-18 23:34:48 +0100jedws(~jedws@101.184.175.183)
2020-11-18 23:35:19 +0100 <dolio> Yeah, that's fine.
2020-11-18 23:35:20 +0100 <koz_> iqubic: 4.12 is 8.6.
2020-11-18 23:35:22 +0100 <koz_> Not 8.8.
2020-11-18 23:38:45 +0100nuncanada(~dude@179.235.160.168) (Ping timeout: 240 seconds)
2020-11-18 23:40:02 +0100avn(~avn@78-56-108-78.static.zebra.lt) (Ping timeout: 265 seconds)
2020-11-18 23:40:34 +0100 <hekkaidekapus> @where boot-libs-versions -- iqubic
2020-11-18 23:40:34 +0100 <lambdabot> <https://gitlab.haskell.org/ghc/ghc/-/wikis/commentary/libraries/version-history>
2020-11-18 23:40:43 +0100wroathe(~wroathe@c-73-24-27-54.hsd1.mn.comcast.net) (Ping timeout: 260 seconds)
2020-11-18 23:41:01 +0100 <iqubic> koz_: How shall I change my cabal file?
2020-11-18 23:41:04 +0100falafel(~falafel@2601:547:1303:b30:7811:313f:d0f3:f9f4) (Remote host closed the connection)
2020-11-18 23:41:09 +0100 <koz_> iqubic: Change your base pin.
2020-11-18 23:41:22 +0100 <koz_> To match the version that comes with GHC 8.8.4.
2020-11-18 23:42:03 +0100 <iqubic> I don't know how to do that. Can you teach me?
2020-11-18 23:42:45 +0100 <koz_> iqubic: Your version of base is set by '^>= 4.12.0.0' in your cabal file. It should be ^>= 4.13.0.0.
2020-11-18 23:42:54 +0100 <iqubic> Thanks.
2020-11-18 23:43:31 +0100 <boxscape> ^>= 4.12.0.0 matches anything below 4.13? or anything below 5?
2020-11-18 23:43:35 +0100 <ski> hekkaidekapus : one down ?
2020-11-18 23:43:39 +0100 <koz_> boxscape: Neither of these.
2020-11-18 23:43:42 +0100 <boxscape> oh
2020-11-18 23:44:09 +0100 <koz_> The exact meaning of ^>=-style bounds is explained in the Cabal docs.
2020-11-18 23:44:19 +0100nut(~user@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
2020-11-18 23:44:22 +0100 <boxscape> (I meant at least 4.12.0.0 and below x, but I'll check the docs)
2020-11-18 23:44:32 +0100 <hekkaidekapus> ski: Isn’t the ML-style annotations question resolved by that proposal?
2020-11-18 23:45:42 +0100foursaph(~foursaph@dynamic-077-006-006-064.77.6.pool.telefonica.de) (Quit: leaving)
2020-11-18 23:45:46 +0100 <hekkaidekapus> And even the PatternSignatures one?
2020-11-18 23:46:07 +0100 <boxscape> "^>= x.y.z.u == >= x.y.z.u && < x.(y+1)"
2020-11-18 23:46:18 +0100britva(~britva@2a02:aa13:7240:2980:7da5:a1a0:c038:90b4)
2020-11-18 23:46:35 +0100olligobber(olligobber@gateway/vpn/privateinternetaccess/olligobber)
2020-11-18 23:46:45 +0100 <boxscape> so... ^>= 4.12.0.0 == >= 4.12.0.0 && < 4.13
2020-11-18 23:47:09 +0100 <hekkaidekapus> boxscape: Yeah, basically the version after ^>= means it will not break PVP.
2020-11-18 23:47:16 +0100 <boxscape> ok
2020-11-18 23:48:11 +0100 <hekkaidekapus> iqubic: For future fixes, you could bookmark the URL I pasted above.
2020-11-18 23:48:17 +0100 <koz_> I keep misreading PVP as 'player-versus-player', rofl.
2020-11-18 23:48:35 +0100 <koz_> Haskell has the Battle Royale approach to package versioning, clearly.
2020-11-18 23:49:00 +0100 <ski> hekkaidekapus : oh. yes, i think so. i was just thinking you meant you commented or added something to that discussion, but couldn't find a recent addition
2020-11-18 23:49:26 +0100 <hekkaidekapus> Nope, I don’t do GitHub comments ;)
2020-11-18 23:49:56 +0100 <hekkaidekapus> The remaining task is to scale down STV.
2020-11-18 23:50:26 +0100nek0(~nek0@mail.nek0.eu) (Remote host closed the connection)
2020-11-18 23:50:28 +0100 <ski> (preferably flipping when it binds tyvars over the body, and when it doesn't)
2020-11-18 23:51:27 +0100forell(~forell@unaffiliated/forell) (Quit: ZNC - https://znc.in)
2020-11-18 23:51:28 +0100 <hekkaidekapus> Aye. But that would be nearly impossible given its wide adoption.
2020-11-18 23:51:31 +0100 <ski> (i think i remember, when i first read about it, i was thinking they must've made a mistake in the docs, meaning the opposite of what was written .. until i tested it)
2020-11-18 23:51:49 +0100forell(~forell@unaffiliated/forell)
2020-11-18 23:52:01 +0100nek0(~nek0@mail.nek0.eu)
2020-11-18 23:52:07 +0100 <ski> yes. so an alternative extension with the opposite behavious would be what one might reasonably hope for, i think
2020-11-18 23:52:50 +0100nut(~user@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) ("ERC (IRC client for Emacs 26.3)")
2020-11-18 23:53:05 +0100 <hekkaidekapus> Absolutely. And then set in motion a decade-long process to deprecate STV :D
2020-11-18 23:53:29 +0100britva(~britva@2a02:aa13:7240:2980:7da5:a1a0:c038:90b4) (Quit: This computer has gone to sleep)
2020-11-18 23:53:30 +0100cr3(~cr3@192-222-143-195.qc.cable.ebox.net)
2020-11-18 23:53:31 +0100 <ski> well, how long have we had STV, now ?
2020-11-18 23:53:34 +0100skican't recall
2020-11-18 23:53:43 +0100 <hekkaidekapus> Me, neither.
2020-11-18 23:53:52 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-11-18 23:54:00 +0100 <ski> anyway, better late, than never
2020-11-18 23:54:07 +0100__monty__(~toonn@unaffiliated/toonn) (Quit: leaving)
2020-11-18 23:54:59 +0100gehmehgeh(~ircuser1@gateway/tor-sasl/gehmehgeh) (Quit: Leaving)
2020-11-18 23:54:59 +0100 <hekkaidekapus> In the Users’ Guide, STV is there since 6.8.1.
2020-11-18 23:55:07 +0100britva(~britva@31-10-157-156.cgn.dynamic.upc.ch)
2020-11-18 23:56:35 +0100avn(~avn@78-56-108-78.static.zebra.lt)
2020-11-18 23:58:00 +0100hekkaidekapussees where ski got the confusion: “But I was rejected I don’t recall for what reasons.” s/I was/ It was/
2020-11-18 23:58:14 +0100britva(~britva@31-10-157-156.cgn.dynamic.upc.ch) (Client Quit)
2020-11-18 23:58:17 +0100anon1252(5ec1fe17@5ec1fe17.skybroadband.com) ()
2020-11-18 23:59:14 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 272 seconds)
2020-11-18 23:59:20 +0100 <ski> (no. i noted that at the time, and internally typo-corrected it as you indicate)