2024-05-14 00:09:04 +0200 | sadome | (~sadome@user/sadome) |
2024-05-14 00:09:05 +0200 | sadome | (~sadome@user/sadome) (Excess Flood) |
2024-05-14 00:14:15 +0200 | ezzieyguywuf | (~Unknown@user/ezzieyguywuf) (Ping timeout: 255 seconds) |
2024-05-14 00:15:32 +0200 | sord937 | (~sord937@gateway/tor-sasl/sord937) (Quit: sord937) |
2024-05-14 00:16:04 +0200 | ezzieyguywuf | (~Unknown@user/ezzieyguywuf) |
2024-05-14 00:18:03 +0200 | michalz | (~michalz@185.246.207.203) (Quit: ZNC 1.8.2 - https://znc.in) |
2024-05-14 00:21:34 +0200 | Sgeo | (~Sgeo@user/sgeo) |
2024-05-14 00:33:23 +0200 | yin | (~yin@user/zero) |
2024-05-14 00:37:54 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
2024-05-14 00:39:09 +0200 | gmg | (~user@user/gehmehgeh) (Quit: Leaving) |
2024-05-14 00:43:19 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Quit: peterbecich) |
2024-05-14 00:43:45 +0200 | acidjnk_new | (~acidjnk@p200300d6e714dc37b9c7c34e6fbc03d6.dip0.t-ipconnect.de) (Ping timeout: 272 seconds) |
2024-05-14 00:44:16 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
2024-05-14 00:51:13 +0200 | Ryan54 | (~Ryan@2601:602:8b00:b0f0:598b:fb7d:e718:eb36) (Quit: Client closed) |
2024-05-14 00:57:23 +0200 | son0p | (~ff@152.203.77.121) (Quit: Leaving) |
2024-05-14 01:08:05 +0200 | L29Ah | (~L29Ah@wikipedia/L29Ah) (Read error: Connection reset by peer) |
2024-05-14 01:08:42 +0200 | L29Ah | (~L29Ah@wikipedia/L29Ah) |
2024-05-14 01:20:27 +0200 | causal | (~eric@50.35.88.207) (Quit: WeeChat 4.1.1) |
2024-05-14 01:24:28 +0200 | son0p | (~ff@152.203.77.121) |
2024-05-14 01:34:18 +0200 | jmdaemon | (~jmdaemon@user/jmdaemon) |
2024-05-14 01:37:24 +0200 | dsrt^ | (~cd@c-98-242-74-66.hsd1.ga.comcast.net) |
2024-05-14 01:42:08 +0200 | Tuplanolla | (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) (Quit: Leaving.) |
2024-05-14 01:43:54 +0200 | takuan | (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
2024-05-14 01:48:02 +0200 | yin | (~yin@user/zero) (Ping timeout: 252 seconds) |
2024-05-14 01:50:00 +0200 | yin | (~yin@user/zero) |
2024-05-14 01:56:32 +0200 | yin | (~yin@user/zero) (Ping timeout: 260 seconds) |
2024-05-14 01:56:42 +0200 | mei | (~mei@user/mei) (Remote host closed the connection) |
2024-05-14 01:57:34 +0200 | ystael | (~ystael@user/ystael) (Ping timeout: 264 seconds) |
2024-05-14 01:58:18 +0200 | yin | (~yin@user/zero) |
2024-05-14 01:59:06 +0200 | mei | (~mei@user/mei) |
2024-05-14 02:02:55 +0200 | oo_miguel | (~Thunderbi@78-11-181-16.static.ip.netia.com.pl) (Ping timeout: 272 seconds) |
2024-05-14 02:08:31 +0200 | xdminsy | (~xdminsy@117.147.70.240) (Ping timeout: 246 seconds) |
2024-05-14 02:09:21 +0200 | xdminsy | (~xdminsy@117.147.70.240) |
2024-05-14 02:11:05 +0200 | yin | (~yin@user/zero) (Quit: leaving) |
2024-05-14 02:14:35 +0200 | raehik | (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) |
2024-05-14 02:14:38 +0200 | ChaiTRex | (~ChaiTRex@user/chaitrex) (Ping timeout: 260 seconds) |
2024-05-14 02:16:24 +0200 | ChaiTRex | (~ChaiTRex@user/chaitrex) |
2024-05-14 02:18:40 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 246 seconds) |
2024-05-14 02:30:10 +0200 | jmdaemon | (~jmdaemon@user/jmdaemon) (Ping timeout: 255 seconds) |
2024-05-14 02:32:03 +0200 | califax | (~califax@user/califx) (Remote host closed the connection) |
2024-05-14 02:34:44 +0200 | califax | (~califax@user/califx) |
2024-05-14 03:03:52 +0200 | hgolden | (~hgolden@2603:8000:9d00:3ed1:2678:8497:aa5c:7fa9) (Remote host closed the connection) |
2024-05-14 03:08:52 +0200 | philopsos | (~caecilius@user/philopsos) (Ping timeout: 255 seconds) |
2024-05-14 03:11:15 +0200 | hgolden | (~hgolden@2603:8000:9d00:3ed1:2678:8497:aa5c:7fa9) |
2024-05-14 03:11:57 +0200 | otto_s | (~user@p5de2fd19.dip0.t-ipconnect.de) (Ping timeout: 272 seconds) |
2024-05-14 03:12:09 +0200 | philopsos1 | (~caecilius@user/philopsos) |
2024-05-14 03:13:32 +0200 | otto_s | (~user@p5de2fc4f.dip0.t-ipconnect.de) |
2024-05-14 03:16:41 +0200 | philopsos1 | (~caecilius@user/philopsos) (Ping timeout: 256 seconds) |
2024-05-14 03:23:11 +0200 | raehik | (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) (Ping timeout: 252 seconds) |
2024-05-14 03:24:41 +0200 | jmdaemon | (~jmdaemon@user/jmdaemon) |
2024-05-14 03:29:36 +0200 | philopsos1 | (~caecilius@user/philopsos) |
2024-05-14 03:32:26 +0200 | waleee | (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) (Ping timeout: 268 seconds) |
2024-05-14 03:34:30 +0200 | xff0x | (~xff0x@2405:6580:b080:900:b7f1:8627:ae1f:1fb0) (Ping timeout: 255 seconds) |
2024-05-14 03:55:23 +0200 | phma | (phma@2001:5b0:210b:c738:d0e0:5870:ec8f:f731) (Read error: Connection reset by peer) |
2024-05-14 03:55:47 +0200 | phma | (~phma@host-67-44-208-11.hnremote.net) |
2024-05-14 03:57:25 +0200 | Square2 | (~Square4@user/square) |
2024-05-14 04:08:30 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
2024-05-14 04:13:47 +0200 | td_ | (~td@i53870933.versanet.de) (Ping timeout: 256 seconds) |
2024-05-14 04:15:33 +0200 | td_ | (~td@i53870907.versanet.de) |
2024-05-14 04:18:04 +0200 | machinedgod | (~machinedg@d173-183-246-216.abhsia.telus.net) (Ping timeout: 268 seconds) |
2024-05-14 04:19:41 +0200 | xff0x | (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) |
2024-05-14 04:23:59 +0200 | jmdaemon | (~jmdaemon@user/jmdaemon) (Ping timeout: 264 seconds) |
2024-05-14 04:25:48 +0200 | ddellacosta | (~ddellacos@ool-44c73d29.dyn.optonline.net) |
2024-05-14 04:36:23 +0200 | philopsos1 | (~caecilius@user/philopsos) (Ping timeout: 260 seconds) |
2024-05-14 04:42:24 +0200 | emmanuelux | (~emmanuelu@user/emmanuelux) (Quit: au revoir) |
2024-05-14 05:19:24 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Remote host closed the connection) |
2024-05-14 05:19:33 +0200 | danza | (~francesco@151.57.214.17) |
2024-05-14 05:19:44 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
2024-05-14 05:31:03 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 255 seconds) |
2024-05-14 05:42:27 +0200 | paddymahoney | (~paddymaho@pool-99-250-26-190.cpe.net.cable.rogers.com) |
2024-05-14 05:54:05 +0200 | mei | (~mei@user/mei) (Ping timeout: 240 seconds) |
2024-05-14 05:55:20 +0200 | mei | (~mei@user/mei) |
2024-05-14 05:55:44 +0200 | yin | (~yin@user/zero) |
2024-05-14 05:55:47 +0200 | aforemny_ | (~aforemny@i59F516F1.versanet.de) |
2024-05-14 05:56:22 +0200 | aforemny | (~aforemny@i59F516F4.versanet.de) (Ping timeout: 246 seconds) |
2024-05-14 06:00:56 +0200 | rekahsoft | (~rekahsoft@184.148.6.204) (Ping timeout: 256 seconds) |
2024-05-14 06:04:48 +0200 | yin | (~yin@user/zero) (Ping timeout: 255 seconds) |
2024-05-14 06:05:35 +0200 | ec | (~ec@gateway/tor-sasl/ec) (Remote host closed the connection) |
2024-05-14 06:06:15 +0200 | ec | (~ec@gateway/tor-sasl/ec) |
2024-05-14 06:06:26 +0200 | yin | (~yin@user/zero) |
2024-05-14 06:08:46 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
2024-05-14 06:16:28 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Remote host closed the connection) |
2024-05-14 06:21:18 +0200 | rosco | (~rosco@yp-146-6.tm.net.my) |
2024-05-14 06:22:51 +0200 | ChaiTRex | (~ChaiTRex@user/chaitrex) (Remote host closed the connection) |
2024-05-14 06:23:41 +0200 | ChaiTRex | (~ChaiTRex@user/chaitrex) |
2024-05-14 06:37:46 +0200 | remmie | (ianremsen@tilde.team) (Ping timeout: 256 seconds) |
2024-05-14 06:39:49 +0200 | <cheater> | i feel like haskell would be better if arguments were non-positional, i.e. you could supply them in any order |
2024-05-14 06:40:14 +0200 | <cheater> | rarely do functions have the same type multiple times, and when they do it's usually like a binary or ternary function and then you can explicitly order them with a tuple |
2024-05-14 06:40:39 +0200 | <danza> | make a product type for that? |
2024-05-14 06:41:56 +0200 | <cheater> | idk what you're saying |
2024-05-14 06:42:23 +0200 | <cheater> | if you look at type sigs, f :: A -> B -> C is basically a tuple. the only reason it's not exactly the same thing as (A, B, C) is currying. |
2024-05-14 06:44:17 +0200 | <cheater> | so what if we had a type constructor that's like (->) but binds less tightly than (->) and doesn't care about order. say (&). You could write f :: X & A -> B -> C & Y & Z -> Out, and then you could go like f a b c x y z, or f a x b y c z, or f x y z a b c |
2024-05-14 06:44:29 +0200 | <cheater> | whatever's useful |
2024-05-14 06:46:16 +0200 | <danza> | other languages that support out-of-order arguments end up with a syntax similar to { arg = val } like one would easily achieve with a product type |
2024-05-14 07:00:59 +0200 | <cheater> | like what languages are you thinking of |
2024-05-14 07:09:14 +0200 | <glguy> | cheater: that would only make sense in a vary narrow subset of Haskell |
2024-05-14 07:09:31 +0200 | <cheater> | why |
2024-05-14 07:09:34 +0200 | <glguy> | > id succ 10 |
2024-05-14 07:09:35 +0200 | <lambdabot> | 11 |
2024-05-14 07:09:37 +0200 | <glguy> | :t id |
2024-05-14 07:09:38 +0200 | <lambdabot> | a -> a |
2024-05-14 07:10:00 +0200 | <glguy> | You need to know the order of application to even attempt to type-check an expression |
2024-05-14 07:10:08 +0200 | <cheater> | id only has one argument |
2024-05-14 07:10:08 +0200 | <glguy> | function in haskell *only* have one argument |
2024-05-14 07:10:18 +0200 | <glguy> | but that doesn't mean you can't apply the result as a function |
2024-05-14 07:10:21 +0200 | <cheater> | ok ok |
2024-05-14 07:10:29 +0200 | <cheater> | i see where you're coming from |
2024-05-14 07:10:29 +0200 | <glguy> | all functions have one argument; no functions have two |
2024-05-14 07:10:34 +0200 | <cheater> | but i don't think that's an issue |
2024-05-14 07:10:38 +0200 | mei | (~mei@user/mei) (Remote host closed the connection) |
2024-05-14 07:11:31 +0200 | michalz | (~michalz@185.246.207.193) |
2024-05-14 07:11:59 +0200 | <glguy> | beyond it simply not working with the way types in Haskell work, it'd be a complete disaster for readability |
2024-05-14 07:12:17 +0200 | <glguy> | now to know what: f x y means, you have to work out the types of f, x, and y before you can know which thing is which |
2024-05-14 07:12:30 +0200 | <cheater> | idk that it would be, people say haskell's syntax is a complete disaster for readability too |
2024-05-14 07:12:42 +0200 | <cheater> | yeah you know that one usually when reading code |
2024-05-14 07:12:51 +0200 | <cheater> | if you lose track of that then your code is too messy anyways |
2024-05-14 07:12:55 +0200 | <glguy> | no, that's not a common take on people who've actually used it |
2024-05-14 07:13:03 +0200 | mei | (~mei@user/mei) |
2024-05-14 07:13:34 +0200 | remmie | (ianremsen@tilde.team) |
2024-05-14 07:13:53 +0200 | <cheater> | have you used the language i'm describing? |
2024-05-14 07:15:20 +0200 | <glguy> | I would avoid using such a language, but I don't think it exists |
2024-05-14 07:15:37 +0200 | <cheater> | so you're basically the "haskell is unreadable" person |
2024-05-14 07:16:28 +0200 | <glguy> | oh, no |
2024-05-14 07:20:40 +0200 | <danza> | "haskell's syntax is a complete disaster" haha nice joke |
2024-05-14 07:21:18 +0200 | <danza> | "... for readability" that is also a good one |
2024-05-14 07:22:03 +0200 | acidjnk_new | (~acidjnk@p200300d6e714dc51e96b24be77fae744.dip0.t-ipconnect.de) |
2024-05-14 07:22:07 +0200 | mei | (~mei@user/mei) (Remote host closed the connection) |
2024-05-14 07:23:55 +0200 | mei | (~mei@user/mei) |
2024-05-14 07:30:03 +0200 | Sgeo | (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
2024-05-14 07:30:37 +0200 | danza | (~francesco@151.57.214.17) (Read error: Connection reset by peer) |
2024-05-14 07:30:53 +0200 | danza | (~francesco@151.57.195.82) |
2024-05-14 07:42:23 +0200 | takuan | (~takuan@178-116-218-225.access.telenet.be) |
2024-05-14 07:51:08 +0200 | michalz | (~michalz@185.246.207.193) (Quit: ZNC 1.8.2 - https://znc.in) |
2024-05-14 07:51:38 +0200 | euphores | (~SASL_euph@user/euphores) (Quit: Leaving.) |
2024-05-14 07:52:08 +0200 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 252 seconds) |
2024-05-14 07:52:41 +0200 | euleritian | (~euleritia@dynamic-176-006-192-246.176.6.pool.telefonica.de) |
2024-05-14 07:54:06 +0200 | michalz | (~michalz@185.246.207.200) |
2024-05-14 07:58:11 +0200 | danza | (~francesco@151.57.195.82) (Ping timeout: 256 seconds) |
2024-05-14 08:03:54 +0200 | <cheater> | yea i know right |
2024-05-14 08:04:05 +0200 | <cheater> | but there are people who *will* say this |
2024-05-14 08:04:18 +0200 | <cheater> | like honestly that's most people who haven't used haskell |
2024-05-14 08:19:11 +0200 | Square2 | (~Square4@user/square) (Ping timeout: 268 seconds) |
2024-05-14 08:26:27 +0200 | petrichor | (~znc-user@user/petrichor) |
2024-05-14 08:26:47 +0200 | Rodney_ | (~Rodney@176.254.244.83) (Ping timeout: 252 seconds) |
2024-05-14 08:27:03 +0200 | oo_miguel | (~Thunderbi@78-11-181-16.static.ip.netia.com.pl) |
2024-05-14 08:32:26 +0200 | iteratee | (~kyle@162.218.222.207) (Read error: Connection reset by peer) |
2024-05-14 08:32:36 +0200 | iteratee_ | (~kyle@162.218.222.207) |
2024-05-14 08:33:50 +0200 | lortabac | (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) |
2024-05-14 08:36:53 +0200 | kuribas | (~user@2a02:1808:8a:fa84:e473:eba8:6b89:265e) |
2024-05-14 08:38:55 +0200 | iteratee_ | (~kyle@162.218.222.207) (Read error: Connection reset by peer) |
2024-05-14 08:39:10 +0200 | iteratee | (~kyle@162.218.222.207) |
2024-05-14 08:41:05 +0200 | philopsos1 | (~caecilius@user/philopsos) |
2024-05-14 08:44:15 +0200 | rosco | (~rosco@yp-146-6.tm.net.my) (Quit: Lost terminal) |
2024-05-14 08:44:19 +0200 | Rodney_ | (~Rodney@176.254.244.83) |
2024-05-14 08:44:52 +0200 | kuribas | (~user@2a02:1808:8a:fa84:e473:eba8:6b89:265e) (Remote host closed the connection) |
2024-05-14 08:45:05 +0200 | kuribas | (~user@2a02:1808:8a:fa84:1e15:b436:3fe1:ba71) |
2024-05-14 08:46:13 +0200 | danse-nr3 | (~danse-nr3@151.57.194.120) |
2024-05-14 08:53:57 +0200 | kuribas | (~user@2a02:1808:8a:fa84:1e15:b436:3fe1:ba71) (Ping timeout: 272 seconds) |
2024-05-14 08:57:09 +0200 | euphores | (~SASL_euph@user/euphores) |
2024-05-14 09:03:41 +0200 | rvalue | (~rvalue@user/rvalue) (Read error: Connection reset by peer) |
2024-05-14 09:04:12 +0200 | rvalue | (~rvalue@user/rvalue) |
2024-05-14 09:09:12 +0200 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
2024-05-14 09:11:12 +0200 | euleritian | (~euleritia@dynamic-176-006-192-246.176.6.pool.telefonica.de) (Read error: Connection reset by peer) |
2024-05-14 09:13:21 +0200 | TheCoffeMaker | (~TheCoffeM@user/thecoffemaker) (Ping timeout: 255 seconds) |
2024-05-14 09:13:35 +0200 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
2024-05-14 09:15:21 +0200 | TheCoffeMaker | (~TheCoffeM@user/thecoffemaker) |
2024-05-14 09:16:24 +0200 | TheCoffeMaker | (~TheCoffeM@user/thecoffemaker) (Excess Flood) |
2024-05-14 09:16:46 +0200 | TheCoffeMaker | (~TheCoffeM@user/thecoffemaker) |
2024-05-14 09:17:17 +0200 | sord937 | (~sord937@gateway/tor-sasl/sord937) |
2024-05-14 09:18:25 +0200 | Square2 | (~Square4@user/square) |
2024-05-14 09:21:01 +0200 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 255 seconds) |
2024-05-14 09:21:14 +0200 | euleritian | (~euleritia@dynamic-176-006-192-246.176.6.pool.telefonica.de) |
2024-05-14 09:24:27 +0200 | ft | (~ft@p508db8fc.dip0.t-ipconnect.de) (Quit: leaving) |
2024-05-14 09:30:43 +0200 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2024-05-14 09:40:24 +0200 | gmg | (~user@user/gehmehgeh) |
2024-05-14 09:47:34 +0200 | rosco | (~rosco@yp-146-6.tm.net.my) |
2024-05-14 09:52:07 +0200 | tzh | (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz) |
2024-05-14 09:53:30 +0200 | machinedgod | (~machinedg@d173-183-246-216.abhsia.telus.net) |
2024-05-14 09:58:38 +0200 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
2024-05-14 10:02:41 +0200 | xdminsy | (~xdminsy@117.147.70.240) (Quit: Konversation terminated!) |
2024-05-14 10:03:05 +0200 | xdminsy | (~xdminsy@117.147.70.240) |
2024-05-14 10:11:49 +0200 | cfricke | (~cfricke@user/cfricke) |
2024-05-14 10:12:47 +0200 | kadir | (~kadir@85.103.183.96) |
2024-05-14 10:23:23 +0200 | son0p | (~ff@152.203.77.121) (Ping timeout: 252 seconds) |
2024-05-14 10:24:01 +0200 | euleritian | (~euleritia@dynamic-176-006-192-246.176.6.pool.telefonica.de) (Ping timeout: 255 seconds) |
2024-05-14 10:27:08 +0200 | econo_ | (uid147250@id-147250.tinside.irccloud.com) (Quit: Connection closed for inactivity) |
2024-05-14 10:28:30 +0200 | euleritian | (~euleritia@dynamic-176-004-196-081.176.4.pool.telefonica.de) |
2024-05-14 10:34:54 +0200 | chele | (~chele@user/chele) |
2024-05-14 10:47:11 +0200 | danse-nr3 | (~danse-nr3@151.57.194.120) (Ping timeout: 268 seconds) |
2024-05-14 10:50:48 +0200 | danza | (~francesco@151.57.194.120) |
2024-05-14 10:50:53 +0200 | xff0x | (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 252 seconds) |
2024-05-14 10:50:53 +0200 | sawilagar | (~sawilagar@user/sawilagar) |
2024-05-14 10:53:25 +0200 | euleritian | (~euleritia@dynamic-176-004-196-081.176.4.pool.telefonica.de) (Ping timeout: 256 seconds) |
2024-05-14 10:53:34 +0200 | euleritian | (~euleritia@dynamic-176-006-177-053.176.6.pool.telefonica.de) |
2024-05-14 10:54:12 +0200 | danse-nr3 | (~danse-nr3@151.57.194.120) |
2024-05-14 10:57:03 +0200 | danza | (~francesco@151.57.194.120) (Ping timeout: 268 seconds) |
2024-05-14 11:00:37 +0200 | euleritian | (~euleritia@dynamic-176-006-177-053.176.6.pool.telefonica.de) (Ping timeout: 272 seconds) |
2024-05-14 11:01:16 +0200 | euleritian | (~euleritia@dynamic-176-000-145-069.176.0.pool.telefonica.de) |
2024-05-14 11:05:33 +0200 | rosco | (~rosco@yp-146-6.tm.net.my) (Quit: Lost terminal) |
2024-05-14 11:05:48 +0200 | rosco | (~rosco@yp-146-6.tm.net.my) |
2024-05-14 11:09:52 +0200 | hseg | (~gesh@46.120.21.14) |
2024-05-14 11:10:46 +0200 | <hseg> | Checking for the sake of reproducible builds, is there some way to avoid infecting the executable with the build directory? |
2024-05-14 11:11:26 +0200 | <hseg> | (i'm building with stack) |
2024-05-14 11:11:53 +0200 | <hseg> | (i.e. strings $executable shows references to /home/gesh/.local/share/stack/snapshots/x86_64-linux) |
2024-05-14 11:13:23 +0200 | euleritian | (~euleritia@dynamic-176-000-145-069.176.0.pool.telefonica.de) (Read error: Connection reset by peer) |
2024-05-14 11:13:40 +0200 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
2024-05-14 11:15:37 +0200 | <[exa]> | hseg: not sure with stack, but I checked a few executables from cabal here and there doesn't seem to be any reference to any local directories |
2024-05-14 11:16:03 +0200 | <[exa]> | hseg: anyway for replroducible builds you might want to have a complete separate clean environment for them, like what debians do with sbuild or so |
2024-05-14 11:16:18 +0200 | <hseg> | oh, definitely |
2024-05-14 11:16:39 +0200 | <[exa]> | actually `sbuild` can build haskelly stacky stuff already so might be the case that reuse is easy there |
2024-05-14 11:17:33 +0200 | <hseg> | wasn't expecting to get fully reproducible builds in one shot, more trying to get closer to reproducibility |
2024-05-14 11:17:57 +0200 | <hseg> | sbuild? |
2024-05-14 11:20:16 +0200 | <hseg> | btw, checking cabal-built ghcid shows such references to build dir |
2024-05-14 11:21:06 +0200 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 268 seconds) |
2024-05-14 11:21:45 +0200 | <hseg> | ah, I assume you mean https://sbuild.org |
2024-05-14 11:22:01 +0200 | euleritian | (~euleritia@dynamic-176-004-151-001.176.4.pool.telefonica.de) |
2024-05-14 11:28:33 +0200 | euleritian | (~euleritia@dynamic-176-004-151-001.176.4.pool.telefonica.de) (Read error: Connection reset by peer) |
2024-05-14 11:28:50 +0200 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
2024-05-14 11:31:50 +0200 | danse-nr3 | (~danse-nr3@151.57.194.120) (Read error: Connection reset by peer) |
2024-05-14 11:32:55 +0200 | danse-nr3 | (~danse-nr3@151.43.144.199) |
2024-05-14 11:36:04 +0200 | __monty__ | (~toonn@user/toonn) |
2024-05-14 11:38:08 +0200 | deriamis | (deriamis@ec2-54-187-167-69.us-west-2.compute.amazonaws.com) (Quit: ZNC - https://znc.in) |
2024-05-14 11:38:23 +0200 | deriamis | (deriamis@ec2-54-187-167-69.us-west-2.compute.amazonaws.com) |
2024-05-14 11:40:46 +0200 | <ski> | cheater : <https://ocaml.org/manual/5.2/lablexamples.html> |
2024-05-14 11:43:16 +0200 | <cheater> | yeah that's not really what i'm talking about |
2024-05-14 11:43:41 +0200 | <ski> | it's labelled arguments, which you can provide out of order |
2024-05-14 11:43:49 +0200 | <cheater> | yes. not what i'm talking about |
2024-05-14 11:44:05 +0200 | <ski> | (can't reaally provide them, out of order, without labelling them) |
2024-05-14 11:44:25 +0200 | <ski> | (at least not, if you want the language to be sane) |
2024-05-14 11:44:48 +0200 | <cheater> | i'll disagree with that last one |
2024-05-14 11:45:04 +0200 | <cheater> | i'm talking about the fact that most often with functions in haskell you either have arguments that all have different types, or just a small amount amount of arguments of equal types, which can be represented as a tuple (or, uncurried, with -> ) |
2024-05-14 11:45:23 +0200 | <cheater> | at that point it's easy to figure out which piece goes in which hole |
2024-05-14 11:45:23 +0200 | <ski> | what if the types of `x',`y',`z' are the same as the types of `a',`b',`c' (respectively) ? |
2024-05-14 11:45:35 +0200 | <danse-nr3> | still with this stuff? What is wrong with my suggestion to use a product type? |
2024-05-14 11:45:42 +0200 | <cheater> | i specifically typed out their types ski |
2024-05-14 11:45:53 +0200 | <ski> | not in the application, you did not |
2024-05-14 11:46:10 +0200 | <cheater> | it was an example in the context of what i said before about the type signature |
2024-05-14 11:46:27 +0200 | <cheater> | it was all part of the same example |
2024-05-14 11:47:23 +0200 | <ski> | `x',`y',`z',`a',`b',`c' here are meta-variables, standing for arbitrary expressions. there's no a-priori associatiation of these, to the types `X',`Y',`Z',`A',`B',`C' .. if you mean just actual variable names `x',`y',`z',`a',`b',`c' .. then that's very limited, doesn't scale, isn't really composable |
2024-05-14 11:47:39 +0200 | <cheater> | stop being confused on purpose |
2024-05-14 11:47:56 +0200 | <ski> | Hanlon's razor |
2024-05-14 11:48:02 +0200 | <cheater> | no |
2024-05-14 11:48:24 +0200 | <ski> | i genuienly don't know how you are envisioning this to work |
2024-05-14 11:48:39 +0200 | <danse-nr3> | huh i knew it as occam's razor... or is it different? |
2024-05-14 11:48:46 +0200 | <ski> | no, it's not the same thing |
2024-05-14 11:48:51 +0200 | <danse-nr3> | v |
2024-05-14 11:49:14 +0200 | <ski> | "Don't attribute to malice, what can be adequately explained by ignorance/stupidity." |
2024-05-14 11:49:59 +0200 | <danse-nr3> | i remember occam's as "the simplest explanation is also the most likely" ... but it is lost in the mists of time. Maybe that was misreferenced |
2024-05-14 11:50:23 +0200 | <ski> | perhaps i'd understand it better, cheater, if you made a simple prototype type checker (and maybe parser, if you wish) |
2024-05-14 11:50:45 +0200 | <ski> | danse-nr3 : yea, that's basically that one |
2024-05-14 11:50:54 +0200 | <lortabac> | IIRC generic-lens does something similar to what cheater is proposing |
2024-05-14 11:51:10 +0200 | <lortabac> | you can select a record field by type if there is no ambiguity |
2024-05-14 11:51:21 +0200 | <ski> | danse-nr3 : <https://en.wikipedia.org/wiki/Hanlon's_razor> |
2024-05-14 11:51:26 +0200 | <danse-nr3> | dunno, i just use product types and that gives me 99% of the functionality |
2024-05-14 11:51:52 +0200 | <danse-nr3> | one can also have f (default'{ arg = type }) |
2024-05-14 11:52:01 +0200 | <lortabac> | I think it would be nice to have this feature as an IDE action, but not baked in the language |
2024-05-14 11:52:40 +0200 | <lortabac> | if you swap two arguments by mistake and it's obvious enough, an IDE may suggest inverting them |
2024-05-14 11:52:52 +0200 | <ski> | anyway, using records (or labelled multi-arity functions, if available) is one workable approach. what OCaml does, labelled curried arguments, also works |
2024-05-14 11:53:16 +0200 | <ski> | yes |
2024-05-14 11:55:09 +0200 | <ncf> | the unordered arguments thing sounds like it would also be garbage wrt type inference |
2024-05-14 11:56:18 +0200 | lortabac | (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Quit: WeeChat 4.2.1) |
2024-05-14 11:58:04 +0200 | random-jellyfish | (~developer@user/random-jellyfish) (Ping timeout: 260 seconds) |
2024-05-14 11:59:55 +0200 | <ski> | like, if you can elaborate this in a workable fashion, i'd be interested in taking a look .. i'm just saying i'm not seeing how it could work, in a way i'd consider reasonable |
2024-05-14 12:00:21 +0200 | <ski> | but i don't want to discourage you from pondering it, if you want to |
2024-05-14 12:05:30 +0200 | yin | (~yin@user/zero) (Ping timeout: 268 seconds) |
2024-05-14 12:06:07 +0200 | <cheater> | you're right, hold up, let me implement a parser and a type checker real quick |
2024-05-14 12:06:56 +0200 | yin | (~yin@user/zero) |
2024-05-14 12:14:15 +0200 | titibandit | (~titibandi@user/titibandit) |
2024-05-14 12:15:08 +0200 | <probie> | I wouldn't mind such behaviour to allow elision of names in a system where all arguments are named arguments |
2024-05-14 12:22:13 +0200 | bo_ | (~bo@198.red-83-56-252.dynamicip.rima-tde.net) |
2024-05-14 12:24:40 +0200 | _bo | (~bo@198.red-83-56-252.dynamicip.rima-tde.net) (Ping timeout: 260 seconds) |
2024-05-14 12:26:56 +0200 | ubert | (~Thunderbi@2a02:8109:ab8a:5a00:d77a:cc4d:acdd:ee1e) |
2024-05-14 12:32:11 +0200 | son0p | (~ff@186.121.14.247) |
2024-05-14 12:38:30 +0200 | rdcdr | (~rdcdr@user/rdcdr) (Quit: ZNC 1.8.2+deb3.1 - https://znc.in) |
2024-05-14 12:38:57 +0200 | rdcdr | (~rdcdr@user/rdcdr) |
2024-05-14 12:56:16 +0200 | just_started_has | (~just_star@2401:4900:1cc9:315f:ac5a:52e5:ce3f:eca3) |
2024-05-14 12:56:21 +0200 | <just_started_has> | hello |
2024-05-14 12:56:39 +0200 | <just_started_has> | i write test :: [Int] -> [Int] |
2024-05-14 12:56:39 +0200 | <just_started_has> | in main.hs |
2024-05-14 12:56:40 +0200 | <just_started_has> | then write test in the ghci of main.hs |
2024-05-14 12:56:40 +0200 | <just_started_has> | it says Variable not in scope |
2024-05-14 12:56:41 +0200 | <just_started_has> | why is that , |
2024-05-14 12:56:41 +0200 | <just_started_has> | i started haskell 4 hours ago , please forgive this noob question if it is |
2024-05-14 12:57:14 +0200 | <just_started_has> | the doc says variable not in scope only happens when it is not declared but it is |
2024-05-14 12:58:08 +0200 | <int-e> | You can't have just the type signature in a module; you have to have an accompanying definition. |
2024-05-14 12:58:23 +0200 | <cheater> | show us a screenshot of your terminal |
2024-05-14 12:59:39 +0200 | <int-e> | `ghci main.hs` doesn't execute main.hs as a script. It loads it as a Haskell module. |
2024-05-14 12:59:48 +0200 | <int-e> | Or, well, tries to. |
2024-05-14 13:01:19 +0200 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 268 seconds) |
2024-05-14 13:01:36 +0200 | <just_started_has> | one second |
2024-05-14 13:02:15 +0200 | tcard | (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) (Remote host closed the connection) |
2024-05-14 13:02:35 +0200 | tcard | (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) |
2024-05-14 13:03:43 +0200 | <just_started_has> | https://drive.google.com/file/d/1yTimzu4dD3rL4GZKVTsXlJEDbaU4tXvO/view?usp=drive_link |
2024-05-14 13:03:47 +0200 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) |
2024-05-14 13:05:07 +0200 | <ncf> | how are you starting ghci? if you run `ghci main.hs` you should get a nice helpful error about `test` lacking an accompanying binding |
2024-05-14 13:05:52 +0200 | <just_started_has> | i just quit and startedd , yes it does give an error |
2024-05-14 13:08:55 +0200 | <just_started_has> | thx |
2024-05-14 13:09:08 +0200 | lortabac | (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) |
2024-05-14 13:09:20 +0200 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 268 seconds) |
2024-05-14 13:10:00 +0200 | euleritian | (~euleritia@dynamic-176-004-151-001.176.4.pool.telefonica.de) |
2024-05-14 13:19:49 +0200 | danse-nr3 | (~danse-nr3@151.43.144.199) (Ping timeout: 268 seconds) |
2024-05-14 13:20:55 +0200 | yin | (~yin@user/zero) (Quit: leaving) |
2024-05-14 13:30:20 +0200 | <ski> | just_started_has : you can use `:reload' (`:r' for short) to make the interactor reload the files that have changed |
2024-05-14 13:31:04 +0200 | <just_started_has> | yes i just realized that , thanks !! |
2024-05-14 13:31:21 +0200 | <just_started_has> | i thought that it reloadds automatically ? , can it ? |
2024-05-14 13:36:09 +0200 | Maxdamantus | (~Maxdamant@user/maxdamantus) (Ping timeout: 268 seconds) |
2024-05-14 13:36:18 +0200 | <ski> | you can set up `:e' (`:edit') to launch (or connect to) your editor, in which case when that command terminates, it'll automatically do a `:r' |
2024-05-14 13:36:37 +0200 | Maxdamantus | (~Maxdamant@user/maxdamantus) |
2024-05-14 13:36:37 +0200 | <ski> | otherwise, you have to do `:r' manually, after saving |
2024-05-14 13:37:53 +0200 | <ski> | (or you could launch your interactor inside your editor, possibly) |
2024-05-14 13:40:26 +0200 | <just_started_has> | i am using the vim |
2024-05-14 13:40:32 +0200 | <just_started_has> | i think it can |
2024-05-14 13:40:51 +0200 | philopsos1 | (~caecilius@user/philopsos) (Ping timeout: 272 seconds) |
2024-05-14 13:41:49 +0200 | yin | (~yin@user/zero) |
2024-05-14 13:44:50 +0200 | <just_started_has> | ski thanks !! this works |
2024-05-14 13:45:34 +0200 | <ski> | just_started_has : <https://downloads.haskell.org/ghc/latest/docs/users_guide/ghci.html#ghci-cmd-:edit> |
2024-05-14 13:46:31 +0200 | yin | (~yin@user/zero) (Client Quit) |
2024-05-14 13:47:26 +0200 | ddellacosta | (~ddellacos@ool-44c73d29.dyn.optonline.net) (Ping timeout: 252 seconds) |
2024-05-14 13:48:11 +0200 | euphores | (~SASL_euph@user/euphores) (Ping timeout: 268 seconds) |
2024-05-14 13:48:18 +0200 | hseg | (~gesh@46.120.21.14) (Read error: Connection reset by peer) |
2024-05-14 13:54:44 +0200 | euphores | (~SASL_euph@user/euphores) |
2024-05-14 14:03:26 +0200 | danse-nr3 | (~danse-nr3@151.57.181.243) |
2024-05-14 14:08:46 +0200 | ocra8 | (ocra8@user/ocra8) (Quit: WeeChat 4.2.2) |
2024-05-14 14:14:25 +0200 | euleritian | (~euleritia@dynamic-176-004-151-001.176.4.pool.telefonica.de) (Read error: Connection reset by peer) |
2024-05-14 14:14:42 +0200 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
2024-05-14 14:30:53 +0200 | bliminse | (~bliminse@user/bliminse) (Quit: leaving) |
2024-05-14 14:32:59 +0200 | TheCoffeMaker | (~TheCoffeM@user/thecoffemaker) (Ping timeout: 264 seconds) |
2024-05-14 14:35:38 +0200 | bliminse | (~bliminse@user/bliminse) |
2024-05-14 14:35:41 +0200 | TheCoffeMaker | (~TheCoffeM@user/thecoffemaker) |
2024-05-14 14:48:51 +0200 | xff0x | (~xff0x@ai113088.d.east.v6connect.net) |
2024-05-14 15:07:57 +0200 | jcarpenter2 | (~lol@2603:3016:1e01:b940:9e16:4716:cb0d:9d39) (Read error: Connection reset by peer) |
2024-05-14 15:08:16 +0200 | jcarpenter2 | (~lol@2603:3016:1e01:b940:9e16:4716:cb0d:9d39) |
2024-05-14 15:08:39 +0200 | cfricke | (~cfricke@user/cfricke) (Ping timeout: 268 seconds) |
2024-05-14 15:16:53 +0200 | ystael | (~ystael@user/ystael) |
2024-05-14 15:23:30 +0200 | lockna | (~lockna@2a01:4f8:10b:14f1::2) (Quit: ZNC 1.8.2 - https://znc.in) |
2024-05-14 15:23:44 +0200 | lockna | (~lockna@static.139.16.130.94.clients.your-server.de) |
2024-05-14 15:25:33 +0200 | img | (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in) |
2024-05-14 15:26:53 +0200 | img | (~img@user/img) |
2024-05-14 15:30:33 +0200 | esnos | (~user@194.29.137.22) |
2024-05-14 15:31:50 +0200 | just_started_has | (~just_star@2401:4900:1cc9:315f:ac5a:52e5:ce3f:eca3) (Quit: Client closed) |
2024-05-14 15:35:48 +0200 | thaliaa | (uid486183@id-486183.uxbridge.irccloud.com) (Quit: Connection closed for inactivity) |
2024-05-14 15:42:13 +0200 | <esnos> | Hi, I want to use haskell-mode with corfu as completion backend, does anybody have working setup. I customized '(tab-always-indent 'complete) and tab completion works in other modes, for example in python, but in haskell mode it just intends and I need to use M-tab which is uncomfortable considering I use tab for everything else. I also saw that in other modes completion-at-point is set to C-M-i, which corfu uses I think, but in |
2024-05-14 15:42:13 +0200 | <esnos> | haskell-mode it isn't set to anything, so maybe this is why there are problems. |
2024-05-14 15:43:12 +0200 | <esnos> | Sorry for double message, I started using irc yesterday |
2024-05-14 15:47:17 +0200 | <danse-nr3> | this question is quite emacs-specific esnos, i am afraid we might not be that knowledgeable about that. Anyways usually for developing people use Haskell Language Server as a backend... i am not sure about which emacs client to recommend, i think there are a couple of main ones |
2024-05-14 15:50:30 +0200 | yin | (~yin@user/zero) |
2024-05-14 15:50:56 +0200 | <esnos> | I use eglot with hls, but to show possible completions you need company or eglot |
2024-05-14 15:52:35 +0200 | <danse-nr3> | oh then i don't know what corfu is for |
2024-05-14 15:56:45 +0200 | cfricke | (~cfricke@user/cfricke) |
2024-05-14 16:02:57 +0200 | <stefan-__> | esnos: I use company-mode and have the following binding in "haskell-mode-map": "("C-SPC" . 'company-complete)" -- additionally I disabled auto-showing the company completions: "(setq company-idle-delay nil)" |
2024-05-14 16:10:30 +0200 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 255 seconds) |
2024-05-14 16:11:11 +0200 | euleritian | (~euleritia@dynamic-176-004-151-001.176.4.pool.telefonica.de) |
2024-05-14 16:14:24 +0200 | petrichor | (~znc-user@user/petrichor) (Quit: ZNC 1.8.2 - https://znc.in) |
2024-05-14 16:15:34 +0200 | raehik | (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) |
2024-05-14 16:18:15 +0200 | hseg | (~gesh@46.120.21.14) |
2024-05-14 16:20:23 +0200 | petrichor | (~znc-user@user/petrichor) |
2024-05-14 16:24:37 +0200 | ocra8 | (ocra8@user/ocra8) |
2024-05-14 16:35:49 +0200 | Benzi-Junior | (~BenziJuni@232-148-209-31.dynamic.hringdu.is) (Quit: ZNC 1.8.2 - https://znc.in) |
2024-05-14 16:36:06 +0200 | Benzi-Junior | (~BenziJuni@232-148-209-31.dynamic.hringdu.is) |
2024-05-14 16:43:04 +0200 | <esnos> | stefan-__, will try similar approach |
2024-05-14 16:44:23 +0200 | lortabac | (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Quit: WeeChat 4.2.1) |
2024-05-14 16:48:40 +0200 | dtman34 | (~dtman34@2601:447:d001:ed50:f596:52e1:73ca:629d) (Quit: ZNC 1.8.2+deb3.1 - https://znc.in) |
2024-05-14 16:49:00 +0200 | dtman34 | (~dtman34@c-75-72-163-222.hsd1.mn.comcast.net) |
2024-05-14 16:58:08 +0200 | cfricke | (~cfricke@user/cfricke) (Ping timeout: 260 seconds) |
2024-05-14 17:01:16 +0200 | chele | (~chele@user/chele) (Remote host closed the connection) |
2024-05-14 17:17:23 +0200 | random-jellyfish | (~developer@ip4-89-238-215-238.euroweb.ro) |
2024-05-14 17:17:24 +0200 | random-jellyfish | (~developer@ip4-89-238-215-238.euroweb.ro) (Changing host) |
2024-05-14 17:17:24 +0200 | random-jellyfish | (~developer@user/random-jellyfish) |
2024-05-14 17:19:19 +0200 | yin | (~yin@user/zero) (Ping timeout: 256 seconds) |
2024-05-14 17:21:16 +0200 | <stefan-__> | esnos: here is my config for eglot and lsp-mode (currently in use): https://gist.github.com/dozed/9b70668200876179b2a5381c53683ca7 |
2024-05-14 17:24:56 +0200 | danse-nr3 | (~danse-nr3@151.57.181.243) (Ping timeout: 268 seconds) |
2024-05-14 17:36:16 +0200 | <johnw> | Part of the answer to my "show" lens question is `re _Show`, which understandably is only valid as a Getter or Fold. There is no valid traversal unless I place an unchecked constraint on the mutation of "no modification that aren't numbers". |
2024-05-14 17:38:24 +0200 | euphores | (~SASL_euph@user/euphores) (Quit: Leaving.) |
2024-05-14 17:39:48 +0200 | ph88 | (~ph88@2a02:8109:9e26:c800:36fd:400b:5478:66f9) |
2024-05-14 17:40:04 +0200 | Square2 | (~Square4@user/square) (Ping timeout: 255 seconds) |
2024-05-14 17:40:23 +0200 | <ph88> | does someone know a map that can only be read and written to and not delete items? |
2024-05-14 17:43:49 +0200 | <ncf> | (->) ? |
2024-05-14 17:45:58 +0200 | <ph88> | ? |
2024-05-14 17:46:25 +0200 | yin | (~yin@user/zero) |
2024-05-14 17:51:38 +0200 | tv | (~tv@user/tv) (Quit: derp) |
2024-05-14 17:51:55 +0200 | tv | (~tv@user/tv) |
2024-05-14 17:56:30 +0200 | Square | (~Square@user/square) |
2024-05-14 17:57:23 +0200 | <ncf> | or search hackage for "total map" if you want something efficient |
2024-05-14 17:57:54 +0200 | <ncf> | but k -> v supports lookup and insertion and not deleting items |
2024-05-14 18:01:51 +0200 | <EvanR> | peanut gallery here, but if you emulate a map that is not total with total map by having the default value be Nothing, then you can still "delete" by "inserting nothing" |
2024-05-14 18:02:09 +0200 | <EvanR> | ph88's plans are ruined |
2024-05-14 18:03:47 +0200 | <ph88> | empire collapsed |
2024-05-14 18:08:00 +0200 | todi | (~todi@p57803331.dip0.t-ipconnect.de) |
2024-05-14 18:13:35 +0200 | Square | (~Square@user/square) (Ping timeout: 256 seconds) |
2024-05-14 18:18:35 +0200 | yin | (~yin@user/zero) (Ping timeout: 252 seconds) |
2024-05-14 18:22:02 +0200 | yin | (~yin@user/zero) |
2024-05-14 18:27:11 +0200 | machinedgod | (~machinedg@d173-183-246-216.abhsia.telus.net) (Ping timeout: 256 seconds) |
2024-05-14 18:32:25 +0200 | rvalue | (~rvalue@user/rvalue) (Read error: Connection reset by peer) |
2024-05-14 18:32:29 +0200 | raehik | (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) (Ping timeout: 240 seconds) |
2024-05-14 18:32:54 +0200 | rvalue | (~rvalue@user/rvalue) |
2024-05-14 18:36:02 +0200 | tzh | (~tzh@c-76-115-131-146.hsd1.or.comcast.net) |
2024-05-14 18:36:38 +0200 | euleritian | (~euleritia@dynamic-176-004-151-001.176.4.pool.telefonica.de) (Read error: Connection reset by peer) |
2024-05-14 18:36:55 +0200 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
2024-05-14 18:39:33 +0200 | demon-cat | (~demon-cat@dund-15-b2-v4wan-169642-cust1347.vm6.cable.virginm.net) (Ping timeout: 268 seconds) |
2024-05-14 18:39:45 +0200 | demon-cat | (~demon-cat@dund-15-b2-v4wan-169642-cust1347.vm6.cable.virginm.net) |
2024-05-14 18:40:49 +0200 | raehik | (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) |
2024-05-14 18:42:01 +0200 | ubert | (~Thunderbi@2a02:8109:ab8a:5a00:d77a:cc4d:acdd:ee1e) (Remote host closed the connection) |
2024-05-14 18:42:25 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
2024-05-14 18:49:34 +0200 | Tuplanolla | (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) |
2024-05-14 18:52:31 +0200 | qhong | (~qhong@DN160vrd000d6kpg009l6c0000fj.stanford.edu) (Read error: Connection reset by peer) |
2024-05-14 18:55:13 +0200 | raehik | (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) (Ping timeout: 255 seconds) |
2024-05-14 18:56:07 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 255 seconds) |
2024-05-14 19:03:37 +0200 | infinity0 | (~infinity0@pwned.gg) (Remote host closed the connection) |
2024-05-14 19:04:23 +0200 | ph88 | (~ph88@2a02:8109:9e26:c800:36fd:400b:5478:66f9) (Ping timeout: 260 seconds) |
2024-05-14 19:04:29 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
2024-05-14 19:05:43 +0200 | infinity0 | (~infinity0@pwned.gg) |
2024-05-14 19:09:37 +0200 | raehik | (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) |
2024-05-14 19:11:11 +0200 | rosco | (~rosco@yp-146-6.tm.net.my) (Quit: Lost terminal) |
2024-05-14 19:17:59 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds) |
2024-05-14 19:21:51 +0200 | pavonia | (~user@user/siracusa) (Quit: K-Lined) |
2024-05-14 19:22:56 +0200 | sawilagar | (~sawilagar@user/sawilagar) (Ping timeout: 252 seconds) |
2024-05-14 19:27:44 +0200 | johnw | (~johnw@69.62.242.138) (Read error: Connection reset by peer) |
2024-05-14 19:28:32 +0200 | johnw | (~johnw@69.62.242.138) |
2024-05-14 19:31:45 +0200 | cfricke | (~cfricke@user/cfricke) |
2024-05-14 19:41:45 +0200 | wootehfoot | (~wootehfoo@user/wootehfoot) |
2024-05-14 19:44:38 +0200 | ChaiTRex | (~ChaiTRex@user/chaitrex) (Ping timeout: 260 seconds) |
2024-05-14 19:46:16 +0200 | ChaiTRex | (~ChaiTRex@user/chaitrex) |
2024-05-14 19:46:23 +0200 | euphores | (~SASL_euph@user/euphores) |
2024-05-14 19:55:47 +0200 | demon-cat | (~demon-cat@dund-15-b2-v4wan-169642-cust1347.vm6.cable.virginm.net) (Ping timeout: 272 seconds) |
2024-05-14 19:57:35 +0200 | random-jellyfish | (~developer@user/random-jellyfish) (Ping timeout: 252 seconds) |
2024-05-14 19:57:40 +0200 | hseg | (~gesh@46.120.21.14) (Quit: WeeChat 4.2.2) |
2024-05-14 19:59:15 +0200 | ft | (~ft@p508db8fc.dip0.t-ipconnect.de) |
2024-05-14 20:00:00 +0200 | raehik | (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) (Ping timeout: 255 seconds) |
2024-05-14 20:04:22 +0200 | <cheater> | i wish cabal would allow me module prefixes |
2024-05-14 20:05:04 +0200 | <cheater> | so like i wouldn't have to do vim test/MyCompany/MyProduct/MyProject/Test/Actual/Hierarchy/Here.hs |
2024-05-14 20:05:19 +0200 | <cheater> | instead i'd do vim test/Actual/Hierarchy/Here.hs |
2024-05-14 20:06:06 +0200 | gmg | (~user@user/gehmehgeh) (Ping timeout: 260 seconds) |
2024-05-14 20:06:26 +0200 | <cheater> | while the module in Here.hs is still declared as "module MyCompany.MyProduct.MyProject.Test.Actual.Hierarchy.Here where" |
2024-05-14 20:07:45 +0200 | gmg | (~user@user/gehmehgeh) |
2024-05-14 20:09:16 +0200 | <cheater> | the part that goes MyCompany/MyProduct/MyProject/ actually doesn't mean anything because it in fact doesn't change in relevant monorepi |
2024-05-14 20:09:34 +0200 | <cheater> | it's just annoying to type out |
2024-05-14 20:11:15 +0200 | <cheater> | so i guess what i really want is for cabal to give me module *file path* prefixes |
2024-05-14 20:17:26 +0200 | ocra8 | (ocra8@user/ocra8) (Quit: WeeChat 4.2.2) |
2024-05-14 20:20:16 +0200 | <yin> | cheater: just use fzf? |
2024-05-14 20:20:20 +0200 | <yin> | that's not a cabal problem |
2024-05-14 20:20:39 +0200 | <cheater> | overly long paths are a problem |
2024-05-14 20:20:40 +0200 | <cheater> | imo |
2024-05-14 20:20:50 +0200 | <cheater> | and haskell code bases tend to adopt those |
2024-05-14 20:21:00 +0200 | <cheater> | like the whole path to this file would be |
2024-05-14 20:21:30 +0200 | <yin> | why exactly are long paths a problem? |
2024-05-14 20:21:52 +0200 | <cheater> | it would be /home/user/work/my-company/my-company-monorepo/my-product-my-project-package-name/test/MyCompany/MyProduct/MyProject/Test/Actual/Hierarchy/Here.hs |
2024-05-14 20:22:01 +0200 | <cheater> | they're a problem because repeating the same stuff all the time is annoying |
2024-05-14 20:22:44 +0200 | <cheater> | look at how many times stuff repeats just in that path |
2024-05-14 20:22:57 +0200 | demon-cat | (~demon-cat@dund-15-b2-v4wan-169642-cust1347.vm6.cable.virginm.net) |
2024-05-14 20:23:20 +0200 | <cheater> | usually you start your work by cd'ing to my-company-monorepo |
2024-05-14 20:23:31 +0200 | <yin> | cheater: i literally would type at the terminal `br<CR>Here<CR>' and open that file in vim |
2024-05-14 20:23:32 +0200 | <cheater> | so you skip all of that |
2024-05-14 20:23:38 +0200 | <yin> | it's 8 key presses |
2024-05-14 20:23:44 +0200 | <cheater> | right but that doesn't work if you already have vim |
2024-05-14 20:23:55 +0200 | <cheater> | idk what br is, what is it? |
2024-05-14 20:24:12 +0200 | <yin> | broot |
2024-05-14 20:24:20 +0200 | <cheater> | i am broot? |
2024-05-14 20:24:24 +0200 | <yin> | you can use any fuzzy finder, like fzf |
2024-05-14 20:24:36 +0200 | <cheater> | right |
2024-05-14 20:24:44 +0200 | <yin> | vim works with fzf too |
2024-05-14 20:24:57 +0200 | <yin> | or just use :find |
2024-05-14 20:25:05 +0200 | <cheater> | yeah but then it's yet another level of complexity to think about |
2024-05-14 20:25:13 +0200 | <cheater> | when doing a trivial thing like opening a file |
2024-05-14 20:25:22 +0200 | <cheater> | like making every single thing more complex isn't the solution |
2024-05-14 20:25:50 +0200 | raehik | (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) |
2024-05-14 20:26:00 +0200 | <cheater> | that's like having to perform a song every time you want a sip of water from your cup |
2024-05-14 20:26:11 +0200 | cfricke | (~cfricke@user/cfricke) (Ping timeout: 256 seconds) |
2024-05-14 20:26:13 +0200 | <mauke> | symlinks, lol |
2024-05-14 20:26:18 +0200 | <yin> | the directory paradigm isn't the problem here, it's how poorly you choose to navigate it |
2024-05-14 20:26:27 +0200 | <cheater> | well it's not about poor navigation really |
2024-05-14 20:26:44 +0200 | <cheater> | it's about the fact that as programmers we are eager to accept all those "you can just"s |
2024-05-14 20:27:10 +0200 | <cheater> | and then 5 years down the line you're doing nothing but "you can just"s |
2024-05-14 20:27:14 +0200 | <yin> | cheater: the fact that fuzzy finders exist prove that as programmers we didn't accept anything |
2024-05-14 20:27:17 +0200 | demon-cat | (~demon-cat@dund-15-b2-v4wan-169642-cust1347.vm6.cable.virginm.net) (Ping timeout: 240 seconds) |
2024-05-14 20:27:32 +0200 | <yin> | you're supposed to automate your tasks, that's why computers are programmable |
2024-05-14 20:27:40 +0200 | <cheater> | in your paradigm fuzzy finders need to be invoked every single time you want to open a file |
2024-05-14 20:27:53 +0200 | <cheater> | in my suggestion, they don't. you don't need to do anything every time you want to open a file |
2024-05-14 20:28:07 +0200 | <yin> | nothing stops you from having a single root directory with no subfolders where all your files live |
2024-05-14 20:28:44 +0200 | <cheater> | well, it does, because people still want to be able to discriminate code local to a company or to a project from code that is not such |
2024-05-14 20:28:49 +0200 | <yin> | or a single .hs file |
2024-05-14 20:29:11 +0200 | <yin> | cheater: so you want others to craft a solution to your measure? |
2024-05-14 20:29:11 +0200 | <cheater> | yes. if we want to speak nonsense, nothing's stopping me from rewriting everything in cobol |
2024-05-14 20:29:25 +0200 | <cheater> | yes. specifically you |
2024-05-14 20:29:30 +0200 | <cheater> | i will be very unhappy if it's anyone else |
2024-05-14 20:29:43 +0200 | <cheater> | lol |
2024-05-14 20:29:44 +0200 | <yin> | i don't mean to be rude |
2024-05-14 20:30:04 +0200 | ph88 | (~ph88@2a02:8109:9e26:c800:50c2:30a5:77d8:a72f) |
2024-05-14 20:30:23 +0200 | <yin> | what would your solution to your problem be? |
2024-05-14 20:30:38 +0200 | <ph88> | is there another way to write code for what i'm trying to do? https://play.haskell.org/saved/d94XX4WG |
2024-05-14 20:30:55 +0200 | <mauke> | https://howfuckedismydatabase.com/nosql/ |
2024-05-14 20:31:04 +0200 | target_i | (~target_i@user/target-i/x-6023099) |
2024-05-14 20:31:49 +0200 | <ncf> | ph88: i can't guess what you're trying to do from just this |
2024-05-14 20:31:52 +0200 | <mauke> | ph88: I can't tell what you're trying to do |
2024-05-14 20:32:00 +0200 | <mauke> | I'm as confused as the compiler |
2024-05-14 20:32:26 +0200 | <cheater> | yin: in the cabal file, under "test-suite test", have "hs-source-dir-prefix: MyCompany/MyProduct/MyProject/Test" |
2024-05-14 20:32:46 +0200 | <cheater> | one line in the cabal file saves a million lines typed over the lifespan of a programmer |
2024-05-14 20:33:42 +0200 | ChaiTRex | (~ChaiTRex@user/chaitrex) (Remote host closed the connection) |
2024-05-14 20:34:32 +0200 | <ph88> | mauke, i'm trying to have a function that given a data which implements a typeclass can return another data that implements the same type class |
2024-05-14 20:34:40 +0200 | ChaiTRex | (~ChaiTRex@user/chaitrex) |
2024-05-14 20:35:17 +0200 | <mauke> | what does that even mean |
2024-05-14 20:35:29 +0200 | <mauke> | this feels like an XY problem |
2024-05-14 20:35:39 +0200 | <yin> | cheater: i think that would introduce a lot of problems to other unsuspecting users |
2024-05-14 20:35:41 +0200 | ezzieyguywuf | (~Unknown@user/ezzieyguywuf) (Ping timeout: 240 seconds) |
2024-05-14 20:35:47 +0200 | <yin> | i'm sure you can see that |
2024-05-14 20:36:22 +0200 | <ph88> | mauke, ncf rust has something similar https://doc.rust-lang.org/rust-by-example/trait/dyn.html how to explain ?? in OO languages you return a type that implements an interface |
2024-05-14 20:36:24 +0200 | <cheater> | blinded by greed, i am unable to :) |
2024-05-14 20:36:35 +0200 | <ncf> | sounds like existentials |
2024-05-14 20:36:53 +0200 | <cheater> | ph88: you're talking about uh, factories |
2024-05-14 20:37:03 +0200 | <cheater> | ph88: you don't want those here |
2024-05-14 20:37:16 +0200 | <ncf> | what |
2024-05-14 20:37:40 +0200 | ezzieyguywuf | (~Unknown@user/ezzieyguywuf) |
2024-05-14 20:37:42 +0200 | <cheater> | but what you're really trying to say is something like myfunction :: (MyClass a) => a -> SomeOtherType -> a |
2024-05-14 20:37:58 +0200 | <cheater> | this type signature tells you that the return type, a, will implement MyClass |
2024-05-14 20:38:14 +0200 | <mauke> | data Box = forall a. (Animal a) => MkBox a |
2024-05-14 20:38:15 +0200 | <yin> | cheater: if you're using vim and think 'apt i fzf' is adding too much complexity to your life, the :find and :vim commands are your friends |
2024-05-14 20:38:17 +0200 | <ph88> | cheater, `getSomething :: forall b. Something b => a -> Maybe b` |
2024-05-14 20:38:25 +0200 | demon-cat | (~demon-cat@dund-15-b2-v4wan-169642-cust1347.vm6.cable.virginm.net) |
2024-05-14 20:38:39 +0200 | <cheater> | ph88: yes, that is something that is done |
2024-05-14 20:38:46 +0200 | <mauke> | hmm, actually ... |
2024-05-14 20:38:52 +0200 | <cheater> | ph88: the question is why you want that |
2024-05-14 20:39:13 +0200 | <mauke> | data Box (c :: Constraint) = forall a. (c a) => MkBox a -- is that legal? |
2024-05-14 20:39:32 +0200 | <cheater> | yin: what is 'apt i fzf'? |
2024-05-14 20:39:37 +0200 | <mauke> | ah, no |
2024-05-14 20:39:46 +0200 | <mauke> | it would have to be (c :: Type -> Constraint) or something |
2024-05-14 20:39:52 +0200 | <ph88> | i have a typeclass for database entities, the functions are enough to save each entity separately. But i need a function to get the relations (dependencies) from one entity to another. |
2024-05-14 20:40:15 +0200 | <ph88> | I don't want to hardcode my schema as haskell types, please don't suggest it |
2024-05-14 20:40:32 +0200 | <yin> | cheater: apt is a popular package manager used on debian distros. that command installs fzf from the official repositories. you should of course use the appropriate command for your system |
2024-05-14 20:40:58 +0200 | <ph88> | mauke, what's that, existential types? |
2024-05-14 20:41:01 +0200 | <mauke> | yes |
2024-05-14 20:41:24 +0200 | <ph88> | do i need GADT for existential types ? |
2024-05-14 20:41:32 +0200 | <mauke> | I don't think so |
2024-05-14 20:41:48 +0200 | <ncf> | no |
2024-05-14 20:41:49 +0200 | <cheater> | yin: that is not the only line one has to type to use fzf for opening every single file. |
2024-05-14 20:41:54 +0200 | <yin> | no, but GADTs imply existential types i'm pretty sure |
2024-05-14 20:42:54 +0200 | <ph88> | data Box (c :: Type -> Constraint) = forall a. (c a) => MkBox a like this ? |
2024-05-14 20:43:03 +0200 | <cheater> | yin: what i'm trying to do here is to contrast for you, on one side, typing one line into a cabal file and that's it, and on the other side, having to invoke an extra tool every single of the thousands of thousands of times you want to do something related to file paths |
2024-05-14 20:43:34 +0200 | <ncf> | ph88: i still have no idea what you're trying to do |
2024-05-14 20:44:41 +0200 | <raehik> | How can I get GHCi to pretty print my TypeErrors on :k! invocations ? It just prints `= (TypeError ...)` :( |
2024-05-14 20:46:55 +0200 | <ph88> | ncf, similar to this https://stackoverflow.com/questions/5699427/what-does-it-mean-for-a-function-to-return-an-interface i don't know how to explain it better. It's an opaque piece of data other than you know what interface methods you can call on it. In haskell it's an opaque piece of data other than you know which typeclass methods you can call on it |
2024-05-14 20:47:12 +0200 | <yin> | cheater: now see it from my side, the side of a person who is trying to help another person solve a problem: you can add a field to a cabal file that will cause inumerous headaches for everyone when normal paths don't work until you find that there's some obscure line hidden in the middle of a project's cabal OR type fzf instead of cd (i actually have it aliased to just 'z') |
2024-05-14 20:47:33 +0200 | <ncf> | ph88: that describes an existential type, but i can't tell if it's what you actually need |
2024-05-14 20:47:59 +0200 | ezzieyguywuf | (~Unknown@user/ezzieyguywuf) (Ping timeout: 264 seconds) |
2024-05-14 20:48:14 +0200 | <ph88> | ncf, i think i need existential types. I only used them once before, still not entirely sure how they work |
2024-05-14 20:49:19 +0200 | ezzieyguywuf | (~Unknown@user/ezzieyguywuf) |
2024-05-14 20:49:20 +0200 | <yin> | anyways, it's one of many possible solutions for your problem. i don't think an ecosystem's consistency should suffer by trying to solve problems beyond its scope |
2024-05-14 20:49:44 +0200 | <mauke> | ph88: https://play.haskell.org/saved/9CUzFQLl |
2024-05-14 20:50:02 +0200 | <cheater> | cabal files already have lots of such advanced flags. there's no reason to turn our language into the Fischer Price version of itself just because of some conceived notion of "this might be difficult to explain to a newbie" |
2024-05-14 20:50:19 +0200 | <yin> | cheater: are you using vim or neovim? |
2024-05-14 20:50:47 +0200 | <cheater> | vim |
2024-05-14 20:50:50 +0200 | <yin> | cheater: i feel like you're being purposefuly obtuse. this might be a good place to end the conversation |
2024-05-14 20:50:58 +0200 | <cheater> | not at all |
2024-05-14 20:51:31 +0200 | <yin> | i don't think i can help you |
2024-05-14 20:51:43 +0200 | <cheater> | yes, i agree on that |
2024-05-14 20:53:55 +0200 | <ph88> | mauke, Thanks ! i will try this |
2024-05-14 20:55:31 +0200 | <mauke> | if you want to go mad with power, there is also https://hackage.haskell.org/package/base-4.19.1.0/docs/Data-Dynamic.html |
2024-05-14 21:00:46 +0200 | <raehik> | do type families trip up TypeError printing for `:k!`...? |
2024-05-14 21:01:23 +0200 | <raehik> | > :k! TypeError (Text "test") |
2024-05-14 21:01:24 +0200 | <lambdabot> | <hint>:1:1: error: parse error on input ‘:’ |
2024-05-14 21:01:34 +0200 | <raehik> | understandable |
2024-05-14 21:06:34 +0200 | <yin> | mauke: 0.234 doesn't seem random at all |
2024-05-14 21:07:32 +0200 | <yin> | have you considered 0.37 ? |
2024-05-14 21:07:46 +0200 | <mauke> | blame the original rust code :-) |
2024-05-14 21:16:53 +0200 | greenflower | (~greenflow@103.191.25.63) |
2024-05-14 21:17:02 +0200 | sord937 | (~sord937@gateway/tor-sasl/sord937) (Ping timeout: 260 seconds) |
2024-05-14 21:18:24 +0200 | sord937 | (~sord937@gateway/tor-sasl/sord937) |
2024-05-14 21:22:05 +0200 | <ski> | ph88 : "i'm trying to have a function that given a data which implements a typeclass can return another data that implements the same type class" -- sounds like you want `getSomething :: a -> Maybe (exists b. Something b *> b)', not `getSomething :: forall b. Something b => a -> Maybe b', then |
2024-05-14 21:23:53 +0200 | <ph88> | ski, what does *> mean in a type ? |
2024-05-14 21:24:13 +0200 | <ski> | "provide this constraint along with a value of this other type" |
2024-05-14 21:24:42 +0200 | <ski> | ("provide", as opposed to "expect") |
2024-05-14 21:24:47 +0200 | <ph88> | can't find it in the manual |
2024-05-14 21:24:59 +0200 | <ski> | it's not in the manual, it's pseudo-Haskell |
2024-05-14 21:25:00 +0200 | <EvanR> | it's skiskell |
2024-05-14 21:25:16 +0200 | <ski> | it's (imho) a useful way to talk about these matters |
2024-05-14 21:25:46 +0200 | <ski> | (before getting into the details of how to actually effect the desired semantics with current-day Haskell) |
2024-05-14 21:26:04 +0200 | <ph88> | i'm interested in those details :p |
2024-05-14 21:27:01 +0200 | <ski> | a value of type `Cxt => T' is a value such that, if the user/caller/consumer provides evidence of the constraint `Cxt' to it, it will give you back a value of type `T' |
2024-05-14 21:28:07 +0200 | <ski> | a value of type `Cxt *> T' is a value that bundles evidence for a constraint `Cxt' together with a value `T', allowing the user/caller/consumer to both use the evidence, as well as the value |
2024-05-14 21:28:56 +0200 | <ski> | in the dictionary-passing implementation of type classes, `Cxt => T' gets translated to `DictCxt -> T', a function that accepts a dictionary of method implementations, and computing a value of type `T' |
2024-05-14 21:29:16 +0200 | <ph88> | is that dictionary visible in Core ? |
2024-05-14 21:29:29 +0200 | <ski> | while, in a dictionary-passing implementation, `Cxt *> T' would get translated to `(DictCxt,T)', a *pair* of the dictionary and the value |
2024-05-14 21:31:52 +0200 | gorignak | (~gorignak@user/gorignak) |
2024-05-14 21:32:02 +0200 | <ski> | (`forall a.' vs. `exists a.' is also conceptually similar. the first depends on the caller/user/consumer to specify the actual type to use in place of `a', while the second lets the callee/implementor/producer pick the type to use for `a'. so the former is kinda like a function that gets a type `a' at run-time, while the latter is kinda like a pair of a type `a' and a value. in a type-erasure implementation, |
2024-05-14 21:32:08 +0200 | <ski> | types don't exist at run-time, but one can imagine implementations that passes around evidence for types at run-time, e.g. to allow arbitrary unboxing, or for GC purposes) |
2024-05-14 21:34:05 +0200 | <ski> | in any case, it's useful to be aware that `(exists a. ..a..) -> ...' is logically equivalent to `forall a. (..a.. -> ...)', as well as `(Cxt *> T) => U' being equivalent to `Cxt => (T -> U)' (both of which are a kind of currying/uncurrying, kinda) |
2024-05-14 21:34:23 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
2024-05-14 21:34:42 +0200 | <ncf> | (Cxt *> T) -> U |
2024-05-14 21:34:49 +0200 | <ski> | .. this is what justifies using the keyword `forall' above, in that `Box' datatype, to encode *existentials* |
2024-05-14 21:34:59 +0200 | <ski> | er, right, ty |
2024-05-14 21:35:33 +0200 | <ski> | data Box c = forall a. (c a) => MkBox a |
2024-05-14 21:35:37 +0200 | <ski> | means that we have |
2024-05-14 21:35:52 +0200 | <ski> | MkBox :: forall a. c a => a -> Box c |
2024-05-14 21:35:54 +0200 | <ski> | or |
2024-05-14 21:36:04 +0200 | <ski> | MkBox :: forall a. (c a => (a -> Box c)) |
2024-05-14 21:36:13 +0200 | <ski> | to be explicit, which is equivalent to |
2024-05-14 21:36:24 +0200 | <ski> | MkBox :: forall a. ((c a *> a) -> Box c) |
2024-05-14 21:36:29 +0200 | <ski> | which is equivalent to |
2024-05-14 21:36:35 +0200 | <tomsmeding> | % :k! TypeError (Text "test") -- raehik |
2024-05-14 21:36:35 +0200 | <yahb2> | <interactive>:1:1: error: test |
2024-05-14 21:36:48 +0200 | <ski> | MkBox :: (exists a. (c a *> a)) -> Box c |
2024-05-14 21:37:13 +0200 | <ski> | meaning that a value of type `Box c' amounts to ("wraps") a value of type `exists a. c a *> a' |
2024-05-14 21:37:41 +0200 | ent | (entgod@kapsi.fi) (Ping timeout: 240 seconds) |
2024-05-14 21:37:51 +0200 | ent | (entgod@kapsi.fi) |
2024-05-14 21:39:14 +0200 | <raehik> | tomsmeding: aha ty |
2024-05-14 21:39:25 +0200 | <raehik> | % type family Id a where Id a = a |
2024-05-14 21:39:25 +0200 | <yahb2> | <interactive>:79:1: error: ; • Illegal family declaration for ‘Id’ ; Enable TypeFamilies to allow indexed type families ; • In the type family declaration for ‘Id’ |
2024-05-14 21:39:44 +0200 | <raehik> | oh well I can't show you what I mean xd but if you now wrap the above :k! invocation in Id, it fails |
2024-05-14 21:39:55 +0200 | ocra8 | (ocra8@user/ocra8) |
2024-05-14 21:40:02 +0200 | <raehik> | (by fail I mean doesn't print the type error properly) |
2024-05-14 21:40:19 +0200 | <tomsmeding> | % :set -XTypeFamilies |
2024-05-14 21:40:19 +0200 | <yahb2> | <no output> |
2024-05-14 21:40:26 +0200 | <tomsmeding> | % type family Id a where Id a = a |
2024-05-14 21:40:26 +0200 | <yahb2> | <no output> |
2024-05-14 21:40:35 +0200 | <ski> | (this is *one* way to express/encode an existential. there is also another common way, which is sometimes preferable, which is based on a logical equivalence between `T' and `forall o. (T -> o) -> o') |
2024-05-14 21:40:35 +0200 | <tomsmeding> | % :k! Id (TypeError (Text "test")) |
2024-05-14 21:40:35 +0200 | <yahb2> | <interactive>:1:1: error: test |
2024-05-14 21:41:04 +0200 | <raehik> | thanks! interesting maybe it changed in GHC 9.8 (I know they constantly fiddle with :k and :k!) |
2024-05-14 21:41:11 +0200 | <[exa]> | dmj`: for the evaluator I meant basically this https://gitea.blesmrt.net/exa/uskel/ |
2024-05-14 21:42:12 +0200 | <raehik> | hmm I simply don't get the same output on GHC 9.6 or 9.8 |
2024-05-14 21:42:27 +0200 | <tomsmeding> | if I'm not mistaken yahb2 is on 9.4.8 |
2024-05-14 21:42:34 +0200 | <tomsmeding> | maybe it regressed! |
2024-05-14 21:42:41 +0200 | <ph88> | thank you ski :) |
2024-05-14 21:43:03 +0200 | <ski> | ph88 : .. i could go on, but perhaps this is enough, for the time being |
2024-05-14 21:43:12 +0200 | <ph88> | yes it's enough, i can study it |
2024-05-14 21:43:29 +0200 | <raehik> | tomsmeding: my 9.4.8 still prints `= (TypeError ...)` :'( |
2024-05-14 21:44:06 +0200 | <tomsmeding> | hm it does |
2024-05-14 21:45:22 +0200 | <tomsmeding> | (why does ghci not have a :version command or something) |
2024-05-14 21:45:55 +0200 | <raehik> | I can work around this by reifying, but it means I can't do super simple type-level evaluation failure examples :( |
2024-05-14 21:46:38 +0200 | <tomsmeding> | % :k! Id (TypeError (Text "test")) |
2024-05-14 21:46:38 +0200 | <yahb2> | Id (TypeError (Text "test")) :: k ; = (TypeError ...) |
2024-05-14 21:46:41 +0200 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer) |
2024-05-14 21:46:44 +0200 | <tomsmeding> | I :q'd and did it again |
2024-05-14 21:46:53 +0200 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
2024-05-14 21:46:54 +0200 | <tomsmeding> | there was some state that made it work somehow |
2024-05-14 21:47:01 +0200 | <tomsmeding> | but the state is gone now :D |
2024-05-14 21:47:21 +0200 | <raehik> | XD |
2024-05-14 21:51:07 +0200 | waleee | (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) |
2024-05-14 21:51:53 +0200 | <tomsmeding> | raehik: I re-ran all commands that could possibly be relevant in yahb2's history in a ghci shell and it still doesn't work |
2024-05-14 21:53:05 +0200 | <tomsmeding> | raehik: works on ghc 9.0 and 9.2 xD |
2024-05-14 21:53:06 +0200 | <raehik> | hahahahahaha good stuff |
2024-05-14 21:53:11 +0200 | <tomsmeding> | fails from 9.4 on |
2024-05-14 21:53:15 +0200 | <raehik> | ahhhh there it is |
2024-05-14 21:53:44 +0200 | thaliaa | (uid486183@id-486183.uxbridge.irccloud.com) |
2024-05-14 21:54:03 +0200 | <raehik> | alas my 9.2 doesn't work either bu |
2024-05-14 21:54:14 +0200 | <raehik> | *but I'm not too worried |
2024-05-14 21:55:21 +0200 | <tomsmeding> | raehik: https://paste.tomsmeding.com/QzNahvGW |
2024-05-14 21:55:23 +0200 | <tomsmeding> | ¯\_(ツ)_/¯ |
2024-05-14 21:56:07 +0200 | <ncf> | the ski existential lecture has taken place |
2024-05-14 21:56:21 +0200 | <ski> | where ? |
2024-05-14 21:56:27 +0200 | <ncf> | right here! |
2024-05-14 21:56:37 +0200 | ski | looks around, confusedly |
2024-05-14 21:56:50 +0200 | <ncf> | you barely missed it |
2024-05-14 21:57:11 +0200 | <raehik> | tomsmeding: oh yep that works on 9.2. but my non-contrived example (that goes thru lots of type families) doesn't xd |
2024-05-14 21:57:16 +0200 | <tomsmeding> | ah :) |
2024-05-14 21:57:25 +0200 | <tomsmeding> | yeah I've always found :k! to be a bit unstable |
2024-05-14 21:57:28 +0200 | <tomsmeding> | unfortunatelt |
2024-05-14 21:57:31 +0200 | <tomsmeding> | -y |
2024-05-14 21:58:19 +0200 | jespada | (~jespada@cpc121308-nmal25-2-0-cust15.19-2.cable.virginm.net) (Quit: Textual IRC Client: www.textualapp.com) |
2024-05-14 21:58:56 +0200 | <raehik> | thx for the help my docs will benefit from knowing this! |
2024-05-14 21:59:53 +0200 | <tomsmeding> | % :set -XTypeApplications |
2024-05-14 21:59:53 +0200 | <yahb2> | <no output> |
2024-05-14 22:00:01 +0200 | <tomsmeding> | % Proxy @(Id (TypeError (Text "test"))) |
2024-05-14 22:00:02 +0200 | <yahb2> | <interactive>:17:1: error: Data constructor not in scope: Proxy |
2024-05-14 22:00:05 +0200 | <tomsmeding> | % import Data.Proxy |
2024-05-14 22:00:05 +0200 | <yahb2> | <no output> |
2024-05-14 22:00:07 +0200 | <tomsmeding> | % Proxy @(Id (TypeError (Text "test"))) |
2024-05-14 22:00:07 +0200 | <yahb2> | <interactive>:21:1: error: ; • test ; • When checking the inferred type ; it :: forall {k}. Proxy (TypeError ...) |
2024-05-14 22:00:15 +0200 | <tomsmeding> | raehik: perhaps this works? |
2024-05-14 22:01:36 +0200 | <tomsmeding> | using Proxy means that 1. the type can be whatever, and 2. it will always show if the type evaluates to something sensible |
2024-05-14 22:01:46 +0200 | <tomsmeding> | but to get it to show it has to typecheck, hence you have to evaluate the type |
2024-05-14 22:04:00 +0200 | jmdaemon | (~jmdaemon@user/jmdaemon) |
2024-05-14 22:06:13 +0200 | sp1ff | (~user@c-24-21-45-157.hsd1.wa.comcast.net) (Remote host closed the connection) |
2024-05-14 22:07:53 +0200 | <raehik> | tomsmeding: oh nice catch. I had managed to write a similar definition that somehow did not evaluate the type, so was thinking I needed something more in depth |
2024-05-14 22:08:39 +0200 | <tomsmeding> | raehik: notable is that :t'ing that doesn't work, you actually have to try to show the Proxy |
2024-05-14 22:22:10 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 268 seconds) |
2024-05-14 22:22:42 +0200 | cayley5 | (~cayley5@user/phileasfogg) (Quit: Ping timeout (120 seconds)) |
2024-05-14 22:23:04 +0200 | cayley5 | (~cayley5@user/phileasfogg) |
2024-05-14 22:29:13 +0200 | greenflower | (~greenflow@103.191.25.63) (Quit: Client closed) |
2024-05-14 22:34:09 +0200 | machinedgod | (~machinedg@d173-183-246-216.abhsia.telus.net) |
2024-05-14 22:34:53 +0200 | raehik | (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) (Ping timeout: 240 seconds) |
2024-05-14 22:35:06 +0200 | wootehfoot | (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer) |
2024-05-14 22:36:05 +0200 | jmdaemon | (~jmdaemon@user/jmdaemon) (Ping timeout: 240 seconds) |
2024-05-14 22:52:16 +0200 | sawilagar | (~sawilagar@user/sawilagar) |
2024-05-14 23:00:05 +0200 | yin | (~yin@user/zero) (Ping timeout: 240 seconds) |
2024-05-14 23:03:53 +0200 | Moyst | (~moyst@user/moyst) (Ping timeout: 272 seconds) |
2024-05-14 23:05:19 +0200 | Moyst | (~moyst@user/moyst) |
2024-05-14 23:06:07 +0200 | oo_miguel | (~Thunderbi@78-11-181-16.static.ip.netia.com.pl) (Ping timeout: 260 seconds) |
2024-05-14 23:07:04 +0200 | yin | (~yin@user/zero) |
2024-05-14 23:08:37 +0200 | euphores | (~SASL_euph@user/euphores) (Quit: Leaving.) |
2024-05-14 23:11:23 +0200 | ph88 | (~ph88@2a02:8109:9e26:c800:50c2:30a5:77d8:a72f) (Remote host closed the connection) |
2024-05-14 23:11:28 +0200 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2024-05-14 23:14:42 +0200 | __monty__ | (~toonn@user/toonn) (Quit: leaving) |
2024-05-14 23:17:12 +0200 | euphores | (~SASL_euph@user/euphores) |
2024-05-14 23:18:32 +0200 | takuan | (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
2024-05-14 23:22:04 +0200 | machinedgod | (~machinedg@d173-183-246-216.abhsia.telus.net) (Ping timeout: 255 seconds) |
2024-05-14 23:23:27 +0200 | causal | (~eric@50.35.88.207) |
2024-05-14 23:25:25 +0200 | esnos | (~user@194.29.137.22) (Remote host closed the connection) |
2024-05-14 23:26:01 +0200 | target_i | (~target_i@user/target-i/x-6023099) (Quit: leaving) |
2024-05-14 23:34:23 +0200 | jmdaemon | (~jmdaemon@user/jmdaemon) |
2024-05-14 23:35:41 +0200 | kadir | (~kadir@85.103.183.96) (Quit: WeeChat 4.2.2) |
2024-05-14 23:36:38 +0200 | barak | (~barak@2a0d:6fc2:68c1:7200:3cf2:a87d:a02b:3e21) |
2024-05-14 23:45:16 +0200 | Sgeo | (~Sgeo@user/sgeo) |