Logs on 2021-12-28 (liberachat/#haskell)
| 00:00:38 | ← | qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection) |
| 00:00:39 | → | qrpnxz joins (abc4f95c31@user/qrpnxz) |
| 00:01:58 | ← | qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection) |
| 00:01:59 | → | qrpnxz joins (abc4f95c31@user/qrpnxz) |
| 00:06:42 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 00:07:43 | → | otherwise joins (~otherwise@2601:602:880:90f0:ec9b:47e1:eb31:33d5) |
| 00:09:36 | ← | qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection) |
| 00:09:37 | → | qrpnxz joins (abc4f95c31@user/qrpnxz) |
| 00:12:49 | → | ksqsf joins (~user@134.209.106.31) |
| 00:12:52 | <iphy> | EvanR: https://github.com/iphydf/hs-cimple/blob/fix/test/Language/Cimple/ASTSpec.hs#L38 |
| 00:12:57 | <iphy> | EvanR: this is getting unwieldy :P |
| 00:13:08 | <iphy> | it's kind of nice, but also kind of really not nice |
| 00:20:02 | ← | qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection) |
| 00:20:03 | → | qrpnxz joins (abc4f95c31@user/qrpnxz) |
| 00:20:25 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 00:20:25 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
| 00:20:25 | → | wroathe joins (~wroathe@user/wroathe) |
| 00:20:28 | × | __monty__ quits (~toonn@user/toonn) (Quit: leaving) |
| 00:22:17 | × | Gurkenglas quits (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 240 seconds) |
| 00:22:58 | → | kaph joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it) |
| 00:27:19 | × | max22- quits (~maxime@2a01cb0883359800f5f346d928347cfb.ipv6.abo.wanadoo.fr) (Remote host closed the connection) |
| 00:28:42 | ← | qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection) |
| 00:28:43 | → | qrpnxz joins (abc4f95c31@user/qrpnxz) |
| 00:32:05 | <EvanR> | yeah |
| 00:32:17 | ← | qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection) |
| 00:32:19 | → | qrpnxz joins (abc4f95c31@user/qrpnxz) |
| 00:32:46 | ← | qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection) |
| 00:32:50 | → | qrpnxz joins (abc4f95c31@user/qrpnxz) |
| 00:33:42 | <EvanR> | view patterns? |
| 00:34:57 | <pavonia> | qrpnxz: Something is wrong with your connection |
| 00:36:03 | × | Everything quits (~Everythin@37.115.210.35) (Quit: leaving) |
| 00:36:10 | <qrpnxz> | Hm? Alright |
| 00:40:31 | × | Tuplanolla quits (~Tuplanoll@91-159-68-119.elisa-laajakaista.fi) (Quit: Leaving.) |
| 00:40:37 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds) |
| 00:41:42 | × | otherwise quits (~otherwise@2601:602:880:90f0:ec9b:47e1:eb31:33d5) (Remote host closed the connection) |
| 00:42:43 | <iphy> | EvanR: yeah, maybe |
| 00:42:59 | × | neceve quits (~quassel@2.26.93.228) (Ping timeout: 256 seconds) |
| 00:44:00 | → | DNH joins (~DNH@2a02:8108:1100:16d8:88d3:fc83:402b:ce67) |
| 00:44:01 | <iphy> | EvanR: and maybe quasiquotes at some point |
| 00:44:48 | ← | qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection) |
| 00:44:50 | → | qrpnxz joins (abc4f95c31@user/qrpnxz) |
| 00:44:51 | → | otherwise joins (~otherwise@c-73-221-44-172.hsd1.wa.comcast.net) |
| 00:44:51 | × | otherwise quits (~otherwise@c-73-221-44-172.hsd1.wa.comcast.net) (Client Quit) |
| 00:44:59 | <iphy> | for now, I'm going to focus on the actual algorithms I want to write |
| 00:45:59 | ← | qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection) |
| 00:46:01 | → | qrpnxz joins (abc4f95c31@user/qrpnxz) |
| 00:47:02 | ← | qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection) |
| 00:47:04 | → | qrpnxz joins (abc4f95c31@user/qrpnxz) |
| 00:48:00 | <iphy> | EvanR: https://github.com/iphydf/hs-cimple/blob/fix/test/Language/Cimple/ASTSpec.hs#L53 |
| 00:48:31 | ← | qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection) |
| 00:48:33 | → | qrpnxz joins (abc4f95c31@user/qrpnxz) |
| 00:49:56 | ← | qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection) |
| 00:49:58 | → | qrpnxz joins (abc4f95c31@user/qrpnxz) |
| 00:50:19 | ← | qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection) |
| 00:50:21 | → | qrpnxz joins (abc4f95c31@user/qrpnxz) |
| 00:50:48 | ← | qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection) |
| 00:50:50 | → | qrpnxz joins (abc4f95c31@user/qrpnxz) |
| 00:54:57 | × | talismanick quits (~talismani@2601:644:8500:8350::94b) (Ping timeout: 240 seconds) |
| 00:56:37 | × | vysn quits (~vysn@user/vysn) (Ping timeout: 240 seconds) |
| 00:57:03 | ← | qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: Replaced by new connection) |
| 00:57:05 | → | qrpnxz joins (abc4f95c31@user/qrpnxz) |
| 01:00:19 | <pragma-> | settle down qrpnxz |
| 01:02:07 | <geekosaur> | they've been bouncing for the past 3 hours, I doubt it's going to stop :( |
| 01:02:09 | ← | qrpnxz parts (abc4f95c31@user/qrpnxz) (Disconnected: closed) |
| 01:02:57 | <geekosaur> | …or maybe I'm wrong. One can hope |
| 01:03:27 | → | qrpnxz joins (abc4f95c31@user/qrpnxz) |
| 01:03:50 | <geekosaur> | welp |
| 01:04:07 | ChanServ | sets mode +o geekosaur |
| 01:04:23 | geekosaur | sets mode +b *!*@user/qrpnxz |
| 01:04:48 | geekosaur | sets mode -o geekosaur |
| 01:04:50 | ← | qrpnxz parts (abc4f95c31@user/qrpnxz) () |
| 01:05:16 | <geekosaur> | ban will time out in 30 minutes |
| 01:05:17 | × | ksqsf quits (~user@134.209.106.31) (Ping timeout: 240 seconds) |
| 01:06:57 | × | acidjnk quits (~acidjnk@pd9e0bdc0.dip0.t-ipconnect.de) (Ping timeout: 240 seconds) |
| 01:09:01 | → | euouae joins (~euouae@user/euouae) |
| 01:09:19 | <euouae> | Hello, where can I read more about type theory? Types, kinds, etc |
| 01:11:20 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:b417:46a:3118:ab81) (Remote host closed the connection) |
| 01:14:07 | × | burnsidesLlama quits (~burnsides@dhcp168-010.wadham.ox.ac.uk) (Remote host closed the connection) |
| 01:14:34 | → | burnsidesLlama joins (~burnsides@dhcp168-010.wadham.ox.ac.uk) |
| 01:15:16 | <sm2n> | TAPL is a decent start |
| 01:15:31 | <sm2n> | (that's the book Types and Programming Languages) |
| 01:15:33 | × | Midjak quits (~Midjak@may53-1-78-226-116-92.fbx.proxad.net) (Quit: This computer has gone to sleep) |
| 01:18:18 | <euouae> | Thank you. Do you happen to know a more brief text? I might look into TAPL but it is large. |
| 01:18:37 | × | burnsidesLlama quits (~burnsides@dhcp168-010.wadham.ox.ac.uk) (Ping timeout: 240 seconds) |
| 01:19:02 | × | jespada quits (~jespada@87.74.33.157) (Ping timeout: 240 seconds) |
| 01:21:56 | → | dsrt^ joins (~dsrt@207.5.54.6) |
| 01:22:35 | → | jespada joins (~jespada@87.74.33.157) |
| 01:22:59 | <euouae> | I might be able to google the terms from the index and find some papers or something a bit more brief |
| 01:23:05 | <EvanR> | https://github.com/michaelt/martin-lof |
| 01:24:42 | <euouae> | EvanR, lol, looks like they don't care for copyright |
| 01:26:18 | × | shapr quits (~user@pool-100-36-247-68.washdc.fios.verizon.net) (Remote host closed the connection) |
| 01:26:27 | × | Morrow quits (~quassel@bzq-110-168-31-106.red.bezeqint.net) (Remote host closed the connection) |
| 01:26:34 | → | shapr joins (~user@pool-100-36-247-68.washdc.fios.verizon.net) |
| 01:28:23 | <euouae> | So `A Theory of Types` followed by `An Intuitionistic Theory of Types` is what I'm looking for? |
| 01:28:57 | × | kaph quits (~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Ping timeout: 240 seconds) |
| 01:30:53 | × | shapr quits (~user@pool-100-36-247-68.washdc.fios.verizon.net) (Remote host closed the connection) |
| 01:31:21 | <euouae> | Hm, wikipedia says that Martin-Lof described multiple type theories, https://en.wikipedia.org/wiki/Intuitionistic_type_theory#Martin-L%C3%B6f_type_theories |
| 01:31:28 | → | ksqsf joins (~user@134.209.106.31) |
| 01:33:36 | <EvanR> | I think MLTT went through a few modifications |
| 01:33:56 | <EvanR> | any of those old papers is a good start |
| 01:34:25 | <euouae> | Is there prerequisite knowledge? Would I need to know a lot of untyped lambda calculus? Do I need the Curry-Howard corresp theorem? |
| 01:34:38 | ChanServ | sets mode +o litharge |
| 01:34:40 | litharge | sets mode -bo *!*@user/qrpnxz litharge |
| 01:34:55 | <EvanR> | untyped lambda calculus is even more complicated, if you want to describe it with types |
| 01:35:33 | <EvanR> | if you start with basic types, simply typed lambda calculus, it turns out pretty simple |
| 01:35:35 | <euouae> | oh no that's not my intention I was just wondering if knowledge of how untyped lambda calculus works would be necessary/beneficial in studying the papers you linked |
| 01:36:03 | <euouae> | I'm talking about the more involved properties of it, not the basic definition of what untyped lambda calculus is |
| 01:36:16 | <euouae> | the reductions and such |
| 01:36:20 | <EvanR> | none of those matter to lambda calculus with simple types |
| 01:36:36 | <euouae> | and why do you mention lambda calculus with simple types? |
| 01:36:49 | × | ksqsf quits (~user@134.209.106.31) (Ping timeout: 256 seconds) |
| 01:37:01 | <euouae> | so STLC seems to start with some universe of types T, but I'm curious about the laws/rules of that universe |
| 01:37:05 | <EvanR> | I assume you want to start at the beginning |
| 01:37:51 | <EvanR> | a universe could consist of () and for any two types A and B, A -> B |
| 01:37:51 | <euouae> | Isn't STLC equal to types (of some form) + lambda calculus? Type theory should precede it, right? |
| 01:38:31 | <EvanR> | there's no one type theory, but many begin by telling you there are functions and this is how they work |
| 01:38:46 | <EvanR> | make them with lambda, you can apply them, and they have a type |
| 01:39:12 | <euouae> | OK but the type theory of () plus arrows does not seem to have the features such as "kinds" etc. Even if you can model those features in it, they're not explicit. Right? |
| 01:39:34 | × | whaletechno quits (~whaletech@user/whaletechno) (Quit: ha det bra) |
| 01:40:15 | <EvanR> | kinds comes up with theories that are more complicated but not as complicated as dependently typed lambda calculus |
| 01:40:29 | <EvanR> | middlingly complicated |
| 01:40:42 | <EvanR> | actually with dependent types, the kind system collapses and simplifies |
| 01:41:03 | <EvanR> | sounds like you find the starting stuff boring, and as such, just go ahead and read all those papers xD |
| 01:41:31 | <euouae> | so the ML type theories in those papers are dependent type theories? |
| 01:42:13 | <euouae> | I don't find it boring necessarily but I want to make an incision because I don't have a lot of time |
| 01:42:34 | <EvanR> | then you'd better get started! |
| 01:42:54 | <EvanR> | become adept at reading especially fast |
| 01:43:02 | <euouae> | yeah I'm just trying to figure out what my goal is |
| 01:43:29 | <EvanR> | write a theorem prover? xD |
| 01:44:03 | <euouae> | no goal in terms of what to read |
| 01:44:38 | <euouae> | ncatlab point to this reference, https://www.cs.le.ac.uk/events/mgs2009/courses/gambino/lecturenotes-gambino.pdf |
| 01:44:42 | <EvanR> | the first chapter of HoMM covers a lot of basics, I'm sorry it's not the size of a pamphlet |
| 01:44:46 | <euouae> | This may be the first time that I was able to make use of ncatlab |
| 01:45:06 | <EvanR> | it's like 10 pages |
| 01:45:11 | <euouae> | What's HoMM? |
| 01:45:21 | <EvanR> | heroes of might and magic |
| 01:45:36 | <EvanR> | I meant to say, Homotopy Type Theory |
| 01:45:47 | <euouae> | got you, okay. It's a good game btw |
| 01:47:56 | <EvanR> | there is a type theory channel and a hott channel, last I checked |
| 01:48:58 | → | kaph joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it) |
| 01:49:37 | <euouae> | ah nice, thank you |
| 01:49:52 | → | ksqsf joins (~user@134.209.106.31) |
| 01:50:06 | <euouae> | I've seen so many high level discussions here in #haskell that it's my go-to channel when I'm desparate |
| 01:50:43 | <euouae> | I think I'm set for now, thanks again |
| 01:53:25 | × | euouae quits (~euouae@user/euouae) (Quit: ) |
| 01:53:48 | × | tcard_ quits (~tcard@p2878075-ipngn18701hodogaya.kanagawa.ocn.ne.jp) (Quit: Leaving) |
| 01:54:57 | × | ksqsf quits (~user@134.209.106.31) (Ping timeout: 256 seconds) |
| 01:56:49 | × | joo-_ quits (~joo-_@fsf/member/joo--) (Ping timeout: 268 seconds) |
| 01:58:17 | × | dcoutts_ quits (~duncan@71.78.6.51.dyn.plus.net) (Ping timeout: 240 seconds) |
| 01:58:23 | → | joo-_ joins (~joo-_@fsf/member/joo--) |
| 01:59:36 | → | otherwise joins (~otherwise@2601:602:880:90f0:24b0:b2a1:8734:604f) |
| 01:59:59 | → | tcard joins (~tcard@p2878075-ipngn18701hodogaya.kanagawa.ocn.ne.jp) |
| 02:03:09 | × | jackson99 quits (~bc8147f2@cerf.good1.com) (Quit: CGI:IRC (Session timeout)) |
| 02:04:58 | × | DNH quits (~DNH@2a02:8108:1100:16d8:88d3:fc83:402b:ce67) (Quit: Textual IRC Client: www.textualapp.com) |
| 02:05:46 | → | ksqsf joins (~user@134.209.106.31) |
| 02:05:51 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection) |
| 02:06:36 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 02:08:01 | → | shapr joins (~user@pool-100-36-247-68.washdc.fios.verizon.net) |
| 02:08:16 | → | geekosaur joins (~geekosaur@xmonad/geekosaur) |
| 02:08:57 | shapr | hugs geekosaur |
| 02:09:12 | × | otherwise quits (~otherwise@2601:602:880:90f0:24b0:b2a1:8734:604f) (Remote host closed the connection) |
| 02:09:53 | → | zmt01 joins (~zmt00@user/zmt00) |
| 02:11:00 | × | ksqsf quits (~user@134.209.106.31) (Ping timeout: 268 seconds) |
| 02:12:17 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 02:12:57 | × | zmt00 quits (~zmt00@user/zmt00) (Ping timeout: 240 seconds) |
| 02:14:54 | → | burnsidesLlama joins (~burnsides@dhcp168-010.wadham.ox.ac.uk) |
| 02:18:10 | → | otherwise joins (~otherwise@2601:602:880:90f0:a989:dd0b:eb8b:9eb4) |
| 02:19:51 | → | otherwis_ joins (~otherwise@2601:602:880:90f0:3c50:d90d:a6a6:9cd0) |
| 02:20:02 | × | burnsidesLlama quits (~burnsides@dhcp168-010.wadham.ox.ac.uk) (Ping timeout: 240 seconds) |
| 02:21:36 | × | hubvu quits (sid495858@user/hubvu) (Ping timeout: 245 seconds) |
| 02:22:17 | × | otherwise quits (~otherwise@2601:602:880:90f0:a989:dd0b:eb8b:9eb4) (Ping timeout: 240 seconds) |
| 02:22:53 | → | ksqsf joins (~user@134.209.106.31) |
| 02:25:04 | → | hubvu joins (sid495858@user/hubvu) |
| 02:27:49 | × | ksqsf quits (~user@134.209.106.31) (Ping timeout: 256 seconds) |
| 02:29:38 | × | nicbk quits (~nicbk@user/nicbk) (Quit: nicbk) |
| 02:31:52 | → | ksqsf joins (~user@134.209.106.31) |
| 02:32:55 | × | vglfr quits (~vglfr@88.155.28.231) (Ping timeout: 256 seconds) |
| 02:33:18 | → | vglfr joins (~vglfr@88.155.28.231) |
| 02:35:23 | → | allensanford joins (~allensanf@c-76-108-242-88.hsd1.fl.comcast.net) |
| 02:46:31 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds) |
| 02:47:47 | → | nattiestnate joins (~nate@114.122.105.227) |
| 02:47:57 | × | xff0x quits (~xff0x@2001:1a81:53c9:5600:4d50:2309:32ab:9f17) (Ping timeout: 250 seconds) |
| 02:49:40 | → | xff0x joins (~xff0x@2001:1a81:5206:b200:fb79:da97:621d:d351) |
| 02:54:48 | → | meinside joins (uid24933@id-24933.helmsley.irccloud.com) |
| 02:57:43 | <otherwis_> | • Couldn't match expected type ‘a -> [a10]’ with actual type ‘[b3]’ what do the numbers [a10] and [b3] mean in this error message? I want for error messages to be helpful, but I'm struggling to interpret them. |
| 02:58:54 | <EvanR> | temporary type variables, unknowns in the type checking process |
| 02:59:15 | <EvanR> | you might be able to get better messages by putting your own type signatures |
| 02:59:46 | <EvanR> | even if you don't, you can see that you put a list where it thinks a function is required |
| 03:01:13 | <EvanR> | forgot a function argument? put too many arguments? |
| 03:01:23 | <otherwis_> | 'a -> [a10]' == 'function -> list'. when it was expecting [b3] == list. ? |
| 03:01:31 | → | Morrow joins (~quassel@bzq-110-168-31-106.red.bezeqint.net) |
| 03:01:38 | <EvanR> | -> is a function |
| 03:01:41 | <EvanR> | [ ] is a list |
| 03:01:47 | <otherwis_> | Well I know what the problem was, and I put it there intentionally to see if I could interpret the error message |
| 03:02:30 | <EvanR> | and the problem was? |
| 03:02:37 | <otherwis_> | Oh! -> is a function, okay. |
| 03:03:14 | × | Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 03:03:25 | → | Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
| 03:04:32 | <EvanR> | if you don't put type signatures, it has to guess what you want and there are more unknowns. If you also screwed up, things get iffy. |
| 03:05:14 | <otherwis_> | > let oddSq = filter odd . map (^2) [1..] in take 2 oddSq |
| 03:05:16 | <lambdabot> | error: |
| 03:05:16 | <lambdabot> | • Couldn't match expected type ‘a2 -> [a3]’ with actual type ‘[b1]’ |
| 03:05:16 | <lambdabot> | • Possible cause: ‘map’ is applied to too many arguments |
| 03:05:18 | <EvanR> | if it can't come to a single (possibly polymorphic) solution, it will barf everything it knows back at you |
| 03:05:58 | <otherwis_> | > let oddSq = filter odd $ map (^2) [1..] in take 2 oddSq |
| 03:05:59 | <lambdabot> | [1,9] |
| 03:06:02 | → | fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) |
| 03:06:33 | <EvanR> | so you tried to compose a function with a list |
| 03:06:46 | <EvanR> | compose takes 2 functions |
| 03:06:46 | → | alekhine_ joins (~alekhine@c-73-38-152-33.hsd1.ma.comcast.net) |
| 03:07:08 | <otherwis_> | isnt map a function |
| 03:07:26 | <EvanR> | parentheses |
| 03:07:32 | <EvanR> | you wrote |
| 03:07:35 | otherwis_ | is now known as otherwise |
| 03:07:41 | <EvanR> | (filter odd) . (map (^2) [1..]) |
| 03:07:52 | × | alekhine_ quits (~alekhine@c-73-38-152-33.hsd1.ma.comcast.net) (Client Quit) |
| 03:08:00 | <EvanR> | map (^2) [1..] isn't a function |
| 03:08:35 | <EvanR> | no, the error message doesn't explain all this unfortunately |
| 03:09:08 | <EvanR> | (filter odd . map (^2)) [1..] -- would work |
| 03:10:17 | × | fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 240 seconds) |
| 03:10:30 | <ksqsf> | The error message is leaking internal details on how type inference works, which may or may not be what you want |
| 03:10:37 | → | machinedgod joins (~machinedg@24.105.81.50) |
| 03:12:17 | <otherwise> | > let oS = (filter odd . map (^2) ) [1..] in take 3 . drop 100 . oS |
| 03:12:18 | <lambdabot> | error: |
| 03:12:18 | <lambdabot> | • Couldn't match expected type ‘a -> [a1]’ with actual type ‘[a0]’ |
| 03:12:18 | <lambdabot> | • In the second argument of ‘(.)’, namely ‘oS’ |
| 03:12:36 | <otherwise> | > let oS = (filter odd . map (^2) ) [1..] in take 3 $ drop 100 $ oS |
| 03:12:37 | <EvanR> | now you have a problem on the right side |
| 03:12:38 | <lambdabot> | [40401,41209,42025] |
| 03:12:41 | <EvanR> | ok good |
| 03:12:56 | × | allensanford quits (~allensanf@c-76-108-242-88.hsd1.fl.comcast.net) (Quit: allensanford) |
| 03:13:21 | <otherwise> | not confident between using function composition vs function application |
| 03:13:26 | <EvanR> | let f = take 3 . drop 100 . filter odd . map (^2) in f [1..] |
| 03:13:34 | <EvanR> | look no parens or dollars xD |
| 03:14:13 | <dsal> | $ makes your code expensive. |
| 03:14:14 | <EvanR> | you should internalize that function composition of two functions is always another function |
| 03:14:56 | <dsal> | Thus the result of a composition will always need an argument. |
| 03:15:20 | <EvanR> | (b -> c) -> (a -> b) -> (a -> c) |
| 03:15:37 | <ksqsf> | A useful equation: f (g x) = f $ g x = f . g $ x |
| 03:16:08 | <EvanR> | just learning this stuff without unnecessary $ will help |
| 03:16:27 | <EvanR> | even if you need parentheses sometimes |
| 03:19:32 | × | pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.4) |
| 03:20:09 | <EvanR> | otherwise, you know unix pipelines? The pipe of two (or more) commands is a bigger command, not a string. Pipe composes |
| 03:21:10 | <otherwise> | (b -> c) -> (a -> b) -> (a -> c) translates to: ('argument' 'function' 'return) 'function' ('arg' fun' 'return') 'fun' ( 'arg' 'fun' 'return') ? |
| 03:21:27 | <otherwise> | i'm not any good at this yet... |
| 03:21:58 | <EvanR> | that's the type of . |
| 03:22:06 | <EvanR> | two functions go in, one comes out |
| 03:23:43 | <otherwise> | (2 argument function in) -> ( 2 argument function in) -> (2 argument function out) |
| 03:23:50 | <EvanR> | 1 argument functions |
| 03:24:16 | <EvanR> | all of them |
| 03:26:22 | <dsal> | otherwise: `b -> c` is a function that takes a `b` and returns a `c` |
| 03:27:56 | <dsal> | Think about it at a higher level. If you have an `a` and you need a `c`, and you have a way to take an `a` and make a `b` and a way to take a `b` and make a `c`, then you can compose those and have a way to take an `a` and make a `c`. This is clearer when you use concrete types. |
| 03:28:54 | <dsal> | I have a string that represents a number, and I've got a function that adds one to a number. Can I add one to the numeric value in a string? |
| 03:28:55 | <dsal> | :t succ |
| 03:28:56 | <lambdabot> | Enum a => a -> a |
| 03:28:57 | <dsal> | :t read |
| 03:28:58 | <lambdabot> | Read a => String -> a |
| 03:29:03 | <dsal> | :t show . succ. read |
| 03:29:04 | <lambdabot> | String -> String |
| 03:29:12 | <dsal> | > (show . succ . read) 3 |
| 03:29:14 | <lambdabot> | error: |
| 03:29:14 | <lambdabot> | • No instance for (Num String) arising from the literal ‘3’ |
| 03:29:14 | <lambdabot> | • In the first argument of ‘show . succ . read’, namely ‘3’ |
| 03:29:17 | <dsal> | > (show . succ . read) "3" |
| 03:29:18 | <lambdabot> | "*Exception: Prelude.Enum.().succ: bad argument |
| 03:29:20 | <EvanR> | lol, nice eexample |
| 03:29:22 | <dsal> | lame |
| 03:29:39 | <dsal> | This is a case where it works better when you have types written out. |
| 03:30:01 | <EvanR> | (bad example overcomplicated by polymorphics, type classes, and it not working) |
| 03:30:02 | <otherwise> | i dont know unix pipelines yet. |
| 03:30:12 | <EvanR> | ok so that was not a great analogy either |
| 03:30:13 | <otherwise> | dsal that description is very clear, thanks! |
| 03:30:21 | <dsal> | > (succ . read) "3" :: Int |
| 03:30:23 | <lambdabot> | 4 |
| 03:30:23 | <otherwise> | not the lambdabod stuff |
| 03:30:44 | <dsal> | Trying to make it a String pushed it too far without describing the intermediate types. |
| 03:30:46 | <dsal> | :t show . read |
| 03:30:47 | <lambdabot> | String -> String |
| 03:31:01 | <otherwise> | I can just do it in ghci |
| 03:31:04 | <EvanR> | > (chr . (+1) . ord) 'a' |
| 03:31:06 | <lambdabot> | 'b' |
| 03:31:12 | <EvanR> | > (chr . (+1) . ord) 'y' |
| 03:31:14 | <lambdabot> | 'z' |
| 03:31:15 | <dsal> | Type Applications helps. |
| 03:31:47 | <EvanR> | chr and ord are good simple functions since they deal with mono concrete types |
| 03:31:49 | <dsal> | Yeah, chr/ord is narrower. |
| 03:31:52 | <dsal> | :t chr |
| 03:31:54 | <lambdabot> | Int -> Char |
| 03:31:54 | <dsal> | :t ord |
| 03:31:55 | <lambdabot> | Char -> Int |
| 03:32:20 | <dsal> | Read and Show are huge even if they weren't open. |
| 03:32:36 | <otherwise> | > :t (chr . (+1) . ord) 'a' |
| 03:32:37 | <lambdabot> | <hint>:1:1: error: parse error on input ‘:’ |
| 03:32:51 | <otherwise> | > :t ((chr . (+1) . ord) 'a') |
| 03:32:53 | <lambdabot> | <hint>:1:1: error: parse error on input ‘:’ |
| 03:32:54 | <EvanR> | oof |
| 03:32:59 | <dsal> | :t ((chr . (+1) . ord) 'a') |
| 03:32:59 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija))) |
| 03:32:59 | → | finn_elija joins (~finn_elij@user/finn-elija/x-0085643) |
| 03:32:59 | finn_elija | is now known as FinnElija |
| 03:33:00 | <lambdabot> | Char |
| 03:33:00 | <EvanR> | use > or :t, not both |
| 03:33:25 | <EvanR> | :t chr . (+1) . ord |
| 03:33:27 | <lambdabot> | Char -> Char |
| 03:33:28 | <otherwise> | :t ((chr . (+1) . ord) |
| 03:33:29 | <lambdabot> | error: |
| 03:33:29 | <lambdabot> | parse error (possibly incorrect indentation or mismatched brackets) |
| 03:33:36 | <otherwise> | :t (chr . (+1) . ord |
| 03:33:37 | <lambdabot> | error: |
| 03:33:37 | <lambdabot> | parse error (possibly incorrect indentation or mismatched brackets) |
| 03:33:46 | <EvanR> | the hazards of necessary parens xD |
| 03:33:52 | <EvanR> | unnecessary |
| 03:34:07 | <otherwise> | ah geez, i'll leave lambdabot alone |
| 03:36:05 | → | yauhsien joins (~yauhsien@61-231-42-148.dynamic-ip.hinet.net) |
| 03:38:22 | × | yauhsien quits (~yauhsien@61-231-42-148.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 03:39:19 | × | shapr quits (~user@pool-100-36-247-68.washdc.fios.verizon.net) (Remote host closed the connection) |
| 03:39:20 | → | yauhsien joins (~yauhsien@61-231-42-148.dynamic-ip.hinet.net) |
| 03:39:34 | <EvanR> | drake dislikes f (g (h (foo (bar (baz x))))) |
| 03:39:57 | <EvanR> | drake likes f . g . h . foo . bar . baz xD |
| 03:41:18 | <EvanR> | possibly apply the x with parens over the whole thing, naming this chain something, or $ (last resort) |
| 03:43:21 | → | falafel_ joins (~falafel@2603-8000-d800-688c-6db4-c125-f693-41cb.res6.spectrum.com) |
| 03:43:57 | × | yauhsien quits (~yauhsien@61-231-42-148.dynamic-ip.hinet.net) (Ping timeout: 240 seconds) |
| 03:45:30 | → | falafel__ joins (~falafel@2603-8000-d800-688c-6db4-c125-f693-41cb.res6.spectrum.com) |
| 03:46:57 | × | falafel quits (~falafel@2603-8000-d800-688c-9993-a5d6-8c3d-400e.res6.spectrum.com) (Ping timeout: 240 seconds) |
| 03:47:57 | × | falafel_ quits (~falafel@2603-8000-d800-688c-6db4-c125-f693-41cb.res6.spectrum.com) (Ping timeout: 240 seconds) |
| 03:48:28 | → | kaph_ joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it) |
| 03:48:30 | × | kaph quits (~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Read error: Connection reset by peer) |
| 03:52:35 | × | terrorjack quits (~terrorjac@2a01:4f8:1c1e:509a::1) (Quit: The Lounge - https://thelounge.chat) |
| 03:52:54 | <dsal> | otherwise: You can have private conversations with lambdabot |
| 03:53:49 | → | terrorjack joins (~terrorjac@2a01:4f8:1c1e:509a::1) |
| 03:57:21 | × | td_ quits (~td@muedsl-82-207-238-094.citykom.de) (Ping timeout: 256 seconds) |
| 03:59:08 | → | td_ joins (~td@muedsl-82-207-238-177.citykom.de) |
| 04:00:10 | <EvanR> | forgive me lambdabot for I have unsafeCoerced |
| 04:00:51 | → | yauhsien joins (~yauhsien@61-231-42-148.dynamic-ip.hinet.net) |
| 04:02:57 | × | falafel__ quits (~falafel@2603-8000-d800-688c-6db4-c125-f693-41cb.res6.spectrum.com) (Ping timeout: 240 seconds) |
| 04:05:34 | × | yauhsien quits (~yauhsien@61-231-42-148.dynamic-ip.hinet.net) (Ping timeout: 260 seconds) |
| 04:10:38 | <monochrom> | heh |
| 04:11:10 | <otherwise> | > reverse . filter (< 'a') $ filter (/= ' ') "Oh lambdabot do you want to speak with me yes or No" |
| 04:11:11 | <lambdabot> | "NO" |
| 04:13:38 | → | alfonsox joins (~quassel@103.92.42.161) |
| 04:14:50 | → | yauhsien joins (~yauhsien@61-231-42-148.dynamic-ip.hinet.net) |
| 04:16:49 | × | notzmv quits (~zmv@user/notzmv) (Ping timeout: 268 seconds) |
| 04:18:09 | × | Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 04:19:28 | → | Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
| 04:19:32 | × | dsrt^ quits (~dsrt@207.5.54.6) (Remote host closed the connection) |
| 04:20:59 | × | szkl quits (uid110435@id-110435.uxbridge.irccloud.com) (Quit: Connection closed for inactivity) |
| 04:28:49 | → | srwm^ joins (~srwm@207.5.54.6) |
| 04:29:20 | <EvanR> | lol |
| 04:30:12 | × | nurupo quits (~nurupo.ga@user/nurupo) (Quit: nurupo.ga) |
| 04:30:43 | → | nurupo joins (~nurupo.ga@user/nurupo) |
| 04:31:00 | → | deadmarshal joins (~deadmarsh@95.38.112.219) |
| 04:31:55 | × | amk quits (~amk@109.255.169.126) (Ping timeout: 256 seconds) |
| 04:35:15 | → | amk joins (~amk@109.255.169.126) |
| 04:37:49 | × | machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 240 seconds) |
| 04:39:57 | × | n3rdy1 quits (~n3rdy1@2601:281:c780:a510:f129:8ed3:b1ff:82ed) (Ping timeout: 240 seconds) |
| 04:43:02 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 04:57:57 | × | ksqsf quits (~user@134.209.106.31) (Ping timeout: 240 seconds) |
| 04:57:57 | × | yauhsien quits (~yauhsien@61-231-42-148.dynamic-ip.hinet.net) (Read error: Connection reset by peer) |
| 04:58:43 | → | yauhsien joins (~yauhsien@61-231-42-148.dynamic-ip.hinet.net) |
| 05:02:06 | × | rekahsoft quits (~rekahsoft@cpe0008a20f982f-cm64777d666260.cpe.net.cable.rogers.com) (Remote host closed the connection) |
| 05:02:44 | → | ksqsf joins (~user@134.209.106.31) |
| 05:06:22 | → | rekahsoft joins (~rekahsoft@cpe0008a20f982f-cm64777d666260.cpe.net.cable.rogers.com) |
| 05:07:59 | × | ksqsf quits (~user@134.209.106.31) (Ping timeout: 268 seconds) |
| 05:10:57 | × | waleee quits (~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4) (Ping timeout: 240 seconds) |
| 05:11:37 | → | biberu\ joins (~biberu@user/biberu) |
| 05:14:40 | → | coot joins (~coot@89-64-85-93.dynamic.chello.pl) |
| 05:15:33 | × | biberu quits (~biberu@user/biberu) (Ping timeout: 256 seconds) |
| 05:15:33 | biberu\ | is now known as biberu |
| 05:15:37 | × | yauhsien quits (~yauhsien@61-231-42-148.dynamic-ip.hinet.net) (Ping timeout: 240 seconds) |
| 05:16:57 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds) |
| 05:18:37 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds) |
| 05:18:44 | → | Erutuon joins (~Erutuon@user/erutuon) |
| 05:18:53 | → | lavaman joins (~lavaman@98.38.249.169) |
| 05:22:32 | → | Rum joins (~bourbon@user/rum) |
| 05:22:37 | × | rekahsoft quits (~rekahsoft@cpe0008a20f982f-cm64777d666260.cpe.net.cable.rogers.com) (Ping timeout: 240 seconds) |
| 05:23:30 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 260 seconds) |
| 05:24:04 | → | ksqsf joins (~user@134.209.106.31) |
| 05:29:00 | → | drewr joins (~drew@user/drewr) |
| 05:30:30 | × | ksqsf quits (~user@134.209.106.31) (Ping timeout: 260 seconds) |
| 05:32:33 | × | deadmarshal quits (~deadmarsh@95.38.112.219) (Ping timeout: 256 seconds) |
| 05:35:54 | → | wroathe joins (~wroathe@user/wroathe) |
| 05:40:40 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 268 seconds) |
| 05:41:53 | → | ksqsf joins (~user@134.209.106.31) |
| 05:44:25 | × | Rum quits (~bourbon@user/rum) (Quit: WeeChat 3.4) |
| 05:44:56 | × | ksqsf quits (~user@134.209.106.31) (Remote host closed the connection) |
| 05:45:14 | → | ksqsf joins (~user@134.209.106.31) |
| 05:57:17 | × | ksqsf quits (~user@134.209.106.31) (Ping timeout: 240 seconds) |
| 05:59:08 | → | hololeap joins (~hololeap@user/hololeap) |
| 06:04:02 | → | mvk joins (~mvk@2607:fea8:5cdd:f000::917a) |
| 06:11:47 | × | pavonia quits (~user@user/siracusa) (Read error: Connection reset by peer) |
| 06:13:57 | × | Feuermagier quits (~Feuermagi@user/feuermagier) (Remote host closed the connection) |
| 06:18:48 | → | pavonia joins (~user@user/siracusa) |
| 06:19:03 | × | slowButPresent quits (~slowButPr@user/slowbutpresent) (Quit: leaving) |
| 06:25:08 | → | spaceseller joins (~spacesell@31.147.205.13) |
| 06:28:01 | × | x88x88x quits (~x88x88x@2001:19f0:5:39a8:5400:3ff:feb6:73cb) (Remote host closed the connection) |
| 06:28:50 | → | x88x88x joins (~x88x88x@2001:19f0:5:39a8:5400:3ff:feb6:73cb) |
| 06:32:43 | → | notzmv joins (~zmv@user/notzmv) |
| 06:34:13 | × | jinsun quits (~quassel@user/jinsun) (Ping timeout: 240 seconds) |
| 06:36:00 | → | tromp joins (~textual@dhcp-077-249-230-040.chello.nl) |
| 06:38:17 | → | Guest|80 joins (~Guest|80@185.237.102.187) |
| 06:41:41 | × | coot quits (~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot) |
| 06:44:25 | <Guest|80> | Uploaded file: https://uploads.kiwiirc.com/files/42ec33f07bbab40fb13e82a251ba1551/installFailed.png |
| 06:45:15 | <maerwald[m]> | Guest|80: your curl doesn't work |
| 06:45:31 | <maerwald[m]> | Try wget |
| 06:46:06 | <Guest|80> | same comand but just wget? or have I change the whole instruction? |
| 06:46:20 | <dmj`> | Is it possible to figured out which packages use RankNTypes on hackage |
| 06:46:56 | × | tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 06:47:01 | <maerwald[m]> | Guest|80: sec |
| 06:47:26 | <dsal> | dmj`: I downloaded all of hackage to do ask questions like that once. |
| 06:47:59 | <maerwald[m]> | Guest|80: `ghcup config set downloader Wget` |
| 06:48:03 | <dmj`> | dsal: how'd that go? |
| 06:48:03 | <maerwald[m]> | Try that |
| 06:48:23 | <dsal> | dmj`: It was neat. I found a lot of neat things. It's pretty easy to answer that kind of question, but I don't have my download any longer. |
| 06:49:10 | <maerwald[m]> | Guest|80: might need to run `source ~/.ghcup/env` first |
| 06:49:11 | → | falafel joins (~falafel@2603-8000-d800-688c-6db4-c125-f693-41cb.res6.spectrum.com) |
| 06:49:57 | → | deadmarshal joins (~deadmarsh@95.38.112.219) |
| 06:53:08 | <Guest|80> | ghcup config set downloader Wget doesnt work in tty.. maerwald what do you mean with run .ghcup/env? I found the data |
| 06:53:09 | <dmj`> | dsal: https://github.com/nh2/hackage-download , well well |
| 06:54:27 | <maerwald[m]> | Guest|80: i mean: run `source ~/.ghcup/env` |
| 06:54:38 | <maerwald[m]> | What else would I mean? |
| 06:54:47 | <dsal> | dmj`: I don't think I used that. It was something about a cabal command that dumps out all the things, something to make URLs out of them, and then curl to do the needful. |
| 06:55:01 | <dsal> | In any case, it wasn't that hard to get all the source files down. |
| 06:59:51 | <dmj`> | there should be a search engine for this stuff |
| 07:00:00 | <dmj`> | "hookah" |
| 07:00:09 | <dmj`> | hackage meets hoogle |
| 07:06:29 | <Guest|80> | cant reach github.com. Any Idear? I ping it, but nothing... |
| 07:07:43 | → | fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) |
| 07:08:54 | <EvanR> | https://www.githubstatus.com/ |
| 07:09:16 | × | perrierjouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.3) |
| 07:10:13 | × | spaceseller quits (~spacesell@31.147.205.13) (Quit: Leaving) |
| 07:11:30 | <Guest|80> | timeout. Dont know, maybe I have made something wrong with git that this website is blocked for me? Or have I managed to block myself from github? |
| 07:12:33 | × | fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 268 seconds) |
| 07:13:45 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 07:16:20 | → | takuan joins (~takuan@178-116-218-225.access.telenet.be) |
| 07:16:21 | <Guest|80> | Uploaded file: https://uploads.kiwiirc.com/files/3c49132434b8beda7aaeeaf8edcf0ad2/githubNotKnown.png |
| 07:17:21 | <int-e> | Guest|80: drop the https:// |
| 07:17:39 | → | spaceseller joins (~spacesell@31.147.205.13) |
| 07:17:40 | <Guest|80> | I have done it later down... same |
| 07:17:41 | <int-e> | oh you did, sorry |
| 07:17:58 | <Guest|80> | changed also dns server |
| 07:18:54 | × | [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection) |
| 07:19:13 | × | spaceseller quits (~spacesell@31.147.205.13) (Client Quit) |
| 07:19:38 | → | spaceseller joins (~spacesell@31.147.205.13) |
| 07:21:21 | × | spaceseller quits (~spacesell@31.147.205.13) (Client Quit) |
| 07:21:41 | <int-e> | Fun. You may have a local dns proxy that caches replies. Among a plethora of possible causes. |
| 07:22:03 | → | tromp joins (~textual@dhcp-077-249-230-040.chello.nl) |
| 07:23:48 | <Guest|80> | With traceroute github.com its the same; the name or service not known... Can it be that my Android-handy caches the results for me? |
| 07:25:30 | × | deadmarshal quits (~deadmarsh@95.38.112.219) (Ping timeout: 268 seconds) |
| 07:26:10 | <Guest|80> | but I used Cloudflare 1.1.1.1 and could not believe they prevent me from github.com |
| 07:26:33 | <Guest|80> | Uploaded file: https://uploads.kiwiirc.com/files/cf6fb0d7042c10cd85d7244b7a684524/DnsServer.png |
| 07:26:47 | → | spaceseller joins (~spacesell@31.147.205.13) |
| 07:27:20 | × | spaceseller quits (~spacesell@31.147.205.13) (Remote host closed the connection) |
| 07:30:37 | <int-e> | cool. host www.github.com 172.70.84.168 --> ;; connection timed out; no servers could be reached |
| 07:31:36 | → | spaceseller joins (~spacesell@31.147.205.13) |
| 07:33:35 | <Guest|80> | hey the Ip-Adress works. |
| 07:35:54 | <int-e> | (but Cloudflare does weird stuff with routing as its core business, your results may be different) |
| 07:36:48 | → | deadmarshal joins (~deadmarsh@95.38.112.219) |
| 07:37:59 | × | Guest|80 quits (~Guest|80@185.237.102.187) (Quit: Connection closed) |
| 07:40:34 | <dmj`> | dsal: its saying there's ~3,435 packages on hackage |
| 07:40:34 | × | gentauro quits (~gentauro@user/gentauro) (Read error: Connection reset by peer) |
| 07:41:30 | → | coolnickname joins (uid531864@user/coolnickname) |
| 07:44:57 | × | drewr quits (~drew@user/drewr) (Ping timeout: 240 seconds) |
| 07:44:58 | → | yauhsien joins (~yauhsien@61-231-42-148.dynamic-ip.hinet.net) |
| 07:46:00 | <dmj`> | dsal: it says 19% of hackage uses RankNTypes |
| 07:46:07 | → | gentauro joins (~gentauro@user/gentauro) |
| 07:46:16 | <dmj`> | dsal: now, some of these packages just list RankNTypes, and don't actually use it too ... |
| 07:47:49 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds) |
| 07:48:14 | → | perrierjouet joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) |
| 07:50:12 | × | perrierjouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Client Quit) |
| 07:51:02 | × | yauhsien quits (~yauhsien@61-231-42-148.dynamic-ip.hinet.net) (Ping timeout: 240 seconds) |
| 07:51:56 | → | YoungFrog joins (~youngfrog@39.129-180-91.adsl-dyn.isp.belgacom.be) |
| 07:51:56 | → | perrierjouet joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) |
| 08:01:35 | × | deadmarshal quits (~deadmarsh@95.38.112.219) (Ping timeout: 256 seconds) |
| 08:02:36 | → | deadmarshal joins (~deadmarsh@95.38.112.219) |
| 08:07:00 | × | gioyik quits (~gioyik@gateway/tor-sasl/gioyik) (Quit: WeeChat 3.3) |
| 08:07:54 | × | Sgeo_ quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 08:09:16 | → | kaph joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it) |
| 08:09:52 | × | kaph_ quits (~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Read error: Connection reset by peer) |
| 08:11:00 | × | shriekingnoise quits (~shrieking@186.137.144.80) (Quit: Quit) |
| 08:13:23 | × | nattiestnate quits (~nate@114.122.105.227) (Quit: WeeChat 3.4) |
| 08:13:29 | <dmj`> | dsal: it might actually be 13% |
| 08:14:03 | × | deadmarshal quits (~deadmarsh@95.38.112.219) (Ping timeout: 256 seconds) |
| 08:24:33 | × | spaceseller quits (~spacesell@31.147.205.13) (Quit: Leaving) |
| 08:27:43 | → | cosimone joins (~user@93-47-231-248.ip115.fastwebnet.it) |
| 08:31:03 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 08:31:03 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
| 08:31:03 | → | wroathe joins (~wroathe@user/wroathe) |
| 08:32:46 | → | Akiva joins (~Akiva@user/Akiva) |
| 08:35:46 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 245 seconds) |
| 08:38:49 | <otherwise> | λ |
| 08:39:36 | → | qrpnxz joins (abc4f95c31@user/qrpnxz) |
| 08:41:07 | <tomsmeding> | \ |
| 08:43:14 | × | Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 260 seconds) |
| 08:46:17 | <EvanR> | it's simplified greek to me |
| 08:55:13 | <otherwise> | concatMap work, where the function input is (+3) ? |
| 08:55:28 | <otherwise> | I am only able to make concatMap work with replicate |
| 08:57:55 | <EvanR> | look at the types |
| 08:58:23 | <otherwise> | okay |
| 08:58:50 | <xerox> | not very well |
| 08:58:56 | <otherwise> | I dont know what t a means... |
| 08:59:21 | <xerox> | :t concatMap |
| 08:59:22 | <lambdabot> | Foldable t => (a -> [b]) -> t a -> [b] |
| 09:00:10 | × | TomWesterhout[m] quits (~twesterho@2001:470:69fc:105::1:2918) (Quit: You have been kicked for being idle) |
| 09:00:16 | <otherwise> | so you input a function and a list, then you input a "t a", then you get a list returned? |
| 09:00:27 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 09:00:28 | <xerox> | almost |
| 09:00:29 | → | TomWesterhout[m] joins (~twesterho@2001:470:69fc:105::1:2918) |
| 09:00:42 | <xerox> | the parens are important, the first argument is a function, the second a "t a" |
| 09:00:43 | <tomsmeding> | % :t +d concatMap |
| 09:00:44 | <yahb> | tomsmeding: (a -> [b]) -> [a] -> [b] |
| 09:00:46 | ← | TomWesterhout[m] parts (~twesterho@2001:470:69fc:105::1:2918) () |
| 09:00:55 | <tomsmeding> | otherwise: you can read it like this at first |
| 09:01:10 | <xerox> | i.e. the first arg is a function from 'a' to '[b]' |
| 09:01:35 | <tomsmeding> | actually, concatMap is generalised to not only accept a list as the second argument, but also other stuff that's sufficiently "list-like"; for lists, t = [] so that t a = [a] |
| 09:01:41 | × | econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity) |
| 09:02:02 | <xerox> | so it's saying, given a function that assigns a [b] to any given a, and a "list of 'a's", I can make a list of 'b's |
| 09:02:42 | <tomsmeding> | > concatMap (\n -> replicate n 42) [1,2,3] |
| 09:02:44 | <lambdabot> | [42,42,42,42,42,42] |
| 09:02:48 | <tomsmeding> | > concat (map (\n -> replicate n 42) [1,2,3]) |
| 09:02:50 | <lambdabot> | [42,42,42,42,42,42] |
| 09:02:54 | <tomsmeding> | > map (\n -> replicate n 42) [1,2,3] |
| 09:02:56 | <lambdabot> | [[42],[42,42],[42,42,42]] |
| 09:04:00 | × | zmt01 quits (~zmt00@user/zmt00) (Read error: Connection reset by peer) |
| 09:04:18 | <otherwise> | whoa |
| 09:04:40 | × | theproffesor quits (~theproffe@user/theproffesor) (Remote host closed the connection) |
| 09:04:45 | → | zmt01 joins (~zmt00@user/zmt00) |
| 09:04:45 | → | the_proffesor joins (~theproffe@2601:282:847f:8010::5fff) |
| 09:04:45 | × | the_proffesor quits (~theproffe@2601:282:847f:8010::5fff) (Changing host) |
| 09:04:45 | → | the_proffesor joins (~theproffe@user/theproffesor) |
| 09:04:59 | <otherwise> | so is replicate the only usable function here? |
| 09:05:06 | → | jinsun joins (~quassel@user/jinsun) |
| 09:05:11 | <tomsmeding> | anything that produces a list :) |
| 09:05:24 | <tomsmeding> | that is, any function that has the type 'a -> [b]' for some a and some b |
| 09:05:28 | <otherwise> | anything that produces a list, that makes sense. |
| 09:05:54 | <tomsmeding> | > concatMap (\n -> map (n +) [1, 2, 3]) [4, 5, 6] |
| 09:05:56 | <lambdabot> | [5,6,7,6,7,8,7,8,9] |
| 09:06:07 | <otherwise> | I was trying to do something like concatMap [map (+3) [1..9]] |
| 09:06:17 | <tomsmeding> | > concatMap (\_ -> [1,2,3]) [4,5,6] |
| 09:06:18 | <lambdabot> | [1,2,3,1,2,3,1,2,3] |
| 09:06:23 | <otherwise> | to force a nested list |
| 09:06:29 | <xerox> | > concatMap (\x -> [x-1,x,x+1]) [2,5,8] |
| 09:06:30 | <lambdabot> | [1,2,3,4,5,6,7,8,9] |
| 09:06:44 | <tomsmeding> | otherwise: that applies concatMap to one argument, right? concatMap takes two arguments |
| 09:07:21 | <tomsmeding> | otherwise: I strongly suggest reading |
| 09:07:28 | <tomsmeding> | 'concatMap f l' as 'concat (map f l)' |
| 09:07:36 | <tomsmeding> | (it's exactly equivalent) |
| 09:07:59 | <tomsmeding> | @src concatMap |
| 09:07:59 | <lambdabot> | concatMap f = foldr ((++) . f) [] |
| 09:08:02 | <tomsmeding> | lol |
| 09:08:17 | <tomsmeding> | same thing though if you think long and hard |
| 09:09:43 | <otherwise> | okay that is helpful |
| 09:11:39 | → | acidjnk joins (~acidjnk@p200300d0c7271e489141218671316649.dip0.t-ipconnect.de) |
| 09:14:07 | × | Akiva quits (~Akiva@user/Akiva) (Ping timeout: 256 seconds) |
| 09:14:36 | → | Gurkenglas joins (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) |
| 09:15:00 | → | DNH joins (~DNH@2a02:8108:1100:16d8:4441:5555:5586:d167) |
| 09:16:58 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Read error: Connection reset by peer) |
| 09:17:41 | → | geekosaur joins (~geekosaur@xmonad/geekosaur) |
| 09:19:06 | → | Tuplanolla joins (~Tuplanoll@91-159-68-119.elisa-laajakaista.fi) |
| 09:19:37 | × | mvk quits (~mvk@2607:fea8:5cdd:f000::917a) (Ping timeout: 240 seconds) |
| 09:21:15 | → | deadmarshal joins (~deadmarsh@95.38.112.219) |
| 09:22:14 | × | falafel quits (~falafel@2603-8000-d800-688c-6db4-c125-f693-41cb.res6.spectrum.com) (Read error: Connection reset by peer) |
| 09:22:26 | → | falafel joins (~falafel@2603-8000-d800-688c-6db4-c125-f693-41cb.res6.spectrum.com) |
| 09:25:20 | → | coot joins (~coot@89-64-85-93.dynamic.chello.pl) |
| 09:25:50 | → | briandaed joins (~root@185.234.208.208.r.toneticgroup.pl) |
| 09:28:54 | × | DNH quits (~DNH@2a02:8108:1100:16d8:4441:5555:5586:d167) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 09:32:44 | → | _ht joins (~quassel@82-169-194-8.biz.kpn.net) |
| 09:37:16 | → | gehmehgeh joins (~user@user/gehmehgeh) |
| 09:39:37 | × | vglfr quits (~vglfr@88.155.28.231) (Ping timeout: 240 seconds) |
| 09:40:21 | → | ksqsf joins (~user@134.209.106.31) |
| 09:41:29 | × | kaph quits (~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Remote host closed the connection) |
| 09:41:58 | → | kaph joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it) |
| 09:44:50 | × | ksqsf quits (~user@134.209.106.31) (Ping timeout: 260 seconds) |
| 09:45:18 | × | coot quits (~coot@89-64-85-93.dynamic.chello.pl) (Remote host closed the connection) |
| 09:46:03 | → | coot joins (~coot@2a02:a310:e03f:8500:5cc8:47c:8ec0:b827) |
| 09:46:03 | × | coot quits (~coot@2a02:a310:e03f:8500:5cc8:47c:8ec0:b827) (Remote host closed the connection) |
| 09:46:49 | → | wroathe joins (~wroathe@user/wroathe) |
| 09:46:59 | × | Morrow quits (~quassel@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 256 seconds) |
| 09:47:20 | → | coot joins (~coot@2a02:a310:e03f:8500:5cc8:47c:8ec0:b827) |
| 09:51:37 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds) |
| 09:59:11 | × | coot quits (~coot@2a02:a310:e03f:8500:5cc8:47c:8ec0:b827) (Quit: coot) |
| 10:04:36 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds) |
| 10:05:07 | → | kuribas joins (~user@ptr-25vy0i81bhacxv5d2f4.18120a2.ip6.access.telenet.be) |
| 10:13:12 | × | kaph quits (~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Remote host closed the connection) |
| 10:13:31 | → | kaph joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it) |
| 10:16:02 | → | vglfr joins (~vglfr@46.96.129.172) |
| 10:16:17 | → | KvL joins (~KvL@user/KvL) |
| 10:17:36 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 10:17:36 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
| 10:17:36 | → | wroathe joins (~wroathe@user/wroathe) |
| 10:18:49 | × | KvL quits (~KvL@user/KvL) (Client Quit) |
| 10:19:17 | → | KvL joins (~KvL@user/KvL) |
| 10:19:17 | × | vglfr quits (~vglfr@46.96.129.172) (Read error: Connection reset by peer) |
| 10:19:20 | → | syrkis joins (~syrkis@82.192.167.70) |
| 10:19:29 | → | vglfr joins (~vglfr@46.96.129.172) |
| 10:22:17 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds) |
| 10:24:48 | → | Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915) |
| 10:25:01 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 240 seconds) |
| 10:26:07 | Lord_of_Life_ | is now known as Lord_of_Life |
| 10:27:54 | × | tzh quits (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz) |
| 10:28:36 | <otherwise> | in prelude, we can define functions, such as "addThree = (+) 3", is there a way to then :browse and only show user defined functions during the active prelude session? |
| 10:29:05 | → | vysn joins (~vysn@user/vysn) |
| 10:29:34 | <otherwise> | MatLab has this feature, where all user defined functions are in a sidebar window called "workspace." I'm sure Haskell has this, but I just do not know how to call it up for view... |
| 10:31:07 | <otherwise> | Found it! |
| 10:31:12 | <otherwise> | :show bindings |
| 10:31:14 | <otherwise> | :) |
| 10:31:44 | × | vglfr quits (~vglfr@46.96.129.172) (Ping timeout: 268 seconds) |
| 10:33:03 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 10:34:18 | × | xff0x quits (~xff0x@2001:1a81:5206:b200:fb79:da97:621d:d351) (Ping timeout: 260 seconds) |
| 10:34:50 | → | xff0x joins (~xff0x@2001:1a81:5206:b200:fabe:99c1:2820:5b8f) |
| 10:36:40 | × | briandaed quits (~root@185.234.208.208.r.toneticgroup.pl) (Quit: Lost terminal) |
| 10:46:12 | → | max22- joins (~maxime@2a01cb0883359800be9c06a9a4b3ba5d.ipv6.abo.wanadoo.fr) |
| 10:48:23 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 10:48:23 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
| 10:48:23 | → | wroathe joins (~wroathe@user/wroathe) |
| 10:52:57 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds) |
| 10:58:56 | <tomsmeding> | otherwise: "in prelude" -- that's ghci; Prelude is the name of the module that is in scope by default. The text to the left of the > in the ghci prompt is the list of modules that is in scope |
| 11:02:17 | → | Morrow joins (~quassel@bzq-110-168-31-106.red.bezeqint.net) |
| 11:03:58 | → | pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
| 11:04:56 | <otherwise> | is it possible to bump out of the prelude module, but still be in ghci? |
| 11:05:21 | <otherwise> | in other words, have zero modules in scope. |
| 11:07:30 | <xerox> | ghci -XNoImplicitPrelude |
| 11:07:51 | → | vglfr joins (~vglfr@46.96.129.172) |
| 11:09:31 | → | fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) |
| 11:12:00 | <Nate[m]12> | does anyone have experience with writing mathematical computing of a C++ program with haskell and whether it's better to do this way compared to C++ math libraries? |
| 11:12:56 | <Rembane> | Nate[m]12: Is performance important to you? |
| 11:13:49 | × | fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 240 seconds) |
| 11:14:07 | × | syrkis quits (~syrkis@82.192.167.70) (Ping timeout: 256 seconds) |
| 11:14:10 | <Nate[m]12> | Rembane: yes of course |
| 11:14:33 | → | kaph_ joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it) |
| 11:14:49 | × | kaph quits (~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Ping timeout: 256 seconds) |
| 11:15:14 | <Nate[m]12> | Rembane: I'm also thinking about writing them all in rust instead of these tricks |
| 11:15:35 | × | acidjnk quits (~acidjnk@p200300d0c7271e489141218671316649.dip0.t-ipconnect.de) (Ping timeout: 250 seconds) |
| 11:16:21 | <maerwald[m]> | I'd pick the language with the best ecosystem for the problem, not the best language. Unless you got a lot of time on your hands |
| 11:18:51 | <Rembane> | Nate[m]12: I'd do what maerwald[m] says. numpy is also surprisingly fast. |
| 11:19:11 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 11:19:11 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
| 11:19:11 | → | wroathe joins (~wroathe@user/wroathe) |
| 11:19:32 | <otherwise> | xerox: thanks! However, it's kinda empty... as expected... I can't even do addition. the only type that seems to give a response is :t 2 |
| 11:19:44 | <Nate[m]12> | numpy is in python right? |
| 11:20:38 | <Nate[m]12> | but my use case is eigen. |
| 11:21:07 | → | lavaman joins (~lavaman@98.38.249.169) |
| 11:21:19 | <otherwise> | :q |
| 11:21:42 | <Nate[m]12> | s/in/for/ |
| 11:22:57 | <Rembane> | Nate[m]12: What's an eigen? |
| 11:23:22 | <Nate[m]12> | eigen library for c++ |
| 11:23:36 | <Nate[m]12> | it's a math library |
| 11:23:37 | × | vglfr quits (~vglfr@46.96.129.172) (Ping timeout: 240 seconds) |
| 11:23:44 | <Rembane> | otherwise: Now you need to import things from Prelude, for instance: import Prelude (Num) |
| 11:24:10 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 268 seconds) |
| 11:24:10 | <Rembane> | Nate[m]12: Then write it in C++, I don't think it's worth it to find an eigen replacement in Haskell. |
| 11:25:17 | → | neurocyte0132889 joins (~neurocyte@IP-212232085135.dynamic.medianet-world.de) |
| 11:25:17 | × | neurocyte0132889 quits (~neurocyte@IP-212232085135.dynamic.medianet-world.de) (Changing host) |
| 11:25:17 | → | neurocyte0132889 joins (~neurocyte@user/neurocyte) |
| 11:26:01 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 268 seconds) |
| 11:27:34 | <thomasjm[m]> | https://hackage.haskell.org/package/eigen |
| 11:33:35 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 11:35:38 | → | rito_ joins (~rito_gh@45.112.243.151) |
| 11:37:51 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 245 seconds) |
| 11:38:34 | <otherwise> | Rembane: oh of course! Thanks! :) |
| 11:39:31 | <otherwise> | Certainly gives an appreciation of all the predefined libraries. |
| 11:41:54 | <otherwise> | somehow (:) is included... as well as numbers, and it seems to understand [] |
| 11:42:34 | <otherwise> | so it's not completely empty (referencing: ghci -XNoImplicitPrelude ) |
| 11:42:41 | <xerox> | otherwise: yeah :) |
| 11:44:01 | → | CiaoSen joins (~Jura@p200300c957347b002a3a4dfffe84dbd5.dip0.t-ipconnect.de) |
| 11:49:20 | → | mmhat joins (~mmh@55d4c35d.access.ecotel.net) |
| 11:50:44 | → | DNH joins (~DNH@2a02:8108:1100:16d8:4441:5555:5586:d167) |
| 11:50:58 | × | vysn quits (~vysn@user/vysn) (Read error: Connection reset by peer) |
| 11:51:13 | <xerox> | otherwise: I found an use for today's concatMap example right now https://i.imgur.com/vENgIIq.png |
| 11:52:50 | <otherwise> | before I peer into that code, I must say your example for concatMap was awesome! really enlightening |
| 11:55:05 | → | vglfr joins (~vglfr@46.96.129.172) |
| 11:55:34 | → | zincy joins (~zincy@host86-151-99-97.range86-151.btcentralplus.com) |
| 11:57:29 | → | coot joins (~coot@89-64-85-93.dynamic.chello.pl) |
| 12:00:21 | <otherwise> | looks great! I almost understand it :) |
| 12:00:40 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 12:01:16 | <otherwise> | Holy smokes, you included my name in line 75! thanks! |
| 12:02:22 | × | coot quits (~coot@89-64-85-93.dynamic.chello.pl) (Client Quit) |
| 12:02:57 | → | coot joins (~coot@89-64-85-93.dynamic.chello.pl) |
| 12:10:16 | × | kaph_ quits (~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Remote host closed the connection) |
| 12:10:56 | → | kaph joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it) |
| 12:19:10 | × | cosimone quits (~user@93-47-231-248.ip115.fastwebnet.it) (Read error: Connection reset by peer) |
| 12:19:23 | → | MoC joins (~moc@user/moc) |
| 12:31:27 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 12:31:27 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
| 12:31:27 | → | wroathe joins (~wroathe@user/wroathe) |
| 12:32:47 | → | neceve joins (~quassel@2.26.93.228) |
| 12:32:53 | × | kaph quits (~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Read error: Connection reset by peer) |
| 12:33:12 | → | kaph joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it) |
| 12:34:37 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds) |
| 12:35:01 | × | zincy quits (~zincy@host86-151-99-97.range86-151.btcentralplus.com) (Remote host closed the connection) |
| 12:35:57 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds) |
| 12:39:56 | → | fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) |
| 12:43:19 | × | otherwise quits (~otherwise@2601:602:880:90f0:3c50:d90d:a6a6:9cd0) () |
| 12:43:22 | → | thevishy joins (~Nishant@2405:201:f005:c007:1d22:93e8:b240:6332) |
| 12:45:01 | → | __monty__ joins (~toonn@user/toonn) |
| 12:45:26 | × | max22- quits (~maxime@2a01cb0883359800be9c06a9a4b3ba5d.ipv6.abo.wanadoo.fr) (Ping timeout: 260 seconds) |
| 12:49:30 | → | ProfSimm joins (~ProfSimm@87.227.196.109) |
| 12:56:02 | → | kaph_ joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it) |
| 12:58:30 | → | zincy joins (~zincy@host86-151-99-97.range86-151.btcentralplus.com) |
| 12:59:07 | × | kaph quits (~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Ping timeout: 268 seconds) |
| 13:00:03 | × | neurocyte0132889 quits (~neurocyte@user/neurocyte) (Quit: The Lounge - https://thelounge.chat) |
| 13:01:42 | → | neurocyte0132889 joins (~neurocyte@IP-212232085135.dynamic.medianet-world.de) |
| 13:01:42 | × | neurocyte0132889 quits (~neurocyte@IP-212232085135.dynamic.medianet-world.de) (Changing host) |
| 13:01:42 | → | neurocyte0132889 joins (~neurocyte@user/neurocyte) |
| 13:04:12 | × | zincy quits (~zincy@host86-151-99-97.range86-151.btcentralplus.com) (Remote host closed the connection) |
| 13:04:37 | → | slowtyper joins (~slowtyper@user/slowtyper) |
| 13:06:19 | × | DNH quits (~DNH@2a02:8108:1100:16d8:4441:5555:5586:d167) (Ping timeout: 250 seconds) |
| 13:06:33 | → | montxero` joins (~user@1.145.194.51) |
| 13:06:57 | × | vglfr quits (~vglfr@46.96.129.172) (Ping timeout: 240 seconds) |
| 13:07:08 | × | ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection) |
| 13:07:23 | → | vglfr joins (~vglfr@46.96.129.172) |
| 13:08:33 | × | coot quits (~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot) |
| 13:09:59 | → | syrkis joins (~syrkis@82.192.167.70) |
| 13:10:46 | × | neceve quits (~quassel@2.26.93.228) (Read error: Connection reset by peer) |
| 13:12:08 | → | ChaiTRex joins (~ChaiTRex@user/chaitrex) |
| 13:13:42 | × | montxero` quits (~user@1.145.194.51) (Remote host closed the connection) |
| 13:16:13 | × | tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 13:16:40 | → | stilgart joins (~Christoph@chezlefab.net) |
| 13:21:09 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 276 seconds) |
| 13:21:16 | → | cosimone joins (~user@93-47-231-248.ip115.fastwebnet.it) |
| 13:24:16 | → | machinedgod joins (~machinedg@24.105.81.50) |
| 13:24:38 | × | CiaoSen quits (~Jura@p200300c957347b002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
| 13:31:25 | → | Pickchea joins (~private@user/pickchea) |
| 13:32:12 | → | max22- joins (~maxime@2a01cb08833598008a92023ced423869.ipv6.abo.wanadoo.fr) |
| 13:35:51 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 13:36:20 | → | tromp joins (~textual@dhcp-077-249-230-040.chello.nl) |
| 13:40:30 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 260 seconds) |
| 13:45:29 | × | zaquest quits (~notzaques@5.130.79.72) (Remote host closed the connection) |
| 13:46:18 | <Pickchea> | Hey, I heard (>>=) is called "bind". Is there a name for (>>)? |
| 13:46:37 | → | zaquest joins (~notzaques@5.130.79.72) |
| 13:49:00 | <xerox> | maybe you can read it "and then" |
| 13:50:25 | → | Digit joins (~user@user/digit) |
| 13:52:36 | → | slowButPresent joins (~slowButPr@user/slowbutpresent) |
| 13:56:13 | × | deadmarshal quits (~deadmarsh@95.38.112.219) (Ping timeout: 240 seconds) |
| 14:02:46 | → | n3rdy1 joins (~n3rdy1@2601:281:c780:a510:e4ef:c23f:2799:9ee2) |
| 14:10:28 | → | [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470) |
| 14:12:02 | × | xff0x quits (~xff0x@2001:1a81:5206:b200:fabe:99c1:2820:5b8f) (Ping timeout: 240 seconds) |
| 14:13:02 | → | xff0x joins (~xff0x@2001:1a81:5206:b200:83f6:7a30:b822:7720) |
| 14:13:20 | × | KvL quits (~KvL@user/KvL) (Quit: KvL) |
| 14:13:42 | × | xsperry quits (~xs@user/xsperry) (Remote host closed the connection) |
| 14:18:14 | → | deadmarshal joins (~deadmarsh@95.38.112.219) |
| 14:20:37 | × | kmein quits (~weechat@user/kmein) (Quit: ciao kakao) |
| 14:20:55 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 14:20:57 | → | kmein joins (~weechat@user/kmein) |
| 14:21:17 | × | kaph_ quits (~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Ping timeout: 240 seconds) |
| 14:21:35 | → | epolanski joins (uid312403@id-312403.helmsley.irccloud.com) |
| 14:21:57 | × | falafel quits (~falafel@2603-8000-d800-688c-6db4-c125-f693-41cb.res6.spectrum.com) (Ping timeout: 240 seconds) |
| 14:23:02 | × | jinsun quits (~quassel@user/jinsun) (Ping timeout: 240 seconds) |
| 14:23:49 | → | kaph joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it) |
| 14:26:56 | → | aplainze1akind joins (~johndoe@captainludd.powered.by.lunarbnc.net) |
| 14:27:03 | × | aplainzetakind quits (~johndoe@captainludd.powered.by.lunarbnc.net) (Read error: Connection reset by peer) |
| 14:28:08 | × | inkbottle[m] quits (~inkbottle@2001:470:69fc:105::2ff5) (Quit: Client limit exceeded: 20000) |
| 14:28:45 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 276 seconds) |
| 14:28:47 | <Henson> | does anybody use Haskell in commercial applications who'd be interested in talking to me about it? I'd be interested in knowing somebody's experience in hiring Haskell developers, and the pros and cons from a manager's point of view over a more mainstream language like C++ |
| 14:28:48 | → | inkbottle[m] joins (~inkbottle@2001:470:69fc:105::2ff5) |
| 14:29:17 | × | deadmarshal quits (~deadmarsh@95.38.112.219) (Ping timeout: 240 seconds) |
| 14:31:05 | → | coot joins (~coot@89-64-85-93.dynamic.chello.pl) |
| 14:31:20 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 14:31:58 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 14:35:14 | × | kaph quits (~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Read error: Connection reset by peer) |
| 14:35:37 | → | kaph joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it) |
| 14:37:23 | → | deadmarshal joins (~deadmarsh@95.38.112.219) |
| 14:41:47 | → | acidjnk joins (~acidjnk@p200300d0c7271e489141218671316649.dip0.t-ipconnect.de) |
| 14:44:29 | × | deadmarshal quits (~deadmarsh@95.38.112.219) (Ping timeout: 256 seconds) |
| 14:46:34 | → | shriekingnoise joins (~shrieking@186.137.144.80) |
| 14:53:25 | × | n3rdy1 quits (~n3rdy1@2601:281:c780:a510:e4ef:c23f:2799:9ee2) (Ping timeout: 240 seconds) |
| 14:54:12 | → | ksqsf joins (~user@134.209.106.31) |
| 14:54:59 | <lechner> | Hi, has anyone tried to generate a Haskell type from a JSON schema? Is there an example anywhere? |
| 15:01:03 | → | waleee joins (~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4) |
| 15:05:17 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds) |
| 15:07:29 | <geekosaur> | https://hackage.haskell.org/package/aeson-schema claims to be able to generate types form a schema |
| 15:07:39 | <geekosaur> | *from |
| 15:08:36 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 15:08:53 | <lechner> | yeah, are there schemas other than JSON i should look at? |
| 15:09:30 | <geekosaur> | that I couldn't tell you |
| 15:09:42 | <geekosaur> | possibly YAML. I dislike it but it's widely used |
| 15:11:47 | → | kaph_ joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it) |
| 15:11:52 | <mjrosenb> | how on earth did it get to be widely used? I have literally never seen anyone who actually likes it. |
| 15:12:31 | × | kaph quits (~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Read error: Connection reset by peer) |
| 15:15:42 | <lechner> | i meant for the automatic generation of types |
| 15:16:23 | → | CiaoSen joins (~Jura@p5dcc17d2.dip0.t-ipconnect.de) |
| 15:17:07 | <lechner> | or perhasp someone can help me figure out how to use this? https://hackage.haskell.org/package/aeson-schema-0.4.1.2/docs/Data-Aeson-Schema-CodeGen.html |
| 15:17:17 | → | spaceseller joins (~spacesell@31.147.205.13) |
| 15:17:28 | <Square> | lechner, protobuf, thrift, typedefs (seems half finished). Then there is hschema, schemas and mu-schema. If its just the "schema-first" thing you're after |
| 15:17:29 | × | Pickchea quits (~private@user/pickchea) (Quit: Leaving) |
| 15:17:49 | <lechner> | yeah |
| 15:18:03 | <geekosaur> | there are also tools that convert yaml, etc. schema into json schemas, several designed for use with aeson-schema |
| 15:18:33 | <lechner> | actually, the other way around my work too, but then i'm perhaps married to haskell |
| 15:18:44 | <lechner> | might |
| 15:18:58 | × | ksqsf quits (~user@134.209.106.31) (Ping timeout: 260 seconds) |
| 15:19:06 | <lechner> | and being married to haskell isn't all terrible |
| 15:20:29 | → | ksqsf joins (~user@134.209.106.31) |
| 15:20:51 | <geekosaur> | sadly, neither the examples nor the tests are very enlightening about how to generate types |
| 15:20:52 | × | spaceseller quits (~spacesell@31.147.205.13) (Client Quit) |
| 15:21:12 | <lechner> | maybe protobuf is the way to go |
| 15:21:34 | <lechner> | i have just used JSON for so long |
| 15:22:53 | → | lavaman joins (~lavaman@98.38.249.169) |
| 15:25:17 | × | ksqsf quits (~user@134.209.106.31) (Ping timeout: 256 seconds) |
| 15:27:33 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 256 seconds) |
| 15:30:48 | → | Sgeo_ joins (~Sgeo@user/sgeo) |
| 15:31:44 | → | spaceseller joins (~spacesell@31.147.205.13) |
| 15:33:13 | × | Sgeo quits (~Sgeo@user/sgeo) (Ping timeout: 250 seconds) |
| 15:34:11 | → | kaph joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it) |
| 15:34:43 | × | kaph_ quits (~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Read error: Connection reset by peer) |
| 15:38:36 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 15:38:36 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
| 15:38:36 | → | wroathe joins (~wroathe@user/wroathe) |
| 15:44:59 | → | ksqsf joins (~user@134.209.106.31) |
| 15:56:30 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 276 seconds) |
| 15:57:36 | → | FinnElija joins (~finn_elij@user/finn-elija/x-0085643) |
| 16:08:31 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 250 seconds) |
| 16:15:17 | × | srwm^ quits (~srwm@207.5.54.6) (Remote host closed the connection) |
| 16:17:28 | → | nhatanh02 joins (~satori@user/nhatanh02) |
| 16:23:22 | → | Guest|3 joins (~Guest|3@189.84.72.71) |
| 16:24:24 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 16:24:25 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
| 16:24:25 | → | wroathe joins (~wroathe@user/wroathe) |
| 16:24:34 | × | Guest|3 quits (~Guest|3@189.84.72.71) (Client Quit) |
| 16:30:17 | × | justsomeguy quits (~justsomeg@user/justsomeguy) (Ping timeout: 240 seconds) |
| 16:30:37 | × | CiaoSen quits (~Jura@p5dcc17d2.dip0.t-ipconnect.de) (Ping timeout: 240 seconds) |
| 16:33:48 | <mjrosenb> | what's the mapping of base- versions to ghc releases? |
| 16:34:59 | → | kaph_ joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it) |
| 16:35:06 | × | kaph quits (~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Read error: Connection reset by peer) |
| 16:35:07 | → | dcoutts_ joins (~duncan@71.78.6.51.dyn.plus.net) |
| 16:38:02 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 268 seconds) |
| 16:38:09 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 16:38:48 | <geekosaur> | https://gitlab.haskell.org/ghc/ghc/-/wikis/commentary/libraries/version-history |
| 16:41:00 | <mjrosenb> | thanks! |
| 16:42:02 | × | obfusk quits (~quassel@a82-161-150-56.adsl.xs4all.nl) (Ping timeout: 240 seconds) |
| 16:42:32 | → | obfusk joins (~quassel@a82-161-150-56.adsl.xs4all.nl) |
| 16:42:55 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds) |
| 16:44:53 | <mjrosenb> | uh-oh |
| 16:44:57 | ← | jakalx parts (~jakalx@base.jakalx.net) (Error from remote client) |
| 16:45:03 | <mjrosenb> | is there a ghc-lib-parser for 8.6.5? |
| 16:46:00 | <geekosaur> | I'd be surprised if there were; 8.6.5 was replaced by 8.6.6 and then 8.6.7 within the space of a week iirc |
| 16:47:27 | <geekosaur> | wait, no, I'm thinking of 8.10.x |
| 16:50:31 | → | zincy joins (~zincy@2a00:23c8:970c:4801:bdb9:8c5f:3085:2807) |
| 16:51:48 | <mjrosenb> | I'm trying to get haskell-language-server built with 8.6.5, and a bunch of things depend on ghc-lib-parser (or at least the nix-expr I'm looking at says that it does) |
| 16:51:56 | <geekosaur> | mm, looks like there should be but it's difficult to tell from the cabal files |
| 16:53:11 | <geekosaur> | the oldest version of ghc-lib-parser claims tested with 8.6.1, so I assume some version between that and the 8.8s works with 8.6.5 |
| 16:53:19 | → | solidfox joins (~snake@user/snake) |
| 16:54:36 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 16:54:36 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
| 16:54:36 | → | wroathe joins (~wroathe@user/wroathe) |
| 16:55:30 | solidfox | is now known as snake |
| 16:55:41 | ← | snake parts (~snake@user/snake) () |
| 16:57:59 | <lechner> | Square: Thanks for those pointers! I further stumbled across Avro, which also appears well-supported in Haskell and offers schema evolution, although it is much less popular than the others https://hackage.haskell.org/package/avro |
| 16:58:00 | → | dsrt^ joins (~dsrt@207.5.54.6) |
| 16:59:21 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds) |
| 16:59:22 | → | dcoutts__ joins (~duncan@71.78.6.51.dyn.plus.net) |
| 16:59:28 | × | obfusk quits (~quassel@a82-161-150-56.adsl.xs4all.nl) (Quit: No Ping reply in 180 seconds.) |
| 17:00:11 | → | gdd joins (~gdd@129.199.146.230) |
| 17:00:42 | → | obfusk joins (~quassel@a82-161-150-56.adsl.xs4all.nl) |
| 17:01:05 | → | falafel joins (~falafel@cpe-76-168-195-162.socal.res.rr.com) |
| 17:01:52 | → | justsomeguy joins (~justsomeg@user/justsomeguy) |
| 17:02:03 | × | dcoutts_ quits (~duncan@71.78.6.51.dyn.plus.net) (Ping timeout: 250 seconds) |
| 17:02:22 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 17:08:10 | → | shapr joins (~user@pool-100-36-247-68.washdc.fios.verizon.net) |
| 17:11:16 | × | coolnickname quits (uid531864@user/coolnickname) (Quit: Connection closed for inactivity) |
| 17:13:21 | → | burnsidesLlama joins (~burnsides@dhcp168-010.wadham.ox.ac.uk) |
| 17:14:37 | → | jakalx joins (~jakalx@base.jakalx.net) |
| 17:14:39 | × | ezzieyguywuf quits (~Unknown@user/ezzieyguywuf) (Ping timeout: 256 seconds) |
| 17:15:02 | × | acidjnk quits (~acidjnk@p200300d0c7271e489141218671316649.dip0.t-ipconnect.de) (Ping timeout: 268 seconds) |
| 17:19:15 | → | Akiva joins (~Akiva@user/Akiva) |
| 17:20:41 | × | kaph_ quits (~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Ping timeout: 250 seconds) |
| 17:24:23 | → | kaph joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it) |
| 17:26:02 | → | econo joins (uid147250@user/econo) |
| 17:27:37 | → | allbery_b joins (~geekosaur@xmonad/geekosaur) |
| 17:27:37 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b))) |
| 17:27:40 | allbery_b | is now known as geekosaur |
| 17:28:34 | → | xsperry joins (~xs@user/xsperry) |
| 17:30:11 | × | spaceseller quits (~spacesell@31.147.205.13) (Quit: Leaving) |
| 17:34:04 | → | deadmarshal joins (~deadmarsh@95.38.112.219) |
| 17:35:01 | × | nhatanh02 quits (~satori@user/nhatanh02) (Ping timeout: 240 seconds) |
| 17:36:01 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds) |
| 17:36:21 | × | pavonia quits (~user@user/siracusa) (Quit: Bye!) |
| 17:41:32 | × | gdd quits (~gdd@129.199.146.230) (Ping timeout: 240 seconds) |
| 17:43:00 | → | hud joins (~hud@uwyo-129-72-161-67.uwyo.edu) |
| 17:44:57 | → | Guest55 joins (~Guest55@95-25-134-74.broadband.corbina.ru) |
| 17:45:29 | <hud> | hi all, newb question here: why can't I run this on list a `map ((+1).reverse) a` |
| 17:47:07 | <geekosaur> | what does it mean to reverse a number? |
| 17:47:39 | <geekosaur> | (`(+1)` indicates list items are numbers) |
| 17:48:00 | → | zebrag joins (~chris@user/zebrag) |
| 17:48:02 | × | justsomeguy quits (~justsomeg@user/justsomeguy) (Ping timeout: 240 seconds) |
| 17:48:03 | <geekosaur> | :t map ((+1) . reverse) |
| 17:48:04 | <lambdabot> | Num [a] => [[a]] -> [[a]] |
| 17:48:16 | <geekosaur> | so somehow a list has to be a number |
| 17:48:18 | × | alfonsox quits (~quassel@103.92.42.161) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.) |
| 17:49:16 | <hud> | yes so I wanted to just reverse a list and apply some function to it |
| 17:49:41 | <geekosaur> | then you reverse the list itself, not the individual items like map does |
| 17:49:51 | <geekosaur> | :t map (+1) . reverse |
| 17:49:52 | <lambdabot> | Num b => [b] -> [b] |
| 17:51:32 | <hud> | ahh, ok but with that I do get some error ```* Couldn't match expected type: a -> [b] |
| 17:51:33 | <hud> | with actual type: [a0]``` |
| 17:51:46 | <hud> | oh sorry not sure how to write code blocks here |
| 17:52:12 | <geekosaur> | my guess is you did something like: map (+1) . reverse [1,2,3] |
| 17:52:17 | <geekosaur> | you have a precedence error |
| 17:52:33 | <geekosaur> | > (map (+1) . reverse) [1,2,3] |
| 17:52:35 | <lambdabot> | [4,3,2] |
| 17:52:48 | <yushyin> | hud: old school, we use paste services like https://paste.tomsmeding.com/ |
| 17:53:00 | → | nhatanh02 joins (~satori@123.24.172.30) |
| 17:53:21 | Guest55 | is now known as GreenHat |
| 17:53:26 | → | Midjak joins (~Midjak@may53-1-78-226-116-92.fbx.proxad.net) |
| 17:54:12 | <geekosaur> | the composition operator (.) operates on functions, and the precedence of function application is higher than anything else. so it reads (map (+1)) . (reverse [1,2,3]), which means (reverse [1,2,3]) has to be a function. but it's not a function, it's a list |
| 17:55:38 | <hud> | Ahh! that works cheers. You got that from the error message? |
| 17:56:17 | <geekosaur> | yes |
| 17:56:34 | <geekosaur> | the expected type was a function, the actual type was a list |
| 17:57:09 | × | obfusk quits (~quassel@a82-161-150-56.adsl.xs4all.nl) (Ping timeout: 256 seconds) |
| 17:57:14 | <geekosaur> | and this is a common beginner error, it's come up 3-4 times in the past two days |
| 17:58:49 | → | obfusk joins (~quassel@a82-161-150-56.adsl.xs4all.nl) |
| 17:58:51 | <hud> | okay thanks, how do I work this paste code/error -> I copy paste the code block, submit and then? |
| 17:58:57 | → | nattiestnate joins (~nate@114.122.107.61) |
| 17:59:19 | <yushyin> | share the link |
| 17:59:28 | <geekosaur> | when you save it, the address bar in your browser will change, and you copy-paste that |
| 17:59:57 | <geekosaur> | note that you can put multiple files in a paste, so you can separate the code from the error and maintain line numbers between them |
| 18:00:16 | <monochrom> | Yeah put them in separate boxes but still on the same page. |
| 18:00:29 | <monochrom> | Other pastebins can't do that. Lame. |
| 18:01:15 | <hud> | ok let me test https://paste.tomsmeding.com/crEf1da4 |
| 18:01:34 | <monochrom> | Yeah like that. |
| 18:01:43 | → | justsomeguy joins (~justsomeg@user/justsomeguy) |
| 18:01:43 | <EvanR> | hud, "whatever -> whatever" is error message jargon for function, "[whatever]" is error message jargon for list. Actually it goes beyond error messages. Now you know |
| 18:03:01 | <geekosaur> | they come up everywhere, in fact |
| 18:03:05 | <geekosaur> | :t (+1) |
| 18:03:06 | <lambdabot> | Num a => a -> a |
| 18:03:11 | <hud> | ok cheers this has been helpful - will most likely come back with more newb questions soon |
| 18:04:05 | <EvanR> | :t cake |
| 18:04:07 | <lambdabot> | error: |
| 18:04:07 | <lambdabot> | • Variable not in scope: cake |
| 18:04:07 | <lambdabot> | • Perhaps you meant one of these: |
| 18:04:26 | <EvanR> | hmm, no ready examples of a list sitting around anymore |
| 18:04:44 | <monochrom> | I don't think it's healthy to avoid jargon or even think in terms of describing things as "jargon" in the first place. |
| 18:04:45 | × | ksqsf quits (~user@134.209.106.31) (Remote host closed the connection) |
| 18:05:05 | × | falafel quits (~falafel@cpe-76-168-195-162.socal.res.rr.com) (Ping timeout: 256 seconds) |
| 18:05:14 | <monochrom> | A programming language is a jargon language by definition. A person who learns programming has precisely signed up for it. |
| 18:05:23 | <geekosaur> | well, once you've introduced the syntax of functions, |
| 18:05:27 | <geekosaur> | :t reverse |
| 18:05:28 | <lambdabot> | [a] -> [a] |
| 18:05:53 | <geekosaur> | which is surprisingly useful: there are only two functions with that signature, `id` applied to a list and `reverse` |
| 18:06:47 | <EvanR> | this is good jargon |
| 18:06:51 | <geekosaur> | since `a` is unconstrained and unavailable otherwise, you know the function can't "see" the elements, only rearrange them somehow. and there are very few ways to rearrange them that don't require more information |
| 18:06:57 | <geekosaur> | so it almost has to be `reverse` |
| 18:07:34 | <EvanR> | er, there are a lot of ways to "blindly" rearrange a list |
| 18:08:00 | <monochrom> | @type take 3 |
| 18:08:01 | <lambdabot> | [a] -> [a] |
| 18:08:03 | <geekosaur> | but it's pure, so most of them aren't really doable |
| 18:08:03 | <monochrom> | :) |
| 18:08:28 | <geekosaur> | I was leaving out the ones that had more information (like `take 3`) |
| 18:08:30 | <geekosaur> | :t take |
| 18:08:31 | <lambdabot> | Int -> [a] -> [a] |
| 18:08:38 | <geekosaur> | has that extra Int there |
| 18:08:40 | <EvanR> | the 3 can be hard coded |
| 18:08:42 | × | xff0x quits (~xff0x@2001:1a81:5206:b200:83f6:7a30:b822:7720) (Ping timeout: 268 seconds) |
| 18:08:49 | <monochrom> | Yeah I'm hardcoding that 3. |
| 18:09:14 | <monochrom> | But I'll stop now. |
| 18:09:18 | <EvanR> | :t double (x:more) = x : x : double more |
| 18:09:19 | <lambdabot> | error: |
| 18:09:19 | <lambdabot> | parse error on input ‘=’ |
| 18:09:20 | <lambdabot> | Perhaps you need a 'let' in a 'do' block? |
| 18:09:25 | → | CiaoSen joins (~Jura@p200300c957347b002a3a4dfffe84dbd5.dip0.t-ipconnect.de) |
| 18:09:30 | <EvanR> | :t let double (x:more) = x : x : double more in double |
| 18:09:31 | <lambdabot> | [a] -> [a] |
| 18:11:25 | × | thevishy quits (~Nishant@2405:201:f005:c007:1d22:93e8:b240:6332) (Quit: Leaving) |
| 18:12:15 | <EvanR> | :t let half (x:_:more) = x : half more in half |
| 18:12:16 | <lambdabot> | [a] -> [a] |
| 18:12:35 | → | xff0x joins (~xff0x@2001:1a81:5206:b200:83f6:7a30:b822:7720) |
| 18:13:05 | <monochrom> | I think it's a dead horse now :) |
| 18:13:57 | × | coot quits (~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot) |
| 18:14:08 | → | coot joins (~coot@89-64-85-93.dynamic.chello.pl) |
| 18:15:40 | <monochrom> | I use f::a->[a] when I teach this. While it allows many possibilities, a single test case "f ()" nails it. If you tell me "f () = [(), ()]" then I know arbitrary "f x". |
| 18:16:41 | <EvanR> | so there's like a skeleton of possibilities |
| 18:17:05 | <EvanR> | a subset of things you can do if it weren't polymorphic |
| 18:17:54 | <EvanR> | and a = () reveals it |
| 18:18:03 | <monochrom> | [a]->[a] is richer, you have to test for various input lengths, and you have to watch out for permutations and duplications too. But you "just" have to test [], [0], [0,1], [0,1,2], ... , [0..] |
| 18:19:49 | <EvanR> | ah () doesn't reveal it in that case |
| 18:20:16 | <monochrom> | Yeah, consider "f [x,y] = [y, y, x]; f xs = xs" |
| 18:21:06 | × | epolanski quits (uid312403@id-312403.helmsley.irccloud.com) (Quit: Connection closed for inactivity) |
| 18:21:34 | <monochrom> | Sometimes I pose the opposite question on exams: Give two implementations that agree on these test cases but differ on other inputs. |
| 18:24:13 | <monochrom> | And then the Yoneda lemma generates a lot of good exam questions. |
| 18:25:44 | <monochrom> | E.g., f :: (Int -> a) -> [a], or generally replace [] by any functor. |
| 18:26:09 | <monochrom> | and replace Int by any concrete type. |
| 18:28:15 | × | Flonk quits (~Flonk@vps-zap441517-1.zap-srv.com) (Quit: Ping timeout (120 seconds)) |
| 18:29:05 | → | Flonk joins (~Flonk@vps-zap441517-1.zap-srv.com) |
| 18:31:24 | × | Flonk quits (~Flonk@vps-zap441517-1.zap-srv.com) (Client Quit) |
| 18:31:54 | → | Flonk joins (~Flonk@vps-zap441517-1.zap-srv.com) |
| 18:34:45 | → | kaph_ joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it) |
| 18:35:36 | × | kaph quits (~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Read error: Connection reset by peer) |
| 18:37:34 | → | timCF joins (~timCF@m91-129-100-224.cust.tele2.ee) |
| 18:38:00 | × | tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 18:39:47 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 18:39:47 | → | n3rdy1 joins (~n3rdy1@c-73-14-53-56.hsd1.co.comcast.net) |
| 18:44:11 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds) |
| 18:44:25 | <EvanR> | Yoneda's lemma is the only theorem from category I've heard of. And it's only a lemma |
| 18:44:31 | <EvanR> | category theory |
| 18:45:29 | <monochrom> | Let me share with you how seriously I take the different wordings "theorem" "lemma" "proposition" "fact". |
| 18:46:07 | → | tzh joins (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) |
| 18:46:19 | → | coolnickname joins (uid531864@user/coolnickname) |
| 18:46:30 | <timCF> | Hello! Is it possible to pass somehow type parameters (via TypeApplications or Proxy) into QuasiQuoter expression? I need it for the case where smart constructor inside QQ do require knowledge of phantom type parameter to know restrictions of values generated in compile-time. I need something like `[moneyAmt|0.01|] :: MoneyAmt 'Base 'Sell` or even better `[moneyAmt|0.01|] :: MoneyAmt dim act` for |
| 18:46:36 | <timCF> | polymorphic stuff. But it seems like QQ is not aware or type annotations I'm trying to feed into it. |
| 18:49:01 | <monochrom> | In PVS (http://pvs.csl.sri.com/), all of those words mean the same thing. You state a theorem by starting with "theorem" or "lemma" or "proposition" or "fact", it doesn't matter which. |
| 18:49:23 | <monochrom> | In fact, or "claim", "corollary", "sublemma", even "conjecture". |
| 18:49:32 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 18:49:32 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
| 18:49:32 | → | wroathe joins (~wroathe@user/wroathe) |
| 18:49:36 | <monochrom> | I was henceforth enlightened. |
| 18:51:58 | × | zincy quits (~zincy@2a00:23c8:970c:4801:bdb9:8c5f:3085:2807) (Remote host closed the connection) |
| 18:52:13 | → | zincy joins (~zincy@2a00:23c8:970c:4801:c17f:9983:e5a5:ab71) |
| 18:53:55 | <EvanR> | heh, fact vs claim |
| 18:54:04 | <monochrom> | heh |
| 18:54:10 | <EvanR> | is this Donald Trump's programming language of choice |
| 18:54:52 | <monochrom> | Does he like dependent types? :) |
| 18:55:03 | <EvanR> | that's cool that it was featured in The Martian |
| 18:55:15 | → | sirlensalot joins (~sirlensal@ool-44c5f8c9.dyn.optonline.net) |
| 18:56:17 | × | nhatanh02 quits (~satori@123.24.172.30) (Ping timeout: 240 seconds) |
| 19:04:17 | × | deadmarshal quits (~deadmarsh@95.38.112.219) (Ping timeout: 240 seconds) |
| 19:04:19 | → | ubert joins (~Thunderbi@p200300ecdf0994eb50cdffdede185786.dip0.t-ipconnect.de) |
| 19:06:11 | × | max22- quits (~maxime@2a01cb08833598008a92023ced423869.ipv6.abo.wanadoo.fr) (Ping timeout: 250 seconds) |
| 19:06:17 | × | justsomeguy quits (~justsomeg@user/justsomeguy) (Ping timeout: 256 seconds) |
| 19:09:33 | × | GreenHat quits (~Guest55@95-25-134-74.broadband.corbina.ru) (Ping timeout: 256 seconds) |
| 19:13:26 | × | Akiva quits (~Akiva@user/Akiva) (Ping timeout: 268 seconds) |
| 19:13:57 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds) |
| 19:14:16 | → | falafel joins (~falafel@cpe-76-168-195-162.socal.res.rr.com) |
| 19:21:19 | × | dcoutts__ quits (~duncan@71.78.6.51.dyn.plus.net) (Remote host closed the connection) |
| 19:24:13 | → | tromp joins (~textual@dhcp-077-249-230-040.chello.nl) |
| 19:24:30 | → | lavaman joins (~lavaman@98.38.249.169) |
| 19:29:06 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 260 seconds) |
| 19:31:20 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 19:31:20 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
| 19:31:20 | → | wroathe joins (~wroathe@user/wroathe) |
| 19:32:30 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 19:37:00 | × | TonyStone quits (~TonyStone@2603-7080-8607-c36a-9cdb-69bc-753b-1e50.res6.spectrum.com) (Quit: Leaving) |
| 19:37:15 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 19:43:14 | → | max22- joins (~maxime@2a01cb088335980068088847c57fd3ba.ipv6.abo.wanadoo.fr) |
| 19:48:51 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection) |
| 19:50:37 | → | geekosaur joins (~geekosaur@xmonad/geekosaur) |
| 19:51:59 | → | jgeerds joins (~jgeerds@55d4ac73.access.ecotel.net) |
| 19:55:12 | × | urdh quits (~urdh@user/urdh) (Quit: Boom!) |
| 19:59:24 | × | ubert quits (~Thunderbi@p200300ecdf0994eb50cdffdede185786.dip0.t-ipconnect.de) (Remote host closed the connection) |
| 20:01:59 | → | Erutuon joins (~Erutuon@user/erutuon) |
| 20:05:51 | × | juhp quits (~juhp@128.106.188.82) (Ping timeout: 268 seconds) |
| 20:06:17 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds) |
| 20:08:08 | × | zincy quits (~zincy@2a00:23c8:970c:4801:c17f:9983:e5a5:ab71) (Remote host closed the connection) |
| 20:08:17 | → | juhp joins (~juhp@128.106.188.82) |
| 20:09:17 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 20:15:24 | → | urdh joins (~urdh@user/urdh) |
| 20:15:46 | × | urdh quits (~urdh@user/urdh) (Client Quit) |
| 20:16:57 | × | notzmv quits (~zmv@user/notzmv) (Ping timeout: 240 seconds) |
| 20:18:02 | × | falafel quits (~falafel@cpe-76-168-195-162.socal.res.rr.com) (Ping timeout: 240 seconds) |
| 20:23:37 | → | urdh joins (~urdh@user/urdh) |
| 20:23:39 | × | urdh quits (~urdh@user/urdh) (Remote host closed the connection) |
| 20:23:55 | → | Michal[m]1 joins (~oomiguelm@2001:470:69fc:105::1:5ab0) |
| 20:25:02 | → | oo_miguel joins (~pi@77.252.47.226) |
| 20:27:22 | × | jeffz` quits (~user@lambda.xen.prgmr.com) (Remote host closed the connection) |
| 20:28:32 | × | dan-so quits (~danso@2001:1970:52e7:d000:96b8:6dff:feb3:c009) (Ping timeout: 240 seconds) |
| 20:29:02 | → | Akiva joins (~Akiva@user/Akiva) |
| 20:29:40 | → | jeffz` joins (~user@lambda.xen.prgmr.com) |
| 20:29:50 | → | dan-so joins (~danso@2001:1970:52e7:d000:96b8:6dff:feb3:c009) |
| 20:30:37 | → | urdh joins (~urdh@user/urdh) |
| 20:30:39 | × | urdh quits (~urdh@user/urdh) (Remote host closed the connection) |
| 20:33:22 | → | finalti[m] joins (~finaltima@2001:470:69fc:105::d909) |
| 20:36:19 | → | urdh joins (~urdh@user/urdh) |
| 20:36:21 | × | urdh quits (~urdh@user/urdh) (Remote host closed the connection) |
| 20:40:03 | <c_wraith> | timCF: https://hackage.haskell.org/package/template-haskell-2.18.0.0/docs/Language-Haskell-TH-Quote.html#t:QuasiQuoter |
| 20:40:25 | <c_wraith> | timCF: quoteExp specified Q Exp |
| 20:40:50 | <c_wraith> | timCF: So no, you can't use inference across the quote mechanism. |
| 20:41:43 | <c_wraith> | timCF: you need typed template haskell to manage that. |
| 20:42:50 | <c_wraith> | timCF: I'd say your best options are either moving that information into the String somehow (fragile, but maybe good enough) or using a typed template haskell splice (it can work well, but it just went through a massive API change with GHC 9, making it hard to write portably) |
| 20:43:02 | → | zincy joins (~zincy@2a00:23c8:970c:4801:c17f:9983:e5a5:ab71) |
| 20:45:10 | → | urdh joins (~urdh@user/urdh) |
| 20:45:11 | × | urdh quits (~urdh@user/urdh) (Remote host closed the connection) |
| 20:45:13 | → | mvk joins (~mvk@2607:fea8:5cdd:f000::917a) |
| 20:47:09 | → | urdh joins (~urdh@user/urdh) |
| 20:47:11 | × | urdh quits (~urdh@user/urdh) (Remote host closed the connection) |
| 20:47:37 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds) |
| 20:51:11 | → | falafel joins (~falafel@cpe-76-168-195-162.socal.res.rr.com) |
| 20:52:46 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 20:52:46 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
| 20:52:46 | → | wroathe joins (~wroathe@user/wroathe) |
| 20:53:43 | → | Las[m] joins (~lasmatrix@2001:470:69fc:105::74e) |
| 20:55:39 | × | falafel quits (~falafel@cpe-76-168-195-162.socal.res.rr.com) (Ping timeout: 256 seconds) |
| 20:55:53 | → | lbseale joins (~ep1ctetus@user/ep1ctetus) |
| 20:56:23 | <Las[m]> | I've heard that Backpack isn't likely to be supported in GHC going forward, how true is this? |
| 20:57:39 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 268 seconds) |
| 20:57:52 | × | xsperry quits (~xs@user/xsperry) () |
| 20:58:27 | × | lbseale quits (~ep1ctetus@user/ep1ctetus) (Read error: Connection reset by peer) |
| 20:58:35 | <geekosaur> | this is probably not the best place to ask that question, but given that stack still shows no signs of supporting it and excluding ~half the ecosystem from it is a bad plan, and nobody seems to have stepped forward to support it in future ghcs, I'd suspect it's likely |
| 20:59:44 | <EvanR> | oof |
| 20:59:57 | × | _ht quits (~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection) |
| 21:00:24 | → | urdh joins (~urdh@user/urdh) |
| 21:00:41 | × | urdh quits (~urdh@user/urdh) (Client Quit) |
| 21:02:15 | <mjrosenb> | backpack? |
| 21:02:25 | → | pavonia joins (~user@user/siracusa) |
| 21:02:41 | <EvanR> | kind of like a module system for haskell |
| 21:02:57 | × | n3rdy1 quits (~n3rdy1@c-73-14-53-56.hsd1.co.comcast.net) (Ping timeout: 240 seconds) |
| 21:04:05 | → | urdh joins (~urdh@user/urdh) |
| 21:04:08 | × | urdh quits (~urdh@user/urdh) (Remote host closed the connection) |
| 21:04:12 | <geekosaur> | yeh, backpack was intended to be like SML functors (parameterized modules) |
| 21:04:42 | <Las[m]> | geekosaur: Can you elaborate on the "stepped up" part? |
| 21:04:46 | <Las[m]> | Is the original contributor not active anymore? |
| 21:05:00 | <geekosaur> | it was a PhD thesis, they've since moved on |
| 21:05:58 | <geekosaur> | iirc hvr stepped forward for a while but he's vanished as well |
| 21:06:01 | <Las[m]> | That is quite unfortunate. |
| 21:06:54 | <Las[m]> | Perhaps I should just use CPP for my simple use case. |
| 21:07:13 | <sm> | everyone says that, but it seems nobody cares about it that much |
| 21:07:15 | → | urdh joins (~urdh@user/urdh) |
| 21:07:19 | <Las[m]> | I just want to switch have "production" and "development" modes. |
| 21:07:21 | <geekosaur> | also I think what's implemented is only part of the full system, but again nobody seems to be interested in finishing it |
| 21:07:47 | <Las[m]> | I think it's likely that 99% of the people who think it is unfortunate are not comfortable enough with GHC to contribute. |
| 21:08:03 | <geekosaur> | not sure backpack is worth the effort for that; I'd just use cpp |
| 21:08:07 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 21:08:07 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
| 21:08:07 | → | wroathe joins (~wroathe@user/wroathe) |
| 21:08:13 | <Las[m]> | AFAICT it's limited compared to SML functors, was this supposed to be fixed/improved upon? |
| 21:08:23 | <Las[m]> | It just seemed like a neat chance to use Backpack finally. |
| 21:08:26 | <geekosaur> | as I said, I think it's incomplete |
| 21:09:00 | <sm> | I think people who want it generally don't consider the maintenance, complexity, ecosystem costs |
| 21:09:16 | <geekosaur> | and, well, with stack not supporting it I think a largeish number of Haskell folks are excluded form it anyway |
| 21:10:04 | <sm> | those are what have discouraged expert devs from pushing it further, I suspect |
| 21:10:43 | <EvanR> | was backpack a ghc plugin, or more than that |
| 21:10:51 | <geekosaur> | more than that |
| 21:10:52 | <Las[m]> | No it's integrated into GHC. |
| 21:11:07 | <Las[m]> | Thanks for the information, it's really neat though. |
| 21:11:13 | <EvanR> | can it be a plugin |
| 21:11:17 | <Las[m]> | Much more "FP" than CPP and Cabal flags. |
| 21:11:25 | <geekosaur> | too deeply woven in, I'm pretty sure |
| 21:11:44 | <geekosaur> | even with the somewhat expanded plugin system in ghc9+ |
| 21:12:41 | <geekosaur> | suppose someone can try to get in touch with ezyang and find out his opinion on continued maintenance and maybe what's needed to complete it |
| 21:13:05 | <geekosaur> | and whether there's any chance of supporting it via plugins (and what kind of changes the plugin system might need to pull that off) |
| 21:13:18 | <timCF> | c_wraith: thanks for reply! |
| 21:13:36 | <mjrosenb> | ooh, I do like the sound of SML-style functors. |
| 21:13:43 | → | Codaraxis joins (~Codaraxis@user/codaraxis) |
| 21:13:47 | <mjrosenb> | I've always felt they were missing from haskell. |
| 21:14:40 | → | yauhsien joins (~yauhsien@118-167-42-25.dynamic-ip.hinet.net) |
| 21:15:05 | <EvanR> | you can parameterize records, but records can't hold instances or local classes. And you can't "open" a record |
| 21:15:38 | × | kaph_ quits (~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Remote host closed the connection) |
| 21:16:02 | → | kaph_ joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it) |
| 21:16:54 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 260 seconds) |
| 21:17:25 | <geekosaur> | not sure backpack even notionally supported "open" though |
| 21:18:09 | <geekosaur> | that might have been part of why backpack never caught on, in fact |
| 21:18:29 | → | TonyStone joins (~TonyStone@2603-7080-8607-c36a-9cdb-69bc-753b-1e50.res6.spectrum.com) |
| 21:19:39 | <Las[m]> | https://gitlab.haskell.org/ghc/ghc/-/wikis/Backpack-refactoring ! |
| 21:19:51 | × | yauhsien quits (~yauhsien@118-167-42-25.dynamic-ip.hinet.net) (Ping timeout: 268 seconds) |
| 21:31:25 | × | jespada quits (~jespada@87.74.33.157) (Ping timeout: 240 seconds) |
| 21:32:25 | <ProfSimm> | I'm wondering has anyone ever thought if we have no mutable state and side-effects, is it possible to tweak Haskell so it can run in reverse, i.e. feed output to a function, it gives you the inputs? |
| 21:33:10 | <ProfSimm> | Obviously this won't work with many existing functions, but you can tweak the output to produce part of the input necessary to compute in reverse, 5 + 6 => 11, 6 11 - 6 => 5, 6 |
| 21:33:25 | → | jespada joins (~jespada@87.74.33.157) |
| 21:34:16 | <EvanR> | you're getting reversibility which most functions aren't, because they aren't injective |
| 21:34:21 | <EvanR> | forgetting* |
| 21:34:30 | <Las[m]> | ProfSimm: In a dependently typed language you could probably define a type for a reversible function. |
| 21:34:30 | <geekosaur> | yeh |
| 21:35:06 | <EvanR> | and many functions should be reversible but aren't thanks to floating point :'( |
| 21:35:29 | <geekosaur> | and worth noting is that in many cases you'd end up needing state to make a function injective |
| 21:35:42 | <geekosaur> | so the premise may be wrong |
| 21:37:20 | <Las[m]> | `reversible a b = DPair (a -> b) $ \f => DPair (b -> a) $ \g => ((x : a) -> g (f x) === x)` or something in Idris 2 |
| 21:37:31 | <EvanR> | any function can be made reversible by promoting the domain and range from A -> B to (A,B) -> (B,A) and tracking what argument you used |
| 21:39:47 | <EvanR> | I'm wrong! |
| 21:40:26 | <geekosaur> | I was wondering if running them in Writer might help |
| 21:40:52 | <ProfSimm> | A, B -> C to A, B -> B, C |
| 21:41:23 | <EvanR> | can't parse |
| 21:41:27 | <geekosaur> | of course they'd have to tell appropriately |
| 21:42:34 | <EvanR> | any function can be made reversible by promoting the codomain to a pair that saves what argument you used, and so if the computations aren't naturally reversible, you get a lot of space usage for remembering |
| 21:45:44 | <EvanR> | xor can be made reversible by adding 1 more bit to the output, but and and or can't |
| 21:48:16 | <dsal> | > 727477226272 `mod` 13 |
| 21:48:17 | <lambdabot> | 4 |
| 21:51:03 | <mjrosenb> | you could also probably get away with a weaker form of reversibility, which is just a function that returns *an* input that results in the desired output. |
| 21:52:17 | × | mvk quits (~mvk@2607:fea8:5cdd:f000::917a) (Ping timeout: 240 seconds) |
| 21:52:35 | <mjrosenb> | ok, so, awkward gaps in my knowledge time: what happened to `cabal sandbox` in v2? |
| 21:53:13 | <sirlensalot> | nix-style builds are now the default |
| 21:53:31 | <sclv> | sandbox is gone entirely |
| 21:53:56 | <sclv> | it stuck around for a bit, but in the last major release it got removed entirely to clean up the codebase |
| 21:57:43 | <mjrosenb> | I'm not sure how nix-style builds have replced a sandbox. |
| 21:58:41 | × | kaph_ quits (~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Remote host closed the connection) |
| 21:59:06 | → | kaph_ joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it) |
| 21:59:37 | <monochrom> | Maybe this helps: Imagine sandboxes but if it is safe to share a built dependency then it's shared so you save some build time. |
| 22:00:29 | → | jtomas joins (~jtomas@153.red-83-53-252.dynamicip.rima-tde.net) |
| 22:01:11 | <monochrom> | So when using v2 you can just treat your "project" directory as an automatic sandbox. |
| 22:03:03 | <sm> | like a sandbox that uses a layered filesystem |
| 22:03:31 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 22:03:47 | <geekosaur> | yeh, v2 is automatic sandboxing, sandboxes were an attempt to keep v1 builds under control without it |
| 22:04:31 | <geekosaur> | the only place where I've had problems is xmonad which kinda expects to be globally (or at least user) available, but we have solutions there as well |
| 22:04:55 | <geekosaur> | and I'm noodling how to extend the automatic stack support in 0.17.0 to cabal v2 |
| 22:09:23 | <monochrom> | How to gain reversibility depends on why you want reversibility. |
| 22:10:09 | <monochrom> | "because I want quantum computing" is very different from "because I want an educational algorithm visualizer that has a bidirectional slider". |
| 22:11:11 | → | acidjnk joins (~acidjnk@p200300d0c7271e865819ff1869a0a668.dip0.t-ipconnect.de) |
| 22:13:34 | → | superstar64 joins (~superstar@2600:1700:ed80:50a0:d250:99ff:fe2c:53c4) |
| 22:13:35 | <monochrom> | There is a third one. "because I want to reduce waste heat" |
| 22:14:52 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
| 22:16:38 | × | MoC quits (~moc@user/moc) (Ping timeout: 260 seconds) |
| 22:17:16 | × | ProfSimm quits (~ProfSimm@87.227.196.109) (Remote host closed the connection) |
| 22:17:21 | × | kaph_ quits (~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Read error: Connection reset by peer) |
| 22:17:35 | → | kaph joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it) |
| 22:18:28 | × | coot quits (~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot) |
| 22:20:17 | × | jtomas quits (~jtomas@153.red-83-53-252.dynamicip.rima-tde.net) (Ping timeout: 240 seconds) |
| 22:23:30 | × | tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 22:23:43 | → | otherwise joins (~otherwise@c-71-231-39-206.hsd1.wa.comcast.net) |
| 22:23:53 | → | lbseale joins (~ep1ctetus@user/ep1ctetus) |
| 22:25:57 | <mjrosenb> | monochrom: makes sense. |
| 22:29:31 | → | notzmv joins (~zmv@user/notzmv) |
| 22:31:16 | × | coolnickname quits (uid531864@user/coolnickname) (Quit: Connection closed for inactivity) |
| 22:32:18 | → | deadmarshal joins (~deadmarsh@95.38.229.126) |
| 22:36:37 | × | deadmarshal quits (~deadmarsh@95.38.229.126) (Ping timeout: 240 seconds) |
| 22:37:38 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds) |
| 22:38:04 | → | tromp joins (~textual@dhcp-077-249-230-040.chello.nl) |
| 22:38:24 | → | vicfred joins (~vicfred@user/vicfred) |
| 22:39:08 | × | kaph quits (~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Read error: Connection reset by peer) |
| 22:40:25 | → | kaph_ joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it) |
| 22:43:29 | <otherwise> | LYAH introduces @ without any explanation :(. map (\l@(x:xs) -> (x,length l)) [[1,1,1,1,1],[2,2],[4],[5],[000]] |
| 22:44:11 | <geekosaur> | "as-pattern" |
| 22:44:42 | <geekosaur> | the value of the expression matched by pattern on the right is bound by the identifier on the left |
| 22:45:10 | <geekosaur> | so in this case you get the whole list as l, in addition to its head and tail as x and xs |
| 22:46:04 | <otherwise> | cool! thanks, that is clear |
| 22:46:36 | <hpc> | you can pop it into ghci as well |
| 22:46:49 | <hpc> | and experiment with it |
| 22:47:02 | <hpc> | (probably a good idea on all the other code samples too) |
| 22:50:26 | <otherwise> | kind of strange to me why :t @, :doc @ and :def @ all show nothing |
| 22:51:09 | <EvanR> | if you want the type of an operator you have to put ( ) |
| 22:51:17 | <geekosaur> | becuase it has no type |
| 22:51:17 | <EvanR> | :t (!!) |
| 22:51:18 | <lambdabot> | [a] -> Int -> a |
| 22:51:22 | <otherwise> | hpc: that is what I love so much about haskell, is ghc makes experimentation so accessible. :) |
| 22:51:42 | <geekosaur> | and is built into the compiler, as opposed to bei8ng defined somewhere that has documentation for :doc |
| 22:51:45 | <mjrosenb> | well, ghci |
| 22:52:05 | <otherwise> | mjrosenb yes, forgot the i |
| 22:53:41 | × | zincy quits (~zincy@2a00:23c8:970c:4801:c17f:9983:e5a5:ab71) (Remote host closed the connection) |
| 22:53:47 | <hpc> | ghc too, with holes |
| 22:54:17 | <monochrom> | @ is a reserved word, not an identifier. :t :doc etc do not known reserved words. No one has any expectation over ":type if". |
| 22:55:14 | <hpc> | i was going to suggest hoogle, but it seems to not give results for syntax anymore :( |
| 22:55:31 | <hpc> | you used to be able to hoogle things like "data" or "type" and get a paragraph or two |
| 22:57:04 | → | justsomeguy joins (~justsomeg@user/justsomeguy) |
| 22:57:48 | <EvanR> | have to say I had a hard time reading LYAH back in the day |
| 22:58:05 | <EvanR> | like, the information to nonsense ratio was low |
| 22:58:36 | <EvanR> | you've been reading it for how many weeks and you just got to @ ? |
| 22:58:36 | <dsal> | I find it a bit weird. I'm still trying to decide how much work I want to put into zippers. heh |
| 22:58:45 | <dsal> | (the chapter on zippers came up in a search) |
| 22:59:00 | <mjrosenb> | so far, my experience with haskell-language-server has proved it to be very good at showing me reserved keywords, and not so much at anything else. |
| 22:59:41 | <mjrosenb> | zippers are nice to understand, and will be useful every once in a while. If it is useful, use it, if it isn't don't shoehorn it into a good solution. |
| 22:59:47 | <monochrom> | If you just want to learn practical zippers, just having seen the list example and a binary tree example, you can already extrapolate to all practice use cases. |
| 23:00:31 | <monochrom> | If you want to dive into the theory, that's a rabbit hole of doing formal differentiation on type expressions >:) |
| 23:00:39 | × | shapr quits (~user@pool-100-36-247-68.washdc.fios.verizon.net) (Remote host closed the connection) |
| 23:00:50 | <EvanR> | "the zipper design pattern" chapter by gang of λ |
| 23:00:53 | → | shapr joins (~user@pool-100-36-247-68.washdc.fios.verizon.net) |
| 23:01:32 | × | hiato quits (~op_4@user/op-4/x-9116473) (Quit: ZNC 1.8.2+deb2+b1 - https://znc.in) |
| 23:02:11 | → | op_4 joins (~op_4@user/op-4/x-9116473) |
| 23:02:50 | <dsal> | It's more tedious than I'd like. |
| 23:04:59 | <dsal> | In particular, I can't randomly jump between points. |
| 23:05:22 | <EvanR> | if it's a static structure, you can put all possible zippers in a map |
| 23:06:01 | <dsal> | The problem is that I need to modify a few different parts. |
| 23:06:10 | → | biberu\ joins (~biberu@user/biberu) |
| 23:06:35 | <dsal> | I started by making an iterator that would do the thing, which was pretty easy, but if I replace a hole, I get a new zipper and can't just replace holes in others and have it do something meaningful. |
| 23:06:44 | <EvanR> | then zippering around seems absolutely necessary given how haskell data works |
| 23:06:58 | <EvanR> | rather, how it gets modified |
| 23:07:11 | <monochrom> | Zipper jumps to adjacent places only, yeah. |
| 23:07:26 | <monochrom> | For random access, consider lenses and optics. |
| 23:07:48 | <dsal> | The problem is that I want a logically adjacent node in a tree. |
| 23:08:58 | <dsal> | When iterating, it's pretty easy because I can just keep recursing down and right and eventually visit everything. But if I find something interesting and want to find the previous value, I have to go up until I can go left and then go down and right to find the value just to the left. |
| 23:09:18 | <EvanR> | find something interesting and the previous value |
| 23:09:24 | <EvanR> | screams "zip ap tail" |
| 23:09:57 | × | biberu quits (~biberu@user/biberu) (Ping timeout: 256 seconds) |
| 23:09:57 | biberu\ | is now known as biberu |
| 23:10:01 | geekosaur | wonders about comonad |
| 23:10:03 | <dsal> | Yeah, it was easy to do this when I flattened things into a list, but then I can't modify both values. |
| 23:10:06 | <EvanR> | that too |
| 23:10:08 | <dsal> | (three values in this case) |
| 23:10:26 | <glguy> | I did a version of https://adventofcode.com/2021/day/18 with zippers (just on the topic of things to do with them) |
| 23:10:49 | <dsal> | glguy: Yeah, that's what reminded me that they existed. :) I'm trying to do the thing with a uniplate zipper and it mostly just seems more tedious. |
| 23:11:15 | <dsal> | "trying" in this case is mostly a concern of effort and motivation and less on possibility. It just doesn't seem easier. |
| 23:11:20 | <EvanR> | i used a zipper for the guts of a command line text buffer |
| 23:11:24 | <EvanR> | worked |
| 23:11:29 | → | zincy joins (~zincy@2a00:23c8:970c:4801:c17f:9983:e5a5:ab71) |
| 23:11:48 | × | gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving) |
| 23:11:55 | <dsal> | zipper was super easy for split on day 18, though. |
| 23:14:09 | <glguy> | How that aoc is over for the year I've been updating all the past years to use my current aoc library and get more and more haddocks written https://glguy.net/advent/ |
| 23:14:54 | <dsal> | I should do that. My aoc library has some gross parts I keep reusing that could be a lot better. I'm still not done with all the years. |
| 23:15:54 | × | tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 23:26:14 | → | lavaman joins (~lavaman@98.38.249.169) |
| 23:27:36 | <dsal> | I guess I'm going to stop with this zipper for exploding. I can't seem to make it not be a lot more code that just numbering. This is one of those cases where the problem is so small it doesn't really matter. but it's tedious to find the right spot, fix it up, then wander up until I can wander left and then wander down and to the right to find the left thing. And then from there wander back up twice to get to the next spot. |
| 23:28:10 | <EvanR> | just numbering... or wrapping in the relevant exploding data |
| 23:29:39 | <dsal> | Numbering was a one-liner. The splitting was smaller with a zipper than the original thing I did. That could've also been smaller, but the zipper was really nice there. |
| 23:30:32 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 240 seconds) |
| 23:30:32 | <EvanR> | wrapped in the relevant split data, which was a bool |
| 23:30:46 | × | CiaoSen quits (~Jura@p200300c957347b002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 245 seconds) |
| 23:31:12 | × | zincy quits (~zincy@2a00:23c8:970c:4801:c17f:9983:e5a5:ab71) (Ping timeout: 268 seconds) |
| 23:32:10 | <otherwise> | ghci let me do g s@(x:xs) = x:s. but if I let that be a function in main.hs, it is not allowed. weird... |
| 23:33:07 | <EvanR> | that's funny |
| 23:33:09 | <geekosaur> | "not allowed" in what way? |
| 23:34:11 | <EvanR> | > let g ones@(x:xs) = x:ones in g (1:undefined) |
| 23:34:12 | <lambdabot> | [1,1*Exception: Prelude.undefined |
| 23:34:19 | × | cosimone quits (~user@93-47-231-248.ip115.fastwebnet.it) (Ping timeout: 256 seconds) |
| 23:34:45 | <EvanR> | 🤡 |
| 23:35:50 | <otherwise> | https://paste.tomsmeding.com/lkQj1j5f |
| 23:36:25 | <EvanR> | what else is in that file |
| 23:36:55 | <geekosaur> | ^ |
| 23:36:58 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 23:37:10 | <geekosaur> | looks like the real problem is on the line of code immediately before that definition |
| 23:38:01 | <otherwise> | i wrote file.hs, but i'm reloading modules.hs |
| 23:38:19 | × | Sgeo_ quits (~Sgeo@user/sgeo) (Ping timeout: 250 seconds) |
| 23:41:42 | × | dan-so quits (~danso@2001:1970:52e7:d000:96b8:6dff:feb3:c009) (Ping timeout: 268 seconds) |
| 23:42:33 | <monochrom> | This is why tech support is hard without remote rootkit. |
| 23:43:37 | <otherwise> | okay so it did work when I put it into its own file.. |
| 23:44:12 | <EvanR> | probably messed up indentation or mismatched parentheses |
| 23:44:19 | <EvanR> | (earlier in the file) |
| 23:44:43 | <monochrom> | http://www.vex.net/~trebla/humour/tautologies.html #4 |
| 23:45:32 | → | xsperry joins (~xs@user/xsperry) |
| 23:47:02 | × | Jing quits (~hedgehog@2604:a840:3::1067) (Remote host closed the connection) |
| 23:47:37 | → | Jing joins (~hedgehog@2604:a840:3::1067) |
| 23:49:32 | <otherwise> | okay, it as just a missed parentheses, thats embarrassing. Also it means haskell works, so thats good! |
| 23:49:57 | → | ksqsf joins (~user@134.209.106.31) |
| 23:51:26 | × | __monty__ quits (~toonn@user/toonn) (Quit: leaving) |
| 23:52:53 | <EvanR> | yeah someone probably would have noticed if correct parentheses gave that error |
| 23:53:11 | <EvanR> | (and indentation) |
| 23:54:09 | → | dan-so joins (~danso@2001:1970:52e7:d000:96b8:6dff:feb3:c009) |
| 23:56:58 | × | jgeerds quits (~jgeerds@55d4ac73.access.ecotel.net) (Ping timeout: 260 seconds) |
| 23:58:03 | <otherwise> | monochrom: yes, I was the cause to why the code I wrote caused an error. :) |
| 23:58:36 | → | madjestic joins (~madjestic@88-159-247-120.fixed.kpn.net) |
| 23:58:42 | → | n3rdy1 joins (~n3rdy1@2601:281:c780:a510:9005:8349:e7c7:a7ad) |
| 23:58:44 | → | zincy joins (~zincy@2a00:23c8:970c:4801:c17f:9983:e5a5:ab71) |
All times are in UTC on 2021-12-28.