Logs: liberachat/#haskell
| 2026-01-25 17:46:28 | × | vanishingideal quits (~vanishing@user/vanishingideal) (Ping timeout: 246 seconds) |
| 2026-01-25 17:50:18 | → | Lycurgus joins (~juan@user/Lycurgus) |
| 2026-01-25 17:58:06 | × | qqq quits (~qqq@185.54.21.105) (Remote host closed the connection) |
| 2026-01-25 18:13:29 | → | ss4 joins (~wootehfoo@user/wootehfoot) |
| 2026-01-25 18:14:23 | → | divlamir_ joins (~divlamir@user/divlamir) |
| 2026-01-25 18:15:31 | × | wootehfoot quits (~wootehfoo@user/wootehfoot) (Ping timeout: 246 seconds) |
| 2026-01-25 18:16:11 | × | divlamir quits (~divlamir@user/divlamir) (Ping timeout: 244 seconds) |
| 2026-01-25 18:16:11 | divlamir_ | is now known as divlamir |
| 2026-01-25 18:18:31 | → | qqq joins (~qqq@185.54.21.105) |
| 2026-01-25 18:26:43 | × | Lycurgus quits (~juan@user/Lycurgus) (Quit: alsoknownas.renjuan.org ( juan@acm.org )) |
| 2026-01-25 18:29:37 | → | fp joins (~Thunderbi@89-27-10-140.bb.dnainternet.fi) |
| 2026-01-25 18:32:11 | trickard_ | is now known as trickard |
| 2026-01-25 18:38:05 | → | Beowulf joins (florian@2a01:4f9:3b:2d56::2) |
| 2026-01-25 18:54:39 | × | qqq quits (~qqq@185.54.21.105) (Quit: Lost terminal) |
| 2026-01-25 18:55:11 | × | ouilemur quits (~jgmerritt@user/ouilemur) (Quit: WeeChat 4.8.1) |
| 2026-01-25 18:59:11 | → | ouilemur joins (~jgmerritt@user/ouilemur) |
| 2026-01-25 19:05:34 | × | DetourNetworkUK quits (~DetourNet@user/DetourNetworkUK) (Read error: Connection reset by peer) |
| 2026-01-25 19:06:04 | → | DetourNetworkUK joins (DetourNetw@user/DetourNetworkUK) |
| 2026-01-25 19:06:51 | → | jmcantrell_ joins (~weechat@user/jmcantrell) |
| 2026-01-25 19:10:25 | × | Beowulf quits (florian@2a01:4f9:3b:2d56::2) (Remote host closed the connection) |
| 2026-01-25 19:14:35 | → | euphores joins (~SASL_euph@user/euphores) |
| 2026-01-25 19:15:24 | × | arandombit quits (~arandombi@user/arandombit) (Ping timeout: 260 seconds) |
| 2026-01-25 19:16:03 | → | wickedjargon joins (~user@24.83.46.194) |
| 2026-01-25 19:16:12 | → | arandombit joins (~arandombi@user/arandombit) |
| 2026-01-25 19:20:43 | × | driib3180 quits (~driib@vmi931078.contaboserver.net) (Quit: The Lounge - https://thelounge.chat) |
| 2026-01-25 19:21:48 | × | arahael quits (~wetfoot@user/arahael) (Ping timeout: 244 seconds) |
| 2026-01-25 19:22:59 | → | arahael joins (~wetfoot@user/arahael) |
| 2026-01-25 19:24:41 | → | driib3180 joins (~driib@vmi931078.contaboserver.net) |
| 2026-01-25 19:32:30 | × | Pozyomka quits (~pyon@user/pyon) (Ping timeout: 252 seconds) |
| 2026-01-25 19:41:08 | → | Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915) |
| 2026-01-25 19:41:24 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 256 seconds) |
| 2026-01-25 19:42:28 | Lord_of_Life_ | is now known as Lord_of_Life |
| 2026-01-25 19:49:13 | × | fp quits (~Thunderbi@89-27-10-140.bb.dnainternet.fi) (Ping timeout: 264 seconds) |
| 2026-01-25 19:53:47 | → | peterbecich joins (~Thunderbi@71.84.33.135) |
| 2026-01-25 20:05:12 | × | ethantwardy quits (~user@user/ethantwardy) (Ping timeout: 244 seconds) |
| 2026-01-25 20:18:08 | × | tessier quits (~tessier@ip68-8-117-219.sd.sd.cox.net) (Ping timeout: 240 seconds) |
| 2026-01-25 20:18:23 | → | tessier_ joins (~tessier@ip68-8-117-219.sd.sd.cox.net) |
| 2026-01-25 20:19:04 | × | peterbecich quits (~Thunderbi@71.84.33.135) (Ping timeout: 246 seconds) |
| 2026-01-25 20:22:15 | <[exa]> | is there some sub-cryptographic hash library where the hashes would be somewhat stable between computers? Hashable is not super stable, and I don't want to throw SHA at a problem where crc32 is already an overkill |
| 2026-01-25 20:22:55 | <[exa]> | ( preferably with some tooling to easily hash bigger datatypes than strings ) |
| 2026-01-25 20:23:30 | → | haritz joins (~hrtz@2a01:4b00:bc2e:7000:d5af:a266:ca31:5ef8) |
| 2026-01-25 20:23:30 | × | haritz quits (~hrtz@2a01:4b00:bc2e:7000:d5af:a266:ca31:5ef8) (Changing host) |
| 2026-01-25 20:23:30 | → | haritz joins (~hrtz@user/haritz) |
| 2026-01-25 20:24:34 | <Milan_Vanca> | [exa]: By hash you mean something that produces Int, like quick hash to produce key for "HashMap"? |
| 2026-01-25 20:24:46 | <[exa]> | yeah |
| 2026-01-25 20:25:10 | <[exa]> | but essentially I want the hashmap to be out of memory and preferably shared between computers, where Hashable seems to fail |
| 2026-01-25 20:25:29 | <geekosaur> | yeh, Hashable's not designed for that use case in much of any sense |
| 2026-01-25 20:25:31 | <tomsmeding> | [exa]: perhaps search for something like siphash or xxhash? |
| 2026-01-25 20:25:36 | <tomsmeding> | or murmur |
| 2026-01-25 20:25:43 | <tomsmeding> | one of the hashes that have been given names |
| 2026-01-25 20:25:52 | <[exa]> | xxhash is ByteString -> Hash |
| 2026-01-25 20:26:07 | <[exa]> | I ideally want AnyStableHashable a => a -> Hash |
| 2026-01-25 20:26:32 | <geekosaur> | cabal has something internally for that, but it's not packaged. (uses Generic to hash ADTs) |
| 2026-01-25 20:27:14 | → | wickedja` joins (~user@2605:8d80:5431:62ef:ec3f:86f3:7664:49eb) |
| 2026-01-25 20:28:17 | <tomsmeding> | same in Accelerate :p |
| 2026-01-25 20:28:29 | [exa] | prepares ctrl+c |
| 2026-01-25 20:28:50 | <tomsmeding> | take the cabal one if you copy one of those, the accelerate thing is overengineered |
| 2026-01-25 20:28:52 | × | wickedjargon quits (~user@24.83.46.194) (Ping timeout: 244 seconds) |
| 2026-01-25 20:29:05 | × | ljdarj quits (~Thunderbi@user/ljdarj) (Quit: ljdarj) |
| 2026-01-25 20:29:14 | <tomsmeding> | _and_ underengineered, it doesn't have many instances I think |
| 2026-01-25 20:29:15 | <geekosaur> | hm, actually the cabal one is probably unsuitable though: it doesn't hash values, it specifically hashes structure |
| 2026-01-25 20:29:26 | → | ljdarj joins (~Thunderbi@user/ljdarj) |
| 2026-01-25 20:29:42 | <tomsmeding> | [exa]: roll it yourself? How many types do you need |
| 2026-01-25 20:29:54 | <geekosaur> | to ensure core data structures don't get changed unnecessarily and cause downstream breakage |
| 2026-01-25 20:30:53 | <[exa]> | okay good that sounds like time to roll it |
| 2026-01-25 20:30:59 | <tomsmeding> | and then package it up :) |
| 2026-01-25 20:31:17 | <[exa]> | nah I have like 10 types, that's 10 functions |
| 2026-01-25 20:31:23 | <tomsmeding> | there's actually a way to make the typeclass generic over the underlying hash implementation |
| 2026-01-25 20:31:28 | <[exa]> | if I package it, the generality is gonna kill it :D :D |
| 2026-01-25 20:32:21 | <tomsmeding> | class BaseHash base where { baseHash :: proxy base -> ByteString -> Int }; class BaseHash base => AnyHashable base a where { hash :: proxy base -> a -> Int } |
| 2026-01-25 20:32:39 | <tomsmeding> | the proxy is ugly but it works |
| 2026-01-25 20:33:56 | <[exa]> | hashable internally has some XXH3 or what |
| 2026-01-25 20:34:03 | <[exa]> | cool. |
| 2026-01-25 20:36:10 | → | humasect joins (~humasect@dyn-192-249-132-90.nexicom.net) |
| 2026-01-25 20:36:58 | × | humasect quits (~humasect@dyn-192-249-132-90.nexicom.net) (Client Quit) |
| 2026-01-25 20:56:43 | × | wickedja` quits (~user@2605:8d80:5431:62ef:ec3f:86f3:7664:49eb) (Remote host closed the connection) |
| 2026-01-25 21:05:16 | → | vanishingideal joins (~vanishing@user/vanishingideal) |
| 2026-01-25 21:07:48 | <[exa]> | btw kinda related to the above, does anyone recognize what kind of hash is this: |
| 2026-01-25 21:07:50 | <[exa]> | hsh x seed = seed `xor` (x * 2654435761 + 2654435769 + (shiftL seed 6) + (shiftR seed 2)) |
| 2026-01-25 21:08:03 | <[exa]> | I found it in some very old source with a comment that it's very good indeed |
| 2026-01-25 21:09:57 | <[exa]> | oh wow the magic numbers actually googled |
| 2026-01-25 21:10:53 | × | myxos quits (~myxos@174-18-58-141.tcso.qwest.net) (Remote host closed the connection) |
| 2026-01-25 21:11:44 | <tomsmeding> | does anyone have a recommendation for a package for filesystem events |
| 2026-01-25 21:13:06 | <geekosaur> | the usual is fsnotify, I think |
| 2026-01-25 21:13:12 | <[exa]> | tomsmeding: ghcid uses `fsnotify` and it was ok iirc |
| 2026-01-25 21:13:29 | <tomsmeding> | why am I not getting that when I search for "notify" on hackage |
| 2026-01-25 21:13:51 | <geekosaur> | tbh I use flora these days |
| 2026-01-25 21:14:28 | → | myxos joins (~myxos@174-18-58-141.tcso.qwest.net) |
| 2026-01-25 21:14:57 | <tomsmeding> | but thank you, that looks better than the 2018-era packages I was finding |
| 2026-01-25 21:15:51 | → | Beowulf joins (florian@2a01:4f9:3b:2d56::2) |
| 2026-01-25 21:16:36 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 252 seconds) |
| 2026-01-25 21:28:23 | <[exa]> | is there some philosophical reason for instance FromJSON () to always succeed? I'd kinda expect it should match a `null` or `[]` or something and scream if there's actual data |
| 2026-01-25 21:28:33 | <[exa]> | ref: https://hackage.haskell.org/package/aeson-2.2.3.0/docs/src/Data.Aeson.Types.FromJSON.html#line-1672 |
| 2026-01-25 21:29:03 | <tomsmeding> | doesn't aeson always allow it if there's more stuff than expected? |
| 2026-01-25 21:29:21 | <[exa]> | not really, there's helpers to avoid that |
| 2026-01-25 21:32:03 | <[exa]> | like, it's somewhat surprising |
| 2026-01-25 21:32:27 | <[exa]> | I guess might be the case because of defaulting, if you write a parser and do `_ <- parseJSON`, it would select () by default |
| 2026-01-25 21:32:48 | tomsmeding | isn't sure, but that sounds like a bad reason |
| 2026-01-25 21:34:30 | <tomsmeding> | I might actually expect () to parse `null`, because there doesn't seem to be another way to specifically parse `null`? (Apart from parsing a `Value` and requiring it to be `Null`) |
| 2026-01-25 21:35:02 | <[exa]> | yeah well you can do `Null <- ...` |
All times are in UTC.