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 +0100 | cosimone | (~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd) (Remote host closed the connection) |
2020-11-18 00:05:41 +0100 | cosimone | (~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 +0100 | inkbottle | (~inkbottle@aaubervilliers-654-1-104-55.w86-212.abo.wanadoo.fr) |
2020-11-18 00:06:17 +0100 | zebrag | (~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 +0100 | nuncanada | (~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 +0100 | cosimone | (~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd) (Remote host closed the connection) |
2020-11-18 00:15:51 +0100 | cosimone | (~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd) |
2020-11-18 00:19:41 +0100 | servo | (~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 +0100 | conal | (~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 +0100 | raehik | (~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 +0100 | nuncanada | (~dude@179.235.160.168) |
2020-11-18 00:36:42 +0100 | iqubic | (~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 +0100 | DavidEichmann | (~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 +0100 | cr3 | (~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 +0100 | xerox__ | (~xerox@unaffiliated/xerox) |
2020-11-18 00:45:38 +0100 | nineonine | (~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 +0100 | wroathe_ | (~wroathe@c-73-24-27-54.hsd1.mn.comcast.net) |
2020-11-18 00:47:03 +0100 | wroathe | (~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 +0100 | xerox_ | (~xerox@unaffiliated/xerox) (Ping timeout: 256 seconds) |
2020-11-18 00:48:39 +0100 | wroathe_ | wroathe |
2020-11-18 00:48:46 +0100 | xerox__ | xerox_ |
2020-11-18 00:49:49 +0100 | Varis | (~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 +0100 | Sonderblade | (~helloman@94.191.137.65.mobile.tre.se) |
2020-11-18 00:52:02 +0100 | olligobber | (olligobber@gateway/vpn/privateinternetaccess/olligobber) |
2020-11-18 00:54:54 +0100 | Tuplanolla | (~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 +0100 | Varis | (~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 +0100 | merijn | (~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 +0100 | hackage | predicate-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 +0100 | ystael | (~ystael@209.6.50.55) (Ping timeout: 256 seconds) |
2020-11-18 01:00:01 +0100 | havenwood1 | (~havenwood@185.204.1.185) () |
2020-11-18 01:00:36 +0100 | nut | (~user@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 240 seconds) |
2020-11-18 01:00:58 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds) |
2020-11-18 01:01:06 +0100 | juri_ | (~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 +0100 | jedws | (~jedws@101.184.175.183) |
2020-11-18 01:02:41 +0100 | juri_ | (~juri@178.63.35.222) |
2020-11-18 01:02:45 +0100 | peutri | (~peutri@ns317027.ip-94-23-46.eu) (Ping timeout: 240 seconds) |
2020-11-18 01:02:52 +0100 | peutri | (~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 +0100 | jzl | (~jzl@ip238.ip-149-56-250.net) |
2020-11-18 01:03:14 +0100 | jzl | (~jzl@ip238.ip-149-56-250.net) (Changing host) |
2020-11-18 01:03:14 +0100 | jzl | (~jzl@unaffiliated/jzl) |
2020-11-18 01:03:52 +0100 | ericsagn1 | (~ericsagne@2405:6580:0:5100:94c2:72b2:8a99:7096) (Ping timeout: 260 seconds) |
2020-11-18 01:04:12 +0100 | cosimone | (~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd) (Ping timeout: 260 seconds) |
2020-11-18 01:04:31 +0100 | cosimone | (~cosimone@5.171.25.59) |
2020-11-18 01:06:15 +0100 | ben_m | (~ben_m@unaffiliated/ben-m/x-8385872) (Quit: ZNC 1.7.5 - https://znc.in) |
2020-11-18 01:06:34 +0100 | ben_m | (~ben_m@56.ip-51-38-127.eu) |
2020-11-18 01:06:34 +0100 | ben_m | (~ben_m@56.ip-51-38-127.eu) (Changing host) |
2020-11-18 01:06:34 +0100 | ben_m | (~ben_m@unaffiliated/ben-m/x-8385872) |
2020-11-18 01:07:46 +0100 | lemald | (~eddie@capybara.lemald.org) (Ping timeout: 246 seconds) |
2020-11-18 01:10:04 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Read error: Connection reset by peer) |
2020-11-18 01:10:10 +0100 | raehik1 | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2020-11-18 01:14:03 +0100 | mbomba | (~mbomba@bras-base-toroon2719w-grc-49-142-114-9-241.dsl.bell.ca) |
2020-11-18 01:14:09 +0100 | gehmehgeh | (~ircuser1@gateway/tor-sasl/gehmehgeh) (Quit: Leaving) |
2020-11-18 01:15:31 +0100 | mputz | (~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de) (Quit: mputz) |
2020-11-18 01:15:56 +0100 | ericsagn1 | (~ericsagne@2405:6580:0:5100:1bc1:d518:fbf:6e25) |
2020-11-18 01:20:04 +0100 | jedws | (~jedws@101.184.175.183) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2020-11-18 01:21:52 +0100 | Nolar | (~Nolar@185.163.110.116) |
2020-11-18 01:24:38 +0100 | arw_ | (~arw@impulse.informatik.uni-erlangen.de) |
2020-11-18 01:25:07 +0100 | AWizzArd_ | (~code@gehrels.uberspace.de) |
2020-11-18 01:25:07 +0100 | w2gz | (~do@159.89.11.133) |
2020-11-18 01:25:37 +0100 | w1gz | (~do@159.89.11.133) (Ping timeout: 260 seconds) |
2020-11-18 01:25:37 +0100 | arw | (~arw@impulse.informatik.uni-erlangen.de) (Ping timeout: 260 seconds) |
2020-11-18 01:25:37 +0100 | AWizzArd | (~code@unaffiliated/awizzard) (Ping timeout: 260 seconds) |
2020-11-18 01:26:42 +0100 | mputz | (~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de) |
2020-11-18 01:26:49 +0100 | dxld | (~dxld@80-109-136-248.cable.dynamic.surfer.at) (Quit: Bye) |
2020-11-18 01:28:34 +0100 | daGrevis | (~daGrevis@unaffiliated/dagrevis) (Ping timeout: 256 seconds) |
2020-11-18 01:28:35 +0100 | dxld | (~dxld@rush.pub.dxld.at) |
2020-11-18 01:28:43 +0100 | daGrevis | (~daGrevis@unaffiliated/dagrevis) |
2020-11-18 01:29:07 +0100 | LKoen | (~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 +0100 | da39a3ee5e6b4b0d | (~da39a3ee5@cm-171-98-78-149.revip7.asianet.co.th) |
2020-11-18 01:31:23 +0100 | jb55 | (~jb55@gateway/tor-sasl/jb55) (Ping timeout: 240 seconds) |
2020-11-18 01:31:48 +0100 | jb55 | (~jb55@gateway/tor-sasl/jb55) |
2020-11-18 01:33:11 +0100 | mputz | (~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de) (Quit: mputz) |
2020-11-18 01:33:45 +0100 | jedws | (~jedws@101.184.175.183) |
2020-11-18 01:34:17 +0100 | hekkaidekapus_ | (~tchouri@gateway/tor-sasl/hekkaidekapus) |
2020-11-18 01:34:41 +0100 | st8less | (~st8less@2603:a060:11fd:0:68fe:5aed:dd91:2111) (Quit: WeeChat 2.7.1) |
2020-11-18 01:34:57 +0100 | lemald | (~eddie@capybara.lemald.org) |
2020-11-18 01:36:03 +0100 | hekkaidekapus | (~tchouri@gateway/tor-sasl/hekkaidekapus) (Ping timeout: 240 seconds) |
2020-11-18 01:36:55 +0100 | fendor_ | (~fendor@77.119.128.218.wireless.dyn.drei.com) |
2020-11-18 01:37:35 +0100 | carlomagno | (~cararell@148.87.23.12) |
2020-11-18 01:38:37 +0100 | nbloomf | (~nbloomf@2600:1700:ad14:3020:95c1:f982:82e4:2d79) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2020-11-18 01:39:49 +0100 | fendor | (~fendor@178.115.128.157.wireless.dyn.drei.com) (Ping timeout: 264 seconds) |
2020-11-18 01:40:13 +0100 | alp | (~alp@2a01:e0a:58b:4920:ac08:1079:c3a9:84b6) (Remote host closed the connection) |
2020-11-18 01:43:55 +0100 | shatriff | (~vitaliish@176.52.219.10) (Remote host closed the connection) |
2020-11-18 01:44:11 +0100 | shatriff | (~vitaliish@176.52.219.10) |
2020-11-18 01:44:13 +0100 | benjamingr__ | (uid23465@gateway/web/irccloud.com/x-hiupvfuftqbhepbs) (Quit: Connection closed for inactivity) |
2020-11-18 01:44:41 +0100 | conal | (~conal@64.71.133.70) (Quit: Computer has gone to sleep.) |
2020-11-18 01:44:43 +0100 | shatriff | (~vitaliish@176.52.219.10) (Remote host closed the connection) |
2020-11-18 01:45:00 +0100 | shatriff | (~vitaliish@176.52.219.10) |
2020-11-18 01:45:19 +0100 | ph88 | (~ph88@2a02:8109:9e00:7e5c:bc50:2174:75e6:7e22) (Ping timeout: 272 seconds) |
2020-11-18 01:45:32 +0100 | shatriff | (~vitaliish@176.52.219.10) (Remote host closed the connection) |
2020-11-18 01:45:49 +0100 | shatriff | (~vitaliish@176.52.219.10) |
2020-11-18 01:46:18 +0100 | nbloomf | (~nbloomf@2600:1700:ad14:3020:95c1:f982:82e4:2d79) |
2020-11-18 01:46:20 +0100 | shatriff | (~vitaliish@176.52.219.10) (Remote host closed the connection) |
2020-11-18 01:46:38 +0100 | shatriff | (~vitaliish@176.52.219.10) |
2020-11-18 01:47:08 +0100 | shatriff | (~vitaliish@176.52.219.10) (Remote host closed the connection) |
2020-11-18 01:49:31 +0100 | hackage | Frames-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 +0100 | Aquazi | (uid312403@gateway/web/irccloud.com/x-fwnbgopbizdwfbcr) (Quit: Connection closed for inactivity) |
2020-11-18 01:52:29 +0100 | elfets | (~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 +0100 | dcoutts_ | (~duncan@33.14.75.194.dyn.plus.net) (Ping timeout: 240 seconds) |
2020-11-18 02:06:15 +0100 | gentauro | (~gentauro@unaffiliated/gentauro) (Read error: Connection reset by peer) |
2020-11-18 02:06:42 +0100 | gentauro | (~gentauro@unaffiliated/gentauro) |
2020-11-18 02:07:40 +0100 | jedws | (~jedws@101.184.175.183) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2020-11-18 02:08:10 +0100 | crdrost | (~crdrost@c-98-207-102-156.hsd1.ca.comcast.net) (Quit: This computer has gone to sleep) |
2020-11-18 02:09:13 +0100 | m0rphism | (~m0rphism@HSI-KBW-095-208-098-207.hsi5.kabel-badenwuerttemberg.de) (Ping timeout: 264 seconds) |
2020-11-18 02:09:39 +0100 | jedws | (~jedws@101.184.175.183) |
2020-11-18 02:21:28 +0100 | cole-h | (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) (Ping timeout: 260 seconds) |
2020-11-18 02:21:42 +0100 | ManiacTwister | (~Twister@2a01:4f8:171:4de::40:2) (Quit: Servus!) |
2020-11-18 02:22:02 +0100 | pjb | (~t@2a01cb04063ec5006d6abee34943d090.ipv6.abo.wanadoo.fr) (Ping timeout: 260 seconds) |
2020-11-18 02:22:24 +0100 | ManiacTwister | (~Twister@2a01:4f8:171:4de::40:2) |
2020-11-18 02:22:38 +0100 | ddellacosta | (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 +0100 | falafel | (~falafel@2601:547:1303:b30:7811:313f:d0f3:f9f4) (Ping timeout: 260 seconds) |
2020-11-18 02:28:13 +0100 | Kaiepi | (~Kaiepi@nwcsnbsc03w-47-55-225-82.dhcp-dynamic.fibreop.nb.bellaliant.net) |
2020-11-18 02:28:15 +0100 | nbloomf | (~nbloomf@2600:1700:ad14:3020:95c1:f982:82e4:2d79) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2020-11-18 02:28:35 +0100 | Guest_87 | (b644cd01@182.68.205.1) |
2020-11-18 02:28:37 +0100 | conal | (~conal@64.71.133.70) |
2020-11-18 02:31:58 +0100 | Lord_of_Life_ | (~Lord@46.217.217.18) |
2020-11-18 02:33:05 +0100 | Lord_of_Life | (~Lord@46.217.219.70) (Ping timeout: 240 seconds) |
2020-11-18 02:33:25 +0100 | abrar | (~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 +0100 | Audentity | (~Audentity@4e69b241.skybroadband.com) (Ping timeout: 272 seconds) |
2020-11-18 02:40:22 +0100 | Audentity | (~Audentity@4e69b241.skybroadband.com) |
2020-11-18 02:44:07 +0100 | ddellacosta | (dd@gateway/vpn/mullvad/ddellacosta) |
2020-11-18 02:48:52 +0100 | thc202 | (~thc202@unaffiliated/thc202) (Ping timeout: 260 seconds) |
2020-11-18 02:50:31 +0100 | hackage | Frames-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 +0100 | drbean | (~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 +0100 | Guest_87 | (b644cd01@182.68.205.1) (Remote host closed the connection) |
2020-11-18 02:54:54 +0100 | dustypacer | (~pi@2600:6c50:80:2f4a:e9d0:6569:1cea:d1d4) |
2020-11-18 02:56:21 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2020-11-18 02:57:50 +0100 | Audentity | (~Audentity@4e69b241.skybroadband.com) (Ping timeout: 260 seconds) |
2020-11-18 03:01:09 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds) |
2020-11-18 03:01:27 +0100 | Audentity | (~Audentity@4e69b241.skybroadband.com) |
2020-11-18 03:09:23 +0100 | livvy | (~livvy@gateway/tor-sasl/livvy) (Ping timeout: 240 seconds) |
2020-11-18 03:11:43 +0100 | kotrcka | (~peter@ip-94-112-194-11.net.upcbroadband.cz) |
2020-11-18 03:11:47 +0100 | Entertainment | (~entertain@104.246.132.210) () |
2020-11-18 03:13:51 +0100 | nuncanada | (~dude@179.235.160.168) (Read error: Connection reset by peer) |
2020-11-18 03:14:28 +0100 | raehik1 | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 246 seconds) |
2020-11-18 03:14:53 +0100 | raehik1 | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2020-11-18 03:15:07 +0100 | Tario | (~Tario@201.192.165.173) (Read error: Connection reset by peer) |
2020-11-18 03:20:08 +0100 | alx741 | (~alx741@181.196.68.148) (Quit: alx741) |
2020-11-18 03:21:05 +0100 | Audentity | (~Audentity@4e69b241.skybroadband.com) (Ping timeout: 240 seconds) |
2020-11-18 03:25:02 +0100 | Audentity | (~Audentity@4e69b241.skybroadband.com) |
2020-11-18 03:25:36 +0100 | solonarv | (~solonarv@astrasbourg-653-1-156-155.w90-6.abo.wanadoo.fr) (Ping timeout: 240 seconds) |
2020-11-18 03:26:01 +0100 | cr3 | (~cr3@192-222-143-195.qc.cable.ebox.net) (Ping timeout: 272 seconds) |
2020-11-18 03:26:18 +0100 | raehik1 | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 260 seconds) |
2020-11-18 03:30:13 +0100 | toorevitimirp | (~tooreviti@117.182.180.118) |
2020-11-18 03:31:26 +0100 | ddellacosta | (dd@gateway/vpn/mullvad/ddellacosta) (Ping timeout: 260 seconds) |
2020-11-18 03:32:57 +0100 | guest1118 | (~user@49.5.6.87) |
2020-11-18 03:33:15 +0100 | Deide | (~Deide@217.155.19.23) (Quit: Seeee yaaaa) |
2020-11-18 03:34:13 +0100 | jchia__ | (~jchia@58.32.37.146) (Quit: Leaving.) |
2020-11-18 03:34:32 +0100 | jchia__ | (~jchia@58.32.37.146) |
2020-11-18 03:34:47 +0100 | jchia__ | (~jchia@58.32.37.146) (Client Quit) |
2020-11-18 03:34:56 +0100 | drbean | (~drbean@TC210-63-209-39.static.apol.com.tw) (Ping timeout: 240 seconds) |
2020-11-18 03:35:06 +0100 | jchia__ | (~jchia@58.32.37.146) |
2020-11-18 03:35:21 +0100 | jchia__ | (~jchia@58.32.37.146) (Client Quit) |
2020-11-18 03:35:41 +0100 | jchia__ | (~jchia@58.32.37.146) |
2020-11-18 03:35:55 +0100 | jchia__ | (~jchia@58.32.37.146) (Client Quit) |
2020-11-18 03:36:19 +0100 | jchia__ | (~jchia@58.32.37.146) |
2020-11-18 03:36:29 +0100 | jchia__ | (~jchia@58.32.37.146) (Client Quit) |
2020-11-18 03:39:01 +0100 | nbloomf | (~nbloomf@2600:1700:ad14:3020:95c1:f982:82e4:2d79) |
2020-11-18 03:41:26 +0100 | xff0x | (~fox@2001:1a81:52d5:6a00:7dc4:a65f:e69e:5679) (Ping timeout: 264 seconds) |
2020-11-18 03:43:19 +0100 | xff0x | (~fox@2001:1a81:5310:3c00:eddd:290e:8cac:b048) |
2020-11-18 03:43:56 +0100 | da39a3ee5e6b4b0d | (~da39a3ee5@cm-171-98-78-149.revip7.asianet.co.th) (Ping timeout: 240 seconds) |
2020-11-18 03:44:26 +0100 | Tario | (~Tario@garza.riseup.net) |
2020-11-18 03:47:05 +0100 | wroathe_ | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2020-11-18 03:47:45 +0100 | jedws | (~jedws@101.184.175.183) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2020-11-18 03:48:13 +0100 | wroathe | (~wroathe@c-73-24-27-54.hsd1.mn.comcast.net) (Ping timeout: 264 seconds) |
2020-11-18 03:48:39 +0100 | jedws | (~jedws@101.184.175.183) |
2020-11-18 03:49:17 +0100 | wroathe_ | wroathe |
2020-11-18 03:51:19 +0100 | Tario | (~Tario@garza.riseup.net) (Read error: Connection reset by peer) |
2020-11-18 03:51:29 +0100 | Tario | (~Tario@201.192.165.173) |
2020-11-18 03:53:50 +0100 | lucasb | (uid333435@gateway/web/irccloud.com/x-gwvbkmucegxpihno) (Quit: Connection closed for inactivity) |
2020-11-18 03:54:16 +0100 | Feuermagier | (~Feuermagi@213.178.26.41) (Ping timeout: 256 seconds) |
2020-11-18 03:54:20 +0100 | Stanley00 | (~stanley00@unaffiliated/stanley00) |
2020-11-18 03:54:49 +0100 | urdh | (~urdh@unaffiliated/urdh) (Ping timeout: 264 seconds) |
2020-11-18 04:00:01 +0100 | Nolar | (~Nolar@185.163.110.116) () |
2020-11-18 04:00:48 +0100 | jedws | (~jedws@101.184.175.183) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2020-11-18 04:02:49 +0100 | Feuermagier | (~Feuermagi@213.178.26.41) |
2020-11-18 04:04:12 +0100 | boxscape | (54a35f37@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.95.55) |
2020-11-18 04:06:55 +0100 | urodna | (~urodna@unaffiliated/urodna) (Quit: urodna) |
2020-11-18 04:15:21 +0100 | bqv | (~bqv@2a02:8010:674f:0:d65d:64ff:fe52:5efe) (Quit: WeeChat 2.9) |
2020-11-18 04:17:05 +0100 | pjb | (~t@2a01cb04063ec500fcb709f072569e15.ipv6.abo.wanadoo.fr) |
2020-11-18 04:17:20 +0100 | da39a3ee5e6b4b0d | (~da39a3ee5@cm-171-98-78-149.revip7.asianet.co.th) |
2020-11-18 04:23:01 +0100 | zaquest | (~notzaques@5.128.210.178) (Ping timeout: 264 seconds) |
2020-11-18 04:32:39 +0100 | mbomba | (~mbomba@bras-base-toroon2719w-grc-49-142-114-9-241.dsl.bell.ca) (Quit: WeeChat 3.0) |
2020-11-18 04:35:01 +0100 | Audentity | (~Audentity@4e69b241.skybroadband.com) (Ping timeout: 265 seconds) |
2020-11-18 04:35:37 +0100 | zaquest | (~notzaques@5.128.210.178) |
2020-11-18 04:35:47 +0100 | wei2912 | (~wei2912@unaffiliated/wei2912) |
2020-11-18 04:37:28 +0100 | kaeru | (~kaeru@185.163.110.116) (Remote host closed the connection) |
2020-11-18 04:38:12 +0100 | Audentity | (~Audentity@4e69b241.skybroadband.com) |
2020-11-18 04:43:37 +0100 | jedws | (~jedws@101.184.175.183) |
2020-11-18 04:46:09 +0100 | Tario | (~Tario@201.192.165.173) (Read error: Connection reset by peer) |
2020-11-18 04:46:23 +0100 | Tario | (~Tario@201.192.165.173) |
2020-11-18 04:46:30 +0100 | vacm | (~vacwm@70.23.92.191) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2020-11-18 04:46:43 +0100 | lagothrix | (~lagothrix@unaffiliated/lagothrix) (Killed (hitchcock.freenode.net (Nickname regained by services))) |
2020-11-18 04:46:51 +0100 | lagothrix | (~lagothrix@unaffiliated/lagothrix) |
2020-11-18 04:50:27 +0100 | nados | (~dan@69-165-210-185.cable.teksavvy.com) (Remote host closed the connection) |
2020-11-18 04:50:49 +0100 | ystael | (~ystael@209.6.50.55) |
2020-11-18 04:50:55 +0100 | nados | (~dan@69-165-210-185.cable.teksavvy.com) |
2020-11-18 04:53:43 +0100 | theDon | (~td@muedsl-82-207-238-136.citykom.de) (Ping timeout: 260 seconds) |
2020-11-18 04:55:12 +0100 | theDon | (~td@94.134.91.119) |
2020-11-18 04:56:42 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2020-11-18 04:59:44 +0100 | cosimone | (~cosimone@5.171.25.59) (Quit: cosimone) |
2020-11-18 05:00:09 +0100 | da39a3ee5e6b4b0d | (~da39a3ee5@cm-171-98-78-149.revip7.asianet.co.th) (Ping timeout: 256 seconds) |
2020-11-18 05:00:10 +0100 | machinedgod | (~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 246 seconds) |
2020-11-18 05:00:38 +0100 | renzhi | (~renzhi@2607:fa49:655f:e600::28da) (Ping timeout: 264 seconds) |
2020-11-18 05:00:51 +0100 | g3762 | (~g3762@190.84.119.211) |
2020-11-18 05:00:56 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds) |
2020-11-18 05:08:31 +0100 | johnw | (~johnw@haskell/developer/johnw) (Read error: Connection reset by peer) |
2020-11-18 05:08:50 +0100 | kotrcka | (~peter@ip-94-112-194-11.net.upcbroadband.cz) (Quit: Konversation terminated!) |
2020-11-18 05:09:08 +0100 | johnw | (~johnw@haskell/developer/johnw) |
2020-11-18 05:10:26 +0100 | g3762 | (~g3762@190.84.119.211) (Quit: Leaving) |
2020-11-18 05:11:26 +0100 | ericsagn1 | (~ericsagne@2405:6580:0:5100:1bc1:d518:fbf:6e25) (Ping timeout: 264 seconds) |
2020-11-18 05:11:32 +0100 | christo | (~chris@81.96.113.213) (Remote host closed the connection) |
2020-11-18 05:14:37 +0100 | Tario | (~Tario@201.192.165.173) (Ping timeout: 264 seconds) |
2020-11-18 05:16:27 +0100 | christo | (~chris@81.96.113.213) |
2020-11-18 05:20:45 +0100 | christo | (~chris@81.96.113.213) (Ping timeout: 240 seconds) |
2020-11-18 05:23:12 +0100 | ericsagn1 | (~ericsagne@2405:6580:0:5100:9e:a33:1504:d5f7) |
2020-11-18 05:28:43 +0100 | ksamak | (~ksamak@195.206.169.184) |
2020-11-18 05:31:36 +0100 | cads | (~cads@ip-64-72-99-232.lasvegas.net) |
2020-11-18 05:31:47 +0100 | howdoi | (uid224@gateway/web/irccloud.com/x-hhaciizupxxisicz) (Quit: Connection closed for inactivity) |
2020-11-18 05:32:43 +0100 | jb55 | (~jb55@gateway/tor-sasl/jb55) (Ping timeout: 240 seconds) |
2020-11-18 05:33:02 +0100 | acidjnk_new | (~acidjnk@p200300d0c719ff874cf537f47d61e6af.dip0.t-ipconnect.de) (Ping timeout: 264 seconds) |
2020-11-18 05:34:44 +0100 | jb55 | (~jb55@gateway/tor-sasl/jb55) |
2020-11-18 05:44:12 +0100 | Audentity | (~Audentity@4e69b241.skybroadband.com) (Ping timeout: 256 seconds) |
2020-11-18 05:44:50 +0100 | da39a3ee5e6b4b0d | (~da39a3ee5@cm-171-98-78-149.revip7.asianet.co.th) |
2020-11-18 05:45:14 +0100 | Noldorin | (~noldorin@unaffiliated/noldorin) |
2020-11-18 05:46:10 +0100 | Noldorin | (~noldorin@unaffiliated/noldorin) (Client Quit) |
2020-11-18 05:48:11 +0100 | Audentity | (~Audentity@4e69b241.skybroadband.com) |
2020-11-18 05:50:34 +0100 | conal | (~conal@64.71.133.70) (Read error: Connection reset by peer) |
2020-11-18 06:00:22 +0100 | spake | (~spake@84.39.117.57) |
2020-11-18 06:01:17 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Remote host closed the connection) |
2020-11-18 06:01:40 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2020-11-18 06:03:30 +0100 | hackage | hyraxAbif 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 +0100 | plutoniix | (~q@ppp-27-55-83-124.revip3.asianet.co.th) |
2020-11-18 06:10:41 +0100 | ericsagn1 | (~ericsagne@2405:6580:0:5100:9e:a33:1504:d5f7) (Ping timeout: 272 seconds) |
2020-11-18 06:11:30 +0100 | hackage | hyraxAbif 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 +0100 | logicmoo | dmiles |
2020-11-18 06:15:33 +0100 | texasmynsted | (~texasmyns@212.102.45.118) (Ping timeout: 265 seconds) |
2020-11-18 06:15:49 +0100 | da39a3ee5e6b4b0d | (~da39a3ee5@cm-171-98-78-149.revip7.asianet.co.th) (Ping timeout: 264 seconds) |
2020-11-18 06:18:15 +0100 | guest111` | (~user@49.5.6.87) |
2020-11-18 06:19:58 +0100 | boxscape | (54a35f37@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.95.55) (Ping timeout: 246 seconds) |
2020-11-18 06:20:50 +0100 | justanotheruser | (~justanoth@unaffiliated/justanotheruser) |
2020-11-18 06:22:42 +0100 | guest1118 | (~user@49.5.6.87) (Ping timeout: 260 seconds) |
2020-11-18 06:23:01 +0100 | ericsagn1 | (~ericsagne@2405:6580:0:5100:eb39:3323:4fa4:f361) |
2020-11-18 06:26:00 +0100 | day_ | (~Unknown@unaffiliated/day) |
2020-11-18 06:27:24 +0100 | nbloomf | (~nbloomf@2600:1700:ad14:3020:95c1:f982:82e4:2d79) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2020-11-18 06:29:23 +0100 | day | (~Unknown@unaffiliated/day) (Ping timeout: 260 seconds) |
2020-11-18 06:29:24 +0100 | day_ | day |
2020-11-18 06:34:31 +0100 | Sanchayan | (~Sanchayan@106.201.35.233) |
2020-11-18 06:43:45 +0100 | falafel | (~falafel@2601:547:1303:b30:7811:313f:d0f3:f9f4) |
2020-11-18 06:46:00 +0100 | guest111` | (~user@49.5.6.87) (Ping timeout: 265 seconds) |
2020-11-18 06:53:43 +0100 | larou | (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 +0100 | merijn | (~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 +0100 | da39a3ee5e6b4b0d | (~da39a3ee5@cm-171-98-78-149.revip7.asianet.co.th) |
2020-11-18 07:00:01 +0100 | ksamak | (~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 +0100 | merijn | (~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 +0100 | jedws | (~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 +0100 | jedws | (~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 +0100 | zenzike | (uid257060@gateway/web/irccloud.com/x-ekbwjbhyjbwovlhi) (Quit: Connection closed for inactivity) |
2020-11-18 07:18:07 +0100 | falafel | (~falafel@2601:547:1303:b30:7811:313f:d0f3:f9f4) (Ping timeout: 260 seconds) |
2020-11-18 07:21:05 +0100 | Audentity | (~Audentity@4e69b241.skybroadband.com) (Ping timeout: 240 seconds) |
2020-11-18 07:24:52 +0100 | Audentity | (~Audentity@4e69b241.skybroadband.com) |
2020-11-18 07:29:35 +0100 | Sonderblade | (~helloman@94.191.137.65.mobile.tre.se) (Quit: Konversation terminated!) |
2020-11-18 07:30:30 +0100 | supercoven | (~Supercove@dsl-hkibng31-54fae0-18.dhcp.inet.fi) |
2020-11-18 07:31:49 +0100 | takuan | (~takuan@178-116-218-225.access.telenet.be) |
2020-11-18 07:32:54 +0100 | coot | (~coot@37.30.49.253.nat.umts.dynamic.t-mobile.pl) (Quit: coot) |
2020-11-18 07:41:47 +0100 | hereEthereal | (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 +0100 | benjamingr__ | (uid23465@gateway/web/irccloud.com/x-aztrejkfdpbhytuo) |
2020-11-18 07:50:44 +0100 | danvet | (~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa) |
2020-11-18 07:53:43 +0100 | Audentity | (~Audentity@4e69b241.skybroadband.com) (Ping timeout: 260 seconds) |
2020-11-18 07:54:23 +0100 | PacoV | (~pcoves@16.194.31.93.rev.sfr.net) (Quit: leaving) |
2020-11-18 07:57:03 +0100 | Audentity | (~Audentity@4e69b241.skybroadband.com) |
2020-11-18 07:57:53 +0100 | forcer1 | (~forcer@s91904426.blix.com) |
2020-11-18 08:00:11 +0100 | danvet_ | (~danvet@2a02:168:57f4:0:5f80:650d:c6e6:3453) |
2020-11-18 08:05:14 +0100 | bitmagie | (~Thunderbi@200116b806bfae005d76ad0c90a5d25b.dip.versatel-1u1.de) |
2020-11-18 08:07:25 +0100 | Varis | (~Tadas@unaffiliated/varis) (Remote host closed the connection) |
2020-11-18 08:07:42 +0100 | plutoniix | (~q@ppp-27-55-83-124.revip3.asianet.co.th) (Quit: Leaving) |
2020-11-18 08:08:33 +0100 | bliminse | (~bliminse@host109-156-197-211.range109-156.btcentralplus.com) (Ping timeout: 260 seconds) |
2020-11-18 08:08:36 +0100 | da39a3ee5e6b4b0d | (~da39a3ee5@cm-171-98-78-149.revip7.asianet.co.th) (Ping timeout: 240 seconds) |
2020-11-18 08:09:00 +0100 | bliminse | (~bliminse@host109-156-197-211.range109-156.btcentralplus.com) |
2020-11-18 08:09:21 +0100 | bitmagie | (~Thunderbi@200116b806bfae005d76ad0c90a5d25b.dip.versatel-1u1.de) (Client Quit) |
2020-11-18 08:10:17 +0100 | Bigcheese | (~quassel@unaffiliated/bigcheese) (Ping timeout: 260 seconds) |
2020-11-18 08:10:36 +0100 | Rudd0 | (~Rudd0@185.189.115.98) (Ping timeout: 240 seconds) |
2020-11-18 08:11:37 +0100 | rprije | (~rprije@124.148.131.132) (Ping timeout: 264 seconds) |
2020-11-18 08:12:08 +0100 | urdh | (~urdh@unaffiliated/urdh) |
2020-11-18 08:12:13 +0100 | heatsink | (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2020-11-18 08:13:11 +0100 | Bigcheese | (~quassel@unaffiliated/bigcheese) |
2020-11-18 08:15:08 +0100 | cole-h | (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) |
2020-11-18 08:15:14 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2020-11-18 08:16:47 +0100 | sord937 | (~sord937@gateway/tor-sasl/sord937) |
2020-11-18 08:19:16 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds) |
2020-11-18 08:20:10 +0100 | alp | (~alp@2a01:e0a:58b:4920:f15e:f3ed:dd53:300e) |
2020-11-18 08:20:39 +0100 | larou | (5eae2591@gateway/web/cgi-irc/kiwiirc.com/ip.94.174.37.145) (Quit: Connection closed) |
2020-11-18 08:24:01 +0100 | hackage | subG 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 +0100 | aplainzetakind | (~johndoe@captainludd.powered.by.lunarbnc.net) (Ping timeout: 268 seconds) |
2020-11-18 08:32:12 +0100 | bliminse | (~bliminse@host109-156-197-211.range109-156.btcentralplus.com) (Quit: leaving) |
2020-11-18 08:32:56 +0100 | codeAlways | (uid272474@gateway/web/irccloud.com/x-gprgopjmphvaootv) |
2020-11-18 08:33:40 +0100 | aplainzetakind | (~johndoe@captainludd.powered.by.lunarbnc.net) |
2020-11-18 08:34:45 +0100 | ajmcmiddlin | (sid284402@gateway/web/irccloud.com/x-esnyudzmonhtpktj) (Ping timeout: 240 seconds) |
2020-11-18 08:35:24 +0100 | ajmcmiddlin | (sid284402@gateway/web/irccloud.com/x-rzusuwaofduhllmt) |
2020-11-18 08:35:45 +0100 | bliminse | (~bliminse@host109-156-197-211.range109-156.btcentralplus.com) |
2020-11-18 08:41:19 +0100 | kritzefitz | (~kritzefit@fw-front.credativ.com) |
2020-11-18 08:44:26 +0100 | dragestil | (~quassel@185.137.175.104) |
2020-11-18 08:48:30 +0100 | dragestil | (~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 +0100 | merijn | (~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 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds) |
2020-11-18 09:01:22 +0100 | justanotheruser | (~justanoth@unaffiliated/justanotheruser) (Ping timeout: 260 seconds) |
2020-11-18 09:01:29 +0100 | jespada | (~jespada@90.254.245.49) (Quit: Leaving) |
2020-11-18 09:02:06 +0100 | jespada | (~jespada@90.254.245.49) |
2020-11-18 09:02:48 +0100 | chele | (~chele@ip5b416ea2.dynamic.kabel-deutschland.de) |
2020-11-18 09:12:15 +0100 | da39a3ee5e6b4b0d | (~da39a3ee5@cm-171-98-78-149.revip7.asianet.co.th) |
2020-11-18 09:12:47 +0100 | heatsink | (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
2020-11-18 09:14:51 +0100 | cfricke | (~cfricke@unaffiliated/cfricke) |
2020-11-18 09:15:40 +0100 | oish | (~charlie@228.25.169.217.in-addr.arpa) |
2020-11-18 09:16:41 +0100 | Aquazi | (uid312403@gateway/web/irccloud.com/x-dkkwvspwitpqcrse) |
2020-11-18 09:17:16 +0100 | heatsink | (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 240 seconds) |
2020-11-18 09:20:13 +0100 | chaosmasttter | (~chaosmast@p200300c4a70b2a01fdbe436b20b9f284.dip0.t-ipconnect.de) |
2020-11-18 09:21:11 +0100 | Varis | (~Tadas@unaffiliated/varis) |
2020-11-18 09:21:27 +0100 | mananamenos | (~mananamen@84.122.202.215.dyn.user.ono.com) |
2020-11-18 09:27:36 +0100 | dhouthoo | (~dhouthoo@ptr-eiv6509pb4ifhdr9lsd.18120a2.ip6.access.telenet.be) |
2020-11-18 09:28:40 +0100 | infinity0 | (~infinity0@freenet/developer/infinity0) (Remote host closed the connection) |
2020-11-18 09:29:40 +0100 | coot | (~coot@37.30.49.253.nat.umts.dynamic.t-mobile.pl) |
2020-11-18 09:30:49 +0100 | infinity0 | (~infinity0@freenet/developer/infinity0) |
2020-11-18 09:31:26 +0100 | guest111` | (~user@49.5.6.87) |
2020-11-18 09:33:33 +0100 | kuribas | (~user@ptr-25vy0ia1gi47vc0v7ie.18120a2.ip6.access.telenet.be) |
2020-11-18 09:37:25 +0100 | revprez_anzio | (~revprez_a@pool-108-49-213-40.bstnma.fios.verizon.net) (Ping timeout: 264 seconds) |
2020-11-18 09:37:49 +0100 | raichoo | (~raichoo@dslb-178-001-021-225.178.001.pools.vodafone-ip.de) |
2020-11-18 09:37:52 +0100 | revprez_anzio | (~revprez_a@pool-108-49-213-40.bstnma.fios.verizon.net) |
2020-11-18 09:37:53 +0100 | isacl___ | (uid13263@gateway/web/irccloud.com/x-yofapmbxdjxmgdaw) |
2020-11-18 09:38:33 +0100 | britva | (~britva@31-10-157-156.cgn.dynamic.upc.ch) |
2020-11-18 09:41:07 +0100 | petersen | (~petersen@redhat/juhp) (Quit: petersen) |
2020-11-18 09:41:25 +0100 | Ariakenom | (~Ariakenom@h-98-128-229-104.NA.cust.bahnhof.se) |
2020-11-18 09:41:48 +0100 | petersen | (~petersen@redhat/juhp) |
2020-11-18 09:42:45 +0100 | coco | (~coco@212-51-146-87.fiber7.init7.net) (Quit: WeeChat 2.9) |
2020-11-18 09:45:34 +0100 | Yumasi | (~guillaume@2a01cb09b06b29ea21daa97718c35c9f.ipv6.abo.wanadoo.fr) |
2020-11-18 09:46:36 +0100 | cole-h | (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) (Ping timeout: 240 seconds) |
2020-11-18 09:46:53 +0100 | britva | (~britva@31-10-157-156.cgn.dynamic.upc.ch) (Quit: This computer has gone to sleep) |
2020-11-18 09:49:07 +0100 | britva | (~britva@31-10-157-156.cgn.dynamic.upc.ch) |
2020-11-18 09:51:12 +0100 | oish | (~charlie@228.25.169.217.in-addr.arpa) (Ping timeout: 272 seconds) |
2020-11-18 09:51:58 +0100 | ridcully | (~ridcully@p57b5259e.dip0.t-ipconnect.de) (Quit: update) |
2020-11-18 09:53:00 +0100 | ridcully | (~ridcully@p57b5259e.dip0.t-ipconnect.de) |
2020-11-18 09:54:16 +0100 | Sgeo | (~Sgeo@ool-18b982ad.dyn.optonline.net) (Read error: Connection reset by peer) |
2020-11-18 09:54:32 +0100 | invaser | (~Thunderbi@31.148.23.125) |
2020-11-18 09:55:11 +0100 | borne | (~fritjof@200116b864880600f1dc39039d201adf.dip.versatel-1u1.de) |
2020-11-18 09:57:37 +0100 | thc202 | (~thc202@unaffiliated/thc202) |
2020-11-18 09:58:40 +0100 | jakob_ | (~textual@dynamic-093-135-025-031.93.135.pool.telefonica.de) |
2020-11-18 09:59:17 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2020-11-18 10:00:01 +0100 | forcer1 | (~forcer@s91904426.blix.com) () |
2020-11-18 10:00:15 +0100 | oish | (~charlie@228.25.169.217.in-addr.arpa) |
2020-11-18 10:00:31 +0100 | Boomerang | (~Boomerang@xd520f68c.cust.hiper.dk) |
2020-11-18 10:03:45 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds) |
2020-11-18 10:06:16 +0100 | oish | (~charlie@228.25.169.217.in-addr.arpa) (Ping timeout: 240 seconds) |
2020-11-18 10:07:16 +0100 | is_null | (~jpic@pdpc/supporter/professional/is-null) (Remote host closed the connection) |
2020-11-18 10:07:40 +0100 | da39a3ee5e6b4b0d | (~da39a3ee5@cm-171-98-78-149.revip7.asianet.co.th) (Ping timeout: 272 seconds) |
2020-11-18 10:11:26 +0100 | ericsagn1 | (~ericsagne@2405:6580:0:5100:eb39:3323:4fa4:f361) (Ping timeout: 264 seconds) |
2020-11-18 10:11:54 +0100 | acidjnk_new | (~acidjnk@p200300d0c719ff876dbcfe4d3d96265f.dip0.t-ipconnect.de) |
2020-11-18 10:14:06 +0100 | britva | (~britva@31-10-157-156.cgn.dynamic.upc.ch) (Quit: This computer has gone to sleep) |
2020-11-18 10:14:16 +0100 | nados | (~dan@69-165-210-185.cable.teksavvy.com) (Ping timeout: 240 seconds) |
2020-11-18 10:17:33 +0100 | britva | (~britva@31-10-157-156.cgn.dynamic.upc.ch) |
2020-11-18 10:23:14 +0100 | ericsagn1 | (~ericsagne@2405:6580:0:5100:bdf6:510e:2b42:888e) |
2020-11-18 10:25:14 +0100 | a3Dman | (~3Dman@unaffiliated/a3dman) (Ping timeout: 246 seconds) |
2020-11-18 10:25:23 +0100 | christo | (~chris@81.96.113.213) |
2020-11-18 10:26:07 +0100 | DavidEichmann | (~david@62.110.198.146.dyn.plus.net) |
2020-11-18 10:29:06 +0100 | a3Dman | (~3Dman@unaffiliated/a3dman) |
2020-11-18 10:30:18 +0100 | kqr | (~kqr@vps.xkqr.org) (Ping timeout: 256 seconds) |
2020-11-18 10:32:04 +0100 | nh | (~NextHendr@unaffiliated/nexthendrix) (Quit: ZNC 1.7.5+deb4 - https://znc.in) |
2020-11-18 10:32:24 +0100 | nh | (~NextHendr@finickitively.co.uk) |
2020-11-18 10:32:48 +0100 | nh | Guest8782 |
2020-11-18 10:32:54 +0100 | hnOsmium0001 | (uid453710@gateway/web/irccloud.com/x-eaonyjbsdauymoqz) (Quit: Connection closed for inactivity) |
2020-11-18 10:35:46 +0100 | kqr | (~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 +0100 | jakob_ | (~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 +0100 | ubert | (~Thunderbi@p200300ecdf1e53c9e6b318fffe838f33.dip0.t-ipconnect.de) |
2020-11-18 10:41:12 +0100 | zaquest | (~notzaques@5.128.210.178) (Quit: Leaving) |
2020-11-18 10:43:33 +0100 | jakob_ | (~textual@dynamic-093-135-025-031.93.135.pool.telefonica.de) |
2020-11-18 10:43:38 +0100 | Axman6 | (~Axman6@pdpc/supporter/student/Axman6) (Read error: Connection reset by peer) |
2020-11-18 10:43:42 +0100 | Axma80880 | (~Axman6@pdpc/supporter/student/Axman6) |
2020-11-18 10:43:57 +0100 | zaquest | (~notzaques@5.128.210.178) |
2020-11-18 10:45:26 +0100 | gehmehgeh | (~ircuser1@gateway/tor-sasl/gehmehgeh) |
2020-11-18 10:46:42 +0100 | da39a3ee5e6b4b0d | (~da39a3ee5@ppp-27-55-83-106.revip3.asianet.co.th) |
2020-11-18 10:47:06 +0100 | phaazon | (~phaazon@ns378376.ip-5-196-95.eu) (Quit: WeeChat 2.8) |
2020-11-18 10:47:44 +0100 | jakob_ | (~textual@dynamic-093-135-025-031.93.135.pool.telefonica.de) (Client Quit) |
2020-11-18 10:49:16 +0100 | Varis | (~Tadas@unaffiliated/varis) (Remote host closed the connection) |
2020-11-18 10:50:48 +0100 | phaazon | (~phaazon@2001:41d0:a:fe76::1) |
2020-11-18 10:50:54 +0100 | hereEthereal | (4913050a@c-73-19-5-10.hsd1.wa.comcast.net) (Ping timeout: 245 seconds) |
2020-11-18 10:51:41 +0100 | kritzefitz | (~kritzefit@fw-front.credativ.com) (Remote host closed the connection) |
2020-11-18 10:51:54 +0100 | jlamothe | (~jlamothe@198.251.55.207) (Ping timeout: 256 seconds) |
2020-11-18 10:53:02 +0100 | Axma80880 | Axman6 |
2020-11-18 10:54:12 +0100 | AWizzArd_ | AWizzArd |
2020-11-18 10:54:26 +0100 | AWizzArd | (~code@gehrels.uberspace.de) (Changing host) |
2020-11-18 10:54:26 +0100 | AWizzArd | (~code@unaffiliated/awizzard) |
2020-11-18 10:55:26 +0100 | Fiver | (~Fiver@s91904426.blix.com) |
2020-11-18 10:56:12 +0100 | FreeBirdLjj | (~freebirdl@101.228.42.108) |
2020-11-18 10:56:20 +0100 | Guest8782 | (~NextHendr@finickitively.co.uk) (Changing host) |
2020-11-18 10:56:20 +0100 | Guest8782 | (~NextHendr@unaffiliated/nexthendrix) |
2020-11-18 10:56:21 +0100 | Guest8782 | nh |
2020-11-18 10:57:56 +0100 | Varis | (~Tadas@unaffiliated/varis) |
2020-11-18 10:59:17 +0100 | jakob_ | (~textual@dynamic-093-135-025-031.93.135.pool.telefonica.de) |
2020-11-18 11:00:25 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2020-11-18 11:01:06 +0100 | kritzefitz | (~kritzefit@fw-front.credativ.com) |
2020-11-18 11:01:30 +0100 | FreeBirdLjj | (~freebirdl@101.228.42.108) (Ping timeout: 272 seconds) |
2020-11-18 11:04:34 +0100 | Rudd0 | (~Rudd0@185.189.115.103) |
2020-11-18 11:04:56 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds) |
2020-11-18 11:06:15 +0100 | oish | (~charlie@228.25.169.217.in-addr.arpa) |
2020-11-18 11:08:56 +0100 | graf_blutwurst | (~user@2001:171b:226e:adc0:bd9e:1b6a:d045:2128) |
2020-11-18 11:09:05 +0100 | Franciman | (~francesco@host-82-56-223-169.retail.telecomitalia.it) |
2020-11-18 11:11:38 +0100 | wei2912 | (~wei2912@unaffiliated/wei2912) (Remote host closed the connection) |
2020-11-18 11:13:25 +0100 | alp | (~alp@2a01:e0a:58b:4920:f15e:f3ed:dd53:300e) (Ping timeout: 272 seconds) |
2020-11-18 11:17:33 +0100 | da39a3ee5e6b4b0d | (~da39a3ee5@ppp-27-55-83-106.revip3.asianet.co.th) (Ping timeout: 256 seconds) |
2020-11-18 11:18:24 +0100 | guest111` | (~user@49.5.6.87) (Quit: ERC (IRC client for Emacs 27.1)) |
2020-11-18 11:18:36 +0100 | christo | (~chris@81.96.113.213) (Remote host closed the connection) |
2020-11-18 11:21:55 +0100 | comerijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2020-11-18 11:22:33 +0100 | alp | (~alp@2a01:e0a:58b:4920:6901:cad7:f91c:94b1) |
2020-11-18 11:23:20 +0100 | bitmagie | (~Thunderbi@200116b806bfae005d76ad0c90a5d25b.dip.versatel-1u1.de) |
2020-11-18 11:23:27 +0100 | christo | (~chris@81.96.113.213) |
2020-11-18 11:25:08 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds) |
2020-11-18 11:28:04 +0100 | bitmagie | (~Thunderbi@200116b806bfae005d76ad0c90a5d25b.dip.versatel-1u1.de) (Client Quit) |
2020-11-18 11:28:10 +0100 | christo | (~chris@81.96.113.213) (Ping timeout: 256 seconds) |
2020-11-18 11:40:13 +0100 | jonatanb | (~jonatanb@83.24.155.27.ipv4.supernova.orange.pl) |
2020-11-18 11:47:25 +0100 | cods | (~fred@tuxee.net) (Ping timeout: 240 seconds) |
2020-11-18 11:48:38 +0100 | cods | (~fred@tuxee.net) |
2020-11-18 11:49:22 +0100 | vicfred | (~vicfred@unaffiliated/vicfred) (Quit: Leaving) |
2020-11-18 11:53:34 +0100 | jakob_ | (~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 +0100 | jakob_ | (~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 +0100 | isacl___ | (uid13263@gateway/web/irccloud.com/x-yofapmbxdjxmgdaw) (Quit: Connection closed for inactivity) |
2020-11-18 12:01:00 +0100 | hackage | subG 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 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2020-11-18 12:01:37 +0100 | m0rphism | (~m0rphism@HSI-KBW-095-208-098-207.hsi5.kabel-badenwuerttemberg.de) |
2020-11-18 12:03:54 +0100 | CRTified[m] | (schnecfkru@gateway/shell/matrix.org/x-qudvjaxqzetifqrv) |
2020-11-18 12:05:21 +0100 | denisse_ | (~spaceCat@gateway/tor-sasl/alephzer0) |
2020-11-18 12:05:23 +0100 | denisse | (~spaceCat@gateway/tor-sasl/alephzer0) (Ping timeout: 240 seconds) |
2020-11-18 12:06:27 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 265 seconds) |
2020-11-18 12:06:45 +0100 | LKoen | (~LKoen@169.244.88.92.rev.sfr.net) |
2020-11-18 12:07:53 +0100 | madog | (~madog@163.ip-51-254-203.eu) (Quit: ) |
2020-11-18 12:09:05 +0100 | jokester_ | jokester |
2020-11-18 12:09:07 +0100 | madog | (~madog@163.ip-51-254-203.eu) |
2020-11-18 12:09:19 +0100 | Sk01 | (~sky3@1aac.wls.metu.edu.tr) |
2020-11-18 12:09:30 +0100 | hackage | http-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 +0100 | jokester | (~mono@unaffiliated/jokester) (Quit: WeeChat 2.9) |
2020-11-18 12:11:19 +0100 | boxscape | (54a35f37@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.95.55) |
2020-11-18 12:15:40 +0100 | foursaph | (~foursaph@dynamic-077-006-006-064.77.6.pool.telefonica.de) |
2020-11-18 12:17:42 +0100 | Stanley00 | (~stanley00@unaffiliated/stanley00) (Remote host closed the connection) |
2020-11-18 12:17:51 +0100 | jokester | (~mono@unaffiliated/jokester) |
2020-11-18 12:17:54 +0100 | solonarv | (~solonarv@astrasbourg-653-1-156-155.w90-6.abo.wanadoo.fr) |
2020-11-18 12:18:06 +0100 | da39a3ee5e6b4b0d | (~da39a3ee5@ppp-223-24-153-25.revip6.asianet.co.th) |
2020-11-18 12:20:16 +0100 | comerijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds) |
2020-11-18 12:22:00 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2020-11-18 12:29:38 +0100 | jchia__ | (~jchia@45.32.62.73) |
2020-11-18 12:30:39 +0100 | jchia__ | (~jchia@45.32.62.73) (Remote host closed the connection) |
2020-11-18 12:31:26 +0100 | jchia__ | (~jchia@45.32.62.73) |
2020-11-18 12:32:27 +0100 | jchia__ | (~jchia@45.32.62.73) (Remote host closed the connection) |
2020-11-18 12:33:32 +0100 | jchia__ | (~jchia@45.32.62.73) |
2020-11-18 12:34:34 +0100 | jchia__ | (~jchia@45.32.62.73) (Remote host closed the connection) |
2020-11-18 12:35:01 +0100 | jchia__ | (~jchia@45.32.62.73) |
2020-11-18 12:36:03 +0100 | jchia__ | (~jchia@45.32.62.73) (Remote host closed the connection) |
2020-11-18 12:36:38 +0100 | jchia__ | (~jchia@45.32.62.73) |
2020-11-18 12:37:58 +0100 | jchia__ | (~jchia@45.32.62.73) (Remote host closed the connection) |
2020-11-18 12:38:40 +0100 | solonarv | (~solonarv@astrasbourg-653-1-156-155.w90-6.abo.wanadoo.fr) (Ping timeout: 246 seconds) |
2020-11-18 12:39:03 +0100 | jchia__ | (~jchia@45.32.62.73) |
2020-11-18 12:39:17 +0100 | ggole | (~ggole@2001:8003:8119:7200:f828:bf:5160:1d23) |
2020-11-18 12:40:17 +0100 | jchia__ | (~jchia@45.32.62.73) (Remote host closed the connection) |
2020-11-18 12:40:35 +0100 | solonarv | (~solonarv@astrasbourg-653-1-156-4.w90-6.abo.wanadoo.fr) |
2020-11-18 12:41:09 +0100 | jchia__ | (~jchia@45.32.62.73) |
2020-11-18 12:42:11 +0100 | jchia__ | (~jchia@45.32.62.73) (Remote host closed the connection) |
2020-11-18 12:42:37 +0100 | jchia__ | (~jchia@45.32.62.73) |
2020-11-18 12:45:55 +0100 | jchia__ | (~jchia@45.32.62.73) (Remote host closed the connection) |
2020-11-18 12:46:51 +0100 | jchia__ | (~jchia@45.32.62.73) |
2020-11-18 12:47:43 +0100 | Martinsos | (~user@cpe-188-129-116-164.dynamic.amis.hr) (Ping timeout: 260 seconds) |
2020-11-18 12:48:43 +0100 | jchia__ | (~jchia@45.32.62.73) (Remote host closed the connection) |
2020-11-18 12:49:26 +0100 | jchia__ | (~jchia@45.32.62.73) |
2020-11-18 12:50:29 +0100 | jchia__ | (~jchia@45.32.62.73) (Remote host closed the connection) |
2020-11-18 12:50:51 +0100 | jchia__ | (~jchia@58.32.37.146) |
2020-11-18 12:51:06 +0100 | chaosmasttter | (~chaosmast@p200300c4a70b2a01fdbe436b20b9f284.dip0.t-ipconnect.de) (Quit: WeeChat 2.9) |
2020-11-18 12:52:13 +0100 | alp | (~alp@2a01:e0a:58b:4920:6901:cad7:f91c:94b1) (Ping timeout: 272 seconds) |
2020-11-18 12:53:25 +0100 | da39a3ee5e6b4b0d | (~da39a3ee5@ppp-223-24-153-25.revip6.asianet.co.th) (Ping timeout: 240 seconds) |
2020-11-18 12:53:29 +0100 | Yumasi | (~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 +0100 | chaosmasttter | (~chaosmast@p200300c4a70b2a01c0445547f28d17ad.dip0.t-ipconnect.de) |
2020-11-18 12:56:00 +0100 | invaser | (~Thunderbi@31.148.23.125) (Ping timeout: 256 seconds) |
2020-11-18 12:57:26 +0100 | spake | (~spake@84.39.117.57) (Remote host closed the connection) |
2020-11-18 12:58:07 +0100 | kritzefitz_ | (~kritzefit@fw-front.credativ.com) |
2020-11-18 12:58:17 +0100 | fendor_ | fendor |
2020-11-18 12:58:36 +0100 | kritzefitz | (~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 +0100 | Fiver | (~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 +0100 | PacoV | (~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 +0100 | bliminse | (~bliminse@host109-156-197-211.range109-156.btcentralplus.com) (Remote host closed the connection) |
2020-11-18 13:13:21 +0100 | bliminse | (~bliminse@host109-156-197-211.range109-156.btcentralplus.com) |
2020-11-18 13:13:37 +0100 | johnw | (~johnw@haskell/developer/johnw) (Ping timeout: 260 seconds) |
2020-11-18 13:15:38 +0100 | johnw | (~johnw@haskell/developer/johnw) |
2020-11-18 13:16:50 +0100 | Tario | (~Tario@201.192.165.173) |
2020-11-18 13:17:34 +0100 | da39a3ee5e6b4b0d | (~da39a3ee5@cm-171-98-78-149.revip7.asianet.co.th) |
2020-11-18 13:19:49 +0100 | Stanley00 | (~stanley00@unaffiliated/stanley00) |
2020-11-18 13:26:42 +0100 | omega8cc | (~omega8cc@185.204.1.185) |
2020-11-18 13:27:40 +0100 | bliminse | (~bliminse@host109-156-197-211.range109-156.btcentralplus.com) (Ping timeout: 246 seconds) |
2020-11-18 13:28:17 +0100 | bliminse | (~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 +0100 | Entertainment | (~entertain@104.246.132.210) |
2020-11-18 13:28:47 +0100 | jakob_ | (~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 +0100 | shatriff | (~vitaliish@176.52.219.10) |
2020-11-18 13:29:07 +0100 | todda7 | (~torstein@2a02:587:d96:adb6:c7fc:9428:5ead:614f) |
2020-11-18 13:29:17 +0100 | bliminse | (~bliminse@host109-156-197-211.range109-156.btcentralplus.com) (Client Quit) |
2020-11-18 13:29:56 +0100 | olligobber | (olligobber@gateway/vpn/privateinternetaccess/olligobber) (Ping timeout: 240 seconds) |
2020-11-18 13:36:42 +0100 | Tario | (~Tario@201.192.165.173) (Read error: Connection reset by peer) |
2020-11-18 13:41:31 +0100 | britva | (~britva@31-10-157-156.cgn.dynamic.upc.ch) (Quit: This computer has gone to sleep) |
2020-11-18 13:42:34 +0100 | vacm | (~vacwm@70.23.92.191) |
2020-11-18 13:44:02 +0100 | tomsmeding | shudders |
2020-11-18 13:45:37 +0100 | alp | (~alp@2a01:e0a:58b:4920:c9d2:961b:b0f5:7405) |
2020-11-18 13:46:07 +0100 | jakob_ | (~textual@dynamic-093-135-025-031.93.135.pool.telefonica.de) |
2020-11-18 13:46:15 +0100 | vacm | (~vacwm@70.23.92.191) (Client Quit) |
2020-11-18 13:46:59 +0100 | Stanley00 | (~stanley00@unaffiliated/stanley00) () |
2020-11-18 13:48:51 +0100 | Tario | (~Tario@201.192.165.173) |
2020-11-18 13:49:23 +0100 | jakob_ | (~textual@dynamic-093-135-025-031.93.135.pool.telefonica.de) (Client Quit) |
2020-11-18 13:49:47 +0100 | texasmynsted | (~texasmyns@212.102.45.121) |
2020-11-18 13:51:27 +0100 | invaser | (~Thunderbi@31.148.23.125) |
2020-11-18 13:54:39 +0100 | DavidEichmann | (~david@62.110.198.146.dyn.plus.net) (Remote host closed the connection) |
2020-11-18 13:55:40 +0100 | DavidEichmann | (~david@62.110.198.146.dyn.plus.net) |
2020-11-18 13:55:56 +0100 | servo | (~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 +0100 | da39a3ee5e6b4b0d | (~da39a3ee5@cm-171-98-78-149.revip7.asianet.co.th) (Ping timeout: 256 seconds) |
2020-11-18 14:02:28 +0100 | Uniaika | cocks 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 +0100 | sis7_ | (~user@2001:15e8:110:473e::1) (Quit: sis7_) |
2020-11-18 14:04:30 +0100 | hackage | haskoin-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 +0100 | britva | (~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 +0100 | danvet_ | (~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 +0100 | britva | (~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 +0100 | britva | (~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 +0100 | hackage | subG 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 +0100 | thc202 | (~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 +0100 | machinedgod | (~machinedg@135-23-192-217.cpe.pppoe.ca) |
2020-11-18 14:19:13 +0100 | geekosaur | (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 +0100 | ericsagn1 | (~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 +0100 | merijn | (~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 +0100 | merijn | (~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 +0100 | Sk01 | (~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 +0100 | dminuoso | scratches 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 +0100 | da39a3ee5e6b4b0d | (~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 +0100 | SanchayanMaity | (~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 +0100 | SanchayanMaity | (~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 +0100 | thc202 | (~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 +0100 | ericsagn1 | (~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 +0100 | Axman6 | (~Axman6@pdpc/supporter/student/Axman6) (Remote host closed the connection) |
2020-11-18 14:34:25 +0100 | Axman6 | (~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 +0100 | jakob_ | (~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 +0100 | SanchayanMaity | (~Sanchayan@106.201.35.233) |
2020-11-18 14:37:13 +0100 | geekosaur | (82659a09@host154-009.vpn.uakron.edu) (Remote host closed the connection) |
2020-11-18 14:37:21 +0100 | Sanchayan | (~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 +0100 | geekosaur | (82659a09@host154-009.vpn.uakron.edu) |
2020-11-18 14:39:04 +0100 | oish | (~charlie@228.25.169.217.in-addr.arpa) (Ping timeout: 256 seconds) |
2020-11-18 14:41:45 +0100 | Yumasi | (~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 +0100 | vacm | (~vacwm@70.23.92.191) |
2020-11-18 14:44:34 +0100 | dcoutts_ | (~duncan@33.14.75.194.dyn.plus.net) |
2020-11-18 14:44:50 +0100 | vacm | (~vacwm@70.23.92.191) (Client Quit) |
2020-11-18 14:46:25 +0100 | FreeBirdLjj | (~freebirdl@101.228.42.108) |
2020-11-18 14:46:31 +0100 | hackage | zydiskell 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 +0100 | alx741 | (~alx741@181.196.68.148) |
2020-11-18 14:48:41 +0100 | bliminse | (~bliminse@host109-156-197-211.range109-156.btcentralplus.com) |
2020-11-18 14:50:27 +0100 | SanchayanMaity | (~Sanchayan@106.201.35.233) (Quit: SanchayanMaity) |
2020-11-18 14:50:34 +0100 | Sanchayan | (~Sanchayan@106.201.35.233) |
2020-11-18 14:51:05 +0100 | PacoV | (~pcoves@16.194.31.93.rev.sfr.net) (Ping timeout: 240 seconds) |
2020-11-18 14:51:16 +0100 | SanchayanMaity | (~Sanchayan@106.201.35.233) |
2020-11-18 14:52:06 +0100 | Sanchayan | (~Sanchayan@106.201.35.233) (Client Quit) |
2020-11-18 14:53:58 +0100 | urodna | (~urodna@unaffiliated/urodna) |
2020-11-18 14:56:21 +0100 | todda7 | (~torstein@2a02:587:d96:adb6:c7fc:9428:5ead:614f) (Ping timeout: 272 seconds) |
2020-11-18 14:57:15 +0100 | Chi1thangoo | (~Chi1thang@87.112.60.168) |
2020-11-18 15:00:15 +0100 | dftxbs3e | (~dftxbs3e@unaffiliated/dftxbs3e) (Remote host closed the connection) |
2020-11-18 15:00:30 +0100 | Tario | (~Tario@201.192.165.173) (Read error: Connection reset by peer) |
2020-11-18 15:00:34 +0100 | LKoen | (~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 +0100 | dftxbs3e | (~dftxbs3e@unaffiliated/dftxbs3e) |
2020-11-18 15:03:29 +0100 | jlamothe | (~jlamothe@198.251.55.207) |
2020-11-18 15:03:30 +0100 | hackage | graphula-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 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2020-11-18 15:06:31 +0100 | rezajan | (~rezajan@151.243.221.71) |
2020-11-18 15:06:50 +0100 | rezajan | (~rezajan@151.243.221.71) (Client Quit) |
2020-11-18 15:08:13 +0100 | jb55 | (~jb55@gateway/tor-sasl/jb55) (Remote host closed the connection) |
2020-11-18 15:08:35 +0100 | jakob_ | (~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 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 256 seconds) |
2020-11-18 15:08:38 +0100 | jb55 | (~jb55@gateway/tor-sasl/jb55) |
2020-11-18 15:08:56 +0100 | supercoven | (~Supercove@dsl-hkibng31-54fae0-18.dhcp.inet.fi) (Read error: Connection reset by peer) |
2020-11-18 15:09:06 +0100 | pie_ | (~pie_bnc]@unaffiliated/pie-/x-0787662) (Ping timeout: 256 seconds) |
2020-11-18 15:09:10 +0100 | vancz | (~vancz@unaffiliated/vancz) (Ping timeout: 256 seconds) |
2020-11-18 15:11:09 +0100 | haskellian | (565d4710@86-93-71-16.fixed.kpn.net) |
2020-11-18 15:11:16 +0100 | cosimone | (~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd) |
2020-11-18 15:11:25 +0100 | vancz | (~vancz@unaffiliated/vancz) |
2020-11-18 15:11:25 +0100 | pie_ | (~pie_bnc]@unaffiliated/pie-/x-0787662) |
2020-11-18 15:11:44 +0100 | mirrorbird | (~psutcliff@mail.stylishbroker.com) |
2020-11-18 15:12:30 +0100 | brisbin | (~patrick@pool-173-49-158-4.phlapa.fios.verizon.net) (Ping timeout: 256 seconds) |
2020-11-18 15:13:27 +0100 | jakob_ | (~textual@dynamic-093-135-025-031.93.135.pool.telefonica.de) |
2020-11-18 15:14:06 +0100 | brisbin | (~patrick@199.66.179.204) |
2020-11-18 15:17:30 +0100 | hackage | flashblast 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 +0100 | heatsink | (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
2020-11-18 15:22:25 +0100 | heatsink | (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 240 seconds) |
2020-11-18 15:22:55 +0100 | nbloomf | (~nbloomf@2600:1700:ad14:3020:95c1:f982:82e4:2d79) |
2020-11-18 15:26:04 +0100 | bitmapper | (uid464869@gateway/web/irccloud.com/x-asjzblgwwtdcvjsz) (Quit: Connection closed for inactivity) |
2020-11-18 15:30:16 +0100 | darjeeling_ | (~darjeelin@122.245.211.11) (Ping timeout: 240 seconds) |
2020-11-18 15:31:01 +0100 | renzhi | (~renzhi@2607:fa49:655f:e600::28da) |
2020-11-18 15:35:09 +0100 | LKoen | (~LKoen@169.244.88.92.rev.sfr.net) |
2020-11-18 15:36:24 +0100 | oish | (~charlie@228.25.169.217.in-addr.arpa) |
2020-11-18 15:36:36 +0100 | dftxbs3e | (~dftxbs3e@unaffiliated/dftxbs3e) (Remote host closed the connection) |
2020-11-18 15:37:06 +0100 | nbloomf | (~nbloomf@2600:1700:ad14:3020:95c1:f982:82e4:2d79) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2020-11-18 15:37:08 +0100 | sqrt2_ | sqrt2 |
2020-11-18 15:43:03 +0100 | geekosaur | (82659a09@host154-009.vpn.uakron.edu) (Remote host closed the connection) |
2020-11-18 15:43:32 +0100 | acidjnk_new | (~acidjnk@p200300d0c719ff876dbcfe4d3d96265f.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
2020-11-18 15:46:19 +0100 | w2gz | w1gz |
2020-11-18 15:47:35 +0100 | cfricke | (~cfricke@unaffiliated/cfricke) (Quit: WeeChat 2.9) |
2020-11-18 15:50:22 +0100 | darjeeling_ | (~darjeelin@122.245.211.11) |
2020-11-18 15:52:47 +0100 | haskellian | (565d4710@86-93-71-16.fixed.kpn.net) (Remote host closed the connection) |
2020-11-18 15:55:39 +0100 | oish | (~charlie@228.25.169.217.in-addr.arpa) (Quit: leaving) |
2020-11-18 15:55:59 +0100 | acidjnk_new | (~acidjnk@p200300d0c719ff57608036dc958592ad.dip0.t-ipconnect.de) |
2020-11-18 15:57:05 +0100 | dftxbs3e | (~dftxbs3e@unaffiliated/dftxbs3e) |
2020-11-18 16:00:02 +0100 | da39a3ee5e6b4b0d | (~da39a3ee5@cm-171-98-78-149.revip7.asianet.co.th) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2020-11-18 16:00:04 +0100 | LKoen | (~LKoen@169.244.88.92.rev.sfr.net) (Read error: Connection reset by peer) |
2020-11-18 16:00:39 +0100 | LKoen | (~LKoen@169.244.88.92.rev.sfr.net) |
2020-11-18 16:04:45 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2020-11-18 16:09:49 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 264 seconds) |
2020-11-18 16:11:08 +0100 | Sgeo | (~Sgeo@ool-18b982ad.dyn.optonline.net) |
2020-11-18 16:16:14 +0100 | jakob_ | (~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 +0100 | roconnor | (~roconnor@host-104-157-230-3.dyn.295.ca) (Ping timeout: 260 seconds) |
2020-11-18 16:16:51 +0100 | jakob_ | (~textual@dynamic-093-135-025-031.93.135.pool.telefonica.de) |
2020-11-18 16:18:21 +0100 | christo | (~chris@81.96.113.213) |
2020-11-18 16:18:41 +0100 | kuribas | (~user@ptr-25vy0ia1gi47vc0v7ie.18120a2.ip6.access.telenet.be) (Ping timeout: 272 seconds) |
2020-11-18 16:19:41 +0100 | Martinsos | (~user@cpe-188-129-116-164.dynamic.amis.hr) |
2020-11-18 16:20:55 +0100 | jakob_ | (~textual@dynamic-093-135-025-031.93.135.pool.telefonica.de) (Client Quit) |
2020-11-18 16:22:39 +0100 | graf_blutwurst | (~user@2001:171b:226e:adc0:bd9e:1b6a:d045:2128) (Remote host closed the connection) |
2020-11-18 16:22:50 +0100 | mirrorbird_ | (~psutcliff@89.40.182.215) |
2020-11-18 16:22:52 +0100 | toorevitimirp | (~tooreviti@117.182.180.118) (Remote host closed the connection) |
2020-11-18 16:23:50 +0100 | sszark | (~sszark@h-213-180.A392.priv.bahnhof.se) (Quit: Lost terminal) |
2020-11-18 16:24:56 +0100 | mirrorbird | (~psutcliff@mail.stylishbroker.com) (Ping timeout: 240 seconds) |
2020-11-18 16:25:49 +0100 | knupfer | (~Thunderbi@200116b8244bd600704b43fffe5fc0ce.dip.versatel-1u1.de) |
2020-11-18 16:25:51 +0100 | knupfer | (~Thunderbi@200116b8244bd600704b43fffe5fc0ce.dip.versatel-1u1.de) (Client Quit) |
2020-11-18 16:25:52 +0100 | borne | (~fritjof@200116b864880600f1dc39039d201adf.dip.versatel-1u1.de) (Ping timeout: 260 seconds) |
2020-11-18 16:26:03 +0100 | knupfer | (~Thunderbi@200116b8244bd600953b9562e9fc25b9.dip.versatel-1u1.de) |
2020-11-18 16:27:34 +0100 | nuncanada | (~dude@179.235.160.168) |
2020-11-18 16:28:54 +0100 | brisbin | (~patrick@199.66.179.204) (Read error: Connection reset by peer) |
2020-11-18 16:30:50 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2020-11-18 16:31:07 +0100 | acidjnk_new | (~acidjnk@p200300d0c719ff57608036dc958592ad.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
2020-11-18 16:31:56 +0100 | codeAlways | (uid272474@gateway/web/irccloud.com/x-gprgopjmphvaootv) (Quit: Connection closed for inactivity) |
2020-11-18 16:31:57 +0100 | roconnor | (~roconnor@host-104-157-230-3.dyn.295.ca) |
2020-11-18 16:34:26 +0100 | brisbin | (~patrick@199.66.179.204) |
2020-11-18 16:39:56 +0100 | christo | (~chris@81.96.113.213) (Remote host closed the connection) |
2020-11-18 16:40:56 +0100 | christo | (~chris@81.96.113.213) |
2020-11-18 16:41:24 +0100 | cr3 | (~cr3@192-222-143-195.qc.cable.ebox.net) |
2020-11-18 16:43:24 +0100 | carlomagno | (~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 +0100 | carlomagno | (~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 +0100 | zephyz | (~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 +0100 | bergey | (~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 +0100 | omega8cc | (~omega8cc@185.204.1.185) (Remote host closed the connection) |
2020-11-18 16:53:52 +0100 | nbloomf | (~nbloomf@2600:1700:ad14:3020:1c60:9ba4:8bf9:ee34) |
2020-11-18 16:56:03 +0100 | britva | (~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 +0100 | raehik1 | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2020-11-18 16:58:06 +0100 | nados | (~dan@69-165-210-185.cable.teksavvy.com) |
2020-11-18 17:01:54 +0100 | todda7 | (~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 +0100 | mastarija | (~mastarija@93-136-96-155.adsl.net.t-com.hr) |
2020-11-18 17:08:16 +0100 | ddellacosta | (dd@gateway/vpn/mullvad/ddellacosta) |
2020-11-18 17:10:24 +0100 | ph88 | (~ph88@ip5f5af6cd.dynamic.kabel-deutschland.de) |
2020-11-18 17:11:02 +0100 | hekkaidekapus_ | hekkaidekapus |
2020-11-18 17:11:40 +0100 | <hekkaidekapus> | merijn: It is not yet fixed, AFAIR. Paging fgaz ^^^ |
2020-11-18 17:11:49 +0100 | the-smug-one | (~user@h188-122-129-70.cust.a3fiber.se) |
2020-11-18 17:13:04 +0100 | luto1 | (~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 +0100 | dftxbs3e | (~dftxbs3e@unaffiliated/dftxbs3e) (Remote host closed the connection) |
2020-11-18 17:14:58 +0100 | kritzefitz_ | (~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 +0100 | ClaudiusMaximus | (~claude@198.123.199.146.dyn.plus.net) |
2020-11-18 17:16:07 +0100 | ClaudiusMaximus | (~claude@198.123.199.146.dyn.plus.net) (Changing host) |
2020-11-18 17:16:07 +0100 | ClaudiusMaximus | (~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 +0100 | dftxbs3e | (~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 +0100 | heatsink | (~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 +0100 | elfets | (~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 +0100 | heatsink | (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2020-11-18 17:20:58 +0100 | invaser | (~Thunderbi@31.148.23.125) (Ping timeout: 260 seconds) |
2020-11-18 17:22:45 +0100 | cads | (~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 +0100 | invaser | (~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 +0100 | heatsink | (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
2020-11-18 17:27:49 +0100 | heatsink | (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2020-11-18 17:29:32 +0100 | mastarija | (~mastarija@93-136-96-155.adsl.net.t-com.hr) (Quit: Leaving) |
2020-11-18 17:29:50 +0100 | pavonia | (~user@unaffiliated/siracusa) (Quit: Bye!) |
2020-11-18 17:31:20 +0100 | mirrorb2rd | (~psutcliff@89.40.182.152) |
2020-11-18 17:31:24 +0100 | Tuplanolla | (~Tuplanoll@91-159-68-239.elisa-laajakaista.fi) |
2020-11-18 17:31:33 +0100 | ph88 | (~ph88@ip5f5af6cd.dynamic.kabel-deutschland.de) (Ping timeout: 256 seconds) |
2020-11-18 17:32:00 +0100 | kritzefitz | (~kritzefit@212.86.56.80) |
2020-11-18 17:32:08 +0100 | p0a | (~user@unaffiliated/p0a) |
2020-11-18 17:32:20 +0100 | FreeBirdLjj | (~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 +0100 | FreeBirdLjj | (~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 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds) |
2020-11-18 17:33:56 +0100 | ph88 | (~ph88@ip5f5af6cd.dynamic.kabel-deutschland.de) |
2020-11-18 17:34:00 +0100 | st8less | (~st8less@2603:a060:11fd:0:d56c:a5ec:de50:ff91) |
2020-11-18 17:34:05 +0100 | mirrorbird_ | (~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 +0100 | FreeBirdLjj | (~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 +0100 | nuncanada | (~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 +0100 | justanotheruser | (~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 +0100 | lagothrix | (~lagothrix@unaffiliated/lagothrix) (Ping timeout: 240 seconds) |
2020-11-18 17:41:57 +0100 | mananamenos_ | (~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 +0100 | hackage | phonetic-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 +0100 | sfvm | (~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 +0100 | mananamenos | (~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 +0100 | cole-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 +0100 | justsomeguy | (~justsomeg@216.186.218.241) |
2020-11-18 17:49:32 +0100 | justsomeguy | (~justsomeg@216.186.218.241) (Changing host) |
2020-11-18 17:49:32 +0100 | justsomeguy | (~justsomeg@unaffiliated/--/x-3805311) |
2020-11-18 17:50:01 +0100 | adamwespiser | (~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 +0100 | lagothrix | (~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 +0100 | britva | (~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 +0100 | britva | (~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 +0100 | Yumasi | (~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 +0100 | jwynn6 | (~jwynn6@050-088-122-078.res.spectrum.com) |
2020-11-18 17:55:35 +0100 | alp | (~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 +0100 | hnOsmium0001 | (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 +0100 | LKoen | (~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 +0100 | Yumasi | (~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 +0100 | idhugo | (~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 +0100 | stree_ | (~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 +0100 | LKoen | (~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 +0100 | conal_ | (~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 +0100 | stree | (~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 +0100 | nuncanada | (~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 +0100 | hackage | array-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 +0100 | alp | (~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 +0100 | hidedagger | (~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 +0100 | hidedagger | (~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 +0100 | st8less | (~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 +0100 | ggole | (~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 +0100 | hackage | json-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 +0100 | jakob_ | (~textual@p200300f49f162200855785b1c0c4761c.dip0.t-ipconnect.de) |
2020-11-18 18:16:38 +0100 | ubert1 | (~Thunderbi@p200300ecdf1e53a7e6b318fffe838f33.dip0.t-ipconnect.de) |
2020-11-18 18:17:01 +0100 | hackage | say-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 +0100 | ubert | (~Thunderbi@p200300ecdf1e53c9e6b318fffe838f33.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
2020-11-18 18:18:08 +0100 | ubert1 | ubert |
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 +0100 | ericsagn1 | (~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 +0100 | ubert | (~Thunderbi@p200300ecdf1e53a7e6b318fffe838f33.dip0.t-ipconnect.de) (Remote host closed the connection) |
2020-11-18 18:23:29 +0100 | ubert | (~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 +0100 | hackage | array-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 +0100 | Tario | (~Tario@201.192.165.173) |
2020-11-18 18:25:48 +0100 | random | (~random@46.254.129.126) |
2020-11-18 18:25:50 +0100 | geekosaur | (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 +0100 | Ariakenom | (~Ariakenom@h-98-128-229-104.NA.cust.bahnhof.se) (Ping timeout: 256 seconds) |
2020-11-18 18:28:18 +0100 | heatsink | (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
2020-11-18 18:28:19 +0100 | knupfer | (~Thunderbi@200116b8244bd600953b9562e9fc25b9.dip.versatel-1u1.de) (Remote host closed the connection) |
2020-11-18 18:28:27 +0100 | knupfer | (~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 +0100 | cgfuh | (~cgfuh@181.167.191.58) |
2020-11-18 18:32:06 +0100 | ericsagn1 | (~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 +0100 | heatsink | (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 260 seconds) |
2020-11-18 18:33:25 +0100 | AlterEgo- | (~ladew@124-198-158-163.dynamic.caiway.nl) |
2020-11-18 18:33:49 +0100 | Ariakenom | (~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 +0100 | Boomerang | (~Boomerang@xd520f68c.cust.hiper.dk) (Remote host closed the connection) |
2020-11-18 18:37:13 +0100 | cgfuh | (~cgfuh@181.167.191.58) (Quit: WeeChat 2.9) |
2020-11-18 18:37:26 +0100 | cgfuh | (~cgfuh@181.167.191.58) |
2020-11-18 18:38:14 +0100 | jonatanb | (~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 +0100 | hackage | spake2 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 +0100 | the-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 +0100 | cads | (~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 +0100 | alp | (~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 +0100 | conal_ | (~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 +0100 | bitmapper | (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 +0100 | britva | (~britva@2a02:aa13:7240:2980:7da5:a1a0:c038:90b4) |
2020-11-18 18:51:22 +0100 | conal | (~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 +0100 | conal | (~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 +0100 | jb55 | (~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 +0100 | jb55 | (~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 +0100 | texasmynsted | facepalm |
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 +0100 | jakob_ | (~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 +0100 | nut | (~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 +0100 | jakob_ | (~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 +0100 | gecko_ | (~gecko@2001:19f0:5:10f4:5400:3ff:fe0f:15cb) () |
2020-11-18 18:57:25 +0100 | dcoutts_ | (~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 +0100 | hackage | zydiskell 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 +0100 | brisbin | (~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 +0100 | britva | (~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 +0100 | howdoi | (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 +0100 | Klobbinger | (543b08ef@dslb-084-059-008-239.084.059.pools.vodafone-ip.de) |
2020-11-18 19:00:42 +0100 | motherfsck | (~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 +0100 | Klobbinger | (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 +0100 | crdrost | (~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 +0100 | motherfsck | (~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 +0100 | vicfred | (~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 +0100 | Klobbinger | (543b08ef@dslb-084-059-008-239.084.059.pools.vodafone-ip.de) |
2020-11-18 19:04:01 +0100 | brisbin | (~patrick@pool-173-49-158-4.phlapa.fios.verizon.net) |
2020-11-18 19:04:03 +0100 | britva | (~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 +0100 | nut | (~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 +0100 | jakob_ | (~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 +0100 | cosimone | (~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 +0100 | britva | (~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 +0100 | conal | (~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 +0100 | tomsmeding | . 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 +0100 | britva | (~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 +0100 | valdyn | (~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 +0100 | knupfer | (~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 +0100 | jedai42 | (~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 +0100 | chele | (~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 +0100 | Lycurgus | (~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 +0100 | wroathe | (~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 +0100 | jedai | (~jedai@lfbn-dij-1-708-251.w90-100.abo.wanadoo.fr) (Ping timeout: 240 seconds) |
2020-11-18 19:26:08 +0100 | alp | (~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 +0100 | jakob_ | (~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 +0100 | darjeeling_ | (~darjeelin@122.245.211.11) (Ping timeout: 256 seconds) |
2020-11-18 19:30:17 +0100 | ishutin | (~Ishutin@92-249-179-45.pool.digikabel.hu) |
2020-11-18 19:33:25 +0100 | ishutin_ | (~Ishutin@91-83-11-228.pool.digikabel.hu) (Ping timeout: 246 seconds) |
2020-11-18 19:34:04 +0100 | fraktor | (~walt@129.93.191.18) (Quit: WeeChat 2.8) |
2020-11-18 19:34:05 +0100 | boxscape | (54a35f37@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.95.55) (Quit: Connection closed) |
2020-11-18 19:34:24 +0100 | u0_a298 | (~user@47.206.148.226) |
2020-11-18 19:34:47 +0100 | jakob_ | (~textual@p200300f49f1622000c29800dbc05d17e.dip0.t-ipconnect.de) (Quit: My Laptop has gone to sleep. ZZZzzz…) |
2020-11-18 19:37:36 +0100 | u0_a298 | (~user@47.206.148.226) (Read error: Connection reset by peer) |
2020-11-18 19:37:50 +0100 | conal | (~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 +0100 | u0_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 +0100 | knupfer | (~Thunderbi@200116b8244bd600d8ff78fffe37ebfb.dip.versatel-1u1.de) |
2020-11-18 19:40:17 +0100 | knupfer | (~Thunderbi@200116b8244bd600d8ff78fffe37ebfb.dip.versatel-1u1.de) (Remote host closed the connection) |
2020-11-18 19:40:25 +0100 | knupfer | (~Thunderbi@200116b8244bd6009cdc066a89cb8c22.dip.versatel-1u1.de) |
2020-11-18 19:42:18 +0100 | Lord_of_Life_ | Lord_of_Life |
2020-11-18 19:42:37 +0100 | <idnar> | hekkaidekapus: aha |
2020-11-18 19:43:06 +0100 | Ariakenom | (~Ariakenom@h-98-128-229-104.NA.cust.bahnhof.se) (Quit: Leaving) |
2020-11-18 19:44:53 +0100 | darjeeling_ | (~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 +0100 | Ariakenom | (~Ariakenom@h-98-128-229-104.NA.cust.bahnhof.se) |
2020-11-18 19:48:56 +0100 | conal | (~conal@64.71.133.70) |
2020-11-18 19:49:07 +0100 | kritzefitz | (~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 +0100 | SanchayanMaity | (~Sanchayan@106.201.35.233) (Quit: SanchayanMaity) |
2020-11-18 19:52:25 +0100 | jespada | (~jespada@90.254.245.49) (Quit: Leaving) |
2020-11-18 19:52:34 +0100 | geekosaur | (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 +0100 | nbloomf | (~nbloomf@2600:1700:ad14:3020:1c60:9ba4:8bf9:ee34) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2020-11-18 19:53:01 +0100 | jespada | (~jespada@90.254.245.49) |
2020-11-18 19:54:12 +0100 | nbloomf | (~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 +0100 | knupfer | (~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 +0100 | heatsink | (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
2020-11-18 20:00:02 +0100 | u0_a298 | (~user@47.206.148.226) (Read error: Connection reset by peer) |
2020-11-18 20:00:19 +0100 | u0_a298 | (~user@47.206.148.226) |
2020-11-18 20:02:36 +0100 | u0_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 +0100 | u0_a298 | (~user@47.206.148.226) |
2020-11-18 20:03:24 +0100 | berberman | (~berberman@unaffiliated/berberman) |
2020-11-18 20:03:42 +0100 | berberman_ | (~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 +0100 | u0_a298 | (~user@47.206.148.226) (Read error: Connection reset by peer) |
2020-11-18 20:06:30 +0100 | u0_a298 | (~user@47.206.148.226) |
2020-11-18 20:07:15 +0100 | dragestil | (~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 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 256 seconds) |
2020-11-18 20:10:39 +0100 | wroathe | (~wroathe@c-73-24-27-54.hsd1.mn.comcast.net) |
2020-11-18 20:11:39 +0100 | heatsink | (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2020-11-18 20:11:52 +0100 | nados | (~dan@69-165-210-185.cable.teksavvy.com) (Quit: Leaving) |
2020-11-18 20:12:57 +0100 | texasmynsted | (~texasmyns@212.102.45.121) (Remote host closed the connection) |
2020-11-18 20:13:32 +0100 | texasmynsted | (~texasmyns@212.102.45.121) |
2020-11-18 20:14:11 +0100 | geekosaur | (82659a09@host154-009.vpn.uakron.edu) |
2020-11-18 20:14:48 +0100 | dragestil | (~quassel@185.137.175.104) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.) |
2020-11-18 20:16:52 +0100 | ubert | (~Thunderbi@p200300ecdf1e53a7e6b318fffe838f33.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
2020-11-18 20:17:52 +0100 | heatsink | (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
2020-11-18 20:19:08 +0100 | texasmynsted | (~texasmyns@212.102.45.121) (Ping timeout: 256 seconds) |
2020-11-18 20:20:44 +0100 | Jonno_FTW | (~come@api.carswap.me) (Ping timeout: 272 seconds) |
2020-11-18 20:21:46 +0100 | cosimone | (~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd) |
2020-11-18 20:22:28 +0100 | knupfer | (~Thunderbi@200116b8244bd6003ce66efffe6f5e29.dip.versatel-1u1.de) |
2020-11-18 20:22:29 +0100 | knupfer | (~Thunderbi@200116b8244bd6003ce66efffe6f5e29.dip.versatel-1u1.de) (Client Quit) |
2020-11-18 20:22:43 +0100 | mastarija | (~mastarija@93-136-96-155.adsl.net.t-com.hr) |
2020-11-18 20:22:45 +0100 | knupfer | (~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 +0100 | cr3 | (~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 +0100 | kritzefitz | (~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 +0100 | acidjnk_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 +0100 | Jonno_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 +0100 | hackage | bank-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 +0100 | Lycurgus | (~niemand@cpe-45-46-142-188.buffalo.res.rr.com) (Quit: Exeunt) |
2020-11-18 20:30:07 +0100 | Yumasi | (~guillaume@2a01cb09b06b29ea21daa97718c35c9f.ipv6.abo.wanadoo.fr) (Ping timeout: 272 seconds) |
2020-11-18 20:30:13 +0100 | cr3 | (~cr3@192-222-143-195.qc.cable.ebox.net) |
2020-11-18 20:31:12 +0100 | justan0theruser | (~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 +0100 | justanotheruser | (~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 +0100 | st8less | (~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 +0100 | invaser | (~Thunderbi@31.148.23.125) (Ping timeout: 246 seconds) |
2020-11-18 20:38:40 +0100 | hidedagger | (~nate@unaffiliated/hidedagger) |
2020-11-18 20:38:57 +0100 | texasmynsted | (~texasmyns@212.102.45.121) |
2020-11-18 20:39:13 +0100 | codecaveman | (58deaa27@88.222.170.39) |
2020-11-18 20:40:05 +0100 | hidedagger | (~nate@unaffiliated/hidedagger) (Client Quit) |
2020-11-18 20:40:15 +0100 | alp | (~alp@2a01:e0a:58b:4920:61ca:7518:9e8a:5ce1) (Ping timeout: 272 seconds) |
2020-11-18 20:40:46 +0100 | conal | (~conal@64.71.133.70) (Quit: Computer has gone to sleep.) |
2020-11-18 20:41:20 +0100 | cosimone | (~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd) (Quit: cosimone) |
2020-11-18 20:42:06 +0100 | borne | (~fritjof@200116b864880600f1dc39039d201adf.dip.versatel-1u1.de) |
2020-11-18 20:42:25 +0100 | conal_ | (~conal@64.71.133.70) |
2020-11-18 20:42:46 +0100 | jakob_ | (~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 +0100 | raichoo | (~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 +0100 | Guest42 | (56ca6780@gateway/web/cgi-irc/kiwiirc.com/ip.86.202.103.128) |
2020-11-18 20:46:01 +0100 | conal_ | (~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 +0100 | kritzefitz_ | (~kritzefit@212.86.56.80) |
2020-11-18 20:47:35 +0100 | SanchayanMaity | (~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 +0100 | kritzefitz | (~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 +0100 | codecaveman | (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 +0100 | takuan | (~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 +0100 | raehik1 | (~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 +0100 | mananamenos | (~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 +0100 | mananamenos_ | (~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 +0100 | raehik | (~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 +0100 | falafel | (~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 +0100 | mananamenos | (~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 +0100 | mananamenos | (~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 +0100 | nbloomf | (~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 +0100 | mastarija | (~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 +0100 | nbloomf | (~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 +0100 | unfixpoint | (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 +0100 | mirrorb2rd | (~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 +0100 | SanchayanMaity | (~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 +0100 | heatsink | (~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 +0100 | hidedagger | (~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 +0100 | dxld | (~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 +0100 | gumbish | (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 +0100 | dxld | (~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 +0100 | Boomerang | (~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 +0100 | rekahsoft | (~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 +0100 | AlterEgo- | (~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 +0100 | hidedagger | (~nate@unaffiliated/hidedagger) (Quit: WeeChat 2.9) |
2020-11-18 21:18:31 +0100 | hackage | haveibeenpwned 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 +0100 | AlterEgo- | (~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 +0100 | idhugo | (~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 +0100 | hidedagger | (~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 +0100 | hidedagger | (~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 +0100 | hackage | haveibeenpwned 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 +0100 | Deide | (~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 +0100 | rekahsoft | (~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 +0100 | boxscape | (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 +0100 | rekahsoft | (~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 +0100 | cosimone | (~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd) |
2020-11-18 21:27:16 +0100 | knupfer | (~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 +0100 | luto1 | (~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 +0100 | AlterEgo- | (~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 +0100 | kritzefitz_ | (~kritzefit@212.86.56.80) (Read error: Connection reset by peer) |
2020-11-18 21:40:35 +0100 | knupfer | (~Thunderbi@200116b8244bd600401750fffecef6b8.dip.versatel-1u1.de) |
2020-11-18 21:40:53 +0100 | kritzefitz | (~kritzefit@212.86.56.80) |
2020-11-18 21:40:54 +0100 | kritzefitz | (~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 +0100 | knupfer | (~Thunderbi@200116b8244bd600401750fffecef6b8.dip.versatel-1u1.de) (Remote host closed the connection) |
2020-11-18 21:41:05 +0100 | rekahsoft | (~rekahsoft@cpe0008a20f982f-cm64777d666260.cpe.net.cable.rogers.com) (Ping timeout: 240 seconds) |
2020-11-18 21:41:08 +0100 | nuncanada | (~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 +0100 | knupfer | (~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 +0100 | conal | (~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 +0100 | falafel | (~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 +0100 | Franciman | (~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 +0100 | hackage | phonetic-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 +0100 | dragestil | (~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 +0100 | crdrost | (~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 +0100 | pavonia | (~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 +0100 | Aquazi | (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 +0100 | moth | (~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 +0100 | crdrost | (~crdrost@c-98-207-102-156.hsd1.ca.comcast.net) |
2020-11-18 22:08:29 +0100 | boxscape59 | (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 +0100 | Franciman | (~francesco@host-82-56-223-169.retail.telecomitalia.it) |
2020-11-18 22:10:14 +0100 | Klobbinger | (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 +0100 | boxscape | (54a35f37@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.95.55) (Ping timeout: 264 seconds) |
2020-11-18 22:13:01 +0100 | crdrost | (~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 +0100 | hackage | graphula 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 +0100 | sord937 | (~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 +0100 | britva | (~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 +0100 | dhouthoo | (~dhouthoo@ptr-eiv6509pb4ifhdr9lsd.18120a2.ip6.access.telenet.be) (Quit: WeeChat 2.9) |
2020-11-18 22:17:04 +0100 | britva | (~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 +0100 | unfixpoint | (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 +0100 | dcoutts_ | (~duncan@33.14.75.194.dyn.plus.net) |
2020-11-18 22:19:36 +0100 | unfixpoint | (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 +0100 | boxscape59 | (54a35f37@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.95.55) (Quit: Connection closed) |
2020-11-18 22:22:55 +0100 | britva | (~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 +0100 | boxscape | (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 +0100 | ericsagn1 | (~ericsagne@2405:6580:0:5100:b570:65da:9eeb:ab03) (Ping timeout: 260 seconds) |
2020-11-18 22:27:55 +0100 | borne | (~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 +0100 | britva | (~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 +0100 | cads | (~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 +0100 | borne | (~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 +0100 | hackage | phonetic-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 +0100 | cosimone | (~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd) (Quit: cosimone) |
2020-11-18 22:32:51 +0100 | nuncanada | (~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 +0100 | alp | (~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 +0100 | cads | (~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 +0100 | cr3 | (~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 +0100 | britva | (~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 +0100 | ericsagn1 | (~ericsagne@2405:6580:0:5100:8c9:42ac:c0f6:8508) |
2020-11-18 22:39:38 +0100 | knupfer | (~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 +0100 | chkno | (~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 +0100 | coot | (~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 +0100 | geekosaur | (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 +0100 | ski | . 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 +0100 | gumbish | (4913050a@c-73-19-5-10.hsd1.wa.comcast.net) (Ping timeout: 245 seconds) |
2020-11-18 22:50:47 +0100 | stree | (~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 +0100 | stree | (~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 +0100 | brodie_ | (~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 +0100 | mbomba | (~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 +0100 | falafel | (~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 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds) |
2020-11-18 22:53:19 +0100 | Ariakenom | (~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 +0100 | brodie_ | (~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 +0100 | Franciman | (~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 +0100 | rprije | (~rprije@124.148.131.132) |
2020-11-18 23:00:22 +0100 | <unfixpoint> | Solve Halting problem first |
2020-11-18 23:00:28 +0100 | seanparsons | (~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 +0100 | Varis | (~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 +0100 | seanparsons | (~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 +0100 | ulidtko | (~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 +0100 | Varis | (~Tadas@unaffiliated/varis) |
2020-11-18 23:04:25 +0100 | ulidtko | (~ulidtko@193.111.48.79) |
2020-11-18 23:04:33 +0100 | <Guest42> | i think so |
2020-11-18 23:04:37 +0100 | abhixec | (~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 +0100 | Boomerang | (~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 +0100 | unfixpoint | (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 +0100 | u0_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 +0100 | gehmehgeh | (~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 +0100 | gehmehgeh | (~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 +0100 | darjeeling_ | (~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 +0100 | iqubic | (~user@2601:602:9500:4870:18b7:5f73:2db2:1881) |
2020-11-18 23:26:28 +0100 | anon1252 | (5ec1fe17@5ec1fe17.skybroadband.com) |
2020-11-18 23:26:35 +0100 | hexfive | (~hexfive@50-47-142-195.evrt.wa.frontiernet.net) |
2020-11-18 23:27:02 +0100 | yogani | (sid42623@gateway/web/irccloud.com/x-rolajygghowodpbd) (Ping timeout: 260 seconds) |
2020-11-18 23:27:02 +0100 | PoliticsII______ | (sid193551@gateway/web/irccloud.com/x-ykrgnddgnwhyshpo) (Ping timeout: 260 seconds) |
2020-11-18 23:27:02 +0100 | benl23 | (sid284234@gateway/web/irccloud.com/x-zcormuhggyweibpr) (Ping timeout: 260 seconds) |
2020-11-18 23:27:02 +0100 | benwr____ | (sid372383@gateway/web/irccloud.com/x-wqbchwbubajgshwl) (Ping timeout: 260 seconds) |
2020-11-18 23:27:02 +0100 | edwinb | (sid69486@gateway/web/irccloud.com/x-ucpbbzlyfldprgqw) (Ping timeout: 260 seconds) |
2020-11-18 23:27:06 +0100 | ulidtko | (~ulidtko@193.111.48.79) (Remote host closed the connection) |
2020-11-18 23:27:09 +0100 | yogani | (sid42623@gateway/web/irccloud.com/x-xwocvhxoqauihzue) |
2020-11-18 23:27:24 +0100 | ulidtko | (~ulidtko@193.111.48.79) |
2020-11-18 23:27:37 +0100 | aristid | (sid1599@gateway/web/irccloud.com/x-ieumvqzkylmookgw) (Ping timeout: 260 seconds) |
2020-11-18 23:27:37 +0100 | psydruid | (psydruidma@gateway/shell/matrix.org/x-onpwsguylfwyjnoj) (Ping timeout: 260 seconds) |
2020-11-18 23:27:37 +0100 | aizen_s | (sid462968@gateway/web/irccloud.com/x-rpdggkhwylxxzxar) (Ping timeout: 260 seconds) |
2020-11-18 23:27:48 +0100 | benl23 | (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 +0100 | Amras | (~Amras@unaffiliated/amras0000) (Ping timeout: 260 seconds) |
2020-11-18 23:28:12 +0100 | rednaZ[m] | (r3dnazmatr@gateway/shell/matrix.org/x-gpnsxbbsvkfpdeul) (Ping timeout: 260 seconds) |
2020-11-18 23:28:12 +0100 | jesser[m] | (jessermatr@gateway/shell/matrix.org/x-goezqreqcnfmgjgv) (Ping timeout: 260 seconds) |
2020-11-18 23:28:12 +0100 | tersetears[m] | (tersetears@gateway/shell/matrix.org/x-wmhwjlekxzvfgxue) (Ping timeout: 260 seconds) |
2020-11-18 23:28:12 +0100 | kaychaks_riot | (kaychaksma@gateway/shell/matrix.org/x-csnlnomioxxbbnnm) (Ping timeout: 260 seconds) |
2020-11-18 23:28:12 +0100 | srid | (sridmatrix@gateway/shell/matrix.org/x-vidxbchrzjfqulmd) (Ping timeout: 260 seconds) |
2020-11-18 23:28:34 +0100 | edwinb | (sid69486@gateway/web/irccloud.com/x-ttfxxggsnhwcnlbe) |
2020-11-18 23:28:40 +0100 | tinwood_ | (~tinwood@general.default.akavanagh.uk0.bigv.io) |
2020-11-18 23:28:43 +0100 | aristid | (sid1599@gateway/web/irccloud.com/x-hkziwpbxvyapwndr) |
2020-11-18 23:28:47 +0100 | tinwood | (~tinwood@general.default.akavanagh.uk0.bigv.io) (Ping timeout: 260 seconds) |
2020-11-18 23:28:47 +0100 | benwr____ | (sid372383@gateway/web/irccloud.com/x-zroyfovbhqhiqzax) |
2020-11-18 23:28:47 +0100 | chaosmasttter | (~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 +0100 | hackage | rosebud 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 +0100 | PoliticsII______ | (sid193551@gateway/web/irccloud.com/x-ifhtanwghthhvmbn) |
2020-11-18 23:29:03 +0100 | aizen_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 +0100 | tersetears[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 +0100 | Amras | (~Amras@unaffiliated/amras0000) |
2020-11-18 23:30:03 +0100 | jesser[m] | (jessermatr@gateway/shell/matrix.org/x-fnrjbdbcxycnmdhs) |
2020-11-18 23:30:08 +0100 | rednaZ[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 +0100 | srid | (sridmatrix@gateway/shell/matrix.org/x-wcquiejsxgjdmcxb) |
2020-11-18 23:30:40 +0100 | mananamenos | (~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 +0100 | jedws | (~jedws@101.184.175.183) (Ping timeout: 260 seconds) |
2020-11-18 23:31:56 +0100 | kaychaks_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 +0100 | psydruid | (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 +0100 | jedws | (~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 +0100 | nuncanada | (~dude@179.235.160.168) (Ping timeout: 240 seconds) |
2020-11-18 23:40:02 +0100 | avn | (~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 +0100 | wroathe | (~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 +0100 | falafel | (~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 +0100 | nut | (~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 +0100 | foursaph | (~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 +0100 | britva | (~britva@2a02:aa13:7240:2980:7da5:a1a0:c038:90b4) |
2020-11-18 23:46:35 +0100 | olligobber | (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 +0100 | nek0 | (~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 +0100 | forell | (~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 +0100 | forell | (~forell@unaffiliated/forell) |
2020-11-18 23:52:01 +0100 | nek0 | (~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 +0100 | nut | (~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 +0100 | britva | (~britva@2a02:aa13:7240:2980:7da5:a1a0:c038:90b4) (Quit: This computer has gone to sleep) |
2020-11-18 23:53:30 +0100 | cr3 | (~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 +0100 | ski | can't recall |
2020-11-18 23:53:43 +0100 | <hekkaidekapus> | Me, neither. |
2020-11-18 23:53:52 +0100 | wroathe | (~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 +0100 | gehmehgeh | (~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 +0100 | britva | (~britva@31-10-157-156.cgn.dynamic.upc.ch) |
2020-11-18 23:56:35 +0100 | avn | (~avn@78-56-108-78.static.zebra.lt) |
2020-11-18 23:58:00 +0100 | hekkaidekapus | sees 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 +0100 | britva | (~britva@31-10-157-156.cgn.dynamic.upc.ch) (Client Quit) |
2020-11-18 23:58:17 +0100 | anon1252 | (5ec1fe17@5ec1fe17.skybroadband.com) () |
2020-11-18 23:59:14 +0100 | wroathe | (~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) |