Logs on 2022-06-15 (liberachat/#haskell)
| 00:02:53 | → | lambda451[m] joins (~lambda451@2001:470:69fc:105::2:1097) |
| 00:03:12 | × | Kaipei quits (~Kaiepi@156.34.47.253) (Remote host closed the connection) |
| 00:03:47 | → | Kaipei joins (~Kaiepi@156.34.47.253) |
| 00:03:52 | → | mvk joins (~mvk@2607:fea8:5ce3:8500::4588) |
| 00:05:07 | × | mvk quits (~mvk@2607:fea8:5ce3:8500::4588) (Client Quit) |
| 00:06:00 | → | mvk joins (~mvk@2607:fea8:5ce3:8500::4588) |
| 00:06:16 | × | travisb quits (~travisb@2600:1700:7990:24e0:8ef9:6ccb:409e:cd42) (Ping timeout: 250 seconds) |
| 00:11:49 | → | tabemann joins (~tabemann@2600:1700:7990:24e0:68f1:5d07:157d:1415) |
| 00:14:42 | → | slac73952 joins (~slack1256@191.125.227.90) |
| 00:17:12 | × | slack1256 quits (~slack1256@186.11.82.227) (Ping timeout: 260 seconds) |
| 00:25:18 | julian | is now known as Guest1698 |
| 00:25:18 | × | Guest1698 quits (~julian@20.83.116.49) (Killed (sodium.libera.chat (Nickname regained by services))) |
| 00:25:48 | → | Guest1698 joins (~Guest1698@20.83.116.49) |
| 00:30:25 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 258 seconds) |
| 00:30:37 | × | stefan-_ quits (~cri@42dots.de) (Ping timeout: 260 seconds) |
| 00:30:56 | → | g04239 joins (~kody@user/g04239) |
| 00:31:31 | → | CoolerX joins (~user@user/coolerx) |
| 00:34:18 | → | stefan-_ joins (~cri@42dots.de) |
| 00:36:08 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 248 seconds) |
| 00:36:43 | × | Unicorn_Princess quits (~Unicorn_P@93-103-228-248.dynamic.t-2.net) (Remote host closed the connection) |
| 00:37:05 | → | CoolerX joins (~user@user/coolerx) |
| 00:38:29 | ← | g04239 parts (~kody@user/g04239) (WeeChat 3.4.1) |
| 00:42:47 | <shapr> | dsal: have you tried leancheck? |
| 00:42:52 | <dsal> | I've not. |
| 00:43:57 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 256 seconds) |
| 00:45:12 | → | CoolerX joins (~user@user/coolerx) |
| 00:45:19 | → | [_] joins (~itchyjunk@user/itchyjunk/x-7353470) |
| 00:45:47 | × | xff0x quits (~xff0x@2405:6580:b080:900:4ed7:6424:f0c6:c994) (Ping timeout: 260 seconds) |
| 00:47:30 | × | [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 240 seconds) |
| 00:50:11 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 256 seconds) |
| 00:50:43 | → | CoolerX joins (~user@user/coolerx) |
| 00:52:08 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 248 seconds) |
| 00:52:52 | → | Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915) |
| 00:55:13 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 246 seconds) |
| 00:56:18 | → | CoolerX joins (~user@user/coolerx) |
| 01:00:57 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 256 seconds) |
| 01:01:52 | → | CoolerX joins (~user@user/coolerx) |
| 01:03:47 | × | zerkal03 quits (zerkal03@023-084-033-189.res.spectrum.com) (Ping timeout: 256 seconds) |
| 01:05:23 | → | king_gs joins (~Thunderbi@187.201.173.69) |
| 01:05:41 | → | szkl joins (uid110435@id-110435.uxbridge.irccloud.com) |
| 01:06:25 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 246 seconds) |
| 01:07:28 | → | CoolerX joins (~user@user/coolerx) |
| 01:10:42 | × | albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection) |
| 01:11:33 | → | frost joins (~frost@user/frost) |
| 01:12:02 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 260 seconds) |
| 01:13:06 | → | CoolerX joins (~user@user/coolerx) |
| 01:16:49 | → | albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8) |
| 01:17:37 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 246 seconds) |
| 01:18:49 | → | CoolerX joins (~user@user/coolerx) |
| 01:21:14 | → | xff0x joins (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) |
| 01:21:16 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:fd72:8b07:e388:e81e) (Remote host closed the connection) |
| 01:23:37 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 256 seconds) |
| 01:24:13 | → | CoolerX joins (~user@user/coolerx) |
| 01:25:42 | [_] | is now known as [itchyjunk] |
| 01:28:43 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 256 seconds) |
| 01:29:50 | → | CoolerX joins (~user@user/coolerx) |
| 01:33:45 | × | king_gs quits (~Thunderbi@187.201.173.69) (Quit: king_gs) |
| 01:34:04 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 246 seconds) |
| 01:35:17 | → | CoolerX joins (~user@user/coolerx) |
| 01:35:51 | × | machined1od quits (~machinedg@66.244.246.252) (Ping timeout: 276 seconds) |
| 01:44:35 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 256 seconds) |
| 01:45:37 | → | CoolerX joins (~user@user/coolerx) |
| 01:48:54 | <dragestil> | how come cabal haddock does support latex backend |
| 01:49:17 | <dragestil> | does not support latex backend |
| 01:50:10 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 246 seconds) |
| 01:51:13 | → | CoolerX joins (~user@user/coolerx) |
| 01:51:14 | <sclv> | the latex backend is ancient code largely forgotten. but also can’t you explicitly pass haddock flags fo get it? |
| 01:51:55 | <dragestil> | sclv: not sure how. i tried cabal build --enable-documentation --latex / cabal haddock --latex |
| 01:52:15 | × | causal quits (~user@50.35.83.177) (Quit: WeeChat 3.5) |
| 01:52:16 | <dragestil> | and cabal haddock --haddock-option=--latex which seems to build html instead |
| 01:53:15 | <sclv> | this may have advice https://github.com/haskell/cabal/issues/7419 |
| 01:53:31 | <sclv> | otherwise maybe yeah it would need a pr |
| 01:53:59 | <dragestil> | ok thanks |
| 01:54:23 | → | nate4 joins (~nate@98.45.169.16) |
| 01:54:29 | <dragestil> | i also wonder how to just invoke haddock directly without cabal to generate latex for a project |
| 01:55:21 | <dragestil> | because haddock seems to expect input files - do I need to run find -iname *.hs and feed the output to haddock? |
| 01:55:32 | <dragestil> | that seems a bit too manual |
| 01:55:46 | <sclv> | you can run cabal haddock -v3 and then clone and modify the command line (i think v3 will print it) |
| 01:55:47 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 246 seconds) |
| 01:56:46 | → | CoolerX joins (~user@user/coolerx) |
| 01:56:57 | <dragestil> | that did print out more but not the haddock command invocation |
| 01:57:44 | <sclv> | is that because haddocks are already built? |
| 01:58:05 | <dragestil> | don't think so |
| 01:58:11 | → | zerkal03 joins (zerkal03@023-084-033-189.res.spectrum.com) |
| 01:58:35 | <sclv> | weird. v3 prints invocation for nearly everything else |
| 01:59:53 | × | nate4 quits (~nate@98.45.169.16) (Ping timeout: 256 seconds) |
| 02:01:01 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 246 seconds) |
| 02:01:44 | <dragestil> | oh actually there's something that looks like an haddock invocation, it just spans several lines |
| 02:02:20 | <dragestil> | and the initial command is still cabal |
| 02:02:22 | → | CoolerX joins (~user@user/coolerx) |
| 02:06:52 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 260 seconds) |
| 02:07:55 | → | CoolerX joins (~user@user/coolerx) |
| 02:11:50 | × | td_ quits (~td@muedsl-82-207-238-155.citykom.de) (Ping timeout: 240 seconds) |
| 02:12:13 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 246 seconds) |
| 02:13:25 | → | CoolerX joins (~user@user/coolerx) |
| 02:13:48 | → | td_ joins (~td@muedsl-82-207-238-033.citykom.de) |
| 02:15:11 | × | jao quits (~jao@166.65.77.188.dynamic.jazztel.es) (Ping timeout: 256 seconds) |
| 02:18:01 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 256 seconds) |
| 02:19:01 | → | CoolerX joins (~user@user/coolerx) |
| 02:21:38 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:fd72:8b07:e388:e81e) |
| 02:23:21 | → | nate4 joins (~nate@98.45.169.16) |
| 02:23:38 | <dragestil> | https://github.com/haskell/haddock/issues/1420 looks interesting. what is Hi Haddock? |
| 02:26:00 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 248 seconds) |
| 02:26:14 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:fd72:8b07:e388:e81e) (Ping timeout: 250 seconds) |
| 02:27:14 | → | CoolerX joins (~user@user/coolerx) |
| 02:28:27 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:fd72:8b07:e388:e81e) |
| 02:31:50 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 246 seconds) |
| 02:32:51 | → | CoolerX joins (~user@user/coolerx) |
| 02:33:42 | × | waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 260 seconds) |
| 02:37:04 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 246 seconds) |
| 02:38:21 | → | CoolerX joins (~user@user/coolerx) |
| 02:38:46 | → | finn_elija joins (~finn_elij@user/finn-elija/x-0085643) |
| 02:38:46 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija))) |
| 02:38:46 | finn_elija | is now known as FinnElija |
| 02:42:30 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 240 seconds) |
| 02:42:38 | <dragestil> | sclv: lol cabal haddock --latex actually did produce tex files, but they are all under /dist-newstyle/build/x86_64-linux/ghc-x.y.z/<package name>/doc/html/ dir... |
| 02:43:08 | <sclv> | lol |
| 02:43:08 | × | terrorjack quits (~terrorjac@2a01:4f8:1c1e:509a::1) (Quit: The Lounge - https://thelounge.chat) |
| 02:43:57 | → | CoolerX joins (~user@user/coolerx) |
| 02:44:01 | <sclv> | hie haddock is the project to produce haddocks based on the new hie files ghc generates that summarize interfaces for ides and other tools |
| 02:44:13 | × | biberu quits (~biberu@user/biberu) (Read error: Connection reset by peer) |
| 02:44:24 | → | terrorjack joins (~terrorjac@2a01:4f8:1c1e:509a::1) |
| 02:44:32 | → | biberu joins (~biberu@user/biberu) |
| 02:44:34 | <dragestil> | that's interesting. i'm hearing more and more applications of .hie files |
| 02:48:10 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 240 seconds) |
| 02:49:30 | → | CoolerX joins (~user@user/coolerx) |
| 02:49:33 | <dragestil> | sclv: do you have a link to the project? I can't find it |
| 02:52:20 | × | caubert quits (~caubert@user/caubert) (Ping timeout: 248 seconds) |
| 02:53:46 | → | caubert joins (~caubert@user/caubert) |
| 02:54:07 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 260 seconds) |
| 02:55:07 | → | CoolerX joins (~user@user/coolerx) |
| 02:55:31 | × | chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection) |
| 02:58:34 | × | tabemann quits (~tabemann@2600:1700:7990:24e0:68f1:5d07:157d:1415) (Remote host closed the connection) |
| 02:58:47 | → | tabemann joins (~tabemann@2600:1700:7990:24e0:4c02:2a0:99f2:8567) |
| 02:59:13 | × | tabemann quits (~tabemann@2600:1700:7990:24e0:4c02:2a0:99f2:8567) (Client Quit) |
| 02:59:28 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 246 seconds) |
| 03:00:31 | × | hnOsmium0001 quits (uid453710@user/hnOsmium0001) (Quit: Connection closed for inactivity) |
| 03:00:42 | → | CoolerX joins (~user@user/coolerx) |
| 03:05:04 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 246 seconds) |
| 03:06:14 | → | CoolerX joins (~user@user/coolerx) |
| 03:09:04 | × | littlebobeep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds) |
| 03:09:53 | × | yrlnry quits (~yrlnry@pool-108-2-150-109.phlapa.fios.verizon.net) (Remote host closed the connection) |
| 03:10:43 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 256 seconds) |
| 03:11:48 | → | CoolerX joins (~user@user/coolerx) |
| 03:14:49 | → | littlebobeep joins (~alMalsamo@gateway/tor-sasl/almalsamo) |
| 03:15:49 | × | nate4 quits (~nate@98.45.169.16) (Ping timeout: 256 seconds) |
| 03:16:17 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 246 seconds) |
| 03:17:28 | → | CoolerX joins (~user@user/coolerx) |
| 03:22:07 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 260 seconds) |
| 03:22:59 | → | CoolerX joins (~user@user/coolerx) |
| 03:23:34 | × | littlebobeep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds) |
| 03:23:44 | × | adanwan quits (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection) |
| 03:24:13 | → | adanwan joins (~adanwan@gateway/tor-sasl/adanwan) |
| 03:25:00 | → | littlebobeep joins (~alMalsamo@gateway/tor-sasl/almalsamo) |
| 03:27:28 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 246 seconds) |
| 03:27:38 | × | alp quits (~alp@user/alp) (Ping timeout: 255 seconds) |
| 03:28:31 | → | CoolerX joins (~user@user/coolerx) |
| 03:29:40 | → | tabemann joins (~tabemann@2600:1700:7990:24e0:313b:ace9:50c8:d6b2) |
| 03:32:08 | → | whosthis joins (~whosthis@97-122-203-212.hlrn.qwest.net) |
| 03:33:23 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 256 seconds) |
| 03:34:07 | → | CoolerX joins (~user@user/coolerx) |
| 03:38:40 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 246 seconds) |
| 03:39:43 | → | CoolerX joins (~user@user/coolerx) |
| 03:40:30 | → | yrlnry joins (~yrlnry@pool-108-2-150-109.phlapa.fios.verizon.net) |
| 03:44:09 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 256 seconds) |
| 03:44:58 | × | yrlnry quits (~yrlnry@pool-108-2-150-109.phlapa.fios.verizon.net) (Ping timeout: 246 seconds) |
| 03:45:14 | → | CoolerX joins (~user@user/coolerx) |
| 03:46:09 | × | zebrag quits (~chris@user/zebrag) (Quit: Konversation terminated!) |
| 03:46:47 | → | chexum joins (~quassel@gateway/tor-sasl/chexum) |
| 03:50:07 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 260 seconds) |
| 03:50:48 | → | CoolerX joins (~user@user/coolerx) |
| 03:51:52 | × | img quits (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in) |
| 03:53:14 | → | img joins (~img@user/img) |
| 03:53:20 | × | mvk quits (~mvk@2607:fea8:5ce3:8500::4588) (Ping timeout: 250 seconds) |
| 03:55:29 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 256 seconds) |
| 03:56:21 | → | CoolerX joins (~user@user/coolerx) |
| 03:58:09 | → | nate4 joins (~nate@98.45.169.16) |
| 04:00:30 | × | foul_owl quits (~kerry@23.82.194.92) (Ping timeout: 240 seconds) |
| 04:00:43 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 246 seconds) |
| 04:01:42 | → | CoolerX joins (~user@user/coolerx) |
| 04:03:32 | × | nate4 quits (~nate@98.45.169.16) (Ping timeout: 260 seconds) |
| 04:07:23 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 256 seconds) |
| 04:08:45 | → | CoolerX joins (~user@user/coolerx) |
| 04:11:46 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 04:13:48 | → | k8yun joins (~k8yun@user/k8yun) |
| 04:16:04 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds) |
| 04:16:28 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 246 seconds) |
| 04:16:37 | → | foul_owl joins (~kerry@23.82.194.107) |
| 04:17:40 | × | Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 04:18:08 | → | CoolerX joins (~user@user/coolerx) |
| 04:18:16 | → | Vajb joins (~Vajb@2001:999:40:4c50:1b24:879c:6df3:1d06) |
| 04:22:25 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 246 seconds) |
| 04:24:01 | → | CoolerX joins (~user@user/coolerx) |
| 04:24:41 | → | takuan joins (~takuan@178-116-218-225.access.telenet.be) |
| 04:28:55 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 256 seconds) |
| 04:29:34 | → | CoolerX joins (~user@user/coolerx) |
| 04:32:23 | → | nate4 joins (~nate@98.45.169.16) |
| 04:33:58 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 246 seconds) |
| 04:35:09 | → | CoolerX joins (~user@user/coolerx) |
| 04:35:38 | → | jargon joins (~jargon@184.101.186.108) |
| 04:37:25 | × | nate4 quits (~nate@98.45.169.16) (Ping timeout: 256 seconds) |
| 04:39:34 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 246 seconds) |
| 04:40:50 | → | CoolerX joins (~user@user/coolerx) |
| 04:45:12 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 248 seconds) |
| 04:46:20 | → | CoolerX joins (~user@user/coolerx) |
| 04:51:04 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 248 seconds) |
| 04:51:20 | ← | zerkal03 parts (zerkal03@023-084-033-189.res.spectrum.com) () |
| 04:51:57 | → | CoolerX joins (~user@user/coolerx) |
| 04:56:41 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 256 seconds) |
| 04:57:35 | → | CoolerX joins (~user@user/coolerx) |
| 04:58:14 | <sclv> | ah misspoke. hi haddock was pushing it to hi files instead of running the full pipeline. hie came later and is still wip https://summerofcode.withgoogle.com/archive/2018/projects/5011474275631104 |
| 05:01:58 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 246 seconds) |
| 05:03:09 | → | CoolerX joins (~user@user/coolerx) |
| 05:03:20 | <dragestil> | sclv: pushing what to hi files? |
| 05:03:59 | <sclv> | the haddock data. haddock used to run the ghc pipeline directly |
| 05:04:27 | <sclv> | now ghc embeds what haddock needs in hi files that haddock processes |
| 05:04:35 | <dragestil> | ah ok |
| 05:04:58 | <dragestil> | this must be long time ago because hi has been around for a loong time |
| 05:07:03 | × | [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection) |
| 05:07:17 | → | kayvank joins (~user@52-119-115-185.PUBLIC.monkeybrains.net) |
| 05:11:25 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 246 seconds) |
| 05:12:16 | → | CoolerX joins (~user@user/coolerx) |
| 05:16:32 | → | coot joins (~coot@213.134.190.95) |
| 05:17:05 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 256 seconds) |
| 05:18:07 | → | bilegeek joins (~bilegeek@2600:1008:b062:d718:bff4:2307:526c:195f) |
| 05:21:50 | → | jmdaemon joins (~jmdaemon@user/jmdaemon) |
| 05:23:19 | × | k8yun quits (~k8yun@user/k8yun) (Quit: Leaving) |
| 05:26:48 | × | jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 248 seconds) |
| 05:28:59 | → | CoolerX joins (~user@user/coolerx) |
| 05:30:07 | → | jmdaemon joins (~jmdaemon@user/jmdaemon) |
| 05:30:45 | × | jmdaemon quits (~jmdaemon@user/jmdaemon) (Remote host closed the connection) |
| 05:42:04 | × | littlebobeep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds) |
| 05:43:41 | × | stoned quits (~Hash@tunnel686959-pt.tunnel.tserv15.lax1.ipv6.he.net) (Quit: ZNC - https://znc.in) |
| 05:45:23 | → | _ht joins (~quassel@231-169-21-31.ftth.glasoperator.nl) |
| 05:47:22 | × | kayvank quits (~user@52-119-115-185.PUBLIC.monkeybrains.net) (Remote host closed the connection) |
| 05:49:40 | → | michalz joins (~michalz@185.246.204.109) |
| 05:49:57 | × | CoolerX quits (~user@user/coolerx) (Ping timeout: 256 seconds) |
| 05:59:13 | → | littlebobeep joins (~alMalsamo@gateway/tor-sasl/almalsamo) |
| 06:06:06 | × | [Leary] quits (~Leary]@122-58-224-198-vdsl.sparkbb.co.nz) (Remote host closed the connection) |
| 06:06:49 | × | slac73952 quits (~slack1256@191.125.227.90) (Remote host closed the connection) |
| 06:07:51 | × | jargon quits (~jargon@184.101.186.108) (Remote host closed the connection) |
| 06:12:34 | × | littlebobeep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds) |
| 06:13:14 | → | kayvank joins (~user@52-119-115-185.PUBLIC.monkeybrains.net) |
| 06:13:46 | → | littlebobeep joins (~alMalsamo@gateway/tor-sasl/almalsamo) |
| 06:17:58 | × | _ht quits (~quassel@231-169-21-31.ftth.glasoperator.nl) (Remote host closed the connection) |
| 06:25:20 | → | MajorBiscuit joins (~MajorBisc@2a02-a461-129d-1-193d-75d8-745d-e91e.fixed6.kpn.net) |
| 06:26:33 | → | [Leary] joins (~Leary]@122-58-224-198-vdsl.sparkbb.co.nz) |
| 06:27:43 | × | [Leary] quits (~Leary]@122-58-224-198-vdsl.sparkbb.co.nz) (Remote host closed the connection) |
| 06:30:45 | × | kayvank quits (~user@52-119-115-185.PUBLIC.monkeybrains.net) (Ping timeout: 256 seconds) |
| 06:30:50 | → | Pickchea joins (~private@user/pickchea) |
| 06:33:45 | <dminuoso> | maerwald: Since you pointed out "once you have access to the power grid, all hope is lost anyway" - it turns out you can turn power side channels into network measurable timing side channels! |
| 06:33:53 | <dminuoso> | Freshly released: https://www.hertzbleed.com/ |
| 06:33:53 | × | Sgeo_ quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 06:33:57 | → | acidjnk joins (~acidjnk@p200300d0c7068b9140c628021d98d447.dip0.t-ipconnect.de) |
| 06:34:35 | <dminuoso> | And this one seems essentially unmitigateable on existing architectures |
| 06:37:15 | × | shriekingnoise quits (~shrieking@201.212.175.181) (Quit: Quit) |
| 06:37:44 | × | MajorBiscuit quits (~MajorBisc@2a02-a461-129d-1-193d-75d8-745d-e91e.fixed6.kpn.net) (Ping timeout: 248 seconds) |
| 06:37:58 | <Axman6> | "Why did Intel ask for a long embargo, considering they are not deploying patches? Ask Intel." heh |
| 06:38:46 | <Square> | is there a fold like function that "parses" a list using previous and current element and returns :: (a -> a -> Bool) -> [a] -> ([a],[a]) -- (parsed,unparsed) |
| 06:39:11 | <Square> | s/and returns/with signature like/ |
| 06:39:44 | <Square> | idk if parse is the right word.. consumes |
| 06:39:54 | → | tromp joins (~textual@dhcp-077-249-230-040.chello.nl) |
| 06:39:59 | <Axman6> | can you give an example of how you'd use it? |
| 06:39:59 | <dminuoso> | Square: I cant make sense of your question |
| 06:40:05 | <Square> | me neither =d |
| 06:40:19 | <dminuoso> | If you dont even understand your own question, how are we to do it? :) |
| 06:40:31 | <Axman6> | foo (\x y -> ???) [???] -> (???,???) -- pls fil in blanks |
| 06:40:31 | <Square> | Ill try better. |
| 06:40:38 | <Square> | haha |
| 06:41:41 | <dminuoso> | Ah but I think I understand, you want something like `span/break` but with access to the previous element? |
| 06:42:07 | <Square> | ok.. we have List.groupBy with signature : groupBy :: (a -> a -> Bool) -> [a] -> [[a]] |
| 06:42:17 | <Square> | yeah |
| 06:42:29 | <Square> | dminuoso, correct |
| 06:42:30 | <dminuoso> | How does this work on the first element? |
| 06:42:33 | <dibblego> | @type zip <*> tail |
| 06:42:34 | <lambdabot> | [a] -> [(a, a)] |
| 06:42:40 | <Square> | its allways included |
| 06:42:48 | <Axman6> | can you implement that with the god of conzequtive elements, zip`ap`tail? |
| 06:42:51 | <Square> | as in "parsed" |
| 06:42:52 | <dminuoso> | No I mean, you dont have a previous element on the first element. |
| 06:42:53 | → | Hash joins (~Hash@tunnel686959-pt.tunnel.tserv15.lax1.ipv6.he.net) |
| 06:42:55 | <Axman6> | @quote zip.ap.tail |
| 06:42:55 | <lambdabot> | quicksilver says: zip`ap`tail - the Aztec god of consecutive numbers |
| 06:43:17 | <Axman6> | > (zip <*> tail) [1..10] |
| 06:43:19 | <lambdabot> | [(1,2),(2,3),(3,4),(4,5),(5,6),(6,7),(7,8),(8,9),(9,10)] |
| 06:43:44 | → | mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475) |
| 06:43:47 | <Square> | sweet. |
| 06:54:48 | × | mixfix41 quits (~sdenynine@user/mixfix41) (Ping timeout: 248 seconds) |
| 06:57:25 | → | dsp joins (~dsp@cpc152107-haye27-2-0-cust227.17-4.cable.virginm.net) |
| 06:59:52 | → | nschoe joins (~quassel@178.251.84.79) |
| 07:01:11 | → | [Leary] joins (~Leary]@122-58-224-198-vdsl.sparkbb.co.nz) |
| 07:03:04 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds) |
| 07:04:00 | → | monaaraj joins (~MonAaraj@user/mon-aaraj/x-4416475) |
| 07:04:41 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 07:06:13 | × | mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 246 seconds) |
| 07:06:26 | → | alp joins (~alp@user/alp) |
| 07:06:42 | × | haritz quits (~hrtz@user/haritz) (Remote host closed the connection) |
| 07:12:57 | → | littlebo1eep joins (~alMalsamo@gateway/tor-sasl/almalsamo) |
| 07:13:54 | → | chele joins (~chele@user/chele) |
| 07:14:23 | → | nate4 joins (~nate@98.45.169.16) |
| 07:16:04 | × | littlebobeep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds) |
| 07:18:44 | → | littlebobeep joins (~alMalsamo@gateway/tor-sasl/almalsamo) |
| 07:19:29 | × | nate4 quits (~nate@98.45.169.16) (Ping timeout: 256 seconds) |
| 07:20:35 | × | monaaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Quit: WeeChat 3.5) |
| 07:20:42 | → | gmg joins (~user@user/gehmehgeh) |
| 07:21:07 | → | mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475) |
| 07:21:34 | × | littlebo1eep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds) |
| 07:22:52 | <tdammers> | Vulnerabilities have brand identities now. What a time to be alive! |
| 07:23:10 | <tdammers> | Next up: vulnerabilities with an official code of conduct |
| 07:23:20 | × | mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Read error: Connection reset by peer) |
| 07:23:46 | → | mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475) |
| 07:24:11 | <tdammers> | anyway, IMO the most surprising thing about hertzbleed is that nobody has come up with it before. in hindsight, people should have realized this the moment someone invented frequency scaling. |
| 07:24:13 | → | ccntrq joins (~Thunderbi@172.209.94.92.rev.sfr.net) |
| 07:24:22 | × | mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Read error: Connection reset by peer) |
| 07:24:23 | <Axman6> | "You may not use this vulnerability against any minority architecture" |
| 07:24:38 | <Axman6> | yeah - I'm surprised too. |
| 07:24:38 | × | asm quits (~alexander@burner.asm89.io) (Changing host) |
| 07:24:38 | → | asm joins (~alexander@user/asm) |
| 07:24:40 | <tdammers> | it's all about being inclusive, amirite |
| 07:24:49 | → | mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475) |
| 07:25:01 | <Axman6> | it feels like a fix might be as simple as being able to tell the CPU to lock the frequency |
| 07:25:30 | <tdammers> | they are addressing that; it does indeed work, but the problem with that is that you will have to lock the CPU into the *lowest* frequency in order to avoid overheating |
| 07:25:34 | × | littlebobeep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds) |
| 07:25:39 | <tdammers> | so that's pretty crippling |
| 07:25:41 | <Axman6> | "Yo, I'm doin serious shit, please hold off on changing how fast I do it" - I'm sure Intel or AMD will give it a better nmemonic |
| 07:26:17 | <tdammers> | problem with that is that it would create an opportunity for DOS |
| 07:26:18 | <_________> | constant-time execution enclave or something ;) |
| 07:26:45 | <Axman6> | you kinda need constant power instructions |
| 07:26:52 | <tdammers> | just tell the computer you're doing "yo serious shizzles" all the time, and you can force the CPU into baseline performance mode forever |
| 07:26:55 | <Axman6> | just do ewvery single instruction using x and ~x |
| 07:27:25 | <tdammers> | I think the ultimate solution would be to outsource all crypto stuff to a dedicated crypto coprocessor |
| 07:28:23 | <tdammers> | or actually an entire crypto subsystem, with cryptographic memory and all that. because modern systems have more problems that power scaling |
| 07:28:33 | × | Pickchea quits (~private@user/pickchea) (Ping timeout: 256 seconds) |
| 07:28:50 | → | littlebobeep joins (~alMalsamo@gateway/tor-sasl/almalsamo) |
| 07:29:13 | → | dyeplexer joins (~dyeplexer@user/dyeplexer) |
| 07:30:36 | <tdammers> | than* |
| 07:31:27 | Putonlalla1 | is now known as Putonlalla |
| 07:32:53 | <jackdk> | tdammers: an opportunity for DOS? I've been waiting for this day; I still have my collection of TSRs and weird little utilities around here somewhere... |
| 07:34:17 | <tdammers> | jackdk: it's quite simple actually. suppose there is such an instruction ("doing serious shit, keep CPU locked into baseline perf"), then it will have to be system-wide, otherwise it would be useless |
| 07:34:31 | <tdammers> | but that means that anyone who can issue that instruction can lock the CPU into baseline perf at will |
| 07:34:43 | <tdammers> | it's not a full DoS on its own, but it certainly helps |
| 07:34:45 | <jackdk> | I'm just making a dumb joke about MS-DOS, ignore me |
| 07:35:01 | <tdammers> | ah, lol, missed the TSR part |
| 07:35:11 | <tdammers> | it's been a while since I've done that |
| 07:35:24 | × | tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 07:35:41 | <jackdk> | I used to have all sorts of boot disks for running games on ramdisks. We'd have heaps of fun on the school computers without actually hurting anythin |
| 07:36:19 | <tdammers> | haha, yeah |
| 07:36:24 | <tdammers> | imagine "installing programs" |
| 07:36:27 | × | flupe quits (~baboum@radon.sbi.re) (Ping timeout: 240 seconds) |
| 07:37:04 | <tomsmeding> | "imagine "installing programs"" continues to this day |
| 07:37:32 | <tomsmeding> | fortunately most universities have machines dedicated to the pesky CS people now that allow you to run stuff |
| 07:38:10 | × | [Leary] quits (~Leary]@122-58-224-198-vdsl.sparkbb.co.nz) (Remote host closed the connection) |
| 07:38:32 | <darkling> | Mostly only by luck, rather than any kind of policy. |
| 07:39:57 | × | notzmv quits (~zmv@user/notzmv) (Ping timeout: 260 seconds) |
| 07:39:58 | × | tzh quits (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz) |
| 07:41:22 | <tomsmeding> | around here, IT departments wouldn't allow anything close to that without policy, so no way that happens by luck |
| 07:41:57 | → | tromp joins (~textual@dhcp-077-249-230-040.chello.nl) |
| 07:43:03 | → | MajorBiscuit joins (~MajorBisc@wlan-145-94-164-215.wlan.tudelft.nl) |
| 07:44:21 | <darkling> | The last university I worked in had consultants in to reshape the IT support department. (My recommendation? Fire the management and replace them with people who could actually manage) |
| 07:44:38 | <darkling> | The first draft of the report from the consultants failed to acknowledge that the university did any teaching. Or research. |
| 07:45:28 | <jackdk> | what did the university do, then? |
| 07:45:36 | <darkling> | They did eventually manage to shoe-horn them in, but the result wasn't particularly comfortable. |
| 07:47:05 | <darkling> | For at least 6 months afterwards, all the IT people embedded in research departments were basically still doing the local support jobs they were doing before, despite the fact they should have been doing something completely different. |
| 07:47:13 | → | dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net) |
| 07:47:33 | <darkling> | That didn't matter too mcuh, because none of the tasks they were meant to be doing actually reached them (because they were being done by someone else embedded in a research department) |
| 07:47:47 | <darkling> | I left after that. :) |
| 07:48:33 | <darkling> | (And gave the HR person in charge of the process a full frank and confidential opinion on the whole process and structure over a pint in the bar) |
| 07:49:17 | × | mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 260 seconds) |
| 07:50:58 | → | machinedgod joins (~machinedg@66.244.246.252) |
| 07:51:03 | <tdammers> | reminds me of the idea for a short story a couple folks and I came up with this weekend at zurihac |
| 07:51:11 | → | mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475) |
| 07:51:46 | <tdammers> | it's about a software engineering team who are really serious about unit tests and mocking |
| 07:52:15 | <tdammers> | until eventually someone notices that their test framework does not touch any of the code actually running in production anymore, it's all just mocks |
| 07:52:44 | → | zeenk joins (~zeenk@2a02:2f04:a013:9000:e45d:7fb3:ec71:e806) |
| 07:53:09 | <Logio_> | test suite of theseus |
| 07:53:12 | Logio_ | is now known as Logio |
| 07:55:04 | → | [Leary] joins (~Leary]@122-58-224-198-vdsl.sparkbb.co.nz) |
| 07:57:08 | × | mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Read error: Connection reset by peer) |
| 07:57:10 | → | mc47 joins (~mc47@xmonad/TheMC47) |
| 07:58:21 | → | jgeerds joins (~jgeerds@55d45f48.access.ecotel.net) |
| 07:58:25 | <tdammers> | maybe there is no production system at all anymore, they're just maintaining a self-sufficient test suite, and whenever they "deploy to production", all that happens is that a CI server runs the whole test suite, and then runs the deployment script, which silently concludes that there is nothing to do, and reports a successful deployment |
| 07:58:34 | × | coot quits (~coot@213.134.190.95) (Quit: coot) |
| 07:58:48 | <tomsmeding> | we're going haskell after all, no side effects so nothing to deploy |
| 07:58:51 | <tomsmeding> | *doing |
| 07:59:14 | <tdammers> | we're all just building very elaborate room heaters |
| 07:59:23 | <jackdk> | that really needs to be written up somewhere because it's a beautiful tale |
| 07:59:28 | <jackdk> | I've worked on test suites like that |
| 07:59:49 | <DigitalKiwi> | what's a test suite |
| 08:00:19 | <tdammers> | something you wear for a rehearsal wedding ceremony |
| 08:00:33 | <tdammers> | wait no, that's "test suit", my bad |
| 08:00:35 | × | tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 08:00:42 | <jackdk> | an executable program which patches over type-system insufficiencies |
| 08:01:36 | <DigitalKiwi> | dependent types make test suites obsolete eh |
| 08:01:53 | <tdammers> | alternative: a program that generates randomized metrics for the purpose of keeping management busy |
| 08:02:05 | <DigitalKiwi> | so since Haskell has dependent types now I don't need tests? |
| 08:02:17 | <DigitalKiwi> | perfect I am ahead of the game |
| 08:02:23 | <tdammers> | you still need tests, but you can now run them at the type level |
| 08:02:34 | → | mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475) |
| 08:03:53 | → | fweht joins (uid404746@id-404746.lymington.irccloud.com) |
| 08:05:49 | <DigitalKiwi> | they said Haskell didn't have side effects but my energy bill from compiling says that is a lie |
| 08:08:53 | × | dyeplexer quits (~dyeplexer@user/dyeplexer) (Ping timeout: 255 seconds) |
| 08:10:32 | <tomsmeding> | while it's a good joke, dependent types don't make test suites obsolete until we have type-level property-based testing :p |
| 08:10:50 | <tomsmeding> | of which I'd have no idea what the semantics are supposed to be |
| 08:13:26 | → | Topsi joins (~Topsi@dyndsl-095-033-095-142.ewe-ip-backbone.de) |
| 08:13:51 | <DigitalKiwi> | I am here (for the jokes) all week |
| 08:15:30 | <DigitalKiwi> | type checked jokes |
| 08:20:15 | <tdammers> | so the reason we still need test suites is because capturing every aspect of our code in types is impractical |
| 08:20:46 | <tdammers> | dependent types allow expressing more constraints in types, but they still don't make it feasible to express *everything* in types |
| 08:28:10 | × | bilegeek quits (~bilegeek@2600:1008:b062:d718:bff4:2307:526c:195f) (Quit: Leaving) |
| 08:28:19 | <maerwald[m]> | I don't understand the types obsession. You can write logic bugs in types too. |
| 08:33:41 | × | dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Quit: WeeChat 3.5) |
| 08:34:04 | × | littlebobeep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds) |
| 08:37:04 | × | econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity) |
| 08:40:52 | <tdammers> | "avoiding bugs" isn't quite the right mindset |
| 08:41:21 | → | nate4 joins (~nate@98.45.169.16) |
| 08:42:03 | <tdammers> | I like to think of types as a way of dealing with all possible values at once, instead of just a small (often size 1) set of example values |
| 08:45:15 | → | dyeplexer joins (~dyeplexer@user/dyeplexer) |
| 08:46:11 | × | nate4 quits (~nate@98.45.169.16) (Ping timeout: 256 seconds) |
| 08:49:50 | <tomsmeding> | maerwald[m]: and you can write logic bugs in tests too |
| 08:50:25 | <maerwald[m]> | Yeah |
| 08:50:26 | <tomsmeding> | as long as the two ways of expressing the same idea are different enough, the probability that the human makes the same mistake in both places becomes lower, and the value of the test (be it a type or a value test) increases |
| 08:50:30 | × | mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 240 seconds) |
| 08:50:36 | → | gurkenglas joins (~gurkengla@dslb-084-057-085-111.084.057.pools.vodafone-ip.de) |
| 08:51:13 | <tomsmeding> | types often have the additional property that they are a _simplification_ of the problem, which makes it less likely that you make mistakes there -- unless, that is, you go full dependently typed and encode your entire business logic in types :p |
| 08:51:43 | <dminuoso> | A simplification of the problem? |
| 08:51:55 | <dminuoso> | Curious, that must be why encoding simple propertiies take incredible amounts of complexity in type families and typeclasses. |
| 08:52:11 | <tdammers> | yeah, you can simplify the problem "make sure that c really is the sum of a and b" to "make sure that iff a and b are integers, c is also an integer", for example |
| 08:52:13 | → | mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475) |
| 08:52:28 | <tomsmeding> | dminuoso: then your types are too complex to gain anything from this particular advantage, so all you have is the "two ways of expressing the same idea" |
| 08:52:29 | <tdammers> | you lose a lot of the original problem, but you can still assert part of it |
| 08:53:22 | <tdammers> | so, not a simpler expression of the same problem (if types could do that, we could just generate the complex implementation from the much simpler types and call it a day), but an expression of a simpler problem that captures some aspects of the original problem |
| 08:53:39 | <tomsmeding> | tdammers++ |
| 08:54:02 | <tomsmeding> | I was probably unclear in my formulation :p |
| 08:54:38 | <tdammers> | that said, "a simpler expression of the same problem" is also a thing, it's the main driver of programming language research and the evolution of programming paradigms |
| 08:54:41 | <dminuoso> | Im just saying that encoding properties via dependent types tends to be more complicated than verifying the same properties in a test or an assertion. |
| 08:54:53 | → | mima joins (~mmh@dhcp-138-246-3-188.dynamic.eduroam.mwn.de) |
| 08:55:08 | <tomsmeding> | dminuoso: I explicitly excluded dependent-typing shenanigans from "simpler expression of [part of] the problem" :p |
| 08:56:25 | <maerwald[m]> | Types are more exhaustive, but in no way simpler |
| 08:57:38 | <tdammers> | I'll say it again: a whopping advantage of types over tests is that they automatically propagate. |
| 08:57:52 | × | jespada quits (~jespada@cpc121022-nmal24-2-0-cust171.19-2.cable.virginm.net) (Read error: Connection reset by peer) |
| 08:58:18 | → | titibandit joins (~titibandi@2a00:8a60:c000:1:8a13:bf74:b2:8d47) |
| 08:58:26 | <dminuoso> | Well sure, I mean something like `Either` encodes a very simple properties. |
| 08:58:29 | <dminuoso> | If that's what you meant |
| 08:59:01 | → | jespada joins (~jespada@cpc121022-nmal24-2-0-cust171.19-2.cable.virginm.net) |
| 08:59:21 | → | coot joins (~coot@213.134.190.95) |
| 09:01:35 | <jchia[m]> | Is it a known issue with stack that built-in packages like binary cannot be overridden with extra-deps in the stack.yaml? https://github.com/commercialhaskell/stack/issues/5767 |
| 09:02:16 | → | jespada_ joins (~jespada@146.70.119.46) |
| 09:03:10 | × | jespada quits (~jespada@cpc121022-nmal24-2-0-cust171.19-2.cable.virginm.net) (Ping timeout: 240 seconds) |
| 09:04:16 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:fd72:8b07:e388:e81e) (Remote host closed the connection) |
| 09:06:00 | × | merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 248 seconds) |
| 09:06:02 | → | jespada joins (~jespada@cpc121022-nmal24-2-0-cust171.19-2.cable.virginm.net) |
| 09:06:02 | → | chimp_ joins (~Psybur@c-76-123-45-25.hsd1.va.comcast.net) |
| 09:06:30 | × | jespada_ quits (~jespada@146.70.119.46) (Ping timeout: 240 seconds) |
| 09:07:50 | × | Psybur quits (~Psybur@c-76-123-45-25.hsd1.va.comcast.net) (Ping timeout: 255 seconds) |
| 09:18:19 | × | gmg quits (~user@user/gehmehgeh) (Remote host closed the connection) |
| 09:19:50 | → | gmg joins (~user@user/gehmehgeh) |
| 09:26:02 | → | littlebobeep joins (~alMalsamo@gateway/tor-sasl/almalsamo) |
| 09:29:15 | × | Colere quits (~colere@about/linux/staff/sauvin) (Ping timeout: 260 seconds) |
| 09:32:01 | → | merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) |
| 09:37:04 | × | littlebobeep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds) |
| 09:39:57 | → | Pickchea joins (~private@user/pickchea) |
| 09:40:47 | → | kuribas joins (~user@ptr-17d51eors28p6gwk9l6.18120a2.ip6.access.telenet.be) |
| 09:48:45 | → | littlebobeep joins (~alMalsamo@gateway/tor-sasl/almalsamo) |
| 09:48:56 | → | notzmv joins (~zmv@user/notzmv) |
| 09:49:56 | → | rendar joins (~rendar@user/rendar) |
| 09:50:16 | <rendar> | `a = 1` defined a 0-args function which returns 1, but `let a = 1` ? what is the difference here? |
| 09:52:38 | → | Midjak joins (~Midjak@82.66.147.146) |
| 09:54:45 | × | mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds) |
| 09:55:25 | → | Colere joins (~colere@about/linux/staff/sauvin) |
| 09:57:12 | × | jgeerds quits (~jgeerds@55d45f48.access.ecotel.net) (Ping timeout: 248 seconds) |
| 10:01:57 | × | frost quits (~frost@user/frost) (Quit: Client closed) |
| 10:04:36 | → | __monty__ joins (~toonn@user/toonn) |
| 10:04:38 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:1834:2996:45d4:5368) |
| 10:09:02 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:1834:2996:45d4:5368) (Ping timeout: 250 seconds) |
| 10:09:17 | × | vglfr quits (~vglfr@coupling.penchant.volia.net) (Remote host closed the connection) |
| 10:09:38 | → | vglfr joins (~vglfr@coupling.penchant.volia.net) |
| 10:10:00 | × | xff0x quits (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 248 seconds) |
| 10:27:12 | × | z quits (~wu000168@host-187-23.ilchtbc.chicago.il.us.clients.pavlovmedia.net) (Killed (NickServ (GHOST command used by Kirjava!~cake@user/kirjava))) |
| 10:30:12 | → | ubert joins (~Thunderbi@2a02:8109:abc0:6434:c1f3:6a1d:d03:af39) |
| 10:30:56 | <tomsmeding> | rendar: in ghci? In ghci those two things mean (mostly) the same thing |
| 10:31:19 | <tomsmeding> | the only differences between them in ghci come from strange implementation details that almost no-one needs to know anything about |
| 10:31:22 | <rendar> | yes ghci |
| 10:31:48 | <tomsmeding> | in a Haskell source file, they are completely different kinds of syntax: `a = 1` is a declaration (what you put on the top level, or in a `where` block), whereas `let a = 1 in ...` is an expression |
| 10:31:51 | <rendar> | there are some other environments when they are not the same thing? and why "mostly"? i'm interested to get also the subtle differences |
| 10:32:02 | <tomsmeding> | you're not interested in the subtle differences |
| 10:32:13 | <rendar> | ok.. |
| 10:32:28 | <tomsmeding> | with the differences that we're getting at here, you start to expose that ghci is really a stack of hacks |
| 10:32:45 | <sm> | ...these are not the droids you're looking for... |
| 10:32:49 | <tomsmeding> | rendar: https://gitlab.haskell.org/ghc/ghc/-/issues/20687 |
| 10:32:59 | <tomsmeding> | for all the nitty gritty details :p |
| 10:33:11 | × | adanwan quits (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection) |
| 10:33:12 | × | gmg quits (~user@user/gehmehgeh) (Remote host closed the connection) |
| 10:33:32 | <rendar> | oh :( |
| 10:33:47 | → | haritz joins (~hrtz@82-69-11-11.dsl.in-addr.zen.co.uk) |
| 10:33:48 | × | haritz quits (~hrtz@82-69-11-11.dsl.in-addr.zen.co.uk) (Changing host) |
| 10:33:48 | → | haritz joins (~hrtz@user/haritz) |
| 10:33:50 | <tomsmeding> | so: the only difference is in the exact interaction with laziness |
| 10:34:00 | → | gmg joins (~user@user/gehmehgeh) |
| 10:34:08 | <tomsmeding> | but as a normal user, you ~never need to care about this particular detail |
| 10:34:14 | → | adanwan joins (~adanwan@gateway/tor-sasl/adanwan) |
| 10:34:19 | <rendar> | ok |
| 10:34:24 | <sm> | he can go about his business |
| 10:34:37 | × | Batzy quits (~quassel@user/batzy) (Quit: No Ping reply in 180 seconds.) |
| 10:36:03 | → | Batzy joins (~quassel@user/batzy) |
| 10:37:53 | <rendar> | can we say that haskell takes a bit from lisp family of languages, such as prefix operators, everything is an expr, but without the ( ), and with more operators instead of literals functions call? |
| 10:38:55 | <tomsmeding> | lisp also had the idea that doing many things with functions is good |
| 10:39:19 | <tomsmeding> | so yes, although there are also lots of differences between haskell and the lisp family of languages |
| 10:39:40 | <rendar> | yes.. |
| 10:40:11 | <jackdk> | Feels to me like a long bow, but one you could draw if you really wanted |
| 10:40:25 | <tomsmeding> | https://en.wikipedia.org/wiki/Logo_(programming_language) is a language that (aside from the built-in graphics stuff) is basically lisp without mandatory parentheses |
| 10:40:46 | <rendar> | tomsmeding, that's very interesting comparison, yeah |
| 10:41:01 | <tomsmeding> | oh no code examples on that page, hm |
| 10:41:39 | <tomsmeding> | more code examples here https://en.wikipedia.org/wiki/UCBLogo |
| 10:41:39 | <rendar> | for now, haskell seems to me very elegant and consistent, i like what i see |
| 10:41:45 | tomsmeding | nodes |
| 10:41:47 | <tomsmeding> | *nods |
| 10:42:14 | <rendar> | a friend of mine said because haskell was designed by a committee of geniuses |
| 10:43:28 | × | fweht quits (uid404746@id-404746.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 10:43:48 | <maerwald> | Yes, by the haskell pantheon |
| 10:46:27 | <rendar> | i guess haskell is also a good place where to learn category theory, i guess |
| 10:52:52 | <kuribas> | I doubt it. |
| 10:52:57 | <maerwald> | yes, every Haskeller has spent 10 years in a category theory monastery at the top of the mountains |
| 10:53:43 | <Haskelytic> | theory gatekeepers are amazing /s :) |
| 10:53:50 | <tomsmeding> | it's more like: if you know category theory and are learning haskell, then you see lots of parallels |
| 10:54:08 | <tomsmeding> | if you know haskell and are learning category theory, you have to actively unlearn some of the intuitions you got in haskell :p |
| 10:54:13 | <tomsmeding> | (not all) |
| 10:55:11 | <kuribas> | I'd say mathematical logic and (dependent) type theory are much more useful. |
| 10:55:41 | <kuribas> | Essentiel even if you are concerned about correctness. |
| 10:56:11 | <kuribas> | Category theory is nothing more than a interesting curiosity. |
| 10:56:53 | → | frost joins (~frost@user/frost) |
| 10:59:18 | → | CiaoSen joins (~Jura@p200300c9571294002a3a4dfffe84dbd5.dip0.t-ipconnect.de) |
| 11:03:32 | <tomsmeding> | it's where some of the _inspiration_ comes from |
| 11:04:13 | × | bliminse quits (~bliminse@host86-132-158-77.range86-132.btcentralplus.com) (Ping timeout: 246 seconds) |
| 11:05:34 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds) |
| 11:05:47 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 11:06:11 | → | bliminse joins (~bliminse@host86-164-164-134.range86-164.btcentralplus.com) |
| 11:06:27 | → | Unicorn_Princess joins (~Unicorn_P@93-103-228-248.dynamic.t-2.net) |
| 11:07:34 | → | jgeerds joins (~jgeerds@55d45f48.access.ecotel.net) |
| 11:07:41 | × | yahb2 quits (~yahb2@2a01:4f8:c0c:5c7b::2) (Remote host closed the connection) |
| 11:07:58 | × | dyeplexer quits (~dyeplexer@user/dyeplexer) (Ping timeout: 250 seconds) |
| 11:13:17 | × | belphegor666 quits (~satan@ip-046-223-003-068.um13.pools.vodafone-ip.de) (Changing host) |
| 11:13:17 | → | belphegor666 joins (~satan@user/belphegor666) |
| 11:13:43 | → | yahb2 joins (~yahb2@2a01:4f8:c0c:5c7b::2) |
| 11:15:28 | × | yahb2 quits (~yahb2@2a01:4f8:c0c:5c7b::2) (Remote host closed the connection) |
| 11:15:40 | → | yahb2 joins (~yahb2@2a01:4f8:c0c:5c7b::2) |
| 11:16:51 | <tomsmeding> | % map Data.Char.toUpper "test" |
| 11:16:51 | <yahb2> | "TEST" |
| 11:20:12 | × | yahb2 quits (~yahb2@2a01:4f8:c0c:5c7b::2) (Remote host closed the connection) |
| 11:20:24 | → | yahb2 joins (~yahb2@2a01:4f8:c0c:5c7b::2) |
| 11:20:24 | <Haskelytic> | is there any value in a pure functional language *without* a static type system? |
| 11:21:03 | <maerwald> | why not |
| 11:21:25 | <hpc> | various lisps and such have made it work |
| 11:22:02 | <geekosaur> | nix? |
| 11:22:11 | <hpc> | and even when a language has mutation, you might find just to help your own thoughts it's useful to limit yourself |
| 11:22:16 | → | dyeplexer joins (~dyeplexer@user/dyeplexer) |
| 11:22:24 | <kuribas> | Haskelytic: what does that even mean? |
| 11:22:25 | <maerwald> | hpc: are they purely functional? E.g. are evaluation and execution different concepts/stages? |
| 11:22:36 | <kuribas> | like, how can you enforce purity if you don't have static types? |
| 11:22:53 | <maerwald> | kuribas: type system has little to do with purity |
| 11:23:52 | × | yahb2 quits (~yahb2@2a01:4f8:c0c:5c7b::2) (Remote host closed the connection) |
| 11:24:05 | → | yahb2 joins (~yahb2@2a01:4f8:c0c:5c7b::2) |
| 11:24:11 | <hpc> | maerwald: if macros count, sure |
| 11:24:38 | <maerwald> | well, then that settles the discussion |
| 11:24:57 | <Haskelytic> | kuribas: as far as I can tell, the type system is just a filter for allowable expressions in your language. If you remove that, you simply run the risk of increased runtime errors, but not necessarily a loss of purity since that's orthogonal to type systems. |
| 11:25:07 | × | yahb2 quits (~yahb2@2a01:4f8:c0c:5c7b::2) (Remote host closed the connection) |
| 11:25:19 | → | yahb2 joins (~yahb2@2a01:4f8:c0c:5c7b::2) |
| 11:25:25 | <kuribas> | Haskelytic: if you have a different syntax/monads for side effects, yes. |
| 11:25:26 | <hpc> | :P |
| 11:25:27 | <Haskelytic> | I could be wrong though XD |
| 11:25:41 | <kuribas> | Haskelytic: but then, managing monads without static types seems very tedious. |
| 11:25:55 | <Haskelytic> | Yeah that's actually what I was thinking of. |
| 11:25:55 | <maerwald> | kuribas: IO and monads have nothing to do with purity |
| 11:26:03 | <Franciman> | why maerwald ? |
| 11:26:17 | <maerwald> | because purity is not defined for execution |
| 11:26:22 | <Haskelytic> | Type systems appear to be a convenience rather than intrinsic to whether you have a pure FP lang or a traditional imperative lang |
| 11:26:42 | × | albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection) |
| 11:26:48 | <Haskelytic> | Sorry I'm just a noob thinking too hard about these distinctions because I'm fascinated by PLT |
| 11:26:49 | <kuribas> | monadic IO is an elegant solution for maintaining purity when adding side-effects to a language. |
| 11:26:58 | <maerwald> | kuribas: no |
| 11:27:06 | <kuribas> | It's not the only way, but the alternatives are mostly worse. |
| 11:27:39 | <maerwald> | the way purity is maintained for IO is the fact that evaluating IO does nothing and afair the RealWorld trick makes sure GHC doesn't re-order IO actions |
| 11:27:45 | <arahael> | There's plenty of other ways, but it's hard to reason about them in a lazy and potentially concurrent environment. |
| 11:27:46 | <kuribas> | maerwald: no, as in, it's not elegant? |
| 11:27:55 | <Haskelytic> | are there any pure functional languages that don't use static types? |
| 11:27:57 | <maerwald> | monads are completely irrelevant to that |
| 11:28:19 | <Franciman> | monads are the name you give to the form |
| 11:28:21 | <Franciman> | right? |
| 11:28:24 | <Franciman> | so it's the form that matters |
| 11:28:29 | <maerwald> | no |
| 11:28:41 | <Franciman> | i don't understand then xd |
| 11:28:44 | → | lyle joins (~lyle@104.246.145.85) |
| 11:29:12 | <kuribas> | Franciman: Monad is what you get when you take "bind" (>>=) and "pure", but abstract away IO. |
| 11:29:15 | <maerwald> | purity is about evaluation properties... "IO Monad" allows us to model execution. But execution is irrelevant to evaluation. |
| 11:29:39 | <Franciman> | ok |
| 11:29:40 | <kuribas> | Franciman: so (pure :: a -> IO a) => (pure :: Monad m => a -> m a) |
| 11:29:45 | <Franciman> | i think i understand |
| 11:29:46 | <maerwald> | if execution was relevant to evaluation, you wouldn't have a pure language to begin with |
| 11:29:59 | <Franciman> | the trick is that main is not evaluated |
| 11:30:01 | <Franciman> | but executed |
| 11:30:06 | <kuribas> | Franciman: which happens to be a very useful abstraction. |
| 11:30:29 | <maerwald> | Haskell was pure before monads. They are irrelevant for purity. |
| 11:30:41 | <Franciman> | ok ok i understand |
| 11:30:45 | <kuribas> | Franciman: funny thing, many languages have monad syntax in the form of list comprehensions. |
| 11:30:52 | <Franciman> | thanks kuribas |
| 11:30:54 | <Franciman> | uh |
| 11:30:56 | <Franciman> | nifty |
| 11:30:59 | <Franciman> | never found any?! |
| 11:31:09 | <kuribas> | it's just not generalized. |
| 11:31:22 | <Haskelytic> | maerwald: I don't quite understand the distinction you are making there. To make a guess, evaluation (for haskell) is about lambda calculus term rewriting versus execution which maps the evaluation strategy onto a von neumann machine? |
| 11:31:28 | <hpc> | even funnier thing, many languages have monad syntax in the form of async! |
| 11:31:38 | <hpc> | and null |
| 11:31:55 | <hpc> | Monad is everywhere |
| 11:32:29 | <Haskelytic> | hpc: so are the natural numbers :) |
| 11:32:50 | → | albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8) |
| 11:33:47 | <Haskelytic> | https://hackage.haskell.org/package/base-4.16.1.0/docs/Prelude.html#t:Int |
| 11:33:54 | <maerwald> | Haskelytic: "execution maps the evaluation strategy onto a van neumann machine" ... I think that's rather what GHC does at compile time, because we don't have functional hardware. |
| 11:34:36 | <Haskelytic> | on a more serious matter, why is Int guaranteed to be 29 bits signed 2s comp? That's such a weird width when machines go up in powers of 2 (e.g., 8/16/32 ...) |
| 11:34:55 | <kuribas> | Haskelytic: note that haskell functions aren't pure since they can be non-total (crash with an error, or loop forever). |
| 11:35:09 | <maerwald> | kuribas: purity doesn't exclude bottom |
| 11:35:42 | <maerwald> | a pure function doesn't have to be total |
| 11:36:04 | × | jgeerds quits (~jgeerds@55d45f48.access.ecotel.net) (Ping timeout: 248 seconds) |
| 11:36:13 | <boxscape> | Haskelytic: https://stackoverflow.com/questions/7786662/bit-size-of-ghcs-int-type |
| 11:36:18 | <kuribas> | The problem is that in the absense of type information it becomes hard to determine the input domain. |
| 11:36:19 | <boxscape> | note that it's 30 bits |
| 11:36:44 | <Haskelytic> | boxscape: oops yeah forgot the sign bit |
| 11:36:47 | × | chele quits (~chele@user/chele) (Ping timeout: 260 seconds) |
| 11:36:53 | <Haskelytic> | boxscape: thanks for that link |
| 11:37:11 | <boxscape> | np |
| 11:37:31 | × | greenbourne277 quits (~greenbour@2001:4b98:dc2:45:216:3eff:fe8a:bbf0) (Quit: WeeChat 1.6) |
| 11:37:46 | → | chele joins (~chele@user/chele) |
| 11:39:47 | × | zaquest quits (~notzaques@5.130.79.72) (Remote host closed the connection) |
| 11:40:47 | <maerwald> | That's also why purity as a concept isn't even *that* important to the language user. It's more of an interesting property for compiler developers. The user is more interested in managing effects, imo. |
| 11:40:50 | <Haskelytic> | kuribas: giving up on types, you could always have runtime support for python/ruby-esque duck typing :) |
| 11:41:55 | <kuribas> | yes, but it is very impredictable due to the absense of contraints. |
| 11:42:11 | <arahael> | I dunno, purity helps reason things somewhat about a particular function, but even then, we assume that insane things aren't being done like unsafePerformIO, and most of the time, that assumption is safe. |
| 11:42:23 | × | gmg quits (~user@user/gehmehgeh) (Quit: Leaving) |
| 11:42:25 | × | rembo10 quits (~rembo10@main.remulis.com) (Quit: ZNC 1.8.2 - https://znc.in) |
| 11:42:27 | <kuribas> | which is simply solved in dynamic languages by running stuff in the repl, or in tests, and checking that it works. |
| 11:42:29 | <hpc> | kuribas: impredicateable? :P |
| 11:42:42 | <kuribas> | unpredictable? |
| 11:43:02 | → | rembo10 joins (~rembo10@main.remulis.com) |
| 11:43:08 | <hpc> | yeah, you made me think of impredicative types :D |
| 11:43:08 | <maerwald> | arahael: I find purity gives me zero help when looking at big IO functions. Because evaluation is a tiny part of my concern. I'm concerned about what happens when I actually *execute* the function: does it bottom out? Throw exceptions? Delete all my files? |
| 11:43:16 | <maerwald> | Pure functions can do all that. |
| 11:43:24 | → | axel-bee joins (~axel-bee@alexbenishek.com) |
| 11:43:33 | <Haskelytic> | what does it even mean to program with *effects*? |
| 11:43:45 | <Haskelytic> | I'm reading the paper on Applicatives by Mcbride |
| 11:43:55 | <arahael> | maerwald: There is that, but, a big function can do a lot, so the scope of what it can do is huge. That in itself makes things tricky. |
| 11:44:35 | <maerwald> | Yes and purity or referential transparency don't help me with any of that. That's program design, effect handling, totality and whatnot. |
| 11:44:42 | → | zaquest joins (~notzaques@5.130.79.72) |
| 11:44:48 | <arahael> | maerwald: It's a difference between theoretical purity, and being able to reasona bout what a function does. |
| 11:45:15 | <arahael> | maerwald: Not sure how to explain it, but like, lets say you have a simple mathematical function - you give it a value, and you get a value out. Very simple. |
| 11:45:31 | <kuribas> | IMO specifing the input domain of a function is the greatest advantage of static types. Because they give the context over which the function is "expected" to behave well. |
| 11:45:42 | <Haskelytic> | just making sure I understood purity: it's basically the same thing as equational reasoning/referential transparency ya? |
| 11:45:46 | <arahael> | maerwald: Alternatively, you could have an entire complex machine that is technicall simple, and proven correct using Coq or whatever, but it's STILL difficult to reason about... |
| 11:46:02 | <maerwald> | Yes, I can do that in C as well. You can write referentially transparent functions in any language. You can even annotate it with __pure__ in C and tell the compiler to aggressively optimize it |
| 11:46:20 | <arahael> | maerwald: So perhaps you're right in that being able to say "this is pure" isn't a sufficient property. It has to be pure and have a well defined, and suitably constrainted, input domain. |
| 11:46:27 | <maerwald> | the point of a language being pure is that the compiler can make this assumption for ALL of your code |
| 11:46:31 | <maerwald> | that's what is interesting |
| 11:46:37 | <arahael> | maerwald: I think we're on the same page now. |
| 11:47:09 | <arahael> | maerwald: I would argue, however, that haskell _encourages_ purity, but you're right in that it doesn't require it, and doesn't require that they be total and perfect either. |
| 11:47:52 | → | xff0x joins (~xff0x@2405:6580:b080:900:22c7:1522:c1f2:cdfc) |
| 11:48:25 | n3t1 | is now known as n3t |
| 11:48:32 | <maerwald> | the reason you have to NOINLINE your top-level IORef you created with unsafePerformIO is because GHC assumes purity and will mess up your code |
| 11:49:35 | → | AlexNoo joins (~AlexNoo@94.233.241.100) |
| 11:49:42 | <dminuoso> | Gah, why is there no Data.Set.union with failure on conflict. :( |
| 11:49:49 | → | Alex_test joins (~al_test@94.233.241.100) |
| 11:50:02 | <dminuoso> | Something akin to alterF perhaps |
| 11:50:04 | → | AlexZenon joins (~alzenon@94.233.241.100) |
| 11:51:10 | <maerwald> | what I'm wondering is if you can reasonably implement laziness by default in a non-pure language |
| 11:51:56 | <maerwald> | I feel like that would be a disaster |
| 11:52:06 | <dminuoso> | Mmm, I recall there was such a programming language |
| 11:53:36 | <kuribas> | clojure has some lazyness |
| 11:53:59 | <kuribas> | which makes debugging pretty painful. |
| 11:54:10 | <maerwald> | yes, clojure is a disaster ;) |
| 11:54:16 | → | yrlnry joins (~yrlnry@pool-108-2-150-109.phlapa.fios.verizon.net) |
| 11:54:31 | <kuribas> | it has some good ideas |
| 11:54:39 | <kuribas> | like named arguments over positional arguments. |
| 11:54:40 | <dminuoso> | maerwald: what about prolog? |
| 11:55:33 | <maerwald> | I write all my GTK applications in prolog... https://github.com/keriharris/plgi |
| 11:55:54 | <dibblego> | CAL did it, unsuccessfully |
| 11:56:13 | <Franciman> | maerwald: is it nifty? |
| 11:56:32 | <maerwald> | Franciman: that was a joke, lol |
| 11:56:40 | <Franciman> | lol |
| 11:57:08 | <maerwald> | but thanks for assuming I'm insane xD |
| 11:57:15 | <dminuoso> | Writing GTK in prolog is what I have been dreaming of. |
| 11:57:17 | → | leeb joins (~leeb@KD106155004167.au-net.ne.jp) |
| 11:57:53 | <maerwald> | dminuoso: are you still in therapy about that dream? ;) |
| 11:58:10 | <dminuoso> | Heh |
| 11:58:26 | <dminuoso> | maerwald: do you have that github link from the katafication project by the way? |
| 11:59:17 | <maerwald> | dminuoso: https://gitlab.com/HaskellKatas/katas--proof-of-concept |
| 11:59:58 | <maerwald> | it's an 800LOC shell script |
| 12:00:44 | <maerwald> | you probably want to run that in a docker container |
| 12:01:47 | <dminuoso> | I probably dont. |
| 12:02:28 | <maerwald> | xD |
| 12:02:33 | <dminuoso> | Sin saber español no puedo auditar esto |
| 12:02:58 | <dminuoso> | Im not even sure what that shell script is or provides. |
| 12:04:27 | <maerwald> | "sudo apt install" and other things |
| 12:04:55 | <maerwald> | but I think it prompts the user beforehand |
| 12:05:08 | <dminuoso> | Im sure it will prompt me in spanish before asking to delete my efi vars. |
| 12:05:53 | <maerwald> | well, this was a prototype (I hope). It's probably possible to achieve all this directly on a website |
| 12:06:04 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds) |
| 12:06:30 | <dminuoso> | Gaah!. Data.Set.alterF :: (Ord a, Functor f) => (Bool -> f Bool) ...... |
| 12:06:34 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:1834:2996:45d4:5368) |
| 12:07:30 | <dminuoso> | So I cant have weakened equality, and then alterF to sort out a conflict between two things equal up to some isomorphism... |
| 12:07:41 | <dminuoso> | That is sad. :( |
| 12:08:13 | <dminuoso> | Guess `Map Thing ()` is it then |
| 12:10:02 | × | leeb quits (~leeb@KD106155004167.au-net.ne.jp) (Ping timeout: 260 seconds) |
| 12:10:59 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:1834:2996:45d4:5368) (Ping timeout: 255 seconds) |
| 12:11:25 | × | coot quits (~coot@213.134.190.95) (Quit: coot) |
| 12:23:20 | → | coot joins (~coot@213.134.190.95) |
| 12:26:22 | → | nate4 joins (~nate@98.45.169.16) |
| 12:31:37 | × | nate4 quits (~nate@98.45.169.16) (Ping timeout: 260 seconds) |
| 12:40:30 | → | briandaed joins (~briandaed@109.95.143.14.r.toneticgroup.pl) |
| 12:48:12 | → | Alleria joins (~textual@user/alleria) |
| 12:48:20 | → | isovector joins (~isovector@46-253-188-8.dynamic.monzoon.net) |
| 12:49:28 | × | isovector quits (~isovector@46-253-188-8.dynamic.monzoon.net) (Client Quit) |
| 12:54:41 | × | Haskelytic quits (~Haskelyti@118.179.211.17) (Quit: Client closed) |
| 12:55:53 | <geekosaur> | @activity |
| 12:55:53 | <lambdabot> | 1*total 1*private |
| 12:56:21 | Clint | squints. |
| 12:57:17 | <geekosaur> | testing, since I got a 0 response in private |
| 12:57:31 | geekosaur | is finally poking at updating his lambdabot documentation |
| 12:57:52 | <geekosaur> | I'll submit it upstream when I'm done so we'll finally have some real docs |
| 12:58:44 | × | Ram-Z_ quits (Ram-Z@2a01:7e01::f03c:91ff:fe57:d2df) (Ping timeout: 248 seconds) |
| 13:01:48 | → | shriekingnoise joins (~shrieking@201.212.175.181) |
| 13:02:50 | × | machinedgod quits (~machinedg@66.244.246.252) (Ping timeout: 240 seconds) |
| 13:04:52 | → | machinedgod joins (~machinedg@66.244.246.252) |
| 13:11:23 | × | Pickchea quits (~private@user/pickchea) (Ping timeout: 256 seconds) |
| 13:14:25 | → | pleo joins (~pleo@user/pleo) |
| 13:16:47 | × | qhong` quits (~qhong@rescomp-21-400677.stanford.edu) (Ping timeout: 244 seconds) |
| 13:17:07 | → | qhong joins (~qhong@rescomp-21-400677.stanford.edu) |
| 13:20:15 | → | Aleksejs joins (~Aleksejs@107.170.21.106) |
| 13:20:23 | → | zer0bitz joins (~zer0bitz@2001:2003:f748:2000:3d4c:9b16:2a18:880) |
| 13:20:57 | × | Aleksejs quits (~Aleksejs@107.170.21.106) (Remote host closed the connection) |
| 13:25:25 | → | Aleksejs joins (~Aleksejs@107.170.21.106) |
| 13:28:56 | × | acidjnk quits (~acidjnk@p200300d0c7068b9140c628021d98d447.dip0.t-ipconnect.de) (Ping timeout: 248 seconds) |
| 13:36:06 | → | pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
| 13:36:40 | × | pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Client Quit) |
| 13:39:14 | → | pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
| 13:41:17 | × | troydm1 quits (~troydm@host-176-37-124-197.b025.la.net.ua) (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) |
| 13:41:35 | → | troydm joins (~troydm@host-176-37-124-197.b025.la.net.ua) |
| 13:41:37 | × | dyeplexer quits (~dyeplexer@user/dyeplexer) (Ping timeout: 258 seconds) |
| 13:41:42 | → | [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470) |
| 13:48:21 | → | kayvank joins (~user@52-119-115-185.PUBLIC.monkeybrains.net) |
| 13:49:35 | → | BusConscious joins (~martin@ip5f5acff9.dynamic.kabel-deutschland.de) |
| 13:50:33 | byorgey_ | is now known as byorgey |
| 13:53:05 | × | chimp_ quits (~Psybur@c-76-123-45-25.hsd1.va.comcast.net) (Read error: No route to host) |
| 13:54:51 | → | dyeplexer joins (~dyeplexer@user/dyeplexer) |
| 14:01:12 | → | z0k joins (~z0k@206.84.143.2) |
| 14:03:02 | × | tabemann quits (~tabemann@2600:1700:7990:24e0:313b:ace9:50c8:d6b2) (Ping timeout: 255 seconds) |
| 14:07:50 | × | frost quits (~frost@user/frost) (Ping timeout: 252 seconds) |
| 14:08:22 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:1834:2996:45d4:5368) |
| 14:09:20 | × | CiaoSen quits (~Jura@p200300c9571294002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 255 seconds) |
| 14:09:20 | × | Vajb quits (~Vajb@2001:999:40:4c50:1b24:879c:6df3:1d06) (Read error: Connection reset by peer) |
| 14:09:24 | × | z0k quits (~z0k@206.84.143.2) (Read error: Connection reset by peer) |
| 14:10:19 | → | Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
| 14:12:41 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:1834:2996:45d4:5368) (Ping timeout: 252 seconds) |
| 14:15:44 | → | Ram-Z joins (~Ram-Z@li1814-254.members.linode.com) |
| 14:22:04 | × | littlebobeep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds) |
| 14:23:02 | → | ashln joins (~ashln@98.38.236.123) |
| 14:23:19 | × | nschoe quits (~quassel@178.251.84.79) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.) |
| 14:26:24 | × | Teacup quits (~teacup@user/teacup) (Read error: Connection reset by peer) |
| 14:36:38 | → | Kaipii joins (~Kaiepi@156.34.47.253) |
| 14:39:47 | × | Kaipei quits (~Kaiepi@156.34.47.253) (Ping timeout: 256 seconds) |
| 14:41:11 | × | Kaipii quits (~Kaiepi@156.34.47.253) (Remote host closed the connection) |
| 14:41:47 | → | Kaipii joins (~Kaiepi@156.34.47.253) |
| 14:42:11 | → | slack1256 joins (~slack1256@186.11.84.227) |
| 14:43:32 | → | neoatnebula joins (~neoatnebu@2409:4071:4d97:a972:18dc:ffd7:cedf:6ac4) |
| 14:49:04 | → | vicfred joins (~vicfred@user/vicfred) |
| 14:51:09 | × | Chai-T-Rex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection) |
| 14:51:30 | → | Chai-T-Rex joins (~ChaiTRex@user/chaitrex) |
| 14:53:20 | <slack1256> | What mental model explains when to use -qn1 on the RTS? When I heard about it, it always seemed fine to parallelize the scavenging proccess the GC does. |
| 14:53:48 | <slack1256> | See for example this bug report: https://gitlab.haskell.org/ghc/ghc/-/issues/14981 . |
| 14:54:30 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 14:54:50 | × | mima quits (~mmh@dhcp-138-246-3-188.dynamic.eduroam.mwn.de) (Ping timeout: 240 seconds) |
| 14:54:51 | × | Chai-T-Rex quits (~ChaiTRex@user/chaitrex) (Client Quit) |
| 14:55:29 | → | ChaiTRex joins (~ChaiTRex@user/chaitrex) |
| 15:04:05 | × | berberman quits (~berberman@user/berberman) (Quit: ZNC 1.8.2 - https://znc.in) |
| 15:04:24 | → | berberman joins (~berberman@user/berberman) |
| 15:05:35 | × | machinedgod quits (~machinedg@66.244.246.252) (Ping timeout: 255 seconds) |
| 15:06:32 | → | tromp joins (~textual@dhcp-077-249-230-040.chello.nl) |
| 15:07:25 | → | machinedgod joins (~machinedg@66.244.246.252) |
| 15:09:25 | AndrewYu | is now known as Andrew |
| 15:17:00 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 15:19:30 | <AndreasK> | slack1256: Imagine if you have just one object which is a terribly long linked list. Then to scavange one thread just has to walk the list. In that case more threads would only add more sync overhead. |
| 15:20:41 | <AndreasK> | slack1256: So I would say if your data is very "deep" but "narrow" then a low gc thread count is worth trying. But past a certain point the sync overhead in general grows quite large. So it's often reasonable to limit the gc to a handful of threads. |
| 15:22:04 | → | Teacup joins (~teacup@user/teacup) |
| 15:24:14 | → | littlebobeep joins (~alMalsamo@gateway/tor-sasl/almalsamo) |
| 15:26:46 | × | bliminse quits (~bliminse@host86-164-164-134.range86-164.btcentralplus.com) (Quit: leaving) |
| 15:28:42 | → | bliminse joins (~bliminse@host86-164-164-134.range86-164.btcentralplus.com) |
| 15:29:36 | × | __monty__ quits (~toonn@user/toonn) (Quit: leaving) |
| 15:30:23 | <slack1256> | AndreasK: Can you expand on the sync overhead? I thought that all HEC stop whenever there is collection (minor or major). The GC jobs take over the HECs and do their job. Where is the missing synchronization? |
| 15:31:17 | <AndreasK> | slack1256: Afaik the GC threads try to steal work from each other if they run out of things to scavange, which can cause contention. |
| 15:33:50 | <slack1256> | AndreasK: Yeah, they do work stealing. Do they need to take a lock primitive when ever they do so? or is the contention related to cache behaviour? |
| 15:34:21 | × | tubogram4 quits (~tubogram@user/tubogram) (Quit: See ya later!) |
| 15:34:40 | <mrianbloom> | Is it possible to express that for a particular GADT, every possible constructor has an instance of a particular typeclass? |
| 15:35:14 | × | Teacup quits (~teacup@user/teacup) (Remote host closed the connection) |
| 15:37:44 | <AndreasK> | slack1256: I only know about the effect but sadly I can't remember how it arises in this case. I think the work stealing uses a non-locking queue? |
| 15:37:54 | <AndreasK> | slack1256: There is a note here if you want to get deeper into it: https://gitlab.haskell.org/ghc/ghc/-/commit/f395c2cb2e6bb0b9f9f3d6deb923c72fe7433d37#6477e10756faf038741e63d1ad499a1df809fe10_2091_2133 |
| 15:38:04 | <c_wraith> | mrianbloom: I'm not 100% sure what you mean, but I'm guessing you're asking if it's possible to leave out a constraint because every type possible has an instance? |
| 15:38:06 | → | tubogram44 joins (~tubogram@user/tubogram) |
| 15:38:23 | → | acidjnk joins (~acidjnk@p200300d0c7068b91355c8005d240682c.dip0.t-ipconnect.de) |
| 15:39:21 | <c_wraith> | mrianbloom: if that's the question - no. constraints must still be specified. |
| 15:39:37 | <slack1256> | AndreasK: That is an awesome reference! |
| 15:39:54 | → | nfvnt^ joins (~nfvnt@50.223.50.178) |
| 15:40:20 | <c_wraith> | mrianbloom: I could explain further, but it'd be nice to know I'm actually answering the right question first. |
| 15:40:26 | → | leeb joins (~leeb@KD106155004167.au-net.ne.jp) |
| 15:40:26 | <mrianbloom> | Yes, well I'm trying to pattern match on an instance of a GADT that is wrapped in an existential. |
| 15:40:51 | <mrianbloom> | But I want to do so in a polymorphic way. |
| 15:41:19 | <mrianbloom> | Let me explain that another way. |
| 15:41:49 | <AndreasK> | slack1256: Not often people are happy that the answer is "read the source code" ;-) Glad you see it that way |
| 15:42:57 | × | merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 260 seconds) |
| 15:43:15 | <mrianbloom> | I have an expression type that is a GADT that expresses the inputs and outputs of various operations. When I evaluate those expressions, I use a second GADT that stores all of the possible outcomes of different parts of the expression tree. |
| 15:44:08 | <mrianbloom> | I'm trying to add simple non recursive lambdas to my expression tree, but to do that I need to store my second result-GADT in a container and hide the type. |
| 15:45:09 | <mrianbloom> | The problem I'm having is that when I go from a lambda to a variable, I have to assert the type of the unwrapped GADT when it is taken out of the container. |
| 15:46:17 | <mrianbloom> | I don't know how to express that essentially if I'm able to construct a variable expression of a particular type, then an unwrap instance must exist. |
| 15:46:19 | × | nfvnt^ quits (~nfvnt@50.223.50.178) (Ping timeout: 246 seconds) |
| 15:46:54 | <c_wraith> | I'm not sure why you have to throw away the typing information as an intermediate step. If you could redesign to not do that, it would simplify a lot |
| 15:47:34 | → | nfvnt^ joins (~nfvnt@50.223.50.178) |
| 15:47:46 | <mrianbloom> | I think that in order to put my result GADT in something like a Data.Map, I need to put it inside of a wrapper that hides the type. |
| 15:48:26 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:1834:2996:45d4:5368) |
| 15:48:36 | <c_wraith> | ah, you mean for storing the list of bindings? |
| 15:48:49 | <c_wraith> | Well, it's true that Data.Map doesn't do very well at that. |
| 15:48:55 | <c_wraith> | But it's not your only option |
| 15:49:25 | <mrianbloom> | Yes, So for example when I apply a lambda, I store the value being applied to a variable in a Data.Map, then when I arrive at an instance of the variable I need to look it up. |
| 15:49:47 | <mrianbloom> | What would be better? |
| 15:50:18 | <geekosaur> | @hackage dependent-map ? |
| 15:50:18 | <lambdabot> | https://hackage.haskell.org/package/dependent-map ? |
| 15:50:32 | <mrianbloom> | I'll take a look, thank you. |
| 15:51:34 | → | Teacup joins (~teacup@user/teacup) |
| 15:52:10 | × | haskl[error] quits (~haskl@user/haskl) (Ping timeout: 240 seconds) |
| 15:52:13 | → | haskl joins (~haskl@user/haskl) |
| 15:52:41 | × | coot quits (~coot@213.134.190.95) (Quit: coot) |
| 15:53:47 | → | merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) |
| 15:53:59 | → | Cupcakus joins (~Cupcakus@c-73-205-77-141.hsd1.fl.comcast.net) |
| 15:54:33 | × | Teacup quits (~teacup@user/teacup) (Remote host closed the connection) |
| 15:55:44 | <slack1256> | AndreasK: Well, you gave an specific pointer into the code, that is different :-) . |
| 15:55:55 | <slack1256> | Plus Simon code is a pleasure to read. |
| 15:56:10 | × | MajorBiscuit quits (~MajorBisc@wlan-145-94-164-215.wlan.tudelft.nl) (Ping timeout: 240 seconds) |
| 16:00:10 | × | merijn quits (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds) |
| 16:01:59 | × | tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 16:03:28 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:1834:2996:45d4:5368) (Remote host closed the connection) |
| 16:03:43 | → | tromp joins (~textual@dhcp-077-249-230-040.chello.nl) |
| 16:06:40 | → | Teacup joins (~teacup@user/teacup) |
| 16:09:50 | × | jlamothe quits (~jlamothe@198.251.60.209) (Quit: Lost terminal) |
| 16:14:30 | × | Kaipii quits (~Kaiepi@156.34.47.253) (Read error: Connection reset by peer) |
| 16:14:55 | → | Kaipii joins (~Kaiepi@156.34.47.253) |
| 16:16:15 | → | segfaultfizzbuzz joins (~segfaultf@135-180-3-34.static.sonic.net) |
| 16:16:42 | → | causal joins (~user@2001:470:ea0f:3:329c:23ff:fe3f:1e0e) |
| 16:17:16 | → | coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) |
| 16:17:23 | <segfaultfizzbuzz> | do implementations in different languages represent mostly an ordered collection of things? |
| 16:18:56 | <segfaultfizzbuzz> | that is to say, different implementations of, for example a function, may carry stronger and stronger guarantees (e.g. totality) |
| 16:19:34 | × | nfvnt^ quits (~nfvnt@50.223.50.178) (Ping timeout: 246 seconds) |
| 16:20:17 | × | raym quits (~raym@user/raym) (Ping timeout: 260 seconds) |
| 16:22:53 | <shapr> | dsal: right now the only metric in my library is "run property tests until coverage stops increasing" and leancheck takes less than 100 tests to get best-yet coverage, where quickcheck takes about a thousand |
| 16:25:57 | → | raym joins (~raym@user/raym) |
| 16:26:34 | → | merijn joins (~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) |
| 16:27:07 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:1834:2996:45d4:5368) |
| 16:27:55 | → | nate4 joins (~nate@98.45.169.16) |
| 16:28:50 | × | titibandit quits (~titibandi@2a00:8a60:c000:1:8a13:bf74:b2:8d47) (Remote host closed the connection) |
| 16:28:56 | → | econo joins (uid147250@user/econo) |
| 16:31:04 | <geekosaur> | segfaultfizzbuzz, I think we are missing context for your question |
| 16:31:25 | × | raym quits (~raym@user/raym) (Ping timeout: 256 seconds) |
| 16:32:20 | × | coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot) |
| 16:32:23 | → | raym joins (~raym@user/raym) |
| 16:32:32 | × | nate4 quits (~nate@98.45.169.16) (Ping timeout: 246 seconds) |
| 16:32:32 | × | sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 250 seconds) |
| 16:32:54 | → | slac43983 joins (~slack1256@191.126.227.66) |
| 16:34:05 | <dsal> | shapr: Oh neat. I've been hearing good things about leancheck lately, so I might have to check it out. |
| 16:34:13 | <dsal> | (you've mentioned it three times, otherwise I don't think I'd heard of it) |
| 16:35:04 | × | slack1256 quits (~slack1256@186.11.84.227) (Ping timeout: 248 seconds) |
| 16:36:35 | slac43983 | is now known as slack1256 |
| 16:38:16 | × | acidjnk quits (~acidjnk@p200300d0c7068b91355c8005d240682c.dip0.t-ipconnect.de) (Ping timeout: 248 seconds) |
| 16:39:03 | → | nfvnt^ joins (~nfvnt@50.223.50.178) |
| 16:39:07 | × | pavonia quits (~user@user/siracusa) (Quit: Bye!) |
| 16:39:20 | <geekosaur> | @ask int-e so I finished updating my bot commands documentation. do you want me to submit it as a patch? and if so, would you prefer the admin commands be separated? |
| 16:39:20 | <lambdabot> | Consider it noted. |
| 16:41:10 | → | Hanicef joins (~gustaf@81-229-9-108-no92.tbcn.telia.com) |
| 16:41:15 | ← | Hanicef parts (~gustaf@81-229-9-108-no92.tbcn.telia.com) () |
| 16:43:27 | × | yrlnry quits (~yrlnry@pool-108-2-150-109.phlapa.fios.verizon.net) (Remote host closed the connection) |
| 16:43:30 | → | _xor joins (~xor@72.49.198.103) |
| 16:44:26 | × | nfvnt^ quits (~nfvnt@50.223.50.178) (Remote host closed the connection) |
| 16:44:27 | × | raym quits (~raym@user/raym) (Ping timeout: 256 seconds) |
| 16:44:47 | → | nfvnt^ joins (~nfvnt@50.223.50.178) |
| 16:45:05 | → | raym joins (~raym@user/raym) |
| 16:48:56 | × | ccntrq quits (~Thunderbi@172.209.94.92.rev.sfr.net) (Remote host closed the connection) |
| 16:50:00 | → | coot joins (~coot@213.134.190.95) |
| 16:52:16 | → | __monty__ joins (~toonn@user/toonn) |
| 16:52:20 | × | pleo quits (~pleo@user/pleo) (Ping timeout: 248 seconds) |
| 16:56:52 | <shapr> | Is there a good way to do multi-line strings in Haskell? |
| 16:57:13 | <geekosaur> | define "good" |
| 16:57:17 | <shapr> | ha, ok |
| 16:57:23 | <shapr> | what's the best way to do multi-line strings in Haskell? |
| 16:57:33 | <geekosaur> | string gaps are built in. there's some multiline string quasiquoters on hackage |
| 16:57:58 | <segfaultfizzbuzz> | context: i'm trying to get a vague idea of what it means to implement something in a language |
| 16:58:00 | <shapr> | is a string gap the \foo\ ? |
| 16:58:12 | <geekosaur> | yeh |
| 16:58:20 | <segfaultfizzbuzz> | and the best thing i can think of is that languages vary in terms of the strength of guarantees they provide to the implementation |
| 16:58:33 | <Franciman> | if you don't care about newlines, you can also do the evil |
| 16:58:37 | <Franciman> | "aaaa" ++ |
| 16:58:39 | <Franciman> | "bbbb" ++ |
| 16:58:42 | <Franciman> | "ccc" |
| 16:58:45 | <segfaultfizzbuzz> | for example, perhaps a haskell implementation means memory safety whereas a C implementation does not |
| 16:59:04 | <segfaultfizzbuzz> | and that there is a list of guarantees which we can apply to the implementation |
| 16:59:35 | <segfaultfizzbuzz> | totality, linear resource management, thread safety, lock-free-ness, memory safety,... i don't know what this full list would look like |
| 16:59:40 | → | yrlnry joins (~yrlnry@pool-108-2-150-109.phlapa.fios.verizon.net) |
| 17:01:06 | <segfaultfizzbuzz> | and so i am thinking that i can understand the space of programming languages as providing more and more of these guarantees on the code |
| 17:01:22 | × | ulvarrefr quits (~user@185.24.53.152) (Remote host closed the connection) |
| 17:02:08 | <segfaultfizzbuzz> | with the upshot being that there really are objectively "better" and "worse" implementations which have stronger and weaker guarantees provided by the implementation |
| 17:02:26 | <geekosaur> | typically you're trading something off |
| 17:02:35 | <geekosaur> | rather than objectively better/worse |
| 17:03:14 | <segfaultfizzbuzz> | the exception here perhaps being performance |
| 17:03:51 | <geekosaur> | C was intended for writing operating systems. you need to be able to write to arbitrary addresses for e.g. memory mapped device I/O |
| 17:03:54 | <segfaultfizzbuzz> | but perhaps performance comes from additional assumptions which could be separated from the implmentation |
| 17:04:56 | × | leeb quits (~leeb@KD106155004167.au-net.ne.jp) (Ping timeout: 248 seconds) |
| 17:04:59 | <geekosaur> | the language itself rarely has much to do with performance |
| 17:05:15 | <segfaultfizzbuzz> | well i was using that as an example but ok |
| 17:08:41 | <geekosaur> | what happens when we take all of your examples away and you're still barking up the wrong alley? |
| 17:09:09 | <segfaultfizzbuzz> | ok well i still don't understand what it means to implement something |
| 17:10:22 | <segfaultfizzbuzz> | and i was putting forward the idea that the difference between one implementation (in a particular language) and another is defined by the guarantees that it imposes on the code... otherwise i don't know what an implementation is |
| 17:11:46 | <geekosaur> | it's a choice |
| 17:12:49 | <geekosaur> | that choice may not be made for reasons of strict "better" or "worse", but may be more relative "better for xxx" where "xxx" may not be relevant to all subsequent users (as with C; it became popular not because it was good, but because it was *cheap*) |
| 17:13:14 | × | tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 17:13:40 | <geekosaur> | application writing isn't playing to C's strengths |
| 17:14:01 | <geekosaur> | kernel writing is |
| 17:14:36 | → | slac96933 joins (~slack1256@191.125.99.67) |
| 17:14:52 | × | segfaultfizzbuzz quits (~segfaultf@135-180-3-34.static.sonic.net) (Ping timeout: 246 seconds) |
| 17:14:59 | <geekosaur> | welp |
| 17:15:07 | × | alp quits (~alp@user/alp) (Ping timeout: 260 seconds) |
| 17:15:12 | <geekosaur> | wonder how much of that they saw, and how much made an impact |
| 17:15:59 | <geekosaur> | think they may have a bad case of rational assumption |
| 17:16:52 | × | slack1256 quits (~slack1256@191.126.227.66) (Ping timeout: 260 seconds) |
| 17:20:02 | × | zeenk quits (~zeenk@2a02:2f04:a013:9000:e45d:7fb3:ec71:e806) (Quit: Konversation terminated!) |
| 17:21:24 | × | chele quits (~chele@user/chele) (Remote host closed the connection) |
| 17:22:07 | × | nfvnt^ quits (~nfvnt@50.223.50.178) (Ping timeout: 260 seconds) |
| 17:22:09 | <mrianbloom> | Working on the dependent mapping. Is there a specific convention that deriveArgDict expects? |
| 17:22:16 | → | pleo joins (~pleo@user/pleo) |
| 17:22:23 | <mrianbloom> | Got an odd TH error. |
| 17:23:00 | → | jgeerds joins (~jgeerds@55d45f48.access.ecotel.net) |
| 17:24:04 | × | littlebobeep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds) |
| 17:24:16 | <tomsmeding> | mrianbloom: what error are you getting |
| 17:24:37 | × | cosimone quits (~user@93-44-186-171.ip98.fastwebnet.it) (Remote host closed the connection) |
| 17:24:40 | <tomsmeding> | (also what do you need ArgDict for) |
| 17:24:56 | <mrianbloom> | "The exact Name ‘a_Xpyh’ is not in scope" |
| 17:25:13 | <tomsmeding> | oh that's uninformative |
| 17:25:24 | <mrianbloom> | I need to create a key type for a dependent map basically. |
| 17:25:48 | <tomsmeding> | that just needs GEq and GCompare right |
| 17:26:20 | <mrianbloom> | Yes |
| 17:27:14 | <tomsmeding> | I've worked a bit with dependent-map in the past and I've never seen ArgDict |
| 17:27:20 | × | pleo quits (~pleo@user/pleo) (Ping timeout: 248 seconds) |
| 17:27:26 | <mrianbloom> | I see. |
| 17:27:35 | <mrianbloom> | Ok maybe my approach is wrong. |
| 17:28:13 | <mrianbloom> | I basically just need a mapping from an Int to a specific GADT. |
| 17:28:54 | <tomsmeding> | `DMap f g` is morally `[exists a. (f a, g a)]`, but with logarithmic-time lookup instead of linear-time lookup |
| 17:29:22 | <tomsmeding> | the idea is that the key type and the value type both have a type parameter, and these match |
| 17:29:43 | <tomsmeding> | Int doesn't have a type parameter, so in order to key a DMap with an Int, you have to wrap it in a newtype with a phantom type parameter or something |
| 17:29:51 | → | gmg joins (~user@user/gehmehgeh) |
| 17:30:04 | <tomsmeding> | in fact I've written code that has almost precisely that: https://github.com/tomsmeding/accelerate/blob/no-explode/src/Data/Array/Accelerate/Trafo/AD/Common.hs#L59 |
| 17:30:06 | <mrianbloom> | Ok, but if my g type is multilayered than I need to construct a multi layered f type. |
| 17:30:18 | <tomsmeding> | `s t` is a singleton for the type `t` |
| 17:30:33 | <tomsmeding> | this DLabel is used as a key in a DMap lots of times |
| 17:30:41 | <mrianbloom> | I see, ok let me study this code. |
| 17:30:42 | → | Tuplanolla joins (~Tuplanoll@91-159-69-173.elisa-laajakaista.fi) |
| 17:30:48 | <tomsmeding> | there is a lot of code though, sorry :p |
| 17:31:20 | <tomsmeding> | oh and lab ~ Int |
| 17:31:31 | <tomsmeding> | so it's just a pair of an Int and a singleton for `t` |
| 17:31:40 | <tomsmeding> | and the corresponding value is some `g t` |
| 17:31:46 | <mrianbloom> | I see. |
| 17:32:08 | <tomsmeding> | the GEq/GCompare instances are here https://github.com/tomsmeding/accelerate/blob/no-explode/src/Data/Array/Accelerate/Trafo/AD/Common.hs#L171-L184 |
| 17:34:53 | <tomsmeding> | mrianbloom: what was the thing about a multilayered g? |
| 17:35:19 | <tomsmeding> | naively it sounds like that should take a newtype wrapper that puts the type parameter in the right place, but not sure if I'm understanding you correctly |
| 17:36:33 | <tomsmeding> | like, if you want `A t |-> B (C (D t))`, then make `newtype X t = X (B (C (D t)))` and write `A t |-> X t` |
| 17:37:23 | <mrianbloom> | Ah |
| 17:37:48 | <mrianbloom> | What is the |-> operator? |
| 17:38:03 | <tomsmeding> | DMap |
| 17:38:22 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:1834:2996:45d4:5368) (Remote host closed the connection) |
| 17:38:30 | <tomsmeding> | informal notation to indicate "map with key [left-hand side] and value [right-hand side]" |
| 17:38:30 | → | zebrag joins (~chris@user/zebrag) |
| 17:38:51 | <tomsmeding> | alternatively, `DMap A (\t -> B (C (D t)))` if Haskell had type-level lambda's |
| 17:39:12 | <mrianbloom> | Got it, my nested GADTs have more than one type variable, is that possible? |
| 17:39:30 | <tomsmeding> | is there more than one type variable that needs to be shared with the key? |
| 17:39:52 | <tomsmeding> | DMap just matches the last type parameter of the key with the last type parameter of the value; it doesn't care what other parameters come before those |
| 17:40:03 | <tomsmeding> | A in that example can be `Y a b c d e` if you want |
| 17:40:09 | <tomsmeding> | (-> Y a b c d e t) |
| 17:40:28 | <tomsmeding> | `Either e` is a functor |
| 17:41:11 | → | pleo joins (~pleo@user/pleo) |
| 17:42:54 | <mrianbloom> | Just to give some context, so basically these are wrappers around arrays that I'm storing. The outer wrapper determines if the array is a single item or batch (so has an extra dimension), next layer is determines the type of data the array represents, and then depending on the second layer there could be a third layer that determines the layout of an image (so RGBA vs Mono) |
| 17:43:27 | <tomsmeding> | what's the key type, and what's the value type? |
| 17:43:32 | <tomsmeding> | (ideally) |
| 17:45:12 | <mrianbloom> | So in my attempt to store various result arrays in the variable-environment of an expression evaluation, I just wanted to index the variables with integers. |
| 17:45:43 | <tomsmeding> | except the array objects have type parameters that depend on the integer/ |
| 17:45:47 | <tomsmeding> | *? |
| 17:46:01 | <mrianbloom> | I believe those integer keys need a GADT wrapper that specifies the type. |
| 17:46:21 | <mrianbloom> | In order to store these results in the DMap. |
| 17:46:22 | <tomsmeding> | not necessarily GADT, depending on how you represent it, but yes |
| 17:46:46 | <tomsmeding> | well, if you have a type parameter of the map value (the array object) that depends on the key |
| 17:46:55 | → | waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) |
| 17:47:03 | <tomsmeding> | (if the type of the value doesn't depend on the key, then obviously the answer is to just use Map) |
| 17:47:18 | <mrianbloom> | No the type depends on the key. |
| 17:48:19 | <tomsmeding> | it _might_ be enough to say `newtype Key t = Key Int`, depending on how you work with those keys |
| 17:48:51 | <tomsmeding> | the information about which type the value has needs to come from _somewhere_; with DMap, it comes from the type of the key |
| 17:49:14 | <tomsmeding> | hence if you're able to put that type information in the key, DMap works; if you aren't, then DMap doesn't work |
| 17:49:22 | <mrianbloom> | Basically when I'm traversing the expression tree and I encounter a lambda, I store that result in a map. When I encounter a variable instance I need to grab the result. |
| 17:49:35 | <mrianbloom> | Let me drop some code into replit. |
| 17:50:43 | → | segfaultfizzbuzz joins (~segfaultf@135-180-3-34.static.sonic.net) |
| 17:51:51 | <mrianbloom> | This doesn't run because it's pulled from all over my codebase, but it gives you the flavor. https://replit.com/@IanBloom/ActualBriskMicrokernel#Main.hs |
| 17:52:30 | <mrianbloom> | I haven't been able to construct storeVar or loadVar |
| 17:53:05 | <tomsmeding> | how should I intuitively read the 'r' type variable? |
| 17:53:39 | <mrianbloom> | that would be the state of the expression, basically has it been allocated or not. |
| 17:53:54 | <tomsmeding> | so irrelevant for the issue at hand? |
| 17:54:00 | <mrianbloom> | pretty much |
| 17:54:05 | <tomsmeding> | ok |
| 17:54:15 | <mrianbloom> | But in general this is pretty complicated. |
| 17:54:28 | <tomsmeding> | first thing that catches my eye, might not be the problem but just saying in case: the type of Let looks highly fishy to me |
| 17:54:33 | × | segfaultfizzbuzz quits (~segfaultf@135-180-3-34.static.sonic.net) (Client Quit) |
| 17:54:52 | <tomsmeding> | PhenoExpr has a type parameter that indicates the type of the expression, but the _environment_ of the expression is not reflected on the type level |
| 17:55:22 | <tomsmeding> | hence given a Var node, you have no guarantee that 1. that variable is even in scope, and 2. it was declared with the type that it occurs with here |
| 17:55:41 | <mrianbloom> | I see, the type of PhenoExpr just indicates the result type of the expression. |
| 17:55:44 | <tomsmeding> | in particular (2.) feels relevant, but I might be wrong, haven't read revalExprOps yet |
| 17:55:47 | <tomsmeding> | yeah |
| 17:56:40 | × | dyeplexer quits (~dyeplexer@user/dyeplexer) (Remote host closed the connection) |
| 17:57:00 | → | tromp joins (~textual@dhcp-077-249-230-040.chello.nl) |
| 17:57:22 | <mrianbloom> | So to get say the input type for and Op2 you need to know the type of the POp2 that it is constructed with. |
| 17:57:40 | <tomsmeding> | where, line 44? |
| 17:57:55 | <mrianbloom> | Yes. |
| 17:58:25 | → | sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) |
| 17:58:46 | <mrianbloom> | By the way this actually works without Var and Let. |
| 17:59:26 | <tomsmeding> | how far is (\phd -> do { env <- get; return (M.lookup pid env) }) from being correct for loadVar? |
| 17:59:34 | <tomsmeding> | um, with a fromJust potentially |
| 17:59:35 | <mrianbloom> | It's when I tried to add that feature that I entered the fifth circle. |
| 17:59:58 | <tomsmeding> | oops s/phd/pid/ |
| 18:00:01 | <mrianbloom> | That's exactly right |
| 18:00:32 | × | bliminse quits (~bliminse@host86-164-164-134.range86-164.btcentralplus.com) (Quit: leaving) |
| 18:00:44 | <tomsmeding> | mrianbloom: even if storeVar does what it should do, you should still restore the old environment after the recurse on line 50 |
| 18:00:49 | × | JimL quits (~quassel@89-162-2-132.fiber.signal.no) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.) |
| 18:00:49 | <tomsmeding> | or switch from State to Reader |
| 18:01:02 | <tomsmeding> | a variable should not be in scope anymore after the Let is done |
| 18:01:11 | → | JimL joins (~quassel@89-162-2-132.fiber.signal.no) |
| 18:01:59 | <tomsmeding> | yeah and storeVar seems to be the analogous thing with M.insert |
| 18:02:04 | <mrianbloom> | That's a good point. The PhenoIds are actually constructed in a Monad that prevents duplicates so I didn't bother with that. |
| 18:02:17 | <tomsmeding> | heh, I guess that makes this work |
| 18:02:25 | <tomsmeding> | still, no reason not to use Reader I think |
| 18:02:47 | <mrianbloom> | Yeah, this is for work by the way, otherwise I'd link the whole codebase. |
| 18:02:55 | → | bliminse joins (~bliminse@host86-164-164-134.range86-164.btcentralplus.com) |
| 18:03:12 | <tomsmeding> | 1. simpler conceptually, 2. more robust against changes in how you generate IDs, 3. the DMap doesn't grow indefinitely so you might get a small speedup |
| 18:03:15 | <tomsmeding> | sure |
| 18:03:39 | <mrianbloom> | We are hiring (cough) haskell consultants and coders btw. |
| 18:03:58 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:1834:2996:45d4:5368) |
| 18:04:01 | <tomsmeding> | did I answer your question already, by the way? I'm slightly lost on what the question was again, sorry :p |
| 18:04:12 | <tomsmeding> | mrianbloom: I'm early in year 2 of a 5-year PhD |
| 18:04:18 | <tomsmeding> | I'll be here for a bit :p |
| 18:05:56 | <mrianbloom> | Well, let me know about that. It could be as low commitment as just a code review etc. |
| 18:06:56 | <tomsmeding> | mrianbloom: what's the company? |
| 18:08:41 | → | benin joins (~benin@183.82.27.33) |
| 18:11:09 | → | littlebobeep joins (~alMalsamo@gateway/tor-sasl/almalsamo) |
| 18:18:04 | × | yrlnry quits (~yrlnry@pool-108-2-150-109.phlapa.fios.verizon.net) (Remote host closed the connection) |
| 18:18:42 | → | yrlnry joins (~yrlnry@pool-108-2-150-109.phlapa.fios.verizon.net) |
| 18:21:09 | → | cosimone joins (~user@93-44-186-171.ip98.fastwebnet.it) |
| 18:22:02 | → | alp joins (~alp@user/alp) |
| 18:22:10 | <shapr> | mrianbloom: I'm an unemployed Haskeller |
| 18:22:30 | × | Cupcakus quits (~Cupcakus@c-73-205-77-141.hsd1.fl.comcast.net) (Ping timeout: 240 seconds) |
| 18:23:01 | × | elkcl quits (~elkcl@broadband-37-110-156-162.ip.moscow.rt.ru) (Remote host closed the connection) |
| 18:23:03 | × | yrlnry quits (~yrlnry@pool-108-2-150-109.phlapa.fios.verizon.net) (Ping timeout: 256 seconds) |
| 18:23:28 | <mrianbloom> | Slide right into my DMs. |
| 18:23:31 | → | elkcl joins (~elkcl@broadband-37-110-156-162.ip.moscow.rt.ru) |
| 18:23:38 | → | nfvnt^ joins (~nfvnt@50.223.50.178) |
| 18:24:28 | × | gdd quits (~gdd@129.199.146.230) (Ping timeout: 272 seconds) |
| 18:27:18 | → | Guest18 joins (~Guest18@188.27.129.27) |
| 18:29:05 | <gentauro_> | mrianbloom: let me guess. Crypto, NTF, … the usual suspects? |
| 18:29:21 | <Guest18> | Hi, I have library.h and library.a. I'd like to use them through FFI in a library, not executable. Is it possible to specify this somehow in Cabal? I was able to do this in a test executable. Thanks. |
| 18:29:26 | gentauro_ | when I write NTF I mean NFT |
| 18:29:37 | × | tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 18:30:51 | → | tromp joins (~textual@dhcp-077-249-230-040.chello.nl) |
| 18:33:04 | → | mima joins (~mmh@aftr-62-216-207-119.dynamic.mnet-online.de) |
| 18:33:12 | nefercheprure | is now known as TMA |
| 18:33:18 | → | yrlnry joins (~yrlnry@pool-108-2-150-109.phlapa.fios.verizon.net) |
| 18:33:28 | <mrianbloom> | No blockchains. |
| 18:33:39 | <mrianbloom> | Just say no. |
| 18:33:59 | × | nfvnt^ quits (~nfvnt@50.223.50.178) (Remote host closed the connection) |
| 18:34:30 | <dsal> | git is the only blockchain for me |
| 18:35:16 | → | Pickchea joins (~private@user/pickchea) |
| 18:35:22 | → | hydrangea joins (~hydrangea@c-73-128-193-154.hsd1.md.comcast.net) |
| 18:35:31 | <maerwald[m]> | dsal: I wonder if there's a git implementation via smart contracts |
| 18:36:13 | × | slac96933 quits (~slack1256@191.125.99.67) (Read error: Connection reset by peer) |
| 18:36:34 | <dsal> | I'm dissatisfied with the environmental impact of my commits. |
| 18:37:16 | → | slack1256 joins (~slack1256@186.11.84.227) |
| 18:37:40 | <tomsmeding> | dsal: then you just need to write correct code in one go |
| 18:38:02 | <tomsmeding> | Guest18: what error or problem are you getting? |
| 18:38:21 | <geekosaur[m]> | Guest18: I think Cabal expects static archives to be named `libsomething.a` (the `lib` part is required) |
| 18:39:52 | → | littlebo1eep joins (~alMalsamo@gateway/tor-sasl/almalsamo) |
| 18:40:53 | × | neoatnebula quits (~neoatnebu@2409:4071:4d97:a972:18dc:ffd7:cedf:6ac4) (Quit: Client closed) |
| 18:42:04 | × | littlebobeep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds) |
| 18:43:23 | <Guest18> | I'm going by this tutorial https://sakshamsharma.com/2018/02/haskell-golang-ffi/ and at the end it says that this may not be possible |
| 18:44:02 | × | hydrangea quits (~hydrangea@c-73-128-193-154.hsd1.md.comcast.net) (Quit: Leaving) |
| 18:44:09 | → | littlebobeep joins (~alMalsamo@gateway/tor-sasl/almalsamo) |
| 18:44:23 | <Guest18> | I wrote some bindings for https://github.com/go-enry/go-enry, and I'd like to integrate them properly into my project, haven't tried it yet, it only works in a test executable. |
| 18:44:24 | ← | jakalx parts (~jakalx@base.jakalx.net) (Error from remote client) |
| 18:45:04 | × | littlebo1eep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds) |
| 18:45:09 | <Guest18> | But the project has a classic structure, everything defined in the library, only Main.hs in the executable stanza. |
| 18:46:37 | → | mixfix41 joins (~sdenynine@user/mixfix41) |
| 18:46:39 | <geekosaur> | right, static archives have a lot of limitations. go shared if at all possible |
| 18:48:11 | <geekosaur> | I think you could actually do it by manually copyingt the archive, editing the package registry, and doing `ghc-pkg recache`, but it'd be fragile and would of course break again the next time it got rebuilt |
| 18:49:41 | × | Pickchea quits (~private@user/pickchea) (Ping timeout: 256 seconds) |
| 18:49:48 | × | kimjetwav quits (~user@2607:fea8:2340:da00:1c36:e65:50a7:b564) (Remote host closed the connection) |
| 18:49:49 | <geekosaur> | actually you should be able to look at any library which has a "cbits", hm |
| 18:51:34 | × | tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 18:52:38 | <geekosaur> | oh, you're providing the .a from outside. yeh, I think it needs to be in a library directory and not relative, because nothing else will be able to find it unless you copy and hack up the package db entry as I mentioned |
| 18:54:04 | <Guest18> | Hmm, there seems to be a "make linux-shared" command in the Makefile. I'll try going in that direction. I've only tried "make static". |
| 18:54:27 | <Guest18> | Seems like it generates libenry.h and libenry.so |
| 18:54:40 | <Guest18> | Hm, I hope this works.. |
| 18:56:17 | → | tromp joins (~textual@dhcp-077-249-230-040.chello.nl) |
| 18:56:29 | → | kenran joins (~kenran@200116b82b7c6f000dc991b93662c611.dip.versatel-1u1.de) |
| 18:56:54 | × | kenran quits (~kenran@200116b82b7c6f000dc991b93662c611.dip.versatel-1u1.de) (Client Quit) |
| 19:03:43 | → | fserucas joins (~fserucas@119.65.114.89.rev.vodafone.pt) |
| 19:04:10 | → | Cupcakus joins (~Cupcakus@c-73-205-77-141.hsd1.fl.comcast.net) |
| 19:05:08 | <tomsmeding> | Guest18: geekosaur: it seems that if you embed an absolute path to the location of the library in the .cabal file, it can work -- but that path should probably still hold the .a when the _executable_ is compiled |
| 19:05:12 | <tomsmeding> | so kind of ugly |
| 19:07:02 | <geekosaur[m]> | Yes but only when compiled |
| 19:07:07 | <geekosaur[m]> | Better than nothing |
| 19:08:41 | → | acidjnk joins (~acidjnk@p200300d0c7068b91355c8005d240682c.dip0.t-ipconnect.de) |
| 19:09:32 | <tomsmeding> | in case it's useful this is how that it looks https://github.com/tomsmeding/temp-static-lib-in-hs-lib |
| 19:10:14 | → | Haskelytic joins (~Haskelyti@118.179.211.17) |
| 19:10:42 | <shapr> | I like talking to mrianbloom, fun person on a video call |
| 19:11:17 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 258 seconds) |
| 19:15:30 | × | pleo quits (~pleo@user/pleo) (Ping timeout: 258 seconds) |
| 19:16:16 | <mrianbloom> | Thanks |
| 19:16:54 | → | pleo joins (~pleo@user/pleo) |
| 19:17:47 | × | jgeerds quits (~jgeerds@55d45f48.access.ecotel.net) (Ping timeout: 240 seconds) |
| 19:21:04 | × | ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 240 seconds) |
| 19:21:18 | × | fserucas quits (~fserucas@119.65.114.89.rev.vodafone.pt) (Quit: Leaving) |
| 19:21:22 | → | ChaiTRex joins (~ChaiTRex@user/chaitrex) |
| 19:21:28 | × | pleo quits (~pleo@user/pleo) (Ping timeout: 248 seconds) |
| 19:22:33 | → | pleo joins (~pleo@user/pleo) |
| 19:23:54 | × | Guest18 quits (~Guest18@188.27.129.27) (Ping timeout: 252 seconds) |
| 19:25:19 | <mrianbloom> | tomsmeding: So to answer you question, loadVar would be called when a Var is traversed and the Var constructor knows the type of the value that needs to be pulled from the environment. So it's just a matter of turning the var id, which is just a wrapped Int and turning it into the right kind of key to lookup the right kind of GADT in the map. |
| 19:25:46 | → | kimjetwav joins (~user@2607:fea8:2340:da00:592f:dda3:fea6:1b4c) |
| 19:26:30 | <tomsmeding> | mrianbloom: oh *facepalm* now I remember what the issue with this is: PhenoId needs GEq and you can't implement GEq for PhenoId without unsafeCoerce |
| 19:26:55 | <tomsmeding> | to do it in a type-safe way you need some witness (probably a GADT) of the type parameter in a PhenoId |
| 19:27:10 | × | pleo quits (~pleo@user/pleo) (Ping timeout: 240 seconds) |
| 19:28:01 | <mrianbloom> | Right so there is a relationship between the type of the Var and the result type that the evaluation is producing, that relationship is encoded in a type family. |
| 19:28:15 | → | pleo joins (~pleo@user/pleo) |
| 19:29:08 | <tomsmeding> | mrianbloom: you only need to be able to reconstruct the `t` in a `PhenoId t`; so basically, you need to be able to produce an equality between t and some concrete type given an `exists t. PhenoId t` |
| 19:29:20 | × | juri_ quits (~juri@178.63.35.222) (Ping timeout: 250 seconds) |
| 19:29:52 | × | machinedgod quits (~machinedg@66.244.246.252) (Ping timeout: 260 seconds) |
| 19:29:54 | <tomsmeding> | the reason is that while you could just look up the key in the DMap and take whatever value comes out, for type safety you must check that the t parameter of the key you're passing into lookup matches the t parameter of the thing in the DMap |
| 19:29:59 | <mrianbloom> | Yes so initially I tried wrapping the items in the map in a Some wrapper. |
| 19:30:08 | <tomsmeding> | that part is what GEq/GCompare does over Eq/Ord |
| 19:30:28 | <mrianbloom> | Right. |
| 19:30:42 | <tomsmeding> | mrianbloom: right, that way you avoid having to produce that type equality, but in turn you lose knowledge about what type of value you get back |
| 19:31:18 | <tomsmeding> | if you want the magical behaviour of "if it's the same Int, it's the same type as well", then that basically means implementing GEq using Eq.(==) and `unsafeCoerce Refl` |
| 19:32:07 | <tomsmeding> | but that's highly type-unsafe, because you can break that by doing `\(PhenoId n) -> PhenoId (n + 1)` on some Var node in the tree |
| 19:32:50 | × | pleo quits (~pleo@user/pleo) (Ping timeout: 240 seconds) |
| 19:34:00 | → | pleo joins (~pleo@user/pleo) |
| 19:34:18 | <mrianbloom> | Well this is the thing. It is not type safe, but since the I actually use a Monad to build my expressions, I can do a runtime check of the type when I take it out of the map. |
| 19:35:13 | <tomsmeding> | mrianbloom: oh the value (the PhenotypeOf) does have some type witness embedded in it? |
| 19:35:44 | <mrianbloom> | Yes it's three nested GADTs. |
| 19:36:43 | <tomsmeding> | is that type information available at the point where you generate a PhenoId? |
| 19:36:49 | × | tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 19:36:56 | <tomsmeding> | if so, you should embed a type witness in a PhenoId |
| 19:37:07 | <tomsmeding> | (type witness being a GADT that determines the type on a pattern match) |
| 19:37:26 | <mrianbloom> | No the Id is generated when the expression is built. |
| 19:37:34 | <tomsmeding> | (e.g. data PhType a where TInt :: PhType Int ; TDouble :: PhType Double ; ...) |
| 19:37:48 | <tomsmeding> | how do you know that the expression is type-correct? |
| 19:37:57 | <tomsmeding> | or do you just not know that? |
| 19:38:05 | <mrianbloom> | The expression is also a GADT. |
| 19:38:27 | <tomsmeding> | but, like, if I stuff `PhenoId 42` in a Var node, that type checks everywhere |
| 19:38:52 | × | _xor quits (~xor@72.49.198.103) (Quit: brb) |
| 19:39:58 | <tomsmeding> | if you have certainty that if the expression contains `PhenoId 42 :: PhenoId a` that the VarEnv will then contain something at id 42 with the same type `a`, then you'd be looking to reify that certainty into a GADT that you put into PhenoId |
| 19:40:07 | <mrianbloom> | Ah... no. In order to construct a Var Int you would need a PhenoId Int. |
| 19:40:30 | <tomsmeding> | if there is no way you can know this for _certain_, statically, then there is no way to construct the evidence, and you are doomed (:p) to untypedness, so you'd need to go the Some way |
| 19:40:47 | <tomsmeding> | or use `unsafeCoerce Refl` and risk type-unsafety in case the IDs get mixed up |
| 19:41:26 | <mrianbloom> | Well here's the thing. The type family ETy describes the relationship between the type of the expression and the type of the evaluation. |
| 19:42:06 | <mrianbloom> | type family ETy (r :: *) (t :: *) = (x :: *) |
| 19:42:51 | <mrianbloom> | So in this case my r parameter is some singleton type and t is the expression type. |
| 19:43:01 | <mrianbloom> | x is the type that I'm producing. |
| 19:43:27 | <tomsmeding> | and the corresponding variable reference would have type `PhenoId x`? Or `PhenoId t`? |
| 19:43:45 | <mrianbloom> | The reference has PhenoId t |
| 19:43:59 | <mrianbloom> | But given r and t I can devise x |
| 19:44:21 | <mrianbloom> | And r is passed explicitely into revalExprOps |
| 19:44:34 | × | littlebobeep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds) |
| 19:44:37 | <tomsmeding> | then in any case you'll need to do `newtype Value f r t = Value (PhenotypeOf r (ETy f t))`, and set `type VarEnv f r = DMap PhenoId (Value f r)` |
| 19:45:02 | <tomsmeding> | because the type parameter of the PhenoId corresponds not with the last type parameter of PhenotypeOf (which is `ETy f t`), but with `t` |
| 19:45:12 | <mrianbloom> | Aha |
| 19:45:30 | <mrianbloom> | Ok let me see if I can make that compile. |
| 19:46:34 | × | coot quits (~coot@213.134.190.95) (Quit: coot) |
| 19:46:44 | → | tromp joins (~textual@dhcp-077-249-230-040.chello.nl) |
| 19:50:30 | → | littlebobeep joins (~alMalsamo@gateway/tor-sasl/almalsamo) |
| 19:57:04 | × | littlebobeep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds) |
| 19:59:14 | → | jinsun__ joins (~jinsun@user/jinsun) |
| 19:59:23 | → | littlebobeep joins (~alMalsamo@gateway/tor-sasl/almalsamo) |
| 19:59:58 | → | slac14060 joins (~slack1256@191.125.99.67) |
| 20:02:11 | × | slack1256 quits (~slack1256@186.11.84.227) (Ping timeout: 246 seconds) |
| 20:02:39 | → | Guest27 joins (~Guest27@2601:281:d47f:1590::2df) |
| 20:03:29 | × | jinsun quits (~jinsun@user/jinsun) (Ping timeout: 255 seconds) |
| 20:04:59 | × | lyle quits (~lyle@104.246.145.85) (Quit: WeeChat 3.5) |
| 20:06:01 | × | tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 20:07:24 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 20:07:54 | <mrianbloom> | Dear god, it almost does. |
| 20:08:35 | <mrianbloom> | It just needs a GEq and GCompare instance for PhenoId |
| 20:08:54 | <tomsmeding> | which you can't provide without runtime type evidence in the PhenoId :) |
| 20:09:20 | <mrianbloom> | Is that really true? |
| 20:09:42 | <tomsmeding> | geq :: GEq f => f a -> f b -> Maybe (a :~: b) |
| 20:09:46 | <tomsmeding> | where f ~ PhenoId |
| 20:10:07 | <tomsmeding> | and: data a :~: b where Refl :: a :~: a |
| 20:10:33 | <tomsmeding> | if you want to return "they are equal", you must satisfy the type checker that those type parameters a and b are equal |
| 20:11:01 | <tomsmeding> | you can do that by returning `Just (unsafeCoerce Refl)`, but then you risk explosions when someone messes up the IDs |
| 20:11:28 | <mrianbloom> | Ok could I make a typeclass that creates the type evidence since I know it when I store the var and when I look it up. |
| 20:12:22 | <tomsmeding> | putting it in a type class won't work because when you get a `PhenoId a` you can't require any constraints of that `a` -- the `a` is completely existenail |
| 20:12:52 | <tomsmeding> | _however_, if you can write that type class, then you should be able to run the code in the type class at the time when you _construct_ the PhenoId, and put the resulting evidence right there in the Phenoid |
| 20:12:53 | → | tromp joins (~textual@dhcp-077-249-230-040.chello.nl) |
| 20:13:00 | <mrianbloom> | 'a' is tied to the Var constructor |
| 20:13:09 | <mrianbloom> | and tied to the Let constructor |
| 20:13:26 | <tomsmeding> | neither of which are necessarily tied to the variables in the type signature of the evaluator |
| 20:13:34 | <tomsmeding> | so you have no place to put the constraint |
| 20:13:50 | <tomsmeding> | unless you want to put the constraint on the Var constructor itself, which is totally possible and will solve the problem |
| 20:14:01 | <tomsmeding> | except, at that point, why not just put it in the PhenoId directly :p |
| 20:14:05 | → | stackdroid18 joins (~stackdroi@user/stackdroid) |
| 20:14:49 | <mrianbloom> | Well the problem is that you don't know PhenotypeOf r (ETy f a) until you run the evaluation. |
| 20:15:05 | <mrianbloom> | But you do know it when you store the var. |
| 20:15:21 | <tomsmeding> | if you know it when you store the var, then put that evidence in the var! |
| 20:16:08 | <mrianbloom> | So one idea is to create another newtype Key f r t |
| 20:16:16 | × | littlebobeep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Remote host closed the connection) |
| 20:16:19 | <mrianbloom> | Which holds the phenoId |
| 20:16:23 | <tomsmeding> | mrianbloom: this compiles and runs https://paste.tomsmeding.com/7bzcLxHJ |
| 20:16:33 | → | littlebobeep joins (~alMalsamo@gateway/tor-sasl/almalsamo) |
| 20:16:40 | <tomsmeding> | mrianbloom: plus the type evidence |
| 20:17:13 | <mrianbloom> | Wow, ok. |
| 20:17:25 | <tomsmeding> | (oh the Eq/Ord instances on PhType and PhenoId are unused) |
| 20:18:40 | <tomsmeding> | (build-depends: base, dependent-map, some) |
| 20:18:51 | × | Guest27 quits (~Guest27@2601:281:d47f:1590::2df) (Quit: Client closed) |
| 20:21:18 | → | jakalx joins (~jakalx@base.jakalx.net) |
| 20:22:02 | <tomsmeding> | this can be made even more well-typed by encoding the environment (i.e. which variables are in scope) in the _type_ of a PhenoExpr; then a PhenoExpr can have no out-of-scope variables by definition, and you can statically check that a given VarEnv will contain all free variables in an expression |
| 20:22:58 | <tomsmeding> | but that comes at the cost of some flexibility, and also at the cost of some performance (unless you're willing to pull some nasty, but containable in a separate module, tricks in the definition of VarEnv) |
| 20:23:18 | <mrianbloom> | I don't think performance is important here. |
| 20:23:59 | <mrianbloom> | These are usually relatively small expressions that describe operations on very large arrays. |
| 20:24:15 | <tomsmeding> | sounds suspiciously like Accelerate :p |
| 20:24:29 | <tomsmeding> | and in fact Accelerate has this fully well-typed representation that I describe internally |
| 20:24:59 | <mrianbloom> | Yeah, I've been holding back the fact that these are Futhark arrays. |
| 20:25:11 | <mrianbloom> | Don't be mad. |
| 20:25:16 | <tomsmeding> | I'm not :) |
| 20:25:40 | <tomsmeding> | I'll be the first to admit that futhark not being an embedded language makes it easier to work with in some respects |
| 20:25:46 | <tomsmeding> | and also frankly its backends are more mature |
| 20:26:02 | <tomsmeding> | (though work is underway to improve the accelerate situation here) |
| 20:26:08 | <mrianbloom> | I rewrote the futhark haskell wrapper by the way. Though so far as I can tell only two people are using it. |
| 20:26:54 | <tomsmeding> | you and a coworker? :) |
| 20:27:08 | <mrianbloom> | No, a guy in grad school. |
| 20:27:19 | <mrianbloom> | He wrote the original wrapper. |
| 20:28:05 | <tomsmeding> | nice :) |
| 20:29:11 | <mrianbloom> | Here is the repo we are currently using https://gitlab.com/ianmbloom/futhask/-/tree/noskolem |
| 20:29:24 | → | nate4 joins (~nate@98.45.169.16) |
| 20:29:48 | <mrianbloom> | We were trying to get it to work with linear types but so far no success. |
| 20:30:00 | <tomsmeding> | ooh fancy |
| 20:30:40 | <mrianbloom> | Basically there is a pretty high risk of space leaks on the GPU when using Futhark and Haskell together. |
| 20:31:10 | <mrianbloom> | So it would be nice to right an API that makes those impossible on the Haskell side, but we haven't figured it out yet. |
| 20:31:11 | <tomsmeding> | oh right, the idea was to be able to garbage-collect unused arrays early? |
| 20:32:13 | → | jgeerds joins (~jgeerds@55d45f48.access.ecotel.net) |
| 20:33:08 | <mrianbloom> | Actually our idea is just to dereference an array every time it's used as the parameter of a kernel, so that if you want to use it twice you need to explicitly duplicate it. Then this would be enforced with linear types and you don't have to worry. |
| 20:33:13 | <tomsmeding> | I've done a small amount of stuff with linear types and that worked fine, but trying to wrap an API like this sounds more complicated |
| 20:33:35 | <tomsmeding> | ah, and then you can reference-count? |
| 20:34:31 | × | nate4 quits (~nate@98.45.169.16) (Ping timeout: 256 seconds) |
| 20:34:52 | <mrianbloom> | Right, so if you dereference an array and it's counter goes below 0 then you can tell the futhark library to deallocate it. |
| 20:34:54 | → | Guest18 joins (~Guest18@188.27.129.27) |
| 20:35:09 | <mrianbloom> | That all happens behind the scenes in the wrapper. |
| 20:35:17 | <tomsmeding> | yeah that's nice |
| 20:35:32 | → | pavonia joins (~user@user/siracusa) |
| 20:35:54 | <mrianbloom> | The API user just knows that they get a type error if they use an array twice without duplicating it. |
| 20:36:53 | <mrianbloom> | Unfortunately this is more difficult than it sounds. |
| 20:37:27 | <mrianbloom> | If linear types become part of the standard prelude, it might be more practical IMHO. |
| 20:37:43 | <tomsmeding> | were you using linear-base? |
| 20:38:11 | <tomsmeding> | without that it's almost impossible to work with the linear types in ghc I think |
| 20:40:25 | → | machinedgod joins (~machinedg@66.244.246.252) |
| 20:40:49 | → | yauhsien joins (~yauhsien@61-231-38-113.dynamic-ip.hinet.net) |
| 20:41:07 | <tomsmeding> | I'm off to bed though, hope this was helpful :) |
| 20:41:19 | <mrianbloom> | Very. Thanks a lot. |
| 20:43:16 | → | Pickchea joins (~private@user/pickchea) |
| 20:47:50 | × | yauhsien quits (~yauhsien@61-231-38-113.dynamic-ip.hinet.net) (Ping timeout: 240 seconds) |
| 20:48:16 | × | pleo quits (~pleo@user/pleo) (Ping timeout: 258 seconds) |
| 20:48:19 | → | nate4 joins (~nate@98.45.169.16) |
| 20:48:52 | → | yauhsien joins (~yauhsien@61-231-59-135.dynamic-ip.hinet.net) |
| 20:49:49 | → | mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475) |
| 20:49:53 | → | pleo joins (~pleo@user/pleo) |
| 20:57:16 | → | juri_ joins (~juri@178.63.35.222) |
| 20:58:01 | × | Guest18 quits (~Guest18@188.27.129.27) (Quit: Client closed) |
| 20:58:10 | × | AlexZenon quits (~alzenon@94.233.241.100) (Ping timeout: 246 seconds) |
| 20:58:10 | × | Alex_test quits (~al_test@94.233.241.100) (Ping timeout: 246 seconds) |
| 20:58:42 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
| 21:00:01 | × | AlexNoo quits (~AlexNoo@94.233.241.100) (Ping timeout: 256 seconds) |
| 21:02:07 | × | mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Remote host closed the connection) |
| 21:02:29 | → | mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475) |
| 21:04:05 | → | _ht joins (~quassel@231-169-21-31.ftth.glasoperator.nl) |
| 21:05:28 | × | Haskelytic quits (~Haskelyti@118.179.211.17) (Quit: Client closed) |
| 21:07:23 | × | mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds) |
| 21:14:56 | <shapr> | Quick question! Does anyone here use property testing in most or all of their Haskell projects? |
| 21:15:49 | × | kayvank quits (~user@52-119-115-185.PUBLIC.monkeybrains.net) (Read error: Connection reset by peer) |
| 21:20:25 | × | dsp quits (~dsp@cpc152107-haye27-2-0-cust227.17-4.cable.virginm.net) (Ping timeout: 256 seconds) |
| 21:20:26 | × | slac14060 quits (~slack1256@191.125.99.67) (Read error: Connection reset by peer) |
| 21:20:39 | → | slack1256 joins (~slack1256@186.11.82.227) |
| 21:22:32 | × | _ht quits (~quassel@231-169-21-31.ftth.glasoperator.nl) (Remote host closed the connection) |
| 21:22:45 | <maerwald> | when it makes sense |
| 21:24:44 | × | Kaipii quits (~Kaiepi@156.34.47.253) (Read error: Connection reset by peer) |
| 21:30:46 | <shapr> | maerwald: so, how many of your projects have property tests via quickcheck, hedgehog, leancheck, etc? |
| 21:33:43 | × | albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection) |
| 21:33:53 | <maerwald> | maybe half |
| 21:36:41 | × | __monty__ quits (~toonn@user/toonn) (Quit: leaving) |
| 21:39:55 | → | albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8) |
| 21:42:59 | <maerwald> | Most things I write either don't really have concrete properties or writing a useful Arbitrary instance is just too hard. So I find quickcheck only useful for small functions. |
| 21:48:27 | × | michalz quits (~michalz@185.246.204.109) (Remote host closed the connection) |
| 21:49:02 | × | mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection) |
| 21:49:52 | × | nate4 quits (~nate@98.45.169.16) (Ping timeout: 260 seconds) |
| 21:54:31 | × | Cupcakus quits (~Cupcakus@c-73-205-77-141.hsd1.fl.comcast.net) (Ping timeout: 246 seconds) |
| 21:57:08 | × | BusConscious quits (~martin@ip5f5acff9.dynamic.kabel-deutschland.de) (Remote host closed the connection) |
| 22:02:08 | → | qhong_ joins (~qhong@rescomp-21-400677.stanford.edu) |
| 22:03:53 | → | lukec_ joins (9dfd4d094e@2604:bf00:561:2000::10e) |
| 22:03:53 | → | bsima1_ joins (9d7e39c8ad@2604:bf00:561:2000::dd) |
| 22:03:53 | → | filwisher_ joins (2e6936c793@2604:bf00:561:2000::170) |
| 22:03:54 | → | samhh_ joins (7569f027cf@2604:bf00:561:2000::e4) |
| 22:03:54 | → | hongminhee_ joins (sid295@id-295.tinside.irccloud.com) |
| 22:03:57 | → | tdmm_ joins (1c9b9145fc@2604:bf00:561:2000::1c8) |
| 22:03:57 | → | fluffyballoon_ joins (45ce440a48@2604:bf00:561:2000::e2) |
| 22:03:58 | → | bookshelfdave_ joins (sid28102@id-28102.ilkley.irccloud.com) |
| 22:03:59 | → | defanor_ joins (~defanor@tart.uberspace.net) |
| 22:04:00 | → | dawdler_ joins (035b60b5aa@2604:bf00:561:2000::3b6) |
| 22:04:00 | → | loonycyborg_ joins (~loonycybo@chantal.wesnoth.org) |
| 22:04:03 | → | jakzale_ joins (6291399afa@user/jakzale) |
| 22:04:03 | → | kvakil_ joins (6f76c3db2e@2604:bf00:561:2000::40a) |
| 22:04:04 | → | sa1_ joins (sid7690@id-7690.ilkley.irccloud.com) |
| 22:04:07 | → | wallymathieu_ joins (sid533252@id-533252.uxbridge.irccloud.com) |
| 22:04:08 | → | Ankhers_ joins (e99e97ef8e@2604:bf00:561:2000::2a2) |
| 22:04:08 | → | grfn_ joins (sid449115@id-449115.helmsley.irccloud.com) |
| 22:04:08 | → | gonz______ joins (sid304396@id-304396.lymington.irccloud.com) |
| 22:04:11 | → | whez_ joins (sid470288@id-470288.lymington.irccloud.com) |
| 22:04:17 | → | evanrelf_ joins (3addc196af@2604:bf00:561:2000::f0) |
| 22:04:18 | × | cheater quits (~Username@user/cheater) (Ping timeout: 244 seconds) |
| 22:04:19 | → | jonrh_ joins (sid5185@id-5185.ilkley.irccloud.com) |
| 22:04:22 | → | fvr_ joins (ef3e56ca8b@2604:bf00:561:2000::3c4) |
| 22:04:25 | → | jmct_ joins (sid160793@id-160793.tinside.irccloud.com) |
| 22:04:26 | → | Techcable_ joins (~Techcable@user/Techcable) |
| 22:04:27 | → | ymherklotz_ joins (cb2c9cfbdd@2604:bf00:561:2000::29a) |
| 22:04:27 | → | b0o_ joins (0e4a0bf4c9@2604:bf00:561:2000::1bf) |
| 22:04:27 | → | shreyasminocha_ joins (51fdc93eda@user/shreyasminocha) |
| 22:04:27 | → | sm2n_ joins (ae95cb1267@user/sm2n) |
| 22:04:27 | → | raghavgururajan_ joins (ea769b8000@user/raghavgururajan) |
| 22:04:27 | → | jleightcap_ joins (7bc4014b62@user/jleightcap) |
| 22:04:27 | → | jkoshy_ joins (99b9359beb@user/jkoshy) |
| 22:04:32 | → | davetapley_ joins (sid666@id-666.uxbridge.irccloud.com) |
| 22:04:33 | → | elvishjerricco_ joins (sid237756@id-237756.helmsley.irccloud.com) |
| 22:04:34 | → | kevinsjoberg_ joins (sid499516@id-499516.lymington.irccloud.com) |
| 22:04:37 | → | tomgus1_ joins (~tomgus1@90.218.25.145) |
| 22:04:40 | → | dsal_ joins (sid13060@id-13060.lymington.irccloud.com) |
| 22:04:48 | → | agander_m_ joins (sid407952@id-407952.tinside.irccloud.com) |
| 22:04:48 | → | conjunctive_ joins (sid433686@id-433686.helmsley.irccloud.com) |
| 22:04:52 | → | Boarders__ joins (sid425905@id-425905.lymington.irccloud.com) |
| 22:04:53 | → | JSharp_ joins (sid4580@id-4580.lymington.irccloud.com) |
| 22:04:56 | → | sa_ joins (sid1055@id-1055.tinside.irccloud.com) |
| 22:05:04 | → | bw_ joins (sid2730@id-2730.ilkley.irccloud.com) |
| 22:05:05 | → | sunarch_ joins (sid526836@user/sunarch) |
| 22:06:50 | → | heath1 joins (~heath@user/heath) |
| 22:06:59 | → | cjay- joins (cjay@nerdbox.nerd2nerd.org) |
| 22:07:11 | → | swistak- joins (~swistak@185.21.216.141) |
| 22:07:19 | → | immae1 joins (~immae@2a01:4f8:141:53e7::) |
| 22:07:19 | → | xnyhps_ joins (~xnyhps@2a02:2770:3:0:216:3eff:fe67:3288) |
| 22:07:23 | × | defanor quits (~defanor@tart.uberspace.net) (Ping timeout: 250 seconds) |
| 22:07:23 | × | sa1 quits (sid7690@id-7690.ilkley.irccloud.com) (Ping timeout: 250 seconds) |
| 22:07:23 | × | jmct quits (sid160793@id-160793.tinside.irccloud.com) (Ping timeout: 250 seconds) |
| 22:07:23 | × | tomgus1 quits (~tomgus1@2a02:c7e:4229:d900:dea6:32ff:fe3d:d1a3) (Ping timeout: 250 seconds) |
| 22:07:23 | × | ymherklotz quits (cb2c9cfbdd@2604:bf00:561:2000::29a) (Ping timeout: 250 seconds) |
| 22:07:23 | × | jakzale quits (6291399afa@user/jakzale) (Ping timeout: 250 seconds) |
| 22:07:23 | × | lukec quits (9dfd4d094e@2604:bf00:561:2000::10e) (Ping timeout: 250 seconds) |
| 22:07:23 | × | loonycyborg quits (loonycybor@wesnoth/developer/loonycyborg) (Ping timeout: 250 seconds) |
| 22:07:23 | × | swistak quits (~swistak@185.21.216.141) (Ping timeout: 250 seconds) |
| 22:07:23 | × | Ankhers quits (e99e97ef8e@2604:bf00:561:2000::2a2) (Ping timeout: 250 seconds) |
| 22:07:23 | × | tdmm quits (1c9b9145fc@2604:bf00:561:2000::1c8) (Ping timeout: 250 seconds) |
| 22:07:23 | × | catern quits (~sbaugh@2604:2000:8fc0:b:a9c7:866a:bf36:3407) (Ping timeout: 250 seconds) |
| 22:07:23 | × | Boarders_ quits (sid425905@2a03:5180:f:2::6:7fb1) (Ping timeout: 250 seconds) |
| 22:07:23 | × | bookshelfdave quits (sid28102@id-28102.ilkley.irccloud.com) (Ping timeout: 250 seconds) |
| 22:07:23 | × | dsal quits (sid13060@id-13060.lymington.irccloud.com) (Ping timeout: 250 seconds) |
| 22:07:23 | × | sm2n quits (ae95cb1267@user/sm2n) (Ping timeout: 250 seconds) |
| 22:07:23 | × | jkoshy quits (99b9359beb@user/jkoshy) (Ping timeout: 250 seconds) |
| 22:07:23 | × | gonz_____ quits (sid304396@id-304396.lymington.irccloud.com) (Ping timeout: 250 seconds) |
| 22:07:23 | × | conjunctive quits (sid433686@id-433686.helmsley.irccloud.com) (Ping timeout: 250 seconds) |
| 22:07:23 | × | bw quits (sid2730@user/betawaffle) (Ping timeout: 250 seconds) |
| 22:07:23 | × | JSharp quits (sid4580@id-4580.lymington.irccloud.com) (Ping timeout: 250 seconds) |
| 22:07:23 | × | sunarch quits (sid526836@user/sunarch) (Ping timeout: 250 seconds) |
| 22:07:23 | × | hongminhee quits (sid295@2a03:5180:f::127) (Ping timeout: 250 seconds) |
| 22:07:23 | × | grfn quits (sid449115@2a03:5180:f:1::6:da5b) (Ping timeout: 250 seconds) |
| 22:07:23 | × | Raito_Bezarius quits (~Raito@wireguard/tunneler/raito-bezarius) (Ping timeout: 250 seconds) |
| 22:07:24 | × | Techcable quits (~Techcable@user/Techcable) (Ping timeout: 250 seconds) |
| 22:07:24 | × | dwt_ quits (~dwt_@c-98-198-103-176.hsd1.tx.comcast.net) (Ping timeout: 250 seconds) |
| 22:07:24 | × | fvr quits (ef3e56ca8b@2604:bf00:561:2000::3c4) (Ping timeout: 250 seconds) |
| 22:07:24 | × | kvakil quits (6f76c3db2e@2604:bf00:561:2000::40a) (Ping timeout: 250 seconds) |
| 22:07:24 | × | filwisher quits (2e6936c793@2604:bf00:561:2000::170) (Ping timeout: 250 seconds) |
| 22:07:24 | × | dawdler quits (035b60b5aa@user/dawdler) (Ping timeout: 250 seconds) |
| 22:07:24 | × | samhh quits (7569f027cf@2604:bf00:561:2000::e4) (Ping timeout: 250 seconds) |
| 22:07:24 | × | bsima1 quits (9d7e39c8ad@2604:bf00:561:2000::dd) (Ping timeout: 250 seconds) |
| 22:07:24 | tomgus1_ | is now known as tomgus1 |
| 22:07:24 | × | heath quits (~heath@user/heath) (Ping timeout: 250 seconds) |
| 22:07:24 | × | wallymathieu quits (sid533252@id-533252.uxbridge.irccloud.com) (Ping timeout: 250 seconds) |
| 22:07:24 | × | sa quits (sid1055@id-1055.tinside.irccloud.com) (Ping timeout: 250 seconds) |
| 22:07:24 | × | qhong quits (~qhong@rescomp-21-400677.stanford.edu) (Ping timeout: 250 seconds) |
| 22:07:24 | × | son0p quits (~ff@181.136.122.143) (Ping timeout: 250 seconds) |
| 22:07:24 | × | jonrh quits (sid5185@id-5185.ilkley.irccloud.com) (Ping timeout: 250 seconds) |
| 22:07:24 | × | elvishjerricco quits (sid237756@id-237756.helmsley.irccloud.com) (Ping timeout: 250 seconds) |
| 22:07:24 | × | kevinsjoberg quits (sid499516@id-499516.lymington.irccloud.com) (Ping timeout: 250 seconds) |
| 22:07:24 | × | synthmeat quits (~synthmeat@user/synthmeat) (Ping timeout: 250 seconds) |
| 22:07:24 | × | b0o quits (0e4a0bf4c9@2604:bf00:561:2000::1bf) (Ping timeout: 250 seconds) |
| 22:07:24 | × | jleightcap quits (7bc4014b62@user/jleightcap) (Ping timeout: 250 seconds) |
| 22:07:24 | × | fluffyballoon quits (45ce440a48@2604:bf00:561:2000::e2) (Ping timeout: 250 seconds) |
| 22:07:24 | × | evanrelf quits (3addc196af@2604:bf00:561:2000::f0) (Ping timeout: 250 seconds) |
| 22:07:24 | × | raghavgururajan quits (ea769b8000@user/raghavgururajan) (Ping timeout: 250 seconds) |
| 22:07:24 | × | shreyasminocha quits (51fdc93eda@user/shreyasminocha) (Ping timeout: 250 seconds) |
| 22:07:24 | × | sphynx quits (~xnyhps@2a02:2770:3:0:216:3eff:fe67:3288) (Ping timeout: 250 seconds) |
| 22:07:24 | × | immae quits (~immae@2a01:4f8:141:53e7::) (Ping timeout: 250 seconds) |
| 22:07:24 | × | lambdabot quits (~lambdabot@haskell/bot/lambdabot) (Ping timeout: 250 seconds) |
| 22:07:24 | × | davetapley quits (sid666@2a03:5180:f:5::29a) (Ping timeout: 250 seconds) |
| 22:07:24 | × | cjay quits (cjay@nerdbox.nerd2nerd.org) (Ping timeout: 250 seconds) |
| 22:07:24 | × | whez quits (sid470288@id-470288.lymington.irccloud.com) (Ping timeout: 250 seconds) |
| 22:07:24 | × | agander_m quits (sid407952@id-407952.tinside.irccloud.com) (Ping timeout: 250 seconds) |
| 22:07:24 | × | Unhammer quits (~Unhammer@user/unhammer) (Ping timeout: 250 seconds) |
| 22:07:24 | sa1_ | is now known as sa1 |
| 22:07:25 | jakzale_ | is now known as jakzale |
| 22:07:25 | ymherklotz_ | is now known as ymherklotz |
| 22:07:25 | tdmm_ | is now known as tdmm |
| 22:07:25 | jkoshy_ | is now known as jkoshy |
| 22:07:25 | bookshelfdave_ | is now known as bookshelfdave |
| 22:07:25 | Ankhers_ | is now known as Ankhers |
| 22:07:25 | fvr_ | is now known as fvr |
| 22:07:25 | bsima1_ | is now known as bsima1 |
| 22:07:25 | fluffyballoon_ | is now known as fluffyballoon |
| 22:07:25 | shreyasminocha_ | is now known as shreyasminocha |
| 22:07:25 | kvakil_ | is now known as kvakil |
| 22:07:25 | hongminhee_ | is now known as hongminhee |
| 22:07:25 | grfn_ | is now known as grfn |
| 22:07:25 | jonrh_ | is now known as jonrh |
| 22:07:25 | raghavgururajan_ | is now known as raghavgururajan |
| 22:07:25 | dsal_ | is now known as dsal |
| 22:07:25 | b0o_ | is now known as b0o |
| 22:07:25 | lukec_ | is now known as lukec |
| 22:07:25 | samhh_ | is now known as samhh |
| 22:07:25 | jleightcap_ | is now known as jleightcap |
| 22:07:25 | jmct_ | is now known as jmct |
| 22:07:26 | whez_ | is now known as whez |
| 22:07:26 | Techcable_ | is now known as Techcable |
| 22:07:26 | wallymathieu_ | is now known as wallymathieu |
| 22:07:26 | sm2n_ | is now known as sm2n |
| 22:07:27 | evanrelf_ | is now known as evanrelf |
| 22:07:27 | JSharp_ | is now known as JSharp |
| 22:07:28 | kevinsjoberg_ | is now known as kevinsjoberg |
| 22:07:30 | sunarch_ | is now known as sunarch |
| 22:07:31 | sa_ | is now known as sa |
| 22:07:43 | → | Unhammer joins (~Unhammer@user/unhammer) |
| 22:08:11 | × | matijja quits (~matijja@193.77.181.201) (Quit: ZNC 1.8.2 - https://znc.in) |
| 22:08:21 | × | gmg quits (~user@user/gehmehgeh) (Quit: Leaving) |
| 22:08:21 | × | littlebobeep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Remote host closed the connection) |
| 22:08:31 | → | dwt_ joins (~dwt_@c-98-198-103-176.hsd1.tx.comcast.net) |
| 22:08:52 | → | synthmeat joins (~synthmeat@user/synthmeat) |
| 22:08:58 | → | lambdabot joins (~lambdabot@silicon.int-e.eu) |
| 22:08:59 | × | lambdabot quits (~lambdabot@silicon.int-e.eu) (Changing host) |
| 22:08:59 | → | lambdabot joins (~lambdabot@haskell/bot/lambdabot) |
| 22:09:05 | → | littlebobeep joins (~alMalsamo@gateway/tor-sasl/almalsamo) |
| 22:09:19 | → | Raito_Bezarius joins (~Raito@wireguard/tunneler/raito-bezarius) |
| 22:10:08 | × | elvishjerricco_ quits (sid237756@id-237756.helmsley.irccloud.com) () |
| 22:10:27 | → | matijja joins (~matijja@193.77.181.201) |
| 22:10:29 | → | elvishjerricco joins (sid237756@id-237756.helmsley.irccloud.com) |
| 22:11:40 | bw_ | is now known as bw |
| 22:11:53 | × | bw quits (sid2730@id-2730.ilkley.irccloud.com) (Changing host) |
| 22:11:53 | → | bw joins (sid2730@user/betawaffle) |
| 22:13:08 | <dsal> | shapr: I tend to do as many as possible. I find that for many things where I might hand write input for a test, making broader arbitrary input isn't that much harder and usually helps. |
| 22:13:26 | <dsal> | I have plenty of exceptions, though. :) |
| 22:13:45 | → | cheater joins (~Username@user/cheater) |
| 22:15:06 | × | nicbk quits (~nicbk@user/nicbk) (Quit: nicbk) |
| 22:15:57 | × | juri_ quits (~juri@178.63.35.222) (Ping timeout: 256 seconds) |
| 22:17:29 | × | tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Read error: Connection reset by peer) |
| 22:23:52 | × | acidjnk quits (~acidjnk@p200300d0c7068b91355c8005d240682c.dip0.t-ipconnect.de) (Ping timeout: 248 seconds) |
| 22:24:18 | → | orc joins (sid509852@user/orc) |
| 22:24:32 | ← | orc parts (sid509852@user/orc) () |
| 22:25:08 | → | tromp joins (~textual@dhcp-077-249-230-040.chello.nl) |
| 22:26:02 | → | jmcarthur joins (~jmcarthur@c-73-29-224-10.hsd1.nj.comcast.net) |
| 22:27:49 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:1834:2996:45d4:5368) (Remote host closed the connection) |
| 22:28:24 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 22:29:16 | <maerwald[m]> | dsal: you can use QuickCheck to write unit tests, but that doesn't really make them property tests imo. |
| 22:30:26 | <dsal> | Sure, it can be a bit blurry. Someone at work wrote a test using hedgehog with a fixed value generator and one iteration because `===` provided better error messages. |
| 22:32:51 | × | jmcarthur quits (~jmcarthur@c-73-29-224-10.hsd1.nj.comcast.net) (Quit: My MacBook Air has gone to sleep. ZZZzzz…) |
| 22:32:57 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds) |
| 22:34:14 | → | jmcarthur joins (~jmcarthur@c-73-29-224-10.hsd1.nj.comcast.net) |
| 22:39:54 | × | jmcarthur quits (~jmcarthur@c-73-29-224-10.hsd1.nj.comcast.net) (Quit: My MacBook Air has gone to sleep. ZZZzzz…) |
| 22:40:20 | × | Midjak quits (~Midjak@82.66.147.146) (Quit: This computer has gone to sleep) |
| 22:40:37 | × | machinedgod quits (~machinedg@66.244.246.252) (Ping timeout: 260 seconds) |
| 22:42:22 | → | machinedgod joins (~machinedg@66.244.246.252) |
| 22:46:06 | → | jargon joins (~jargon@184.101.186.108) |
| 22:48:00 | × | tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 22:48:49 | × | Pickchea quits (~private@user/pickchea) (Ping timeout: 256 seconds) |
| 22:51:08 | → | dzdcnfzd joins (~dzdcnfzd@2600:387:5:805::a2) |
| 22:54:39 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:1834:2996:45d4:5368) |
| 22:56:28 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 246 seconds) |
| 23:01:22 | × | Colere quits (~colere@about/linux/staff/sauvin) (Ping timeout: 246 seconds) |
| 23:03:54 | → | juri_ joins (~juri@178.63.35.222) |
| 23:06:58 | → | Colere joins (~colere@about/linux/staff/sauvin) |
| 23:09:28 | × | dzdcnfzd quits (~dzdcnfzd@2600:387:5:805::a2) (Quit: Client closed) |
| 23:12:39 | → | zeenk joins (~zeenk@2a02:2f04:a013:9000:e45d:7fb3:ec71:e806) |
| 23:16:46 | → | Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915) |
| 23:20:34 | × | Topsi quits (~Topsi@dyndsl-095-033-095-142.ewe-ip-backbone.de) (Read error: Connection reset by peer) |
| 23:21:12 | × | zeenk quits (~zeenk@2a02:2f04:a013:9000:e45d:7fb3:ec71:e806) (Quit: Konversation terminated!) |
| 23:27:35 | × | vicfred quits (~vicfred@user/vicfred) (Quit: Leaving) |
| 23:28:56 | × | gurkenglas quits (~gurkengla@dslb-084-057-085-111.084.057.pools.vodafone-ip.de) (Ping timeout: 248 seconds) |
| 23:30:44 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 23:33:46 | → | tabemann joins (~tabemann@2600:1700:7990:24e0:df83:5bf2:4e42:22d0) |
| 23:41:34 | × | littlebobeep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds) |
| 23:45:27 | → | nate4 joins (~nate@98.45.169.16) |
| 23:50:07 | × | nate4 quits (~nate@98.45.169.16) (Ping timeout: 240 seconds) |
| 23:50:37 | × | hpc quits (~juzz@ip98-169-32-242.dc.dc.cox.net) (Ping timeout: 260 seconds) |
| 23:52:23 | → | hpc joins (~juzz@ip98-169-32-242.dc.dc.cox.net) |
| 23:59:50 | × | pleo quits (~pleo@user/pleo) (Ping timeout: 240 seconds) |
All times are in UTC on 2022-06-15.