2024-11-01 00:01:19 +0100 | sawilagar | (~sawilagar@user/sawilagar) (Ping timeout: 260 seconds) |
2024-11-01 00:01:30 +0100 | morb | (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) |
2024-11-01 00:04:49 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds) |
2024-11-01 00:05:49 +0100 | morb | (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 252 seconds) |
2024-11-01 00:05:58 +0100 | smtt | (smt@user/smtt) (Quit: WeeChat 4.4.2) |
2024-11-01 00:06:18 +0100 | smtt | (smt@user/smtt) smtt |
2024-11-01 00:15:33 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-01 00:19:53 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds) |
2024-11-01 00:25:19 +0100 | hgolden_ | (~hgolden@static-198-44-129-51.cust.tzulo.com) hgolden |
2024-11-01 00:28:27 +0100 | hgolden__ | (~hgolden@23.162.40.28) (Ping timeout: 276 seconds) |
2024-11-01 00:28:54 +0100 | xff0x | (~xff0x@2405:6580:b080:900:adf3:98f8:7ac2:6549) (Ping timeout: 260 seconds) |
2024-11-01 00:32:47 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-01 00:35:58 +0100 | xff0x | (~xff0x@2405:6580:b080:900:394c:a0ff:7b90:1a8c) |
2024-11-01 00:38:02 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 272 seconds) |
2024-11-01 00:46:06 +0100 | Square2 | (~Square4@user/square) Square |
2024-11-01 00:48:10 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-01 00:49:12 +0100 | Square | (~Square@user/square) (Ping timeout: 252 seconds) |
2024-11-01 00:49:59 +0100 | morb | (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) |
2024-11-01 00:52:56 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 255 seconds) |
2024-11-01 00:54:42 +0100 | morb | (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 252 seconds) |
2024-11-01 01:03:56 +0100 | son0p | (~ff@190.254.147.212) son0p |
2024-11-01 01:13:53 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-01 01:14:40 +0100 | morb | (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) |
2024-11-01 01:14:46 +0100 | acidjnk_new | (~acidjnk@p200300d6e7283f63e05ee1ad1cad2e54.dip0.t-ipconnect.de) (Ping timeout: 272 seconds) |
2024-11-01 01:19:04 +0100 | morb | (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 260 seconds) |
2024-11-01 01:21:21 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
2024-11-01 01:25:21 +0100 | Tuplanolla | (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) (Quit: Leaving.) |
2024-11-01 01:27:08 +0100 | son0p | (~ff@190.254.147.212) (Remote host closed the connection) |
2024-11-01 01:27:36 +0100 | xff0x | (~xff0x@2405:6580:b080:900:394c:a0ff:7b90:1a8c) (Ping timeout: 276 seconds) |
2024-11-01 01:29:07 +0100 | Nixkernal | (~Nixkernal@90.74.198.178.dynamic.cust.swisscom.net) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.) |
2024-11-01 01:29:44 +0100 | son0p | (~ff@190.254.147.212) son0p |
2024-11-01 01:32:09 +0100 | acidjnk_new | (~acidjnk@p200300d6e7283f63a42f1e536c595cb6.dip0.t-ipconnect.de) |
2024-11-01 01:32:25 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-01 01:36:03 +0100 | Square2 | (~Square4@user/square) (Ping timeout: 276 seconds) |
2024-11-01 01:36:09 +0100 | Square | (~Square@user/square) Square |
2024-11-01 01:36:52 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds) |
2024-11-01 01:47:47 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-01 01:47:51 +0100 | sprotte24_ | (~sprotte24@p200300d16f105500d15704183d531f13.dip0.t-ipconnect.de) (Quit: Leaving) |
2024-11-01 01:54:39 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds) |
2024-11-01 01:55:33 +0100 | acidjnk_new | (~acidjnk@p200300d6e7283f63a42f1e536c595cb6.dip0.t-ipconnect.de) (Ping timeout: 276 seconds) |
2024-11-01 01:55:51 +0100 | euleritian | (~euleritia@176.2.142.161) (Remote host closed the connection) |
2024-11-01 01:56:09 +0100 | euleritian | (~euleritia@176.2.142.161) |
2024-11-01 01:59:30 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-01 02:04:15 +0100 | Square | (~Square@user/square) (Ping timeout: 244 seconds) |
2024-11-01 02:04:39 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds) |
2024-11-01 02:07:22 +0100 | <haskellbridge> | <zwro> is (pure@IO . ($!!)) the same as (evaluate . force) ? |
2024-11-01 02:13:07 +0100 | <haskellbridge> | <zwro> * (pure @IO . ($!!)) equivalent to |
2024-11-01 02:13:33 +0100 | xff0x | (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) |
2024-11-01 02:14:32 +0100 | <dolio> | No. |
2024-11-01 02:15:02 +0100 | son0p | (~ff@190.254.147.212) (Remote host closed the connection) |
2024-11-01 02:15:08 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-01 02:15:11 +0100 | <EvanR> | :t force |
2024-11-01 02:15:12 +0100 | <lambdabot> | NFData a => a -> a |
2024-11-01 02:16:00 +0100 | <EvanR> | force evaluates to normal form, $! doesn't |
2024-11-01 02:16:17 +0100 | <dolio> | ($!!) does, but they're still not equivalent. |
2024-11-01 02:16:32 +0100 | <EvanR> | $!! wasn't a typo, dang |
2024-11-01 02:16:50 +0100 | <EvanR> | :t ($!!) |
2024-11-01 02:16:52 +0100 | <lambdabot> | NFData a => (a -> b) -> a -> b |
2024-11-01 02:16:57 +0100 | <int-e> | but the type is all wrong |
2024-11-01 02:17:14 +0100 | <int-e> | pure . <anything> won't force its argment |
2024-11-01 02:18:28 +0100 | morb | (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) |
2024-11-01 02:19:44 +0100 | spew | (~spew@201.141.99.170) (Quit: party time) |
2024-11-01 02:20:01 +0100 | <int-e> | (pure $!!) is still not equivalent though. |
2024-11-01 02:20:08 +0100 | <dolio> | Right. :) |
2024-11-01 02:20:43 +0100 | <int-e> | compare (evaluate undefined :: IO ()) `seq` () and (pure $! undefined :: IO ()) `seq` () |
2024-11-01 02:22:12 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds) |
2024-11-01 02:32:07 +0100 | <EvanR> | > pure $! undefined :: IO () |
2024-11-01 02:32:08 +0100 | <lambdabot> | <IO ()> |
2024-11-01 02:32:25 +0100 | califax | (~califax@user/califx) (Remote host closed the connection) |
2024-11-01 02:32:45 +0100 | <EvanR> | % pure $! undefined :: IO () |
2024-11-01 02:32:45 +0100 | <yahb2> | *** Exception: Prelude.undefined ; CallStack (from HasCallStack): ; undefined, called at <interactive>:27:9 in interactive:Ghci5 |
2024-11-01 02:32:54 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-01 02:32:59 +0100 | <EvanR> | % (pure $! undefined :: IO ()) `seq` () |
2024-11-01 02:32:59 +0100 | <yahb2> | *** Exception: Prelude.undefined ; CallStack (from HasCallStack): ; undefined, called at <interactive>:29:10 in interactive:Ghci5 |
2024-11-01 02:33:12 +0100 | <EvanR> | sus |
2024-11-01 02:37:44 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 272 seconds) |
2024-11-01 02:39:21 +0100 | gmg | (~user@user/gehmehgeh) (Ping timeout: 260 seconds) |
2024-11-01 02:41:32 +0100 | gmg | (~user@user/gehmehgeh) gehmehgeh |
2024-11-01 02:43:19 +0100 | califax | (~califax@user/califx) califx |
2024-11-01 02:48:21 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-01 02:52:40 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
2024-11-01 03:00:07 +0100 | mantraofpie | (~mantraofp@user/mantraofpie) (Remote host closed the connection) |
2024-11-01 03:00:07 +0100 | chiselfuse | (~chiselfus@user/chiselfuse) (Remote host closed the connection) |
2024-11-01 03:00:27 +0100 | mantraofpie | (~mantraofp@user/mantraofpie) mantraofpie |
2024-11-01 03:00:48 +0100 | gmg | (~user@user/gehmehgeh) (Remote host closed the connection) |
2024-11-01 03:00:55 +0100 | chiselfuse | (~chiselfus@user/chiselfuse) chiselfuse |
2024-11-01 03:01:33 +0100 | gmg | (~user@user/gehmehgeh) gehmehgeh |
2024-11-01 03:03:39 +0100 | ChaiTRex | (~ChaiTRex@user/chaitrex) (Remote host closed the connection) |
2024-11-01 03:03:44 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-01 03:04:07 +0100 | ChaiTRex | (~ChaiTRex@user/chaitrex) ChaiTRex |
2024-11-01 03:08:46 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 272 seconds) |
2024-11-01 03:16:55 +0100 | k_hachig_ | (~k_hachig@2607:fea8:351d:ef0:5054:ee1b:c12f:dd7d) k_hachig |
2024-11-01 03:17:15 +0100 | k_hachig_ | k_hachig |
2024-11-01 03:19:06 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-01 03:22:00 +0100 | Natch | (~natch@c-92-34-7-158.bbcust.telenor.se) (Ping timeout: 252 seconds) |
2024-11-01 03:23:57 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds) |
2024-11-01 03:24:58 +0100 | weary-traveler | (~user@user/user363627) user363627 |
2024-11-01 03:34:29 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-01 03:36:43 +0100 | Axman6 | (~Axman6@user/axman6) (Remote host closed the connection) |
2024-11-01 03:36:58 +0100 | Axman6 | (~Axman6@user/axman6) Axman6 |
2024-11-01 03:40:47 +0100 | lol_ | (~lol@2603:3016:1e01:b9c0:c43d:6fb:2607:cd8b) |
2024-11-01 03:41:26 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
2024-11-01 03:44:43 +0100 | jcolanternpenter | (~lol@2603:3016:1e01:b9c0:d0c3:d4d0:7258:5a99) (Ping timeout: 252 seconds) |
2024-11-01 03:52:30 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-01 03:57:18 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
2024-11-01 04:07:53 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-01 04:12:14 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
2024-11-01 04:18:42 +0100 | morb | (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Remote host closed the connection) |
2024-11-01 04:22:46 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-01 04:24:16 +0100 | ljdarj | (~Thunderbi@user/ljdarj) (Ping timeout: 244 seconds) |
2024-11-01 04:27:29 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds) |
2024-11-01 04:32:15 +0100 | Axma54801 | (~Axman6@user/axman6) Axman6 |
2024-11-01 04:33:00 +0100 | Axman6 | (~Axman6@user/axman6) (Ping timeout: 248 seconds) |
2024-11-01 04:36:27 +0100 | morb | (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) |
2024-11-01 04:37:14 +0100 | habib | (~habib@185.195.232.169) (Ping timeout: 260 seconds) |
2024-11-01 04:38:10 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-01 04:38:53 +0100 | Axman6 | (~Axman6@user/axman6) Axman6 |
2024-11-01 04:40:49 +0100 | Axma74595 | (~Axman6@user/axman6) Axman6 |
2024-11-01 04:40:51 +0100 | Axma54801 | (~Axman6@user/axman6) (Ping timeout: 250 seconds) |
2024-11-01 04:41:05 +0100 | morb | (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 255 seconds) |
2024-11-01 04:43:04 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds) |
2024-11-01 04:43:27 +0100 | Axman6 | (~Axman6@user/axman6) (Ping timeout: 250 seconds) |
2024-11-01 04:53:32 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-01 04:56:18 +0100 | alphabitserial | (~alphabits@user/alphabitserial) alphabitserial |
2024-11-01 04:58:21 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
2024-11-01 04:58:21 +0100 | td_ | (~td@i53870906.versanet.de) (Ping timeout: 252 seconds) |
2024-11-01 05:00:02 +0100 | td_ | (~td@i5387091D.versanet.de) |
2024-11-01 05:06:14 +0100 | ChaiTRex | (~ChaiTRex@user/chaitrex) (Remote host closed the connection) |
2024-11-01 05:06:39 +0100 | ChaiTRex | (~ChaiTRex@user/chaitrex) ChaiTRex |
2024-11-01 05:08:55 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-01 05:13:52 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds) |
2024-11-01 05:22:50 +0100 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich |
2024-11-01 05:24:56 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-01 05:29:55 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds) |
2024-11-01 05:40:20 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-01 05:41:58 +0100 | alphabitserial | (~alphabits@user/alphabitserial) (Quit: goodnight!) |
2024-11-01 05:45:39 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds) |
2024-11-01 05:54:08 +0100 | libertyprime | (~libertypr@118-92-73-199.dsl.dyn.ihug.co.nz) libertyprime |
2024-11-01 05:55:41 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-01 05:55:51 +0100 | morb | (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) |
2024-11-01 06:00:24 +0100 | morb | (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 252 seconds) |
2024-11-01 06:00:24 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 272 seconds) |
2024-11-01 06:18:04 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-01 06:23:12 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 272 seconds) |
2024-11-01 06:24:42 +0100 | alp | (~alp@2001:861:e3d6:8f80:b811:e433:6175:d950) (Ping timeout: 252 seconds) |
2024-11-01 06:26:05 +0100 | bliminse | (~bliminse@user/bliminse) (Quit: leaving) |
2024-11-01 06:28:57 +0100 | rvalue- | (~rvalue@user/rvalue) rvalue |
2024-11-01 06:29:22 +0100 | rvalue | (~rvalue@user/rvalue) (Ping timeout: 248 seconds) |
2024-11-01 06:33:36 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-01 06:33:41 +0100 | ezzieyguywuf | (~Unknown@user/ezzieyguywuf) (Ping timeout: 248 seconds) |
2024-11-01 06:34:45 +0100 | rvalue- | rvalue |
2024-11-01 06:35:35 +0100 | Axma74595 | Axman6 |
2024-11-01 06:36:45 +0100 | ezzieyguywuf | (~Unknown@user/ezzieyguywuf) ezzieyguywuf |
2024-11-01 06:38:09 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
2024-11-01 06:41:53 +0100 | bliminse | (~bliminse@user/bliminse) bliminse |
2024-11-01 06:44:46 +0100 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds) |
2024-11-01 06:48:57 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-01 06:50:00 +0100 | k_hachig | (~k_hachig@2607:fea8:351d:ef0:5054:ee1b:c12f:dd7d) (Ping timeout: 276 seconds) |
2024-11-01 06:53:32 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds) |
2024-11-01 06:56:44 +0100 | misterfish | (~misterfis@84.53.85.146) misterfish |
2024-11-01 07:01:45 +0100 | k_hachig_ | (~k_hachig@2607:fea8:351d:ef0:68da:2df0:a70f:fa91) k_hachig |
2024-11-01 07:05:40 +0100 | benkard | (~mulk@pd95146e9.dip0.t-ipconnect.de) mulk |
2024-11-01 07:06:32 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-01 07:07:33 +0100 | mulk | (~mulk@pd95146e9.dip0.t-ipconnect.de) (Ping timeout: 265 seconds) |
2024-11-01 07:07:34 +0100 | benkard | mulk |
2024-11-01 07:07:35 +0100 | poscat | (~poscat@user/poscat) poscat |
2024-11-01 07:07:45 +0100 | poscat0x04 | (~poscat@user/poscat) (Ping timeout: 246 seconds) |
2024-11-01 07:08:19 +0100 | k_hachig_ | (~k_hachig@2607:fea8:351d:ef0:68da:2df0:a70f:fa91) (Ping timeout: 260 seconds) |
2024-11-01 07:11:24 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds) |
2024-11-01 07:16:00 +0100 | tcard_ | (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) (Quit: Leaving) |
2024-11-01 07:21:56 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-01 07:32:21 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
2024-11-01 07:35:09 +0100 | misterfish | (~misterfis@84.53.85.146) (Ping timeout: 260 seconds) |
2024-11-01 07:37:06 +0100 | tcard | (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) |
2024-11-01 07:41:53 +0100 | Natch | (~natch@c-92-34-7-158.bbcust.telenor.se) |
2024-11-01 07:43:17 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-01 07:47:50 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
2024-11-01 07:58:40 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-01 08:00:00 +0100 | caconym | (~caconym@user/caconym) (Quit: bye) |
2024-11-01 08:00:42 +0100 | caconym | (~caconym@user/caconym) caconym |
2024-11-01 08:04:09 +0100 | morb | (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) |
2024-11-01 08:04:29 +0100 | sord937 | (~sord937@gateway/tor-sasl/sord937) sord937 |
2024-11-01 08:05:47 +0100 | JamesMowery43 | (~JamesMowe@ip98-167-207-182.ph.ph.cox.net) (Quit: Ping timeout (120 seconds)) |
2024-11-01 08:08:56 +0100 | morb | (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 265 seconds) |
2024-11-01 08:09:34 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds) |
2024-11-01 08:16:21 +0100 | mulk | (~mulk@pd95146e9.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
2024-11-01 08:20:18 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-01 08:21:47 +0100 | alp | (~alp@2001:861:e3d6:8f80:ad12:d0e9:d071:fba7) |
2024-11-01 08:22:52 +0100 | mulk | (~mulk@pd95146e9.dip0.t-ipconnect.de) mulk |
2024-11-01 08:25:33 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds) |
2024-11-01 08:28:30 +0100 | Sgeo | (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
2024-11-01 08:32:19 +0100 | Miroboru | (~myrvoll@178-164-114.82.3p.ntebredband.no) (Quit: Lost terminal) |
2024-11-01 08:35:40 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-01 08:40:16 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
2024-11-01 08:40:28 +0100 | morb | (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) |
2024-11-01 08:44:57 +0100 | morb | (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 252 seconds) |
2024-11-01 08:44:59 +0100 | Lord_of_Life_ | (~Lord@user/lord-of-life/x-2819915) Lord_of_Life |
2024-11-01 08:46:09 +0100 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 265 seconds) |
2024-11-01 08:47:53 +0100 | Lord_of_Life_ | Lord_of_Life |
2024-11-01 08:49:05 +0100 | tzh | (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz) |
2024-11-01 08:51:04 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-01 08:56:06 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds) |
2024-11-01 08:56:56 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
2024-11-01 09:03:16 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-01 09:08:27 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds) |
2024-11-01 09:09:33 +0100 | weary-traveler | (~user@user/user363627) (Remote host closed the connection) |
2024-11-01 09:15:02 +0100 | lortabac | (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) lortabac |
2024-11-01 09:18:14 +0100 | misterfish | (~misterfis@84.53.85.146) misterfish |
2024-11-01 09:18:37 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-01 09:20:14 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2024-11-01 09:23:42 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 272 seconds) |
2024-11-01 09:25:30 +0100 | Leary | (~Leary@user/Leary/x-0910699) (Remote host closed the connection) |
2024-11-01 09:25:44 +0100 | Leary | (~Leary@user/Leary/x-0910699) Leary |
2024-11-01 09:26:52 +0100 | ljdarj | (~Thunderbi@user/ljdarj) ljdarj |
2024-11-01 09:26:56 +0100 | ljdarj | (~Thunderbi@user/ljdarj) (Client Quit) |
2024-11-01 09:29:37 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
2024-11-01 09:33:37 +0100 | acidjnk_new | (~acidjnk@p200300d6e7283f30213745c1d38acbc7.dip0.t-ipconnect.de) acidjnk |
2024-11-01 09:34:01 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-01 09:39:00 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds) |
2024-11-01 09:40:57 +0100 | CiaoSen | (~Jura@2a05:5800:487:0:ca4b:d6ff:fec1:99da) CiaoSen |
2024-11-01 09:44:31 +0100 | k_hachig_ | (~k_hachig@2607:fea8:351d:ef0:901a:fefb:e87f:78b3) k_hachig |
2024-11-01 09:49:22 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-01 09:50:12 +0100 | morb | (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) |
2024-11-01 09:51:53 +0100 | k_hachig_ | (~k_hachig@2607:fea8:351d:ef0:901a:fefb:e87f:78b3) (Ping timeout: 265 seconds) |
2024-11-01 09:54:34 +0100 | morb | (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 260 seconds) |
2024-11-01 09:56:19 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds) |
2024-11-01 10:00:17 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-01 10:01:27 +0100 | troydm | (~troydm@user/troydm) (Quit: What is Hope? That all of your wishes and all of your dreams come true? To turn back time because things were not supposed to happen like that (C) Rau Le Creuset) |
2024-11-01 10:08:33 +0100 | Miroboru | (~myrvoll@178-164-114.82.3p.ntebredband.no) Miroboru |
2024-11-01 10:16:06 +0100 | ash3en | (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) ash3en |
2024-11-01 10:22:16 +0100 | Square2 | (~Square4@user/square) Square |
2024-11-01 10:27:16 +0100 | <tomsmeding> | my experience with this stuff is that IO seems to be strict in all your tests, but it fails if you actually want to use that for code correctness |
2024-11-01 10:27:19 +0100 | <tomsmeding> | so use evaluate and be safe |
2024-11-01 10:34:05 +0100 | <c_wraith> | evaluate isn't magic. the documentation explains what does and why. |
2024-11-01 10:35:43 +0100 | <tomsmeding> | right. In practice, though, not using `evaluate` comes to bite me not in the presence of exceptions but when benchmarking |
2024-11-01 10:36:10 +0100 | <tomsmeding> | if you want to benchmark an IO operation and are doing the timing manually for some reason, please, use `evaluate`. Using `return $! _` or something similar _will not work properly_ |
2024-11-01 10:36:15 +0100 | <tomsmeding> | it will work sometimes |
2024-11-01 10:49:12 +0100 | xff0x | (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 276 seconds) |
2024-11-01 10:59:52 +0100 | driib318 | (~driib@vmi931078.contaboserver.net) (Quit: The Lounge - https://thelounge.chat) |
2024-11-01 11:00:32 +0100 | driib318 | (~driib@vmi931078.contaboserver.net) driib |
2024-11-01 11:09:52 +0100 | libertyprime | (~libertypr@118-92-73-199.dsl.dyn.ihug.co.nz) (Ping timeout: 252 seconds) |
2024-11-01 11:12:00 +0100 | Natch | (~natch@c-92-34-7-158.bbcust.telenor.se) (Ping timeout: 272 seconds) |
2024-11-01 11:14:14 +0100 | zmt00 | (~zmt00@user/zmt00) zmt00 |
2024-11-01 11:15:22 +0100 | zmt01 | (~zmt00@user/zmt00) zmt00 |
2024-11-01 11:16:18 +0100 | swamp_ | (~zmt00@user/zmt00) (Ping timeout: 248 seconds) |
2024-11-01 11:16:19 +0100 | lxsameer | (~lxsameer@Serene/lxsameer) lxsameer |
2024-11-01 11:16:45 +0100 | ubert | (~Thunderbi@178.115.51.39.wireless.dyn.drei.com) (Ping timeout: 252 seconds) |
2024-11-01 11:18:30 +0100 | morb | (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) |
2024-11-01 11:19:45 +0100 | zmt00 | (~zmt00@user/zmt00) (Ping timeout: 276 seconds) |
2024-11-01 11:21:49 +0100 | ash3en | (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Quit: ash3en) |
2024-11-01 11:22:06 +0100 | ash3en | (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) ash3en |
2024-11-01 11:22:45 +0100 | absence | (torgeihe@hildring.pvv.ntnu.no) absence |
2024-11-01 11:25:15 +0100 | <absence> | Is it possible to pass an implicit parameter explicitly, without creating a binding in the calling scope? |
2024-11-01 11:25:37 +0100 | <mauke> | why without creating a binding? |
2024-11-01 11:25:38 +0100 | <tomsmeding> | you can create the binding locally |
2024-11-01 11:25:46 +0100 | <tomsmeding> | `let ?param = _ in f x y z` |
2024-11-01 11:26:19 +0100 | morb | (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 260 seconds) |
2024-11-01 11:26:55 +0100 | <absence> | mauke: Less clutter, and clearer intent. |
2024-11-01 11:27:12 +0100 | <tomsmeding> | using a let-binding is the only way to set implicit parameters |
2024-11-01 11:27:26 +0100 | <absence> | I see, thanks! |
2024-11-01 11:32:18 +0100 | chele | (~chele@user/chele) chele |
2024-11-01 11:32:58 +0100 | misterfish | (~misterfis@84.53.85.146) (Ping timeout: 252 seconds) |
2024-11-01 11:50:41 +0100 | k_hachig_ | (~k_hachig@2607:fea8:351d:ef0:901a:fefb:e87f:78b3) k_hachig |
2024-11-01 11:56:29 +0100 | k_hachig_ | (~k_hachig@2607:fea8:351d:ef0:901a:fefb:e87f:78b3) (Ping timeout: 260 seconds) |
2024-11-01 12:01:23 +0100 | ash3en | (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Quit: ash3en) |
2024-11-01 12:12:28 +0100 | sprotte24 | (~sprotte24@p200300d16f13bb00e9ebafc1049584f7.dip0.t-ipconnect.de) |
2024-11-01 12:15:11 +0100 | <sprotte24> | Hi |
2024-11-01 12:15:21 +0100 | <Rembane> | Hi sprotte24 ! |
2024-11-01 12:15:35 +0100 | <sprotte24> | I want to write a Haskell program |
2024-11-01 12:15:47 +0100 | <sprotte24> | Hi, Rembane |
2024-11-01 12:15:51 +0100 | <mauke> | what's it do? |
2024-11-01 12:16:19 +0100 | <Hecate> | rembaaaaaaane |
2024-11-01 12:16:25 +0100 | <Hecate> | what's uuuuup |
2024-11-01 12:16:28 +0100 | <sprotte24> | The Haskell programm has to compute the nearest Power of two for a given n. |
2024-11-01 12:16:34 +0100 | <Hecate> | sprotte24: nice |
2024-11-01 12:16:37 +0100 | <sprotte24> | Example: |
2024-11-01 12:16:42 +0100 | <mauke> | oh, is this homework? |
2024-11-01 12:17:21 +0100 | <sprotte24> | n= 9 nearest Power is 16 |
2024-11-01 12:17:35 +0100 | <mauke> | I'd say it's 8 |
2024-11-01 12:17:41 +0100 | <sprotte24> | Yes. kome work |
2024-11-01 12:18:03 +0100 | <Hecate> | mauke: maybe they have to round to the highest power of 2 |
2024-11-01 12:18:15 +0100 | <mauke> | yeah, that actually makes things easier |
2024-11-01 12:18:22 +0100 | <Rembane> | Hecate: Suuuuuuuuuuuuuuuuuup! :D |
2024-11-01 12:18:23 +0100 | <sprotte24> | The restriction: using binary is forbidden. |
2024-11-01 12:18:33 +0100 | <mauke> | define "using binary" |
2024-11-01 12:18:38 +0100 | <mauke> | like bit shifts? |
2024-11-01 12:18:46 +0100 | <Hecate> | damnit I was about to suggest that hahahaha |
2024-11-01 12:19:23 +0100 | <Hecate> | Rembane: I'm not doing too bad! Still at Chalmers? |
2024-11-01 12:20:15 +0100 | <sprotte24> | ok. if I use binary number, the Powers of 2 have the format 1, 10 100 1000 and so on |
2024-11-01 12:20:20 +0100 | <mauke> | :t head . dropWhile (< ?n) . iterate (2 *) $ 1 |
2024-11-01 12:20:21 +0100 | <lambdabot> | (Ord c, ?n::c, Num c) => c |
2024-11-01 12:20:29 +0100 | <Rembane> | Hecate: Still at Chalmers! I'll be done any day now. :D |
2024-11-01 12:21:21 +0100 | <sprotte24> | I am not allowed to use a list |
2024-11-01 12:21:33 +0100 | <Hecate> | Rembane: lovely. :) Say hi to Andreas Abel from me if you meet him |
2024-11-01 12:21:45 +0100 | <Rembane> | Hecate: Sure thing! :D |
2024-11-01 12:22:40 +0100 | morb | (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) |
2024-11-01 12:22:41 +0100 | <sprotte24> | I have to test whether nearestPowerOfTwo n >= 2^k |
2024-11-01 12:23:36 +0100 | misterfish | (~misterfis@31-161-39-137.biz.kpn.net) misterfish |
2024-11-01 12:24:01 +0100 | <sprotte24> | One Problem: my input parameter is n and I have to increment k until the condition is satisfied |
2024-11-01 12:24:24 +0100 | <mauke> | ah, the slow way |
2024-11-01 12:24:30 +0100 | weary-traveler | (~user@user/user363627) user363627 |
2024-11-01 12:24:42 +0100 | <mauke> | where are you stuck? |
2024-11-01 12:24:51 +0100 | <sprotte24> | I suppose I need a local variaable for k? |
2024-11-01 12:25:44 +0100 | <sprotte24> | I plan to build an recursive solution? |
2024-11-01 12:26:15 +0100 | <mauke> | yeah, if you want to emulate a loop in functional code, it's always going to be a recursive function |
2024-11-01 12:26:32 +0100 | <mauke> | (or a data structure like a list, but you're not allowed to do that, apparently) |
2024-11-01 12:26:33 +0100 | lortabac | (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Ping timeout: 265 seconds) |
2024-11-01 12:26:55 +0100 | <mauke> | any "loop variable" that changes in the loop is going to become a function parameter |
2024-11-01 12:27:34 +0100 | morb | (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 260 seconds) |
2024-11-01 12:28:06 +0100 | <sprotte24> | In my recursive loop I have to Test an to increment the Power index. |
2024-11-01 12:28:49 +0100 | <sprotte24> | I had a solution, but that solution used 2 parameters n and k. |
2024-11-01 12:29:05 +0100 | <sprotte24> | I show it, one moment please |
2024-11-01 12:30:05 +0100 | <Hecate> | sprotte24: don't hesitate to use play.haskell.org ! |
2024-11-01 12:31:08 +0100 | <sprotte24> | -- 3.3 next power2 |
2024-11-01 12:31:08 +0100 | <sprotte24> | roundUpToPower2 :: Int -> Int -> Int |
2024-11-01 12:31:08 +0100 | <sprotte24> | roundUpToPower2 n k = if n == 1 then 1 |
2024-11-01 12:31:08 +0100 | <sprotte24> | else if (nthPowerTwo k) >= n then (nthPowerTwo k) |
2024-11-01 12:31:08 +0100 | <sprotte24> | else roundUpToPower2 n (k + 1) |
2024-11-01 12:31:08 +0100 | <sprotte24> | roundUpToPowerTwo :: Int -> Int |
2024-11-01 12:31:10 +0100 | <sprotte24> | roundUpToPowerTwo n = roundUpToPower2 n 1 |
2024-11-01 12:31:43 +0100 | <sprotte24> | -- 3.1 nthPowerTwo |
2024-11-01 12:31:43 +0100 | <sprotte24> | nthPowerTwo :: Int -> Int |
2024-11-01 12:31:43 +0100 | <sprotte24> | nthPowerTwo n = if n==0 then 1 else 2*nthPowerTwo(n-1) |
2024-11-01 12:31:50 +0100 | <mauke> | plase don't paste into IRC |
2024-11-01 12:31:58 +0100 | <mauke> | use a paste site like https://paste.tomsmeding.com to show code |
2024-11-01 12:32:24 +0100 | <sprotte24> | ok |
2024-11-01 12:33:05 +0100 | <mauke> | (and give us the link) |
2024-11-01 12:34:23 +0100 | <mauke> | anyway, that looks like it would work |
2024-11-01 12:34:55 +0100 | <mauke> | nthPowerTwo k could be replaced by 2 ^ k |
2024-11-01 12:36:43 +0100 | <sprotte24> | We should not use the power function directly |
2024-11-01 12:37:07 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
2024-11-01 12:37:47 +0100 | <sprotte24> | or I use a function double |
2024-11-01 12:40:17 +0100 | <sprotte24> | Two ways: double the base 2 (1 2 4 8 ...) or increment the exponent of 2 |
2024-11-01 12:40:22 +0100 | rvalue- | (~rvalue@user/rvalue) rvalue |
2024-11-01 12:40:47 +0100 | rvalue | (~rvalue@user/rvalue) (Ping timeout: 244 seconds) |
2024-11-01 12:43:24 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2024-11-01 12:47:32 +0100 | <sprotte24> | I have to leave home in 5 minutes and could contine in the later afternoon with my problem. |
2024-11-01 12:48:16 +0100 | rvalue- | rvalue |
2024-11-01 12:48:25 +0100 | <mauke> | did you have a question? |
2024-11-01 12:49:17 +0100 | <sprotte24> | my problem was the nearest power of 2 |
2024-11-01 12:51:03 +0100 | Square | (~Square@user/square) Square |
2024-11-01 12:51:58 +0100 | CatGPT | catties |
2024-11-01 12:52:08 +0100 | <sprotte24> | bye |
2024-11-01 12:52:14 +0100 | sprotte24 | (~sprotte24@p200300d16f13bb00e9ebafc1049584f7.dip0.t-ipconnect.de) (Quit: Leaving) |
2024-11-01 12:55:18 +0100 | Square2 | (~Square4@user/square) (Ping timeout: 276 seconds) |
2024-11-01 12:56:49 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Read error: Connection reset by peer) |
2024-11-01 12:57:37 +0100 | morb | (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) |
2024-11-01 12:58:53 +0100 | weary-traveler | (~user@user/user363627) (Remote host closed the connection) |
2024-11-01 13:02:04 +0100 | morb | (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 252 seconds) |
2024-11-01 13:02:29 +0100 | CiaoSen | (~Jura@2a05:5800:487:0:ca4b:d6ff:fec1:99da) (Ping timeout: 244 seconds) |
2024-11-01 13:02:37 +0100 | morb | (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) |
2024-11-01 13:05:52 +0100 | turlando | (~turlando@user/turlando) () |
2024-11-01 13:06:03 +0100 | <Square> | If you want to extend your build environemnt with a local package repository, what's your choices? |
2024-11-01 13:06:18 +0100 | <Square> | local as organization wide. |
2024-11-01 13:07:13 +0100 | morb | (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 248 seconds) |
2024-11-01 13:09:50 +0100 | <Square> | I see cabal has means to configure more repositories. But what software does it use? |
2024-11-01 13:12:04 +0100 | lortabac | (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) lortabac |
2024-11-01 13:12:25 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
2024-11-01 13:14:58 +0100 | xff0x | (~xff0x@2405:6580:b080:900:26bf:a0f9:b4d:93d8) |
2024-11-01 13:29:49 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Read error: Connection reset by peer) |
2024-11-01 13:38:37 +0100 | sawilagar | (~sawilagar@user/sawilagar) sawilagar |
2024-11-01 13:45:25 +0100 | <haskellbridge> | <zwro> i'm still having trouble understanding the difference between (evaluate . force) and (pure @IO . ($!!)) |
2024-11-01 13:51:19 +0100 | <mauke> | same, but I think the semantics of the latter depend on how IO is implemented |
2024-11-01 13:51:26 +0100 | euleritian | (~euleritia@176.2.142.161) (Ping timeout: 255 seconds) |
2024-11-01 13:53:29 +0100 | <mauke> | > evalState (do error "bang"; pure 2) () |
2024-11-01 13:53:31 +0100 | <lambdabot> | 2 |
2024-11-01 13:54:16 +0100 | morb | (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) |
2024-11-01 13:55:39 +0100 | euleritian | (~euleritia@176.2.67.66) |
2024-11-01 13:57:35 +0100 | <tomsmeding> | Square: https://cabal.readthedocs.io/en/3.4/cabal-project.html#cfg-field-active-repositories may be relevant, but I've never used it |
2024-11-01 13:58:16 +0100 | <tomsmeding> | oh there is more text in the latest version https://cabal.readthedocs.io/en/stable/cabal-project-description-file.html#cfg-field-active-reposi… |
2024-11-01 13:59:00 +0100 | morb | (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 252 seconds) |
2024-11-01 14:00:47 +0100 | <Square> | tomsmeding, yeah i found those settings too. But what software do you use to run a repo? A company hackage if you will. |
2024-11-01 14:01:37 +0100 | <tomsmeding> | Square: you might want to steal stuff from how head.hackage is implemented https://ghc.gitlab.haskell.org/head.hackage/ |
2024-11-01 14:05:01 +0100 | <Leary> | Square: https://hackage.haskell.org/ says "Hackage-server is on github [...]. Developer documentation is on in the github README, includig a quick guide to running your own server instance, and mirroring the central server." |
2024-11-01 14:05:20 +0100 | <Square> | Gotcha. Thanks |
2024-11-01 14:06:27 +0100 | <tomsmeding> | (it's nice how that head.hackage page shows how to add a 'repository' stanza to cabal.project.local, but then the cabal documentation is completely silent about such a stanza existing.) |
2024-11-01 14:08:00 +0100 | Guest77 | (~Guest77@2402:a00:401:f093:da9e:f3ff:fe4b:8a8b) |
2024-11-01 14:12:25 +0100 | <mauke> | are codes like "Cabal-4345" documented anywhere? |
2024-11-01 14:15:44 +0100 | Xe | (~cadey@perl/impostor/xe) (Quit: WeeChat 4.4.2) |
2024-11-01 14:15:53 +0100 | <haskellbridge> | <zwro> mauke: that makes sense. i suspect GHC might optimize to the same core implementation but i need to test it |
2024-11-01 14:18:05 +0100 | Guest77 | (~Guest77@2402:a00:401:f093:da9e:f3ff:fe4b:8a8b) (Quit: Client closed) |
2024-11-01 14:18:45 +0100 | <haskellbridge> | <zwro> benchmarks for trivial cases show no discernible difference |
2024-11-01 14:18:48 +0100 | mulk | (~mulk@pd95146e9.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
2024-11-01 14:18:50 +0100 | <merijn> | mauke: They should be, that's the point ;) |
2024-11-01 14:19:16 +0100 | <merijn> | Square: It uses "hackage" |
2024-11-01 14:19:46 +0100 | <merijn> | Square: You can set up your own internal Hackage and Hoogle and have cabal fallback to the regular public one (if desired) |
2024-11-01 14:20:10 +0100 | slac68956 | (~slack1256@179.60.70.224) slack1256 |
2024-11-01 14:21:15 +0100 | mulk | (~mulk@pd95146e9.dip0.t-ipconnect.de) mulk |
2024-11-01 14:21:30 +0100 | <Square> | merijn, yeah. Seems to be it. I was thinking there were different options. But excellent if hackage availble. |
2024-11-01 14:21:40 +0100 | Xe | (~cadey@perl/impostor/xe) Xe |
2024-11-01 14:21:41 +0100 | <Square> | is available* |
2024-11-01 14:22:03 +0100 | slack1256 | (~slack1256@2803:c600:5111:8696:d97c:cbc8:139:bdb3) (Ping timeout: 244 seconds) |
2024-11-01 14:23:10 +0100 | <merijn> | Square: I think it can use "dumb" disk repos too so you could have a shared network filesystem or something and use that |
2024-11-01 14:23:30 +0100 | <merijn> | but if you run hackage you get the benefits of hyperlinked browsable docs for internal libs for free |
2024-11-01 14:23:57 +0100 | Square2 | (~Square4@user/square) Square |
2024-11-01 14:24:02 +0100 | <mauke> | merijn: I'll take that as a "no" |
2024-11-01 14:24:17 +0100 | <mauke> | nothing in the manual, nothing on the website, nothing in a google search |
2024-11-01 14:24:29 +0100 | <merijn> | mauke: Hecate was leading something on error codes in GHC |
2024-11-01 14:24:47 +0100 | <merijn> | I'm assuming cabal codes are extension of that |
2024-11-01 14:25:01 +0100 | <yushyin> | the error message index website? yes, but it is incomplete |
2024-11-01 14:25:04 +0100 | <merijn> | mauke: https://discourse.haskell.org/t/announcing-the-haskell-error-index/5195 |
2024-11-01 14:25:12 +0100 | <yushyin> | https://errors.haskell.org/cabal/ |
2024-11-01 14:26:11 +0100 | <mauke> | nothing there either |
2024-11-01 14:26:27 +0100 | <merijn> | I see some CABAL-xxx codes there |
2024-11-01 14:26:43 +0100 | <mauke> | hah: "So far, 1 Cabal errors and warnings are documented here." |
2024-11-01 14:26:48 +0100 | <mauke> | 1 whole errors |
2024-11-01 14:26:48 +0100 | <merijn> | nice :) |
2024-11-01 14:27:20 +0100 | <merijn> | mauke: Work in progress ;) |
2024-11-01 14:27:32 +0100 | <merijn> | Step one is *having* unique codes, step two is documenting them ;) |
2024-11-01 14:30:08 +0100 | <mauke> | how do I tell cabal what C compiler to use? |
2024-11-01 14:30:33 +0100 | <merijn> | mauke: You can't tell cabal, you need to tell GHC |
2024-11-01 14:30:47 +0100 | <merijn> | mauke: Cabal just invokes GHC on C files, which determines what C compiler to call |
2024-11-01 14:30:58 +0100 | <merijn> | I think there was either a config file or GHC flag to tell it to use something else |
2024-11-01 14:31:01 +0100 | <mauke> | no, cabal is doing something stupid |
2024-11-01 14:31:05 +0100 | <mauke> | and I can't figure out what |
2024-11-01 14:31:13 +0100 | <yushyin> | 4345 is the missing deps on foreign libs error, no? this is one of the more murky errors |
2024-11-01 14:31:35 +0100 | <merijn> | mauke: Error? And I assume you mean actual C and not secretly C++? |
2024-11-01 14:31:46 +0100 | <mauke> | Missing (or bad) header file: wcalc.h |
2024-11-01 14:32:01 +0100 | <mauke> | the fun part is that it only happens on 'cabal install'. 'cabal build' is fine with it |
2024-11-01 14:32:09 +0100 | <merijn> | mauke: Ah, that sounds more like wrong include dirs than wrong compiler, no? |
2024-11-01 14:32:20 +0100 | <mauke> | oh, the compiler is fine |
2024-11-01 14:32:33 +0100 | <merijn> | mauke: Is the cabal file public? |
2024-11-01 14:32:44 +0100 | <mauke> | but I can't get it to tell me wtf it's doing, so my plan is to configure a fake compiler that just dumps what's going on |
2024-11-01 14:32:52 +0100 | <merijn> | ooh |
2024-11-01 14:32:57 +0100 | <merijn> | I think I know :D |
2024-11-01 14:33:05 +0100 | <merijn> | But lemme check the cabal file first |
2024-11-01 14:33:24 +0100 | k_hachig_ | (~k_hachig@2607:fea8:351d:ef0:901a:fefb:e87f:78b3) k_hachig |
2024-11-01 14:33:48 +0100 | <mauke> | merijn: https://paste.tomsmeding.com/uNvsLOb0 |
2024-11-01 14:33:53 +0100 | <merijn> | mauke: First clue is: "build works, install fails". install *always* builds an sdist *first* and THEN installs from that. To protect against broken sdists |
2024-11-01 14:34:05 +0100 | <merijn> | mauke: So most likely your sdist is fucked and not including the header |
2024-11-01 14:34:29 +0100 | <mauke> | I wish it would stop building an sdist. all I want is an executable |
2024-11-01 14:35:06 +0100 | <merijn> | mauke: Yeah, I think the problem is that `includes` doesn't include your headers in the sdist |
2024-11-01 14:35:21 +0100 | <merijn> | mauke: My C shipping projects explicitly list headers under `extra-source-files` |
2024-11-01 14:36:05 +0100 | <merijn> | mauke: https://github.com/merijn/Belewitte/blob/ed95965077ee0a55c9a206b75445ddf93723916b/benchmark-analys… |
2024-11-01 14:36:28 +0100 | <merijn> | C-sources get included, `includes` does not (since it might contain generated/system/whatever stuff) |
2024-11-01 14:39:24 +0100 | k_hachig_ | (~k_hachig@2607:fea8:351d:ef0:901a:fefb:e87f:78b3) (Ping timeout: 260 seconds) |
2024-11-01 14:40:26 +0100 | <mauke> | merijn: thank you! |
2024-11-01 14:43:34 +0100 | <mauke> | wow, this is stupid. extra-source-files (where I specify my headers) can only be set at the global level, but it supports wildcards. c-sources (where I specify my c files) can only be set at the stanza level, but wildcards are not supported. |
2024-11-01 14:43:34 +0100 | L29Ah | (~L29Ah@wikipedia/L29Ah) () |
2024-11-01 14:44:42 +0100 | <mauke> | so for a simple directory with C code, I have to set 4 separate cabal fields, 3 of them in a stanza and 1 at package level |
2024-11-01 14:47:41 +0100 | <mauke> | argh, and in the end I don't even get the executable I wanted :-( |
2024-11-01 14:47:43 +0100 | <mauke> | it's just a symlink |
2024-11-01 14:47:59 +0100 | ghoulpine | vulpine |
2024-11-01 14:48:14 +0100 | <mauke> | is there a way to make cabal install a real exectuable file instead of just a link? |
2024-11-01 14:49:03 +0100 | <mauke> | ... this whole system doesn't seem to be designed for publishing applications |
2024-11-01 14:51:46 +0100 | <merijn> | mauke: yes |
2024-11-01 14:51:56 +0100 | <merijn> | There's a flag, forget the exact name |
2024-11-01 14:53:15 +0100 | <merijn> | mauke: install-method |
2024-11-01 14:53:28 +0100 | <merijn> | has a copy or symlink config |
2024-11-01 14:54:10 +0100 | <merijn> | mauke: tbf, it is in fact, not designed for publishing applications. It's designed to be scripted/used by systems that build/publish applications :p |
2024-11-01 14:55:06 +0100 | <merijn> | mauke: These are the config options you want: https://github.com/merijn/dotfiles/blob/0ea230e8ebf303749d547692cbb139f1399f1cd2/install/cabal/con… |
2024-11-01 14:55:16 +0100 | <mauke> | ah, I see it. command-line only |
2024-11-01 14:55:18 +0100 | <mauke> | merijn++ |
2024-11-01 14:56:17 +0100 | <merijn> | mauke: All the stuff you want for packaging is there, but the defaults are mostly set up for interactive development |
2024-11-01 14:57:05 +0100 | <merijn> | Under the assumption that anyone who cares about packaging/publishing will write a script with the right config/flags once and use that |
2024-11-01 14:58:10 +0100 | <mauke> | merijn: do you also happen to know why executable stripping doesn't work? |
2024-11-01 14:58:51 +0100 | <merijn> | It should? |
2024-11-01 14:58:59 +0100 | <mauke> | the documentation says executable-stripping: True is the default, but tmp/preflex: ELF 64-bit LSB executable, x86-64, [...] with debug_info, not stripped |
2024-11-01 14:59:41 +0100 | <merijn> | hmm |
2024-11-01 15:00:31 +0100 | <mauke> | works in cabal.project, though |
2024-11-01 15:00:59 +0100 | <merijn> | did you just enable it? |
2024-11-01 15:01:34 +0100 | <merijn> | mauke: I don't think it will rebuild previously installs after you change the global config (whereas changes to cabal.project *WILL* force a rebuild) |
2024-11-01 15:01:39 +0100 | <merijn> | not sure about that, though |
2024-11-01 15:02:05 +0100 | <merijn> | mauke: Also, if you're building executables for publishing: is `split-sections` on? |
2024-11-01 15:02:39 +0100 | <merijn> | That will *massively* shrink your executable size (although it will mean having to rebuild the world :p) |
2024-11-01 15:02:50 +0100 | <mauke> | if I delete tmp, comment out 'exectuable-stripping: True' in cabal.project, and rerun 'cabal install', I get a non-stripped file |
2024-11-01 15:04:38 +0100 | <merijn> | split-sections causes GHC to put every top level export into it's own linker section, so that any moderately modern linker can include only the (transitive) symbols you actually use. Instead of linking every transitive dependency even if you don't use them |
2024-11-01 15:05:03 +0100 | <mauke> | wasn't on before. rebuilding world now ... :-) |
2024-11-01 15:05:18 +0100 | <merijn> | So it can (theoretically) lob off entire sections of your dependency graph if you use only a fraction of libraries with big dependency lists |
2024-11-01 15:06:03 +0100 | <merijn> | I think I'd something like a 20x reduction in final binary size |
2024-11-01 15:06:53 +0100 | <mauke> | ah, building 'encoding' now. that always takes forever |
2024-11-01 15:07:09 +0100 | <tomsmeding> | mauke: "I just want an executable" `cp $(cabal list-bin yourexename) wherever` |
2024-11-01 15:07:12 +0100 | <merijn> | anyway, gotta get back to work |
2024-11-01 15:07:26 +0100 | <merijn> | tomsmeding: I mean, --install-method=copy --install-dir=foo does the same |
2024-11-01 15:07:36 +0100 | <tomsmeding> | except it goes through sdist |
2024-11-01 15:07:49 +0100 | <merijn> | tomsmeding: Which means it detects broken cabal configs ;) |
2024-11-01 15:07:54 +0100 | <tomsmeding> | (not saying that's a bad thing) |
2024-11-01 15:07:55 +0100 | <merijn> | Which is good TM |
2024-11-01 15:07:58 +0100 | <tomsmeding> | right |
2024-11-01 15:08:50 +0100 | <mauke> | "broken" is debatable |
2024-11-01 15:09:24 +0100 | <mauke> | given that it works fine as long as you don't sdist, which I have no intention of ever doing |
2024-11-01 15:11:49 +0100 | <mauke> | final tally: |
2024-11-01 15:12:04 +0100 | <mauke> | cabal install with default options: 25M |
2024-11-01 15:12:20 +0100 | <merijn> | mauke: I also have this neat lazy people trick for testing "in-development" executables https://github.com/NLeSC-AAA2/etherpacket/blob/master/EtherPacket |
2024-11-01 15:12:31 +0100 | <mauke> | cabal install with 'executable-stripping: True' in project file: 16M |
2024-11-01 15:12:42 +0100 | <mauke> | cabal install with split sections: 18M |
2024-11-01 15:12:54 +0100 | <mauke> | cabal install with split sections and explicit executable-stripping: 11M |
2024-11-01 15:13:10 +0100 | <merijn> | I dunno if adding library-stripping also work? |
2024-11-01 15:13:51 +0100 | <mauke> | wow, that scriptpath thing looks ... overengineered |
2024-11-01 15:14:44 +0100 | <merijn> | mauke: It's mostly "I was running on some stupidly broken machines" engineered |
2024-11-01 15:14:50 +0100 | <mauke> | ah, it's just a realpath reimplementation |
2024-11-01 15:14:54 +0100 | <mauke> | I see |
2024-11-01 15:14:55 +0100 | <merijn> | basically |
2024-11-01 15:15:17 +0100 | <merijn> | You can ignore that part on sane machine ;) |
2024-11-01 15:15:40 +0100 | <mauke> | "running on stupid machines" is very valid |
2024-11-01 15:16:23 +0100 | <mauke> | right now I'm using docker "backwards" in that I have a custom build container just for creating CentOS 7 binaries |
2024-11-01 15:16:32 +0100 | <mauke> | which I then copy out to the host system |
2024-11-01 15:17:12 +0100 | <merijn> | Using docker the "right" way is for people who don't know how to build/package their own stuff :p |
2024-11-01 15:19:29 +0100 | vgtw | (~vgtw@user/vgtw) (Ping timeout: 248 seconds) |
2024-11-01 15:19:39 +0100 | <merijn> | Docker makes sense when you remember that lots of ecosystems (looking at you npm, typescript, python, etc.) don't have a sane boundary to distinguish "necessary at build/packaging" from "necessary at runtime". And while I share your annoyance of "I need to set 4 fields in .cabal to packabe my headers" is annoying. I find the clear distinction between "what is sdist, what is build time, and what is |
2024-11-01 15:19:45 +0100 | <merijn> | runtime" to be one of the things preserving my sanity |
2024-11-01 15:20:00 +0100 | L29Ah | (~L29Ah@wikipedia/L29Ah) L29Ah |
2024-11-01 15:21:46 +0100 | <mauke> | I don't have generated files, so for me it's all "sdist" in a sense |
2024-11-01 15:22:44 +0100 | tired | (~tired@user/tired) tired |
2024-11-01 15:22:46 +0100 | <mauke> | technically I could probably just delete the header files because I'm pretty sure ghc doesn't care anyway |
2024-11-01 15:23:23 +0100 | <mauke> | oh hello, executable stripping works if I turn it on in ~/.cabal/config |
2024-11-01 15:24:06 +0100 | <merijn> | \o/ |
2024-11-01 15:24:36 +0100 | <merijn> | mauke: GHC can automatically check whether your declared types match the headers |
2024-11-01 15:24:45 +0100 | <merijn> | Which can be helpful for your sanity |
2024-11-01 15:25:03 +0100 | <merijn> | Not to mention GHC being able to use CPP macros as values |
2024-11-01 15:25:55 +0100 | <mauke> | define "can" |
2024-11-01 15:26:44 +0100 | k_hachig_ | (~k_hachig@2607:fea8:351d:ef0:901a:fefb:e87f:78b3) k_hachig |
2024-11-01 15:27:29 +0100 | <mauke> | tomsmeding: the cp $(cabal list-bin yourexename) wherever method gives me a non-stripped executable |
2024-11-01 15:27:48 +0100 | <merijn> | mauke: "can" for the type checking, you mean? |
2024-11-01 15:28:10 +0100 | <mauke> | er, yes |
2024-11-01 15:28:11 +0100 | vgtw | (~vgtw@user/vgtw) vgtw |
2024-11-01 15:29:07 +0100 | <merijn> | mauke: It's been awhile, but iirc if you mention the header file on the foreign import it will check that the Haskell type you declare for it corresponds to the C type |
2024-11-01 15:29:10 +0100 | <merijn> | mauke: https://github.com/merijn/Belewitte/blob/ed95965077ee0a55c9a206b75445ddf93723916b/benchmark-analys… |
2024-11-01 15:29:22 +0100 | Sgeo | (~Sgeo@user/sgeo) Sgeo |
2024-11-01 15:29:33 +0100 | <merijn> | (modulo marshalling as defined in the FFI part of the standard) |
2024-11-01 15:29:50 +0100 | <mauke> | for ccall? are you sure? |
2024-11-01 15:30:05 +0100 | <mauke> | I know capi does weird things |
2024-11-01 15:30:37 +0100 | <merijn> | I thought it did |
2024-11-01 15:30:54 +0100 | <merijn> | capi is very different, since it generates stubs instead of calling directly from Haskell |
2024-11-01 15:31:16 +0100 | <merijn> | mauke: capi is nice for some things, though. Since it lets you foreign import CPP macros as values: https://github.com/merijn/Belewitte/blob/ed95965077ee0a55c9a206b75445ddf93723916b/benchmark-analys… |
2024-11-01 15:31:19 +0100 | k_hachig_ | (~k_hachig@2607:fea8:351d:ef0:901a:fefb:e87f:78b3) (Ping timeout: 260 seconds) |
2024-11-01 15:31:20 +0100 | Square2 | (~Square4@user/square) (Ping timeout: 255 seconds) |
2024-11-01 15:32:11 +0100 | <mauke> | I thought capi was what you were talking about when you mentioned CPP macros and checking against headers |
2024-11-01 15:32:13 +0100 | <merijn> | I'd prefer ccall where possible, but capi is a huge win. I think capi also lets you reference Ptr to variables directly (as opposed to only functions) |
2024-11-01 15:32:37 +0100 | <mauke> | importing addresses of variables is in the base FFI |
2024-11-01 15:32:42 +0100 | <merijn> | mauke: CPP macros is capi only (but you can use both at the same time). The type checking I *thought* it also did for ccall |
2024-11-01 15:33:09 +0100 | <merijn> | (IFF you declare the header at the import) but that might be a lie |
2024-11-01 15:33:18 +0100 | <merijn> | can't check right now, since I have no GHC install on this machine |