Logs: liberachat/#haskell
| 2026-04-03 17:43:05 | <monochrom> | Oh darn haha |
| 2026-04-03 17:43:14 | <EvanR> | how does that help |
| 2026-04-03 17:43:26 | <dolio> | It's just not parametric over all types. |
| 2026-04-03 17:43:48 | <dolio> | Some are empty, some aren't. You don't get back the same 'yes/no' answer regardless of type. |
| 2026-04-03 17:44:13 | <EvanR> | oh |
| 2026-04-03 17:44:36 | <monochrom> | With parametricity, bar :: [a] implies bar = []. But what if you wrote "bar = if a is empty then [] else let x = choose an element from a in [x,x,x]" |
| 2026-04-03 17:45:09 | <EvanR> | list makes it clear again |
| 2026-04-03 17:45:57 | <monochrom> | But I like dolio's. tellMe :: a -> Bool should be const True or const False, not tell you whether a is empty. |
| 2026-04-03 17:46:44 | <dolio> | It's really `tellMe :: forall a. Bool` |
| 2026-04-03 17:47:00 | <dolio> | If you have to provide an a, then the answer must be yes. :) |
| 2026-04-03 17:47:09 | <monochrom> | haha |
| 2026-04-03 17:47:18 | <monochrom> | Proxy a -> Bool! |
| 2026-04-03 17:47:36 | <dolio> | Yeah, that'd work. |
| 2026-04-03 17:48:35 | <EvanR> | yeah |
| 2026-04-03 17:48:38 | <monochrom> | I guess today's Haskell has "forall a -> Bool" as a middle ground. |
| 2026-04-03 17:48:43 | <EvanR> | I was trying to figure out how to fix a -> Bool |
| 2026-04-03 17:49:11 | <EvanR> | forall a . Bool ... |
| 2026-04-03 17:49:13 | <EvanR> | lol |
| 2026-04-03 17:49:28 | <monochrom> | @free tellMe :: [a] -> Bool |
| 2026-04-03 17:49:28 | <lambdabot> | tellMe = tellMe . $map f |
| 2026-04-03 17:49:29 | <dolio> | Apparently that is a way of characterizing parametricity 'semantically', too. For all `A : U` then `f : U -> A` must be constant, basically. |
| 2026-04-03 17:49:45 | × | confusedalex quits (~confuseda@user/confusedalex) (Ping timeout: 245 seconds) |
| 2026-04-03 17:49:47 | <dolio> | Where U is the 'universe'. |
| 2026-04-03 17:49:52 | → | confusedalex_ joins (~confuseda@user/confusedalex) |
| 2026-04-03 17:50:03 | confusedalex_ | is now known as confusedalex |
| 2026-04-03 17:50:28 | ← | L29Ah parts (~L29Ah@wikipedia/L29Ah) () |
| 2026-04-03 17:50:35 | <dolio> | Instead of the relational way. |
| 2026-04-03 17:53:01 | <monochrom> | Oh interesting, because "constant [over types]" is short for "the same code for all types". |
| 2026-04-03 17:53:32 | <monochrom> | which is what I tell beginners if I'm not ready to tell the relational story. |
| 2026-04-03 17:54:14 | <dolio> | Yeah. I recently heard about this, and like it better, because it seems closer to the intuitive idea of parametricity. |
| 2026-04-03 17:57:54 | <dolio> | You can probably generalize it so that it doesn't depend so much on relative 'size' too. |
| 2026-04-03 17:59:31 | <dolio> | Like, there is T parametricity for a class of types if for all A in that class, functions T -> A must be constant, or something. |
| 2026-04-03 18:07:02 | → | confusedalex_ joins (~confuseda@user/confusedalex) |
| 2026-04-03 18:07:15 | × | jmcantrell_ quits (~weechat@user/jmcantrell) (Ping timeout: 246 seconds) |
| 2026-04-03 18:08:06 | × | confusedalex quits (~confuseda@user/confusedalex) (Ping timeout: 255 seconds) |
| 2026-04-03 18:08:06 | confusedalex_ | is now known as confusedalex |
| 2026-04-03 18:13:59 | → | byorgey joins (~byorgey@155.138.238.211) |
| 2026-04-03 18:13:59 | × | byorgey quits (~byorgey@155.138.238.211) (Changing host) |
| 2026-04-03 18:13:59 | → | byorgey joins (~byorgey@user/byorgey) |
| 2026-04-03 18:14:51 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 255 seconds) |
| 2026-04-03 18:22:27 | × | absurdvoid quits (~absurdvoi@user/absurdvoid) (Quit: WeeChat 4.8.2) |
| 2026-04-03 18:25:54 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 2026-04-03 18:27:15 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2026-04-03 18:32:06 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds) |
| 2026-04-03 18:34:41 | <gentauro> | :t \ (x :: Void) -> [x] |
| 2026-04-03 18:34:42 | <lambdabot> | Void -> [Void] |
| 2026-04-03 18:35:58 | <gentauro> | :t \ _ -> {} |
| 2026-04-03 18:35:59 | <lambdabot> | error: [GHC-58481] parse error on input ‘{’ |
| 2026-04-03 18:36:46 | <gentauro> | :t \ a -> case a of {} |
| 2026-04-03 18:36:47 | <lambdabot> | p1 -> p2 |
| 2026-04-03 18:37:05 | <gentauro> | :t \ (a :: Void) -> case a of {} |
| 2026-04-03 18:37:06 | <lambdabot> | Void -> p |
| 2026-04-03 18:40:43 | × | slomp quits (~slomp@47-158-212-88.lsan.ca.frontiernet.net) (Quit: Lost terminal) |
| 2026-04-03 18:43:24 | → | merijn joins (~merijn@62.45.136.136) |
| 2026-04-03 18:45:36 | × | j1n37 quits (~j1n37@user/j1n37) (Read error: Connection reset by peer) |
| 2026-04-03 18:47:46 | × | merijn quits (~merijn@62.45.136.136) (Ping timeout: 248 seconds) |
| 2026-04-03 18:48:23 | → | absurdvoid joins (~absurdvoi@user/absurdvoid) |
| 2026-04-03 18:52:04 | × | humasect quits (~humasect@dyn-192-249-132-90.nexicom.net) (Remote host closed the connection) |
| 2026-04-03 18:53:49 | → | j1n37 joins (~j1n37@user/j1n37) |
| 2026-04-03 18:55:55 | <tomsmeding> | :t absurd |
| 2026-04-03 18:55:56 | <lambdabot> | Void -> a |
| 2026-04-03 18:58:58 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2026-04-03 18:59:44 | → | Digit joins (~user@user/digit) |
| 2026-04-03 19:03:55 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
| 2026-04-03 19:08:53 | × | srk quits (~sorki@user/srk) (Ping timeout: 244 seconds) |
| 2026-04-03 19:12:57 | → | srk joins (~sorki@user/srk) |
| 2026-04-03 19:14:43 | × | koz quits (~koz@121.99.240.58) (Ping timeout: 264 seconds) |
| 2026-04-03 19:14:48 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2026-04-03 19:16:45 | → | koz joins (~koz@121.99.240.58) |
| 2026-04-03 19:19:14 | × | machinedgod quits (~machinedg@d172-219-48-230.abhsia.telus.net) (Ping timeout: 248 seconds) |
| 2026-04-03 19:20:07 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2026-04-03 19:30:38 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2026-04-03 19:35:24 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 255 seconds) |
| 2026-04-03 19:44:23 | ncf | is now known as ncf- |
| 2026-04-03 19:46:28 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2026-04-03 19:51:12 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds) |
| 2026-04-03 19:53:33 | → | ncf joins (~ncf@monade.li) |
| 2026-04-03 19:54:05 | → | Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915) |
| 2026-04-03 19:54:55 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 264 seconds) |
| 2026-04-03 19:56:58 | Lord_of_Life_ | is now known as Lord_of_Life |
| 2026-04-03 19:57:43 | → | slomp joins (~slomp@47-158-212-88.lsan.ca.frontiernet.net) |
| 2026-04-03 19:58:32 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 2026-04-03 20:01:21 | → | jmcantrell_ joins (~weechat@user/jmcantrell) |
| 2026-04-03 20:02:11 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2026-04-03 20:03:55 | × | Digit quits (~user@user/digit) (Ping timeout: 245 seconds) |
| 2026-04-03 20:03:56 | → | Digitteknohippie joins (~user@user/digit) |
| 2026-04-03 20:07:21 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 255 seconds) |
| 2026-04-03 20:11:32 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2026-04-03 20:17:15 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 255 seconds) |
| 2026-04-03 20:28:19 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2026-04-03 20:29:20 | <tomsmeding> | On the haskell-cafe mailing list there's a remark that aeson doesn't seem to be updated, and that its bound on QuickCheck needs to be bumped; aeson maintainers in turn complain that QuickCheck maintainers have strange views API stability, resulting in aeson not being able to upgrade to newest QuickCheck while keeping aeson's API stability views |
| 2026-04-03 20:29:47 | <tomsmeding> | there's a whole discussion there but I feel like it all comes down to the problem it always comes down to: why the f*** does aeson even depend on quickcheck |
| 2026-04-03 20:30:09 | <tomsmeding> | answer: aeson wants to provide Arbitrary instances for stuff |
| 2026-04-03 20:30:38 | <tomsmeding> | the no-orphans rule understandable for soundness, but it has so many bad effects on a package ecosystem |
| 2026-04-03 20:31:50 | <dolio> | Whose rule is the no orphans rule? |
| 2026-04-03 20:32:14 | <tomsmeding> | well, GHC's, if you consider GHC's warnings rules |
| 2026-04-03 20:32:25 | <dolio> | I don't. |
| 2026-04-03 20:32:44 | <geekosaur> | I feel like it should be possible to declare exceptions |
| 2026-04-03 20:32:47 | <tomsmeding> | (which is conventionally weakened to at least "no orphan instances in libraries", because in leaf applications they don't really hurt) |
| 2026-04-03 20:33:19 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
All times are in UTC.