Logs on 2021-10-21 (liberachat/#haskell)
| 00:00:25 | <noidedsuper> | https://gist.github.com/AnthonySuper/7c8fcab8f31ad3d2ab4911c323294fdf |
| 00:03:48 | <janus> | noidedsuper: what would be an example of incorrect use? |
| 00:06:18 | → | tommd joins (~tommd@75-164-130-101.ptld.qwest.net) |
| 00:06:35 | × | jgeerds quits (~jgeerds@55d4da80.access.ecotel.net) (Ping timeout: 260 seconds) |
| 00:07:04 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:b5c0:69fb:2ebc:745e) |
| 00:09:13 | <janus> | "the inverse of `f`". the f is the record field selector here? it's inverse would be the record field value, we already have the key name |
| 00:10:22 | <janus> | in my head, BothSides would contain a list of Fields. the serializer and deserializer are derivable from that list. |
| 00:11:02 | <noidedsuper> | https://gist.github.com/AnthonySuper/a51be1414a9f63305fdcc9ec334f6299 |
| 00:11:12 | <noidedsuper> | problem 1 already exists if you screw up and give it the wrong object key I suppose |
| 00:11:48 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Read error: Connection reset by peer) |
| 00:12:11 | <janus> | i don't think problem 1 is solvable... if people are worried about things like that, they must use generics and have the key names autoderived, such that they will always correspond |
| 00:12:18 | <noidedsuper> | I dunno, I might be overthinking the scope of the issue here I suppose lol |
| 00:14:19 | <janus> | hmm well i don't think people should be fmapping into the fields. just like you can't fmap into a lens |
| 00:14:37 | <noidedsuper> | fmap is a superclass of applicative though |
| 00:14:39 | → | abrantesasf joins (~abrantesa@187.36.170.211) |
| 00:14:49 | <noidedsuper> | I guess I coudl say "don't use it pls" |
| 00:15:24 | → | Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915) |
| 00:15:39 | <janus> | you could also just not use applicative, use some other thing. i dunno |
| 00:15:55 | × | mcglk quits (~mcglk@131.191.49.120) (Read error: Connection reset by peer) |
| 00:16:07 | <janus> | but one more thing: each combinator could reference a child schema, and there could be schemas provided for common types like strings or datetime |
| 00:16:09 | → | mcglk_ joins (~mcglk@131.191.49.120) |
| 00:16:55 | <janus> | and there could be a "schemaWithDocString :: String -> Schema -> Schema" |
| 00:17:44 | <noidedsuper> | Yeah the docs part is difficult |
| 00:17:46 | <noidedsuper> | actually |
| 00:18:03 | <noidedsuper> | Hmmmm. Maybe it isn't. |
| 00:18:08 | <janus> | such that you can do `personGivenName = schemaWithDocString "The given name of a person, not the family name. Mentioned last in china" stringSchema` |
| 00:18:27 | × | econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity) |
| 00:18:55 | <janus> | which would have type `Schema String` such that it fits with the "firstName :: String" in the record |
| 00:20:14 | → | off^ joins (~off@wsip-68-227-92-38.mc.at.cox.net) |
| 00:24:40 | × | myShoggoth quits (~myShoggot@97-120-85-195.ptld.qwest.net) (Ping timeout: 260 seconds) |
| 00:25:10 | × | tommd quits (~tommd@75-164-130-101.ptld.qwest.net) (Ping timeout: 260 seconds) |
| 00:30:33 | × | frosky_ quits (~froskyarr@59.41.160.207) (Quit: Leaving) |
| 00:36:59 | × | InstX1 quits (~delicacie@c-98-208-218-119.hsd1.fl.comcast.net) (Ping timeout: 264 seconds) |
| 00:38:56 | <janus> | noidedsuper: if we have a sum type `data Foo = A | B` we could have `tag2 :: Schema a -> Schema b -> Key -> String -> String` where the first string is the tag for the first case, and the second string is the tag for the second case. and the Key would be the key used to store the tag in the JSON |
| 00:39:48 | <janus> | ah, it would also need the constructors for the two cases and the "reverse constructor" |
| 00:40:14 | × | jespada quits (~jespada@2803:9800:9842:7a62:5d33:6404:2aef:9813) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 00:41:43 | <janus> | the tricky thing is the reverse constructor which must decide which serializer to use. in the case of 2, it could return an "Either a b" |
| 00:42:01 | → | [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470) |
| 00:42:03 | <noidedsuper> | That's what `Selectable` gets ya |
| 00:42:05 | <noidedsuper> | which is nice |
| 00:42:12 | <janus> | ah ok |
| 00:42:21 | <janus> | but it would be boiler-platey right? |
| 00:43:43 | <janus> | oops tag2 should of course return "Schema (Either a b)", i forgot that |
| 00:44:51 | <janus> | but the definition of Foo is too boring, it should be "A String | B Int" |
| 00:45:40 | × | MQ-17J quits (~MQ-17J@8.21.10.23) (Ping timeout: 260 seconds) |
| 00:47:20 | <janus> | then the call would be `tag2 stringSchema intSchema "tag" "a" "b" (\case A str -> Left str; B int -> Right int) :: Schema Foo)`... but now i forgot that it would also need A and B passed to it such that it can also construct a Foo... |
| 00:48:14 | → | lavaman joins (~lavaman@98.38.249.169) |
| 00:48:24 | → | MQ-17J joins (~MQ-17J@8.6.144.186) |
| 00:49:18 | <janus> | i wonder how it looks with selectable with more than two cases |
| 00:51:10 | × | lbseale_ quits (~lbseale@user/ep1ctetus) (Read error: Connection reset by peer) |
| 00:52:40 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 260 seconds) |
| 00:53:30 | → | pavonia joins (~user@user/siracusa) |
| 00:58:18 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 260 seconds) |
| 01:00:08 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 01:01:26 | × | aa quits (~douglasco@200.146.85.128.static.gvt.net.br) (Read error: Connection reset by peer) |
| 01:01:35 | → | aa joins (~douglasco@200.146.85.128.static.gvt.net.br) |
| 01:01:54 | <noidedsuper> | It's basically just nesting I think |
| 01:02:31 | → | betelgeuse joins (~betelgeus@94-225-47-8.access.telenet.be) |
| 01:06:40 | × | kupi quits (uid212005@id-212005.hampstead.irccloud.com) (Ping timeout: 260 seconds) |
| 01:07:11 | × | Boarders quits (sid425905@id-425905.lymington.irccloud.com) (Ping timeout: 245 seconds) |
| 01:07:36 | × | hnOsmium0001 quits (uid453710@id-453710.hampstead.irccloud.com) (Ping timeout: 245 seconds) |
| 01:07:54 | → | myShoggoth joins (~myShoggot@97-120-85-195.ptld.qwest.net) |
| 01:07:59 | × | sclv quits (sid39734@haskell/developer/sclv) (Ping timeout: 258 seconds) |
| 01:09:25 | × | truckasaurus quits (sid457088@helmsley.irccloud.com) (Ping timeout: 252 seconds) |
| 01:09:31 | × | elvishjerricco quits (sid237756@helmsley.irccloud.com) (Ping timeout: 258 seconds) |
| 01:09:46 | × | gaze___ quits (sid387101@helmsley.irccloud.com) (Ping timeout: 268 seconds) |
| 01:10:10 | × | grfn quits (sid449115@helmsley.irccloud.com) (Ping timeout: 260 seconds) |
| 01:11:53 | → | elvishjerricco joins (sid237756@helmsley.irccloud.com) |
| 01:11:57 | → | truckasaurus joins (sid457088@helmsley.irccloud.com) |
| 01:11:58 | → | gaze___ joins (sid387101@id-387101.helmsley.irccloud.com) |
| 01:12:04 | → | kupi joins (uid212005@hampstead.irccloud.com) |
| 01:12:06 | → | Boarders joins (sid425905@lymington.irccloud.com) |
| 01:12:09 | → | sclv joins (sid39734@haskell/developer/sclv) |
| 01:12:59 | × | whez quits (sid470288@lymington.irccloud.com) (Ping timeout: 264 seconds) |
| 01:13:21 | → | grfn joins (sid449115@id-449115.helmsley.irccloud.com) |
| 01:13:24 | <janus> | noidedsuper: to generalize this in an arity safe maner, the tag values and the constructors (A, B, ...) and their schemata can be combined using a combinator. and then all those combined cases could be combined with a function that extracts the value from each case, in this case "... -> (Foo -> String) -> (Foo -> Int) -> Schema Foo". with applicative style, correspondence between the extracting function |
| 01:13:31 | <janus> | and the combined tag-cases is ensured |
| 01:14:17 | × | burnside_ quits (~burnsides@client-8-85.eduroam.oxuni.org.uk) (Remote host closed the connection) |
| 01:16:09 | → | whez joins (sid470288@id-470288.lymington.irccloud.com) |
| 01:20:48 | → | hnOsmium0001 joins (uid453710@id-453710.hampstead.irccloud.com) |
| 01:23:30 | → | emf_ joins (~emf@2620:10d:c090:400::5:70ff) |
| 01:26:46 | × | emf quits (~emf@2620:10d:c090:400::5:7558) (Ping timeout: 245 seconds) |
| 01:29:34 | × | guydb89 quits (~guy@98.200.9.228) (Ping timeout: 260 seconds) |
| 01:31:14 | → | guydb89 joins (~guy@98.198.129.114) |
| 01:31:28 | <noidedsuper> | I can play around with it! |
| 01:31:45 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (Ping timeout: 260 seconds) |
| 01:31:53 | <noidedsuper> | Tomorrow, unfortunately. But thanks for the feedback, Janus! It really helped. |
| 01:32:32 | × | noidedsuper quits (~manjaro-u@2601:280:5a81:520::f8be) (Remote host closed the connection) |
| 01:32:55 | × | myShoggoth quits (~myShoggot@97-120-85-195.ptld.qwest.net) (Ping timeout: 260 seconds) |
| 01:32:57 | <janus> | good, happy to help, i should mention that i didn't invent any of this, my ideas are taken from libraries such as Orville |
| 01:36:21 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 258 seconds) |
| 01:38:47 | × | ski quits (~ski@remote12.chalmers.se) (Ping timeout: 264 seconds) |
| 01:41:53 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 01:45:10 | × | rekahsoft quits (~rekahsoft@cpe0008a20f982f-cm64777d666260.cpe.net.cable.rogers.com) (Ping timeout: 260 seconds) |
| 01:45:13 | × | stiell quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection) |
| 01:46:40 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 01:47:11 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 245 seconds) |
| 01:48:58 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 01:50:18 | × | random-jellyfish quits (~random-je@user/random-jellyfish) (Ping timeout: 256 seconds) |
| 01:50:29 | × | zaquest quits (~notzaques@5.128.210.178) (Remote host closed the connection) |
| 01:53:22 | × | xff0x quits (~xff0x@port-92-195-26-90.dynamic.as20676.net) (Ping timeout: 260 seconds) |
| 01:53:52 | → | zaquest joins (~notzaques@5.128.210.178) |
| 01:55:00 | → | sedeki joins (~textual@user/sedeki) |
| 01:55:10 | → | xff0x joins (~xff0x@2001:1a81:524c:400:5205:21d5:64e1:92) |
| 01:56:32 | → | falafel joins (~falafel@2603-8000-d800-688c-c469-52c4-b20d-779e.res6.spectrum.com) |
| 01:57:57 | × | falafel quits (~falafel@2603-8000-d800-688c-c469-52c4-b20d-779e.res6.spectrum.com) (Remote host closed the connection) |
| 01:58:10 | → | falafel joins (~falafel@cpe-76-168-195-162.socal.res.rr.com) |
| 01:59:41 | → | stiell joins (~stiell@gateway/tor-sasl/stiell) |
| 02:00:50 | × | mmhat quits (~mmh@55d4469f.access.ecotel.net) (Ping timeout: 260 seconds) |
| 02:06:25 | × | sedeki quits (~textual@user/sedeki) (Quit: Textual IRC Client: www.textualapp.com) |
| 02:06:31 | × | guydb89 quits (~guy@98.198.129.114) (Remote host closed the connection) |
| 02:12:35 | × | MQ-17J quits (~MQ-17J@8.6.144.186) (Ping timeout: 260 seconds) |
| 02:13:17 | → | mmhat joins (~mmh@55d45798.access.ecotel.net) |
| 02:16:05 | × | falafel quits (~falafel@cpe-76-168-195-162.socal.res.rr.com) (Ping timeout: 260 seconds) |
| 02:19:30 | → | econo joins (uid147250@user/econo) |
| 02:21:20 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds) |
| 02:32:34 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 260 seconds) |
| 02:33:55 | × | alx741 quits (~alx741@186.178.109.50) (Quit: alx741) |
| 02:41:00 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 02:41:00 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
| 02:41:00 | → | wroathe joins (~wroathe@user/wroathe) |
| 02:42:23 | × | td_ quits (~td@94.134.91.144) (Ping timeout: 264 seconds) |
| 02:44:06 | → | td_ joins (~td@94.134.91.188) |
| 02:45:15 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 260 seconds) |
| 02:46:27 | × | mmhat quits (~mmh@55d45798.access.ecotel.net) (Quit: WeeChat 3.3) |
| 02:46:30 | × | peterhil quits (~peterhil@dsl-hkibng32-54fb56-2.dhcp.inet.fi) (Ping timeout: 258 seconds) |
| 02:46:49 | → | FinnElija joins (~finn_elij@user/finn-elija/x-0085643) |
| 02:47:14 | → | MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com) |
| 03:00:02 | × | haasn quits (~nand@haasn.dev) (Quit: ZNC 1.7.5+deb4 - https://znc.in) |
| 03:00:33 | → | favonia joins (~favonia@user/favonia) |
| 03:01:32 | → | haasn joins (~nand@haasn.dev) |
| 03:03:20 | × | segfaultfizzbuzz quits (~segfaultf@135-180-0-138.static.sonic.net) (Ping timeout: 260 seconds) |
| 03:08:44 | × | favonia quits (~favonia@user/favonia) (Ping timeout: 258 seconds) |
| 03:13:10 | × | machinedgod quits (~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 260 seconds) |
| 03:13:41 | × | connrs quits (~connrs@conners.plus.com) (Read error: Connection reset by peer) |
| 03:16:24 | → | connrs joins (~connrs@conners.plus.com) |
| 03:23:47 | → | myShoggoth joins (~myShoggot@97-120-85-195.ptld.qwest.net) |
| 03:24:26 | × | zebrag quits (~chris@user/zebrag) (Quit: Konversation terminated!) |
| 03:27:31 | × | jlamothe quits (~jlamothe@198.251.61.229) (Ping timeout: 258 seconds) |
| 03:28:53 | → | benin0 joins (~benin@183.82.179.164) |
| 03:29:07 | × | benin quits (~benin@183.82.179.164) (Ping timeout: 252 seconds) |
| 03:29:07 | benin0 | is now known as benin |
| 03:30:43 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 03:31:22 | <jackdk> | I'm trying to use servant-server's UVerb machinery, and am getting a strange type error: `Expected one of: '[WithStatus 200 [StoredResourceData id]], but got: WithStatus 200 [StoredResourceData id]`. I suspect that it's a type family thing: that the open union membership test fails before the type families reduce to being equal - should I be looking for ways to delay/force type family evaluation? |
| 03:31:52 | <jackdk> | `StoredResourceData :: Type -> Type` is an associated type family I've written for a `class Resource id` |
| 03:37:26 | <jackdk> | Here is a minimal example, using servant and servant-server 0.18.3 https://www.irccloud.com/pastebin/Zui39kYI/servant-generic-error.hs |
| 03:38:06 | <jackdk> | The error appears on the call to `respond` |
| 03:38:20 | × | myShoggoth quits (~myShoggot@97-120-85-195.ptld.qwest.net) (Ping timeout: 260 seconds) |
| 03:40:35 | × | [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection) |
| 03:43:43 | → | myShoggoth joins (~myShoggot@97-120-85-195.ptld.qwest.net) |
| 03:43:46 | → | Everything joins (~Everythin@37.115.210.35) |
| 03:43:59 | × | hnOsmium0001 quits (uid453710@id-453710.hampstead.irccloud.com) (Quit: Connection closed for inactivity) |
| 03:46:43 | <jackdk> | https://github.com/haskell-servant/servant/issues/1381 seems to be related but I don't completely follow the discussion. |
| 04:05:15 | → | Stotteren joins (~Stotteren@pool-108-20-79-41.bstnma.fios.verizon.net) |
| 04:05:18 | → | Gestotterd joins (~Stotteren@pool-108-20-79-41.bstnma.fios.verizon.net) |
| 04:12:26 | × | kong4ndrew quits (~kong4ndre@199.247.111.247) (Remote host closed the connection) |
| 04:12:43 | → | kong4ndrew joins (~kong4ndre@199.247.111.247) |
| 04:16:28 | × | kong4ndrew quits (~kong4ndre@199.247.111.247) (Remote host closed the connection) |
| 04:17:18 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 04:17:36 | → | kong4ndrew joins (~kong4ndre@199.247.111.247) |
| 04:19:16 | × | kong4ndrew quits (~kong4ndre@199.247.111.247) (Remote host closed the connection) |
| 04:19:33 | → | kong4ndrew joins (~kong4ndre@199.247.111.247) |
| 04:19:42 | → | LiaoTao_ joins (~LiaoTao@gateway/tor-sasl/liaotao) |
| 04:21:06 | × | LiaoTao quits (~LiaoTao@gateway/tor-sasl/liaotao) (Ping timeout: 276 seconds) |
| 04:23:16 | × | kong4ndrew quits (~kong4ndre@199.247.111.247) (Remote host closed the connection) |
| 04:23:33 | → | kong4ndrew joins (~kong4ndre@199.247.111.247) |
| 04:25:05 | <hololeap> | extendWith :: Comonad w => (w a -> b) -> w a -> w (a,b) |
| 04:25:13 | <hololeap> | extendWith f w = let a = extract w in (a,) <$> extend f w |
| 04:25:18 | <hololeap> | does this look reasonable? |
| 04:26:02 | <hololeap> | I'm just trying to use extend but keep the previous value around. is there a more idiomatic way to do this? |
| 04:26:56 | → | ArctVaulMarsHMPJ joins (~pjetcetal@128-71-225-36.broadband.corbina.ru) |
| 04:29:30 | × | kong4ndrew quits (~kong4ndre@199.247.111.247) (Remote host closed the connection) |
| 04:29:48 | → | kong4ndrew joins (~kong4ndre@199.247.111.247) |
| 04:32:01 | × | slowButPresent quits (~slowButPr@user/slowbutpresent) (Quit: leaving) |
| 04:33:41 | × | kong4ndrew quits (~kong4ndre@199.247.111.247) (Remote host closed the connection) |
| 04:33:59 | → | kong4ndrew joins (~kong4ndre@199.247.111.247) |
| 04:36:14 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 260 seconds) |
| 04:38:00 | × | kong4ndrew quits (~kong4ndre@199.247.111.247) (Remote host closed the connection) |
| 04:38:10 | → | favonia joins (~favonia@user/favonia) |
| 04:38:18 | → | kong4ndrew joins (~kong4ndre@199.247.111.247) |
| 04:39:59 | × | kong4ndrew quits (~kong4ndre@199.247.111.247) (Remote host closed the connection) |
| 04:40:18 | → | kong4ndrew joins (~kong4ndre@199.247.111.247) |
| 04:40:57 | → | coot joins (~coot@37.30.49.107.nat.umts.dynamic.t-mobile.pl) |
| 04:42:26 | → | Guest32 joins (~Guest32@2603-8000-3f42-d500-c5e7-f6b2-1524-e2a0.res6.spectrum.com) |
| 04:44:14 | × | kong4ndrew quits (~kong4ndre@199.247.111.247) (Remote host closed the connection) |
| 04:44:31 | → | kong4ndrew joins (~kong4ndre@199.247.111.247) |
| 04:45:15 | × | Guest32 quits (~Guest32@2603-8000-3f42-d500-c5e7-f6b2-1524-e2a0.res6.spectrum.com) (Client Quit) |
| 04:48:12 | × | kong4ndrew quits (~kong4ndre@199.247.111.247) (Remote host closed the connection) |
| 04:48:30 | → | kong4ndrew joins (~kong4ndre@199.247.111.247) |
| 04:49:57 | → | lavaman joins (~lavaman@98.38.249.169) |
| 04:51:51 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 258 seconds) |
| 04:54:26 | × | kong4ndrew quits (~kong4ndre@199.247.111.247) (Remote host closed the connection) |
| 04:54:26 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 260 seconds) |
| 04:54:28 | × | ArctVaulMarsHMPJ quits (~pjetcetal@128-71-225-36.broadband.corbina.ru) (Quit: EXIT) |
| 04:54:45 | → | kong4ndrew joins (~kong4ndre@199.247.111.247) |
| 04:56:25 | × | kong4ndrew quits (~kong4ndre@199.247.111.247) (Remote host closed the connection) |
| 04:56:42 | → | kong4ndrew joins (~kong4ndre@199.247.111.247) |
| 04:58:23 | × | kong4ndrew quits (~kong4ndre@199.247.111.247) (Remote host closed the connection) |
| 04:58:41 | → | kong4ndrew joins (~kong4ndre@199.247.111.247) |
| 04:59:57 | → | sedeki joins (~textual@user/sedeki) |
| 05:02:22 | × | kong4ndrew quits (~kong4ndre@199.247.111.247) (Remote host closed the connection) |
| 05:02:41 | → | kong4ndrew joins (~kong4ndre@199.247.111.247) |
| 05:04:21 | × | kong4ndrew quits (~kong4ndre@199.247.111.247) (Remote host closed the connection) |
| 05:04:38 | → | kong4ndrew joins (~kong4ndre@199.247.111.247) |
| 05:06:19 | × | kong4ndrew quits (~kong4ndre@199.247.111.247) (Remote host closed the connection) |
| 05:06:36 | → | kong4ndrew joins (~kong4ndre@199.247.111.247) |
| 05:06:46 | × | sedeki quits (~textual@user/sedeki) (Quit: Textual IRC Client: www.textualapp.com) |
| 05:08:26 | × | kong4ndrew quits (~kong4ndre@199.247.111.247) (Remote host closed the connection) |
| 05:08:44 | → | kong4ndrew joins (~kong4ndre@199.247.111.247) |
| 05:10:25 | × | kong4ndrew quits (~kong4ndre@199.247.111.247) (Remote host closed the connection) |
| 05:10:42 | → | kong4ndrew joins (~kong4ndre@199.247.111.247) |
| 05:12:23 | × | kong4ndrew quits (~kong4ndre@199.247.111.247) (Remote host closed the connection) |
| 05:12:40 | → | kong4ndrew joins (~kong4ndre@199.247.111.247) |
| 05:14:21 | × | kong4ndrew quits (~kong4ndre@199.247.111.247) (Remote host closed the connection) |
| 05:14:39 | → | kong4ndrew joins (~kong4ndre@199.247.111.247) |
| 05:14:47 | × | off^ quits (~off@wsip-68-227-92-38.mc.at.cox.net) (Ping timeout: 264 seconds) |
| 05:16:27 | → | off^ joins (~off@wsip-68-227-92-38.mc.at.cox.net) |
| 05:16:27 | × | kong4ndrew quits (~kong4ndre@199.247.111.247) (Remote host closed the connection) |
| 05:16:45 | → | kong4ndrew joins (~kong4ndre@199.247.111.247) |
| 05:16:47 | × | abrantesasf quits (~abrantesa@187.36.170.211) (Remote host closed the connection) |
| 05:18:27 | × | kong4ndrew quits (~kong4ndre@199.247.111.247) (Remote host closed the connection) |
| 05:18:45 | → | kong4ndrew joins (~kong4ndre@199.247.111.247) |
| 05:25:02 | × | kong4ndrew quits (~kong4ndre@199.247.111.247) (Remote host closed the connection) |
| 05:25:20 | → | kong4ndrew joins (~kong4ndre@199.247.111.247) |
| 05:27:52 | → | ski joins (~ski@remote12.chalmers.se) |
| 05:27:55 | × | kong4ndrew quits (~kong4ndre@199.247.111.247) (Remote host closed the connection) |
| 05:28:12 | → | kong4ndrew joins (~kong4ndre@199.247.111.247) |
| 05:29:53 | × | kong4ndrew quits (~kong4ndre@199.247.111.247) (Remote host closed the connection) |
| 05:33:30 | → | michalz joins (~michalz@185.246.204.93) |
| 05:39:24 | → | alzgh joins (~alzgh@user/alzgh) |
| 05:41:47 | × | zmt00 quits (~zmt00@user/zmt00) (Ping timeout: 264 seconds) |
| 05:47:17 | → | InstX1 joins (~delicacie@c-98-208-218-119.hsd1.fl.comcast.net) |
| 05:52:14 | × | hololeap quits (~hololeap@user/hololeap) (Remote host closed the connection) |
| 05:53:48 | → | hololeap joins (~hololeap@user/hololeap) |
| 05:54:13 | → | jlamothe joins (~jlamothe@198.251.61.229) |
| 06:03:28 | <hololeap> | @hoogle Comonad w => (w a -> b) -> w a -> w (a,b) |
| 06:03:30 | <lambdabot> | No results found |
| 06:04:29 | → | ubert joins (~Thunderbi@77.119.208.184.wireless.dyn.drei.com) |
| 06:04:40 | × | hololeap quits (~hololeap@user/hololeap) (Remote host closed the connection) |
| 06:06:01 | → | hololeap joins (~hololeap@user/hololeap) |
| 06:06:21 | × | remexre quits (~remexre@user/remexre) (Ping timeout: 245 seconds) |
| 06:06:41 | × | echoreply quits (~echoreply@2001:19f0:9002:1f3b:5400:ff:fe6f:8b8d) (Quit: WeeChat 2.8) |
| 06:06:59 | → | joeyh_ joins (joeyh@kitenet.net) |
| 06:07:08 | × | statusbot quits (~statusbot@ec2-34-198-122-184.compute-1.amazonaws.com) (Read error: Connection reset by peer) |
| 06:07:11 | → | echoreply joins (~echoreply@45.32.163.16) |
| 06:07:19 | → | statusbot joins (~statusbot@ec2-34-198-122-184.compute-1.amazonaws.com) |
| 06:07:36 | × | joeyh quits (joeyh@kitenet.net) (Ping timeout: 245 seconds) |
| 06:07:36 | × | tomboy64 quits (~tomboy64@user/tomboy64) (Ping timeout: 245 seconds) |
| 06:08:24 | → | remexre joins (~remexre@user/remexre) |
| 06:09:35 | → | tomboy64 joins (~tomboy64@user/tomboy64) |
| 06:09:59 | → | takuan joins (~takuan@178-116-218-225.access.telenet.be) |
| 06:10:15 | <InstX1> | uouououo |
| 06:10:51 | × | tzh quits (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz) |
| 06:14:36 | × | _xor quits (~xor@72.49.199.147) (Read error: Connection reset by peer) |
| 06:15:22 | <hololeap> | me too! |
| 06:15:46 | <ski> | % :type (<<=) . (extract &&&) |
| 06:15:46 | <yahb> | ski: Comonad w => (w a -> c') -> w a -> w (a, c') |
| 06:17:03 | <hololeap> | % :type (extract &&&) |
| 06:17:03 | <yahb> | hololeap: Comonad w => (w c -> c') -> w c -> (c, c') |
| 06:17:14 | <hololeap> | % :type (e&&&) |
| 06:17:14 | <yahb> | hololeap: ; <interactive>:1:2: error: Variable not in scope: e :: a b c |
| 06:17:16 | <hololeap> | % :type (&&&) |
| 06:17:16 | <yahb> | hololeap: Arrow a => a b c -> a b c' -> a b (c, c') |
| 06:17:18 | <ski> | % :type \f -> (=>> \wa -> (extract wa,f wa)) |
| 06:17:18 | <yahb> | ski: Comonad w => (w a -> b) -> w a -> w (a, b) |
| 06:18:10 | → | Null_A joins (~null_a@2601:645:8700:2290:a94b:e46c:6690:e477) |
| 06:19:00 | → | _xor joins (~xor@72.49.199.147) |
| 06:19:42 | × | _xor quits (~xor@72.49.199.147) (Read error: Connection reset by peer) |
| 06:20:01 | → | _xor joins (~xor@72.49.199.147) |
| 06:21:31 | × | favonia quits (~favonia@user/favonia) (Remote host closed the connection) |
| 06:21:37 | <hololeap> | % :type \f w -> extend f (EnvT (extract w) w) |
| 06:21:37 | <yahb> | hololeap: ; <interactive>:1:19: error: Data constructor not in scope: EnvT :: t -> w1 t -> w a |
| 06:21:53 | <hololeap> | % import Control.Comonad.Env |
| 06:21:53 | <yahb> | hololeap: |
| 06:21:57 | <hololeap> | % :type \f w -> extend f (EnvT (extract w) w) |
| 06:21:57 | <yahb> | hololeap: Comonad w => (EnvT a w a -> b) -> w a -> EnvT a w b |
| 06:22:58 | <hololeap> | well my first one is probably easiest to understand :D |
| 06:23:19 | <ski> | what's it supposed to do ? |
| 06:23:33 | <hololeap> | it should be pretty clear from the type signature |
| 06:23:43 | <ski> | % :i EnvT |
| 06:23:43 | <yahb> | ski: type role EnvT representational representational nominal; type EnvT :: * -> (* -> *) -> * -> *; data EnvT e w a = EnvT e (w a); -- Defined in `Control.Comonad.Trans.Env'; instance [safe] (Monoid e, Applicative m) => Applicative (EnvT e m) -- Defined in `Control.Comonad.Trans.Env'; instance [safe] Functor w => Functor (EnvT e w) -- Defined in `Control.Comonad.Trans.Env'; instance [safe] Traversable w |
| 06:24:25 | <hololeap> | EnvT is irrelevant. I just want to use `extend` while keeping the original `a` around |
| 06:25:08 | ← | jakalx parts (~jakalx@base.jakalx.net) (Error from remote client) |
| 06:25:20 | <hololeap> | it doesn't even have to be it's own function, really... I could just extract `a` before running extend |
| 06:28:40 | → | mbuf joins (~Shakthi@171.61.241.145) |
| 06:29:11 | × | ubert quits (~Thunderbi@77.119.208.184.wireless.dyn.drei.com) (Ping timeout: 264 seconds) |
| 06:33:53 | × | Null_A quits (~null_a@2601:645:8700:2290:a94b:e46c:6690:e477) () |
| 06:36:49 | → | fendor joins (~fendor@178.115.78.81.wireless.dyn.drei.com) |
| 06:37:37 | → | jakalx joins (~jakalx@base.jakalx.net) |
| 06:43:03 | → | dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net) |
| 06:45:19 | × | zaquest quits (~notzaques@5.128.210.178) (Ping timeout: 258 seconds) |
| 06:46:28 | × | timCF_ quits (~timCF@m91-129-111-87.cust.tele2.ee) (Ping timeout: 258 seconds) |
| 06:46:52 | → | gehmehgeh joins (~user@user/gehmehgeh) |
| 06:47:56 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 06:48:07 | → | lortabac joins (~lortabac@2a01:e0a:541:b8f0:2041:32a6:242d:4938) |
| 06:48:11 | → | zaquest joins (~notzaques@5.128.210.178) |
| 06:51:27 | × | jonathanx quits (~jonathan@178.174.176.109) (Ping timeout: 258 seconds) |
| 06:52:01 | → | mei joins (~mei@user/mei) |
| 06:56:19 | → | max22- joins (~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) |
| 06:58:41 | → | benin1 joins (~benin@106.198.91.7) |
| 06:59:37 | × | waleee quits (~waleee@h-98-128-228-119.NA.cust.bahnhof.se) (Quit: WeeChat 3.3) |
| 07:00:45 | × | benin quits (~benin@183.82.179.164) (Ping timeout: 260 seconds) |
| 07:00:45 | benin1 | is now known as benin |
| 07:00:59 | × | danso quits (~danso@23-233-111-52.cpe.pppoe.ca) (Ping timeout: 264 seconds) |
| 07:02:06 | → | jonathanx joins (~jonathan@dyn-8-sc.cdg.chalmers.se) |
| 07:04:15 | → | dhouthoo joins (~dhouthoo@178-117-36-167.access.telenet.be) |
| 07:04:20 | → | favonia joins (~favonia@user/favonia) |
| 07:05:00 | <Inst> | erm |
| 07:05:03 | <Inst> | could I have some help? |
| 07:05:43 | <Inst> | I already finished my textbook's intro information on typeclasses, but I'm still having difficulty concerning the notation used in :type |
| 07:05:50 | → | wonko joins (~wjc@62.115.229.50) |
| 07:06:02 | <Inst> | type a => a -> b -> a etc... |
| 07:06:09 | <Inst> | this is an existing mathematical notation, right? |
| 07:06:25 | <Inst> | what's the name of it? I'd like to be able to look up the notation individually |
| 07:07:09 | <dibblego> | "Haskell" |
| 07:09:13 | <c_wraith> | Haskell is a lot less based on math than some would have you believe. |
| 07:10:13 | → | Gurkenglas joins (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) |
| 07:14:01 | <pavonia> | Inst: What part of that is confusing to you? |
| 07:14:27 | → | danso joins (~danso@23-233-111-52.cpe.pppoe.ca) |
| 07:15:08 | <Inst> | on the left side, you have inputs, on the right side, you have outputs |
| 07:15:10 | <Inst> | that much I understand |
| 07:15:27 | <Inst> | why you have a -> a or a -> b -> a, on the other hand, I don't see the pattern |
| 07:15:32 | × | mei quits (~mei@user/mei) (Read error: Connection reset by peer) |
| 07:15:38 | <dibblego> | -> is right-associative |
| 07:15:42 | <dibblego> | a -> b -> a |
| 07:15:45 | <dibblego> | a -> (b -> a) |
| 07:16:07 | → | mei joins (~mei@user/mei) |
| 07:16:16 | <dibblego> | function application (space) is left-associative |
| 07:16:25 | <dibblego> | > const 7 "abc" |
| 07:16:25 | <xsperry> | a and b are type variables. names can be arbitrary, but there are some common conventions |
| 07:16:26 | <lambdabot> | 7 |
| 07:16:30 | <dibblego> | > (const 7) "abc" |
| 07:16:32 | <lambdabot> | 7 |
| 07:16:35 | <Inst> | i'll probably be fine on my own, reading existing texts |
| 07:16:51 | <xsperry> | :t id |
| 07:16:52 | <lambdabot> | a -> a |
| 07:17:04 | <pavonia> | Inst: x => y is not inputs and outputs, x are type constraints, y is the actual type of the function |
| 07:17:10 | <xsperry> | a in id declaration stands for any type |
| 07:17:30 | <Inst> | for x, y, then? |
| 07:18:47 | <pavonia> | I don't understand the question |
| 07:19:34 | <Inst> | read x => y as "for x, y" then? |
| 07:20:10 | <xsperry> | section left of => constrains types |
| 07:20:51 | <yushyin> | 'type y restricted by the context x' |
| 07:21:30 | <xsperry> | :t (+) |
| 07:21:31 | <lambdabot> | Num a => a -> a -> a |
| 07:21:37 | <Inst> | okay, fine |
| 07:21:42 | <c_wraith> | Haskell types do have an implicit top-level forall on all the type variables in them. |
| 07:21:43 | <xsperry> | type a has to be instance of Num typeclass |
| 07:21:55 | <Inst> | i see, thanks, still not getting it, but i have to leave soon |
| 07:21:55 | <c_wraith> | If that's a thing you're wondering about |
| 07:22:49 | <Inst> | heh |
| 07:22:50 | <Inst> | https://serokell.io/files/5x/5xzv88ej.TopReasons.png |
| 07:23:20 | <ski> | @type sort |
| 07:23:21 | <lambdabot> | Ord a => [a] -> [a] |
| 07:24:35 | <ski> | `sort' is a function taking a list of values of type `a' as input, and produces a list of values of type `a' as output, for all types `a', provided `a' is in the type class `Ord' (`Ord a' can be read as values of type `a' supporting ordering comparision) |
| 07:25:12 | <ski> | @type take |
| 07:25:13 | <lambdabot> | Int -> [a] -> [a] |
| 07:26:02 | <ski> | `take' is a function taking an `Int' as input, and producing another function as output, that in turn takes a list of `a's, producing a list of `a' -- again for all types `a' (no restriction this time) |
| 07:29:57 | → | chele joins (~chele@user/chele) |
| 07:30:18 | × | danso quits (~danso@23-233-111-52.cpe.pppoe.ca) (Ping timeout: 260 seconds) |
| 07:36:32 | → | jumper149 joins (~jumper149@80.240.31.34) |
| 07:40:36 | → | danso joins (~danso@23-233-111-52.cpe.pppoe.ca) |
| 07:49:34 | → | acidjnk_new3 joins (~acidjnk@p200300d0c703cb878d78f02b280dc416.dip0.t-ipconnect.de) |
| 07:52:57 | → | oskar_greda joins (~oskar_gre@84.65.227.20) |
| 07:54:17 | × | aegon quits (~mike@174.127.249.180) (Remote host closed the connection) |
| 07:57:14 | × | Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 08:00:07 | → | ubert joins (~Thunderbi@77.119.198.223.wireless.dyn.drei.com) |
| 08:01:06 | → | pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
| 08:08:07 | × | Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 08:08:14 | → | Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
| 08:10:16 | → | hendursa1 joins (~weechat@user/hendursaga) |
| 08:11:51 | × | hendursaga quits (~weechat@user/hendursaga) (Ping timeout: 276 seconds) |
| 08:16:07 | → | kuribas joins (~user@ip-188-118-57-242.reverse.destiny.be) |
| 08:16:32 | × | LiaoTao_ quits (~LiaoTao@gateway/tor-sasl/liaotao) (Remote host closed the connection) |
| 08:16:54 | × | coot quits (~coot@37.30.49.107.nat.umts.dynamic.t-mobile.pl) (Quit: coot) |
| 08:17:16 | → | benin5 joins (~benin@183.82.207.116) |
| 08:17:26 | → | LiaoTao joins (~LiaoTao@gateway/tor-sasl/liaotao) |
| 08:17:29 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection) |
| 08:17:54 | → | geekosaur joins (~geekosaur@xmonad/geekosaur) |
| 08:19:30 | × | benin quits (~benin@106.198.91.7) (Ping timeout: 260 seconds) |
| 08:19:30 | benin5 | is now known as benin |
| 08:19:38 | → | ub joins (~Thunderbi@77.119.198.223.wireless.dyn.drei.com) |
| 08:20:04 | × | synthmeat quits (~synthmeat@user/synthmeat) (Ping timeout: 252 seconds) |
| 08:21:00 | × | tomsmeding quits (~tomsmedin@tomsmeding.com) (Quit: ZNC 1.8.2 - https://znc.in) |
| 08:22:18 | × | quintasan quits (~quassel@quintasan.pl) (Ping timeout: 258 seconds) |
| 08:22:31 | × | beaky quits (~beaky@2a03:b0c0:0:1010::1e:a001) (Read error: Connection reset by peer) |
| 08:26:20 | → | acidjnk_new joins (~acidjnk@p200300d0c703cb87897f933eeab9e85f.dip0.t-ipconnect.de) |
| 08:29:19 | × | oskar_greda quits (~oskar_gre@84.65.227.20) (Quit: Client closed) |
| 08:29:58 | × | acidjnk_new3 quits (~acidjnk@p200300d0c703cb878d78f02b280dc416.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
| 08:30:33 | × | alzgh quits (~alzgh@user/alzgh) (Remote host closed the connection) |
| 08:30:53 | → | alzgh joins (~alzgh@user/alzgh) |
| 08:31:51 | → | jgeerds joins (~jgeerds@55d4da80.access.ecotel.net) |
| 08:35:31 | × | rune quits (sid21167@ilkley.irccloud.com) (Ping timeout: 245 seconds) |
| 08:36:27 | × | hubvu quits (sid495858@user/hubvu) (Read error: Connection reset by peer) |
| 08:36:29 | × | kupi quits (uid212005@hampstead.irccloud.com) (Ping timeout: 258 seconds) |
| 08:36:36 | → | hubvu joins (sid495858@user/hubvu) |
| 08:37:25 | → | acidjnk_new3 joins (~acidjnk@pd9e0b933.dip0.t-ipconnect.de) |
| 08:38:01 | × | teehemkay quits (sid14792@lymington.irccloud.com) (Ping timeout: 245 seconds) |
| 08:38:13 | → | kupi joins (uid212005@id-212005.hampstead.irccloud.com) |
| 08:38:41 | → | rune joins (sid21167@id-21167.ilkley.irccloud.com) |
| 08:38:46 | × | Adeon quits (sid418992@lymington.irccloud.com) (Ping timeout: 252 seconds) |
| 08:39:16 | × | dermato quits (~dermatobr@cpe-70-114-219-76.austin.res.rr.com) (Ping timeout: 252 seconds) |
| 08:39:32 | → | teehemkay joins (sid14792@id-14792.lymington.irccloud.com) |
| 08:40:28 | → | Adeon joins (sid418992@id-418992.lymington.irccloud.com) |
| 08:40:35 | → | dermato joins (~dermatobr@cpe-70-114-219-76.austin.res.rr.com) |
| 08:40:42 | × | acidjnk_new quits (~acidjnk@p200300d0c703cb87897f933eeab9e85f.dip0.t-ipconnect.de) (Ping timeout: 258 seconds) |
| 08:42:24 | × | kristjansson_ quits (sid126207@tinside.irccloud.com) (Ping timeout: 268 seconds) |
| 08:42:48 | → | kristjansson_ joins (sid126207@id-126207.tinside.irccloud.com) |
| 08:43:56 | × | mcfilib quits (sid302703@user/mcfilib) (Ping timeout: 265 seconds) |
| 08:45:06 | × | sa quits (sid1055@tinside.irccloud.com) (Ping timeout: 245 seconds) |
| 08:45:59 | × | mrianbloom quits (sid350277@ilkley.irccloud.com) (Ping timeout: 264 seconds) |
| 08:46:08 | → | rond_ joins (~rond_@2a01:115f:943:5e00:2fb4:6165:4fdd:161d) |
| 08:47:07 | → | mcfilib joins (sid302703@user/mcfilib) |
| 08:48:10 | → | sa joins (sid1055@id-1055.tinside.irccloud.com) |
| 08:48:59 | × | hook54321 quits (sid149355@user/hook54321) (Ping timeout: 264 seconds) |
| 08:49:09 | → | mrianbloom joins (sid350277@id-350277.ilkley.irccloud.com) |
| 08:49:28 | × | Everything quits (~Everythin@37.115.210.35) (Quit: leaving) |
| 08:49:51 | → | quintasan joins (~quassel@quintasan.pl) |
| 08:50:32 | → | mikoto-chan joins (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) |
| 08:51:22 | → | lavaman joins (~lavaman@98.38.249.169) |
| 08:51:26 | → | hook54321 joins (sid149355@user/hook54321) |
| 08:52:32 | → | coot joins (~coot@37.30.49.107.nat.umts.dynamic.t-mobile.pl) |
| 08:52:36 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:b5c0:69fb:2ebc:745e) (Remote host closed the connection) |
| 08:53:31 | × | Cajun quits (~Cajun@user/cajun) (Quit: Client closed) |
| 08:56:15 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 260 seconds) |
| 08:59:01 | → | synthmeat joins (~synthmeat@user/synthmeat) |
| 08:59:30 | → | Matheo_bis joins (~matheo@user/matheo-bis/x-4309430) |
| 09:04:32 | → | cfricke joins (~cfricke@user/cfricke) |
| 09:06:05 | → | beaky joins (~beaky@2a03:b0c0:0:1010::1e:a001) |
| 09:13:32 | → | mvk joins (~mvk@2607:fea8:5cc1:300::4b63) |
| 09:13:51 | × | anoe quits (~anoe@delanoe.org) (Quit: Lost terminal) |
| 09:18:00 | × | rond_ quits (~rond_@2a01:115f:943:5e00:2fb4:6165:4fdd:161d) (Quit: Client closed) |
| 09:18:26 | → | rond_ joins (~rond_@2a01:115f:943:5e00:2fb4:6165:4fdd:161d) |
| 09:19:05 | × | econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity) |
| 09:20:53 | → | rdz1789 joins (~rdz1789@139.47.40.241) |
| 09:24:58 | → | neurocyte0132889 joins (~neurocyte@195.80.52.7) |
| 09:24:58 | × | neurocyte0132889 quits (~neurocyte@195.80.52.7) (Changing host) |
| 09:24:58 | → | neurocyte0132889 joins (~neurocyte@user/neurocyte) |
| 09:25:45 | × | shriekingnoise quits (~shrieking@186.137.144.80) (Quit: Quit) |
| 09:26:46 | × | Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 09:36:21 | × | mvk quits (~mvk@2607:fea8:5cc1:300::4b63) (Ping timeout: 245 seconds) |
| 09:41:04 | × | timCF quits (~timCF@200-149-20-81.sta.estpak.ee) (Quit: leaving) |
| 09:43:57 | → | peterhil joins (~peterhil@dsl-hkibng32-54fb56-2.dhcp.inet.fi) |
| 09:46:34 | × | danso quits (~danso@23-233-111-52.cpe.pppoe.ca) (Ping timeout: 260 seconds) |
| 09:47:48 | × | mikoto-chan quits (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) (Quit: mikoto-chan) |
| 09:48:54 | × | pavonia quits (~user@user/siracusa) (Ping timeout: 260 seconds) |
| 09:50:30 | × | ubert quits (~Thunderbi@77.119.198.223.wireless.dyn.drei.com) (Ping timeout: 260 seconds) |
| 09:50:30 | ub | is now known as ubert |
| 09:51:00 | × | Matheo_bis quits (~matheo@user/matheo-bis/x-4309430) (Quit: Konversation terminated!) |
| 09:53:00 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:b5c0:69fb:2ebc:745e) |
| 09:55:22 | → | pavonia joins (~user@user/siracusa) |
| 09:56:02 | → | pmk joins (~user@2a02:587:9414:7d03:fb87:7810:40ab:edc0) |
| 09:56:14 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection) |
| 09:56:42 | → | danso joins (~danso@23-233-111-52.cpe.pppoe.ca) |
| 09:57:59 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:b5c0:69fb:2ebc:745e) (Ping timeout: 264 seconds) |
| 09:59:51 | → | Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
| 10:00:09 | × | tinwood quits (~tinwood@canonical/tinwood) (Remote host closed the connection) |
| 10:00:37 | → | __monty__ joins (~toonn@user/toonn) |
| 10:03:09 | → | tinwood joins (~tinwood@general.default.akavanagh.uk0.bigv.io) |
| 10:03:09 | × | tinwood quits (~tinwood@general.default.akavanagh.uk0.bigv.io) (Changing host) |
| 10:03:09 | → | tinwood joins (~tinwood@canonical/tinwood) |
| 10:06:26 | × | michalz quits (~michalz@185.246.204.93) (Remote host closed the connection) |
| 10:07:52 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 10:09:49 | → | michalz joins (~michalz@185.246.204.73) |
| 10:15:41 | × | rond_ quits (~rond_@2a01:115f:943:5e00:2fb4:6165:4fdd:161d) (Quit: Client closed) |
| 10:18:41 | → | Farzad joins (~FarzadBek@178.131.30.153) |
| 10:22:23 | × | LiaoTao quits (~LiaoTao@gateway/tor-sasl/liaotao) (Remote host closed the connection) |
| 10:22:40 | → | LiaoTao joins (~LiaoTao@gateway/tor-sasl/liaotao) |
| 10:28:44 | → | mmhat joins (~mmh@55d45798.access.ecotel.net) |
| 10:36:00 | × | MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer) |
| 10:36:35 | × | dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Ping timeout: 260 seconds) |
| 10:41:24 | → | ubert1 joins (~Thunderbi@77.119.198.223.wireless.dyn.drei.com) |
| 10:41:26 | → | _bo joins (~bo@217.18.216.247) |
| 10:46:45 | → | MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com) |
| 10:49:07 | × | MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer) |
| 10:49:48 | × | gehmehgeh quits (~user@user/gehmehgeh) (Ping timeout: 276 seconds) |
| 10:50:27 | → | gensyst joins (gensyst@user/gensyst) |
| 10:50:55 | <gensyst> | I have a strange/noobish question about EDSLs, compiling Haskell code, and executables. |
| 10:50:55 | <gensyst> | Is it considered normal to have an EDSL in Haskell that "users" (e.g. programmers in my company) use to write their domain-specific "programs" (written in the EDSL) and run these programs by running GHC and running the binary executable over and over again? |
| 10:51:16 | <gensyst> | I think this is strange for two reasons: |
| 10:51:28 | <gensyst> | 1) You're running GHC every time for every little change in the domain-specific "program" (e.g. tweaking some parameter), so you're sort of "abusing" Haskell as a scripting language. |
| 10:51:29 | → | gehmehgeh joins (~user@user/gehmehgeh) |
| 10:51:45 | <gensyst> | 2) Isn't the whole point of Haskell to execute GHC once, get one binary executable once, and then run that executable thousands of times instead of... running GHC thousands of times and each of the thousand binary executables only once? |
| 10:51:51 | <gensyst> | Do you see what I mean? Some thoughts on this I'd appreciate a lot! |
| 10:53:52 | → | burnsidesLlama joins (~burnsides@dhcp168-036.wadham.ox.ac.uk) |
| 10:57:05 | <lortabac> | gensyst: if I understand correctly, they are using a Haskell library to make programs that they compile with GHC |
| 10:57:15 | <lortabac> | I don't see anything wrong with this |
| 10:57:39 | → | nsilv joins (~NSilv@host-87-15-180-17.retail.telecomitalia.it) |
| 10:57:43 | → | MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com) |
| 10:57:57 | <gensyst> | lortabac, A part of me thinks it's a bit weird to be running "cabal build; cabal exec" all the time... |
| 10:58:03 | <lortabac> | except the requirement to install GHC, cabal etc. |
| 10:58:17 | <lortabac> | if these are non-tech people that's a different story |
| 10:58:42 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 258 seconds) |
| 10:58:48 | <lortabac> | in that case maybe you want to find a solution that doesn't require knowledge of Haskell compilation |
| 10:59:53 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 11:00:50 | → | alx741 joins (~alx741@186.178.109.50) |
| 11:01:16 | <gensyst> | well they're technical enough to plug and play things together with haskell and run cabal. |
| 11:01:25 | <gensyst> | my question was just why this isn't strange lol |
| 11:01:48 | <lortabac> | another question is, do they already have all the cabal machinery? |
| 11:01:52 | <gensyst> | Hmm on the other hand, I am aware of e.g. the turtle library (shell scripting in Haskell), so scripting in Haskell isn't maybe all that weird |
| 11:02:42 | × | burnsidesLlama quits (~burnsides@dhcp168-036.wadham.ox.ac.uk) (Remote host closed the connection) |
| 11:02:48 | × | hololeap quits (~hololeap@user/hololeap) (Ping timeout: 276 seconds) |
| 11:02:55 | → | burnsidesLlama joins (~burnsides@dhcp168-036.wadham.ox.ac.uk) |
| 11:04:50 | <gensyst> | that part's not an issue. they can set up cabal |
| 11:04:50 | × | MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer) |
| 11:05:11 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds) |
| 11:05:37 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 11:05:45 | × | hiruji quits (~hiruji@user/hiruji) (Ping timeout: 260 seconds) |
| 11:05:54 | × | nsilv quits (~NSilv@host-87-15-180-17.retail.telecomitalia.it) (Quit: WeeChat 2.7.1) |
| 11:08:21 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Quit: FinnElija) |
| 11:09:50 | → | MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com) |
| 11:11:59 | → | nattiestnate joins (~nate@2001:448a:20a0:4134:25e:715f:d637:5263) |
| 11:12:00 | → | FinnElija joins (~finn_elij@user/finn-elija/x-0085643) |
| 11:15:12 | → | ggVGc joins (~ggVGc@a.lowtech.earth) |
| 11:16:02 | → | Midjak joins (~Midjak@82-65-111-221.subs.proxad.net) |
| 11:16:49 | <geekosaur> | gensyst, it may not even require cabal. there's runghc |
| 11:17:12 | <gensyst> | yeah, i use runghc. makes it convenient |
| 11:17:18 | <geekosaur> | especially helpful if you're constantly making small changes and testing, you can skip the compile step. of coyurse it'll be slower since it's interpreted |
| 11:17:23 | → | lavaman joins (~lavaman@98.38.249.169) |
| 11:17:42 | <gensyst> | oh sorry. i wasn't aware of runghc actually lol. (confused it with ghcup) |
| 11:17:44 | <ggVGc> | wish there was a multi-module version of runghc |
| 11:17:50 | → | hiruji joins (~hiruji@user/hiruji) |
| 11:18:01 | <ggVGc> | but I guess that would become very complicated very fast |
| 11:18:17 | <gensyst> | geekosaur, but is this practice of EDSL & running ghc over and over again considered "natural"? |
| 11:18:35 | × | off^ quits (~off@wsip-68-227-92-38.mc.at.cox.net) (Ping timeout: 260 seconds) |
| 11:18:38 | <hughjfchen> | gensyst: i think you can take a look at propellor |
| 11:19:03 | <geekosaur> | "natural" is in the eye of the beholder. if it works for you, that's enough |
| 11:19:07 | <hughjfchen> | it |
| 11:19:50 | <ggVGc> | is propellor like ansible? |
| 11:20:05 | <hughjfchen> | is a config management using haskell lang to write config property |
| 11:20:25 | <ggVGc> | does it serve the same use-cases one would use ansible for?\ |
| 11:21:03 | <ggVGc> | seems like it |
| 11:21:22 | <merijn> | ggVGc: cabal-install supports scripting so you can use it like runghc, but with library dependencies :p |
| 11:21:47 | <merijn> | ggVGc: The documentation of this feature can be called...Spartan, though :p |
| 11:21:50 | <ggVGc> | merijn: realy? I was looking for that a while back, but couldn't find anything |
| 11:22:12 | <merijn> | Has existed for, at least, 2 years |
| 11:22:23 | <merijn> | ggVGc: But I don't think hvr ever got around to writing docs |
| 11:23:13 | <merijn> | ggVGc: https://github.com/haskell/cabal/issues/3843 |
| 11:25:36 | × | MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer) |
| 11:26:06 | <ggVGc> | nice, thanks! Will have to give it a go when I get back to my haskell project, after these two physics exams which I am sure to fail |
| 11:27:22 | × | lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection) |
| 11:28:54 | <gensyst> | geekosaur, hmmmmm ok. |
| 11:30:04 | <merijn> | I mean, basically this question boils down to "what do you think of staged compilation?" |
| 11:30:27 | <merijn> | And my opinion would generally be "staged compilation is great, I wish GHC had better support!" |
| 11:31:04 | <merijn> | TH is kinda staged compilation, but with fucky interactions and lack of clear boundaries/separation |
| 11:31:10 | <gensyst> | well, doesn't EDSL sort of *imply* that's the way you're going to do things? |
| 11:31:19 | → | MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com) |
| 11:31:47 | <gensyst> | it implies you're going to be doing stuff at Haskell level (to benefit from type system) instead of reusing final binary executables (or composing such binary executables) |
| 11:32:25 | × | ubert quits (~Thunderbi@77.119.198.223.wireless.dyn.drei.com) (Remote host closed the connection) |
| 11:32:25 | ubert1 | is now known as ubert |
| 11:32:54 | <gensyst> | the question was basically, is it "ok" to compile all the time. i think you guys are saying there's nothing wrong with it, so i'll just do it i guess :D |
| 11:33:27 | Rembane_ | shakes fist at TH |
| 11:34:01 | <geekosaur> | gensyst, take a look at xmonad. you may be mod-q recompiling quite a bit at first until you decide you're satisfied with the result. (of course you may then not touch it for years…) |
| 11:35:58 | <geekosaur> | (xmonad = window manager EDSL) |
| 11:35:58 | × | MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer) |
| 11:36:09 | <gensyst> | ok that's cool |
| 11:36:17 | <gensyst> | gives me more confidence |
| 11:36:24 | <gensyst> | this is the way :D |
| 11:39:20 | → | osa1 joins (~osa1@178.233.26.94) |
| 11:40:26 | <gensyst> | geekosaur, hmm wow. somehow xmonad will use this new .o file? allowing you to plug and play |
| 11:40:42 | <gensyst> | at run time |
| 11:40:48 | <gensyst> | how... |
| 11:41:03 | <osa1> | Does QuickCheck's shrink (https://hackage.haskell.org/package/QuickCheck-2.10/docs/Test-QuickCheck-Arbitrary.html#v:shrink) do depth-first or breadth-first search? When it finds a shrunk example that fails, does it search further (if so, for how long?), or stop and return the first one it finds? |
| 11:42:36 | <ggVGc> | merijn: maybe I misunderstood. Should this allow me to make import another file in the same directory in a Main.hs file? |
| 11:42:43 | <ggVGc> | -make |
| 11:43:10 | <ggVGc> | merijn: e.g https://gist.github.com/0792e113c9b894f854e4675b221aefc6 and then have a Test/Foo.hs file in the same directory |
| 11:43:49 | <ggVGc> | This is what I get, https://gist.github.com/c595db27571a9ac7da18d92e417b85bd |
| 11:44:03 | → | dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net) |
| 11:44:36 | × | neurocyte0132889 quits (~neurocyte@user/neurocyte) (Read error: Connection reset by peer) |
| 11:44:59 | → | neurocyte0132889 joins (~neurocyte@195.80.52.7) |
| 11:44:59 | × | neurocyte0132889 quits (~neurocyte@195.80.52.7) (Changing host) |
| 11:44:59 | → | neurocyte0132889 joins (~neurocyte@user/neurocyte) |
| 11:47:27 | → | lavaman joins (~lavaman@98.38.249.169) |
| 11:48:52 | → | Guest28 joins (~Guest28@2601:281:d480:2ce0:28de:914f:fac6:10b7) |
| 11:49:17 | <geekosaur> | xmonad compiles the new config and then does a Unix exec()on it, replacing itself with the new config |
| 11:49:34 | <geekosaur> | there is a way tio do binary plugins in Haskell but it's kinda painful |
| 11:49:50 | <geekosaur> | @hackage plugins |
| 11:49:50 | <lambdabot> | https://hackage.haskell.org/package/plugins |
| 11:49:56 | <gensyst> | ok great! |
| 11:50:08 | × | burnsidesLlama quits (~burnsides@dhcp168-036.wadham.ox.ac.uk) (Remote host closed the connection) |
| 11:50:10 | <gensyst> | thank you all for these tips and tricks! |
| 11:50:17 | <gensyst> | i can carry on now with confidence |
| 11:51:00 | → | burnsidesLlama joins (~burnsides@dhcp168-036.wadham.ox.ac.uk) |
| 11:52:17 | <merijn> | ggVGc: Not sure about that. I meant more that you can depend on packages beyond just what's normally pre-installed |
| 11:54:05 | × | gensyst quits (gensyst@user/gensyst) (Quit: Leaving) |
| 11:55:08 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:b5c0:69fb:2ebc:745e) |
| 11:55:40 | × | burnsidesLlama quits (~burnsides@dhcp168-036.wadham.ox.ac.uk) (Ping timeout: 252 seconds) |
| 11:57:51 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 11:59:10 | → | burnsidesLlama joins (~burnsides@dhcp168-036.wadham.ox.ac.uk) |
| 11:59:31 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:b5c0:69fb:2ebc:745e) (Ping timeout: 252 seconds) |
| 12:03:06 | × | max22- quits (~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) (Ping timeout: 258 seconds) |
| 12:06:33 | → | MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com) |
| 12:08:03 | × | neurocyte0132889 quits (~neurocyte@user/neurocyte) (Quit: The Lounge - https://thelounge.chat) |
| 12:09:00 | × | MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer) |
| 12:10:32 | → | MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com) |
| 12:11:08 | → | neurocyte0132889 joins (~neurocyte@195.80.52.7) |
| 12:11:08 | × | neurocyte0132889 quits (~neurocyte@195.80.52.7) (Changing host) |
| 12:11:08 | → | neurocyte0132889 joins (~neurocyte@user/neurocyte) |
| 12:19:25 | × | __monty__ quits (~toonn@user/toonn) (Quit: leaving) |
| 12:22:14 | → | enoq joins (~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7) |
| 12:22:25 | ← | osa1 parts (~osa1@178.233.26.94) () |
| 12:26:41 | × | LiaoTao quits (~LiaoTao@gateway/tor-sasl/liaotao) (Remote host closed the connection) |
| 12:28:14 | → | jespada joins (~jespada@2803:9800:9842:7a62:9560:3718:bb2f:f5ee) |
| 12:29:08 | → | LiaoTao joins (~LiaoTao@gateway/tor-sasl/liaotao) |
| 12:31:18 | × | LiaoTao quits (~LiaoTao@gateway/tor-sasl/liaotao) (Remote host closed the connection) |
| 12:31:33 | → | LiaoTao joins (~LiaoTao@gateway/tor-sasl/liaotao) |
| 12:31:53 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "") |
| 12:34:08 | → | slowButPresent joins (~slowButPr@user/slowbutpresent) |
| 12:34:09 | × | MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer) |
| 12:34:51 | → | MQ-17J joins (~MQ-17J@8.21.10.17) |
| 12:35:24 | × | coot quits (~coot@37.30.49.107.nat.umts.dynamic.t-mobile.pl) (Quit: coot) |
| 12:37:38 | × | favonia quits (~favonia@user/favonia) (Remote host closed the connection) |
| 12:37:59 | → | favonia joins (~favonia@user/favonia) |
| 12:42:49 | × | lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection) |
| 12:42:58 | × | favonia quits (~favonia@user/favonia) (Ping timeout: 260 seconds) |
| 12:43:41 | → | machinedgod joins (~machinedg@135-23-192-217.cpe.pppoe.ca) |
| 12:44:15 | × | burnsidesLlama quits (~burnsides@dhcp168-036.wadham.ox.ac.uk) (Remote host closed the connection) |
| 12:47:56 | × | Guest28 quits (~Guest28@2601:281:d480:2ce0:28de:914f:fac6:10b7) (Quit: Client closed) |
| 12:49:48 | → | max22- joins (~maxime@2a01cb0883359800acc7df5c88e6f73e.ipv6.abo.wanadoo.fr) |
| 12:49:58 | → | bontaq joins (~user@ool-45779fe5.dyn.optonline.net) |
| 12:50:25 | × | nattiestnate quits (~nate@2001:448a:20a0:4134:25e:715f:d637:5263) (Quit: WeeChat 3.3) |
| 12:53:37 | → | zebrag joins (~chris@user/zebrag) |
| 12:54:58 | <ggVGc> | merijn: might still start using this for my lab reports... |
| 12:55:37 | → | ixosa joins (~xaaxor@251.222.198.146.dyn.plus.net) |
| 12:55:48 | <ggVGc> | was contemplating taking my lab notes in haskell to easily have the calculated results from the same source when I write the report, but hesitated because of execution complications. So currently unhappily using python |
| 13:01:09 | → | unit73e joins (~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291) |
| 13:01:45 | × | ixosa quits (~xaaxor@251.222.198.146.dyn.plus.net) (Ping timeout: 258 seconds) |
| 13:02:30 | → | iqofi joins (~ixosa@217.138.222.92) |
| 13:05:34 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection) |
| 13:07:16 | → | geekosaur joins (~geekosaur@xmonad/geekosaur) |
| 13:08:16 | → | floridmarshmallo joins (~nate@pool-100-19-29-41.phlapa.fios.verizon.net) |
| 13:08:41 | × | floridmarshmallo quits (~nate@pool-100-19-29-41.phlapa.fios.verizon.net) (Client Quit) |
| 13:13:21 | → | lavaman joins (~lavaman@98.38.249.169) |
| 13:15:09 | × | jumper149 quits (~jumper149@80.240.31.34) (Quit: WeeChat 3.2) |
| 13:17:59 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 265 seconds) |
| 13:21:29 | → | coot joins (~coot@37.30.49.107.nat.umts.dynamic.t-mobile.pl) |
| 13:21:56 | → | sagax joins (~sagax_nb@user/sagax) |
| 13:22:08 | → | burnsidesLlama joins (~burnsides@dhcp168-036.wadham.ox.ac.uk) |
| 13:23:26 | × | benin quits (~benin@183.82.207.116) (Quit: The Lounge - https://thelounge.chat) |
| 13:26:50 | × | burnsidesLlama quits (~burnsides@dhcp168-036.wadham.ox.ac.uk) (Ping timeout: 260 seconds) |
| 13:28:40 | × | bontaq quits (~user@ool-45779fe5.dyn.optonline.net) (Ping timeout: 260 seconds) |
| 13:29:05 | → | floridmarshmallo joins (~quickspin@pool-100-19-29-41.phlapa.fios.verizon.net) |
| 13:29:28 | × | unit73e quits (~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291) (Quit: Leaving) |
| 13:29:34 | × | floridmarshmallo quits (~quickspin@pool-100-19-29-41.phlapa.fios.verizon.net) (Client Quit) |
| 13:30:41 | → | unit73e joins (~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291) |
| 13:35:05 | → | xiongxin joins (~quassel@113.116.32.4) |
| 13:37:21 | → | lavaman joins (~lavaman@98.38.249.169) |
| 13:37:36 | × | lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection) |
| 13:37:55 | → | [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470) |
| 13:38:46 | × | dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Ping timeout: 265 seconds) |
| 13:39:19 | × | mniip quits (mniip@libera/staff/mniip) (Remote host closed the connection) |
| 13:40:11 | → | favonia joins (~favonia@user/favonia) |
| 13:41:30 | × | michalz quits (~michalz@185.246.204.73) (Ping timeout: 260 seconds) |
| 13:44:01 | × | unit73e quits (~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291) (Ping timeout: 252 seconds) |
| 13:44:12 | → | mniip joins (~mniip@libera/staff/mniip) |
| 13:47:22 | × | favonia quits (~favonia@user/favonia) (Ping timeout: 260 seconds) |
| 13:47:37 | → | hippoid joins (~idris@184.105.6.88) |
| 13:48:05 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 13:48:05 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
| 13:48:05 | → | wroathe joins (~wroathe@user/wroathe) |
| 13:48:34 | <hippoid> | :t \f g x y -> f (g x y) |
| 13:48:35 | <lambdabot> | (t1 -> t2) -> (t3 -> t4 -> t1) -> t3 -> t4 -> t2 |
| 13:49:13 | <hippoid> | I want to create a type alias for that function type |
| 13:49:33 | <hippoid> | (t1 -> t2) -> (t3 -> t4 -> t1) -> t3 -> t4 -> t2 |
| 13:50:03 | <hippoid> | type F = (t1 -> t2) -> (t3 -> t4 -> t1) -> t3 -> t4 -> t2 |
| 13:50:13 | <hippoid> | does not work |
| 13:50:26 | × | jgeerds quits (~jgeerds@55d4da80.access.ecotel.net) (Ping timeout: 258 seconds) |
| 13:51:24 | <geekosaur> | no, you really need to pass the types as parameters |
| 13:51:57 | <geekosaur> | since otherwise they can't unify with any other type (and how would you specify which type is which?) |
| 13:52:24 | <geekosaur> | type F t1 t2 t3 t4 = ... |
| 13:54:23 | × | MQ-17J quits (~MQ-17J@8.21.10.17) (Ping timeout: 264 seconds) |
| 13:55:21 | <hippoid> | geekosaur: I don't know where to start to answer your question "how would you specify which type is which" |
| 13:55:53 | → | burnsidesLlama joins (~burnsides@dhcp168-036.wadham.ox.ac.uk) |
| 13:56:01 | <merijn> | hippoid: Let's rewind, what do you think the behaviour of that alias would be? |
| 13:56:27 | <pavonia> | Perhaps they actually want type F = forall t1 t2 t3 t4. ... |
| 13:56:29 | <merijn> | geekosaur: I mean, it could be a Rank2 alias, but I find that questionable as well |
| 13:56:36 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:b5c0:69fb:2ebc:745e) |
| 13:56:57 | <merijn> | pavonia: Yes, I realise that that *might* be the solution. That's why I asked why/what they want it to do |
| 13:57:16 | <merijn> | pavonia: Preemptively handing out rope like Rank2 types is generally...not helpful to beginners :p |
| 13:58:01 | <hippoid> | merijn: to rewind further, I'm trying to do Eta reduction on the function \f g x y -> f (g x y) to get it into point-free style, and I'm using QuickCheck to test my equivalances. I want to pass the function into my property test, and that's why I want an alias for that long function type |
| 13:58:15 | <pavonia> | Fair enough |
| 14:00:18 | → | dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net) |
| 14:00:21 | <hippoid> | like this https://paste.tomsmeding.com/jFMbE1G6 |
| 14:00:42 | × | Kaiepi quits (~Kaiepi@156.34.44.192) (Remote host closed the connection) |
| 14:00:44 | <lyxia> | For QuickCheck you will have to choose some concrete types for t1 ... t4 anyway |
| 14:01:29 | × | burnsidesLlama quits (~burnsides@dhcp168-036.wadham.ox.ac.uk) (Ping timeout: 265 seconds) |
| 14:01:35 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:b5c0:69fb:2ebc:745e) (Ping timeout: 264 seconds) |
| 14:03:42 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 260 seconds) |
| 14:04:38 | × | enoq quits (~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7) (Quit: enoq) |
| 14:06:11 | <hippoid> | ok, i got it working well enough. thanks! |
| 14:08:12 | → | lavaman joins (~lavaman@98.38.249.169) |
| 14:09:27 | × | Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 14:09:45 | → | Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
| 14:10:48 | × | xiongxin quits (~quassel@113.116.32.4) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.) |
| 14:11:08 | → | favonia joins (~favonia@user/favonia) |
| 14:11:40 | → | hnOsmium0001 joins (uid453710@id-453710.hampstead.irccloud.com) |
| 14:13:00 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 260 seconds) |
| 14:14:10 | × | Gurkenglas quits (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 260 seconds) |
| 14:15:20 | × | rdz1789 quits (~rdz1789@139.47.40.241) (Ping timeout: 260 seconds) |
| 14:17:24 | × | lortabac quits (~lortabac@2a01:e0a:541:b8f0:2041:32a6:242d:4938) (Quit: WeeChat 2.8) |
| 14:19:35 | × | hippoid quits (~idris@184.105.6.88) (Quit: leaving) |
| 14:20:30 | × | jonathanx quits (~jonathan@dyn-8-sc.cdg.chalmers.se) (Ping timeout: 260 seconds) |
| 14:20:41 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 14:20:41 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
| 14:20:41 | → | wroathe joins (~wroathe@user/wroathe) |
| 14:20:41 | <AWizzArd> | There are plenty streaming libs for GHC. Pipes. Conduit. Streams. Streamly. To name a few. |
| 14:21:59 | <AWizzArd> | Do they all offer a way to take a set of items out of the stream (i.e. a certain number of bytes, a number of lines, like `take n`) and get ([a], RestOfStream)? |
| 14:23:05 | × | ystael quits (~ystael@user/ystael) (Quit: Lost terminal) |
| 14:23:08 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 14:24:01 | → | waleee joins (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) |
| 14:24:47 | → | shriekingnoise joins (~shrieking@186.137.144.80) |
| 14:25:15 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 260 seconds) |
| 14:26:47 | × | acidjnk_new3 quits (~acidjnk@pd9e0b933.dip0.t-ipconnect.de) (Ping timeout: 264 seconds) |
| 14:29:17 | × | gehmehgeh quits (~user@user/gehmehgeh) (Remote host closed the connection) |
| 14:29:19 | <adamCS> | There's no way I can reorder type parameters via a type synonym or type family such that I can partially apply against the result, right? I want "PipeStream m a = Pipes.Producer a m ()" where I can then use "PipeStream m" or even "PipeStream". But there's no way, right? I have to newtype it? |
| 14:29:38 | <merijn> | adamCS: No, because that is equivalent in power to type level lambda's |
| 14:30:07 | → | gehmehgeh joins (~user@user/gehmehgeh) |
| 14:30:09 | <merijn> | (no, as in, no that isn't possible) |
| 14:30:21 | <adamCS> | merijn: yeah. That's what I thought...without the theoretical bit. Thanks! |
| 14:32:30 | <AWizzArd> | adamCS: Are you currently working with the Pipes streaming library? |
| 14:34:28 | cross_ | is now known as cross |
| 14:34:34 | <adamCS> | AWizzArd: Yes, sort of. I'm working on some enhancements to the "Frames" library, which uses Pipes. Part of the work I did is to switch to using streamly where Frames used Pipes. But now I'm trying to merge it all and thus trying to unify (a subset of) the interfaces via a record-of-functions. |
| 14:35:32 | → | rond_ joins (~rond_@2a01:115f:943:5e00:7fe4:4b4a:851b:ca4d) |
| 14:35:44 | <adamCS> | But the different kind signatures of a streamly stream (t :: (Type -> Type) -> Type -> Type) and a Pipes producer (p :: Type -> (Type -> Type) -> Type -> Type)) are proving...annoying. |
| 14:36:24 | <AWizzArd> | adamCS: Interesting. You might be able to help with some insight. If I have a source of lines (i.e. lists) of Text, something such as `Stream [Text]`. Can I then use Pipes to give me 1-n of those [Text], and a stream that contains the rest (if any)? |
| 14:36:39 | <merijn> | AWizzArd: You want pipes-parse |
| 14:36:43 | <merijn> | @hackage pipes-parse |
| 14:36:44 | <lambdabot> | https://hackage.haskell.org/package/pipes-parse |
| 14:37:54 | <AWizzArd> | merijn: I want to implement functionality for reusing parsing streams of lines of Texts. It will eventually be used to validate/parse CSV files, but it could work on any source for lines of columns. |
| 14:38:30 | <AWizzArd> | merijn: but I want to decouple it from a concrete CSV lib and a concrete streaming lib. Instead my type class will offer the functionality against which a user can write an implementation. |
| 14:39:07 | <AWizzArd> | merijn: the purpose is to factor out the part where the lines are counted and good error reporting and parsing takes place, which is repetitive. |
| 14:39:34 | <AWizzArd> | merijn: on top of it I want something comparable to Json-Schema. |
| 14:39:46 | → | TMA joins (tma@twin.jikos.cz) |
| 14:41:16 | <merijn> | AWizzArd: pipes-parse isn't really parsing in the sense you're thinking off |
| 14:41:24 | <AWizzArd> | Doing Abelson&Sussman’s ”Programming by wishful thinking” I would like to get a couple of rows and interate over them. `let ([row], rest) = readFromStream 1 stream` |
| 14:41:38 | <merijn> | pipes itself simply does *not* allow "take N lines and return the remainder" |
| 14:41:49 | <merijn> | You are not allowed to have a remainder with pipes |
| 14:41:58 | <AWizzArd> | merijn: okay, that info already helps |
| 14:42:17 | × | cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.3) |
| 14:42:34 | <merijn> | pipes-parse is basically a StateT with the State being a producer, allowing you to pass a producer (i.e. remaining input) to a future stage when you're done consuming |
| 14:43:18 | <AWizzArd> | merijn: essentially I just would like to work with the type [[Text]], which just may blow up memory if an input csv file is 300 GB in size. So I couldn’t use a csv lib directly but instead plug in any of the streaming libs. |
| 14:43:27 | → | CiaoSen joins (~Jura@p5dcc1a24.dip0.t-ipconnect.de) |
| 14:43:52 | → | lavaman joins (~lavaman@98.38.249.169) |
| 14:44:08 | <merijn> | As someone who has tried wrapping several streaming libs using a single API: Just don't |
| 14:44:19 | → | dsrt^ joins (~dsrt@wsip-68-227-92-38.mc.at.cox.net) |
| 14:44:26 | <merijn> | It sucks in all sorts of annoying ways |
| 14:45:35 | <AWizzArd> | merijn: I don't want to complect in a concrete implementation. To my users I want to offer something like `getNextLines` (i.e. take on any streaming lib). The user will find an already parsed row or a detailed error report and can decide what to do. |
| 14:46:15 | <AWizzArd> | merijn: when this is done I want to write an implementation for those different streaming libs, so the user will be free to choose any, and the `getNextLines` magic will just do its work. |
| 14:47:36 | → | burnsidesLlama joins (~burnsides@dhcp168-036.wadham.ox.ac.uk) |
| 14:48:19 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 258 seconds) |
| 14:50:28 | → | mc47 joins (~mc47@xmonad/TheMC47) |
| 14:50:30 | <lyxia> | Is there a proof that ZipList can't be a monad? |
| 14:50:35 | <merijn> | AWizzArd: Probably wanna study how things like the attoparsec wrappers for pipes/conduit are done and adjust your API to play nicely with that |
| 14:50:41 | <merijn> | lyxia: Easy: What's return do? |
| 14:51:07 | <AWizzArd> | merijn: sounds like a starting point. |
| 14:52:05 | × | burnsidesLlama quits (~burnsides@dhcp168-036.wadham.ox.ac.uk) (Ping timeout: 260 seconds) |
| 14:52:16 | <lyxia> | merijn: return = ZipList . repeat |
| 14:52:35 | → | unit73e joins (~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291) |
| 14:53:32 | <merijn> | lyxia: Ok, so now how's >>= gonna work if I do "return x >>= f" |
| 14:53:44 | <merijn> | Supposedly "return x >>= f" = "f x" |
| 14:53:52 | <merijn> | But now I suddenly have infinite 'x's |
| 14:54:23 | → | Kaiepi joins (~Kaiepi@156.34.44.192) |
| 14:54:28 | <merijn> | lyxia: Applicative works because <*> sees two ZipLists and ends up truncating to the shorter one |
| 14:55:57 | <lyxia> | Well I can try to take the diagonal of repeat (f x) |
| 14:56:08 | <lyxia> | I know my attempt is gonna fail, but that's no proof that all attempts are going to fail. |
| 14:57:25 | → | lortabac joins (~lortabac@2a01:e0a:541:b8f0:de8d:bf1f:3d7:7a94) |
| 15:01:03 | → | burnsidesLlama joins (~burnsides@dhcp168-036.wadham.ox.ac.uk) |
| 15:01:56 | → | zmt00 joins (~zmt00@user/zmt00) |
| 15:05:54 | <lyxia> | In fact it will satisfy the identity laws, so if there is an argument to be made it must involve the associativity law. |
| 15:07:10 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds) |
| 15:08:29 | → | nefercheprure joins (tma@twin.jikos.cz) |
| 15:08:29 | × | nefercheprure quits (tma@twin.jikos.cz) (Client Quit) |
| 15:08:51 | → | _ht joins (~quassel@82-169-194-8.biz.kpn.net) |
| 15:11:32 | × | dsrt^ quits (~dsrt@wsip-68-227-92-38.mc.at.cox.net) (Remote host closed the connection) |
| 15:14:15 | × | ArtVandelayer quits (~ArtVandel@ip174-68-147-20.lv.lv.cox.net) (Ping timeout: 260 seconds) |
| 15:24:30 | → | segfaultfizzbuzz joins (~segfaultf@135-180-0-138.static.sonic.net) |
| 15:26:35 | → | jgeerds joins (~jgeerds@55d4da80.access.ecotel.net) |
| 15:27:38 | <codolio> | lyxia: It takes some work, but the idea is that to be associative, you'd need to figure out the diagonal of a 3-dimensional cube, but the operations can only act on squares. Collapsing squares can eliminate things that would be holes in the diagonal in 3 dimensions. |
| 15:30:11 | → | rdz1789 joins (~rdz1789@139.47.40.241) |
| 15:31:47 | <codolio> | Or maybe it's the opposite in some cases, now that I think of it. |
| 15:32:34 | <lyxia> | the opposite of what? |
| 15:32:47 | <codolio> | There are squares with holes in the diagonal but those holes don't form part of the 3-dimensional diagonal, so you shouldn't artificially truncate. |
| 15:34:52 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 15:35:29 | × | brettgilio quits (~brettgili@x-node.gq) (Quit: Leaving...) |
| 15:35:32 | <codolio> | Maybe it's just a matter of perspective on how you think the monad might actually work out. |
| 15:36:14 | × | favonia quits (~favonia@user/favonia) (Ping timeout: 258 seconds) |
| 15:37:55 | × | lortabac quits (~lortabac@2a01:e0a:541:b8f0:de8d:bf1f:3d7:7a94) (Quit: WeeChat 2.8) |
| 15:38:46 | → | Null_A joins (~null_a@2601:645:8700:2290:a891:322d:b92c:f184) |
| 15:39:22 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds) |
| 15:40:38 | → | brettgilio joins (~brettgili@x-node.gq) |
| 15:42:27 | → | LimeGolem joins (~LimeGolem@82.40.121.143) |
| 15:46:23 | codolio | is now known as dolio |
| 15:47:03 | → | favonia joins (~favonia@user/favonia) |
| 15:48:42 | × | Farzad quits (~FarzadBek@178.131.30.153) (Ping timeout: 260 seconds) |
| 15:49:54 | × | rdz1789 quits (~rdz1789@139.47.40.241) (Remote host closed the connection) |
| 15:50:20 | <LimeGolem> | I have a data type with multiple constructors, some of them recursive (e.g. `data Expr = Lit Int | Add Expr Expr | Mul Expr Expr`). I want to forbid certain patterns (e.g. in `Add a b` I want to forbid `a` from being of the form `Add _ _`, which is always possible if `Add` is modelling something associative). Is there any way to do this which |
| 15:50:21 | <LimeGolem> | doesn't involve boilerplate which is quadratic in the number of constructors? |
| 15:52:56 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:b5c0:69fb:2ebc:745e) |
| 15:52:58 | <c_wraith> | depending on the use case, you might be able to do that by making it a GADT. (Or maybe not - it depends entirely on what you're doing with them. |
| 15:53:09 | × | hendursa1 quits (~weechat@user/hendursaga) (Quit: hendursa1) |
| 15:53:40 | → | hendursaga joins (~weechat@user/hendursaga) |
| 15:54:51 | <LimeGolem> | The use case is that I'm building an AST, but I have various equivalences and I want to enforce some kind of normal form at the type level. |
| 15:54:53 | <c_wraith> | Hmm, actually that'd need more than just a GADT. That would need to be mixed with rank-n types |
| 15:55:39 | <LimeGolem> | The best solution I have at the moment uses GADTs and RankNTypes, but also involves a lot of boilerplate. I'm hoping there's a simpler solution which I've missed. |
| 15:56:31 | × | jgeerds quits (~jgeerds@55d4da80.access.ecotel.net) (Ping timeout: 265 seconds) |
| 15:57:01 | <c_wraith> | I could construct something, but I would probably put it at the edge of being unusable in real code. |
| 15:57:49 | <LimeGolem> | If it doesn't involve an unwieldy amount of boilerplate, I'd definitely be interested in seeing it. |
| 15:58:00 | × | mmhat quits (~mmh@55d45798.access.ecotel.net) (Ping timeout: 260 seconds) |
| 15:58:26 | × | dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Quit: WeeChat 3.3) |
| 15:58:54 | <monochrom> | I think s/depends on use case/depends on actual restrictions/ |
| 15:59:04 | × | ishutin quits (~ishutin@84-236-97-21.pool.digikabel.hu) (Ping timeout: 265 seconds) |
| 15:59:04 | <c_wraith> | if I wanted to go with an actually-usable approach, I'd probably go with enforcing an interface consisting only of normalizing combinators |
| 15:59:44 | × | favonia quits (~favonia@user/favonia) (Quit: Leaving) |
| 16:00:05 | <LimeGolem> | That is an option. But I'm trying to find a way to enforce the normalisation directly at the type level. |
| 16:00:33 | → | lbseale joins (~lbseale@user/ep1ctetus) |
| 16:00:49 | → | ishutin joins (~ishutin@94-21-131-99.pool.digikabel.hu) |
| 16:00:58 | × | [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer) |
| 16:05:17 | → | Guest78 joins (~Guest78@178-78-205-86.customers.ownit.se) |
| 16:05:28 | → | tzh joins (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) |
| 16:07:05 | × | justHaunt quits (~justache@user/justache) (Read error: Connection reset by peer) |
| 16:07:39 | <Guest78> | Hi! I'm on p. 29 of Learn You a Haskell for Great Good, and there is this pattern of pattern matching that I can't get to work. It says that to capture the first three variables of a list and then the rest in another variable, you can use the pattern q:p:r:xs. But, ... |
| 16:07:59 | → | justHaunt joins (~justache@user/justache) |
| 16:08:16 | <geekosaur> | you need to parenthesize it (and most patterns) |
| 16:08:25 | <Guest78> | ... when I try I get an infinite type error when trying this line: mytails (q:p:r:x) = [r,p,q,x] |
| 16:08:38 | <Guest78> | If someone has the time to explain, I would be very grateful! |
| 16:08:56 | <geekosaur> | because x has the type [a] whereas q, p, r have type a |
| 16:09:19 | <geekosaur> | you have to recombine them using (:) syntax, not standard list syntax |
| 16:09:40 | <geekosaur> | mytails (q:p:r:x) = (r:p:q:x) |
| 16:09:59 | <Guest78> | So how do I declare that in the declaration line? Here is what I had : mytails :: [a] -> [a] |
| 16:10:14 | <geekosaur> | you don't need to do anything in the declaration line |
| 16:10:21 | <c_wraith> | LimeGolem: https://paste.tomsmeding.com/NGZmMb1Q I would rate the usability of this around 1/10. But technically it does what you asked for. |
| 16:10:43 | <geekosaur> | [a,b,c] is the same as a:b:c:[] |
| 16:11:15 | <Guest78> | I think I get it now -- it is like consing in Lisp, right? Thanks a lot for your help! |
| 16:11:20 | <geekosaur> | yes |
| 16:11:34 | <geekosaur> | the [x,y,z] syntax is augar for the cons-style syntax |
| 16:11:39 | <geekosaur> | *sugar for |
| 16:12:02 | → | mmhat joins (~mmh@55d45d75.access.ecotel.net) |
| 16:15:05 | × | alzgh quits (~alzgh@user/alzgh) (Remote host closed the connection) |
| 16:15:15 | → | alzgh joins (~alzgh@user/alzgh) |
| 16:15:26 | <Guest78> | I think I'm still a bit confused about the parentheses -- the ( is for tuples and [ for lists, but here, I use ( to match and return a list? |
| 16:15:44 | <LimeGolem> | c_wraith: Thanks! I would give that at least a 3/10 :). Is there any way to extend that to include patterns involving multiple terms in a single constructor, e.g. `Add (Add a b) (Add c d)`? |
| 16:16:15 | <geekosaur> | Guest78, inb this case the () is just because of precedence |
| 16:16:41 | <geekosaur> | foo x:y:z is parsed (((foo x):y):z) which is not what you want |
| 16:16:58 | <geekosaur> | (even in patterns, for consistency with expressions) |
| 16:17:09 | <geekosaur> | so you have to say foo (x:y:z) |
| 16:17:47 | <geekosaur> | so the parentheses aren't really part of the syntax, they just make things associate correctly |
| 16:18:04 | <c_wraith> | LimeGolem: probably, but I can't see it right now. and it would probably get far worse to work with |
| 16:19:11 | <Guest78> | Thanks again! I get it now! I should have re-read a few pages before jumping right back into where I was yesterday :). |
| 16:20:47 | × | waleee quits (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 264 seconds) |
| 16:20:54 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 16:23:37 | → | waleee joins (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) |
| 16:24:29 | × | hgolden quits (~hgolden2@cpe-172-114-81-123.socal.res.rr.com) (Remote host closed the connection) |
| 16:25:14 | → | hgolden joins (~hgolden2@cpe-172-114-81-123.socal.res.rr.com) |
| 16:25:56 | × | peterhil quits (~peterhil@dsl-hkibng32-54fb56-2.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 16:26:16 | × | kupi quits (uid212005@id-212005.hampstead.irccloud.com) (Quit: Connection closed for inactivity) |
| 16:26:23 | → | MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com) |
| 16:26:33 | → | peterhil joins (~peterhil@dsl-hkibng32-54fb56-2.dhcp.inet.fi) |
| 16:28:47 | <LimeGolem> | c_wraith: That's what I was afraid of. Is there a name for this sort of technique? Something that I can look up? |
| 16:29:12 | × | hgolden quits (~hgolden2@cpe-172-114-81-123.socal.res.rr.com) (Remote host closed the connection) |
| 16:30:48 | <c_wraith> | You know, I can't recall ever seeing a name for it. |
| 16:31:23 | → | hgolden joins (~hgolden2@cpe-172-114-81-123.socal.res.rr.com) |
| 16:31:43 | <dolio> | lyxia: The closest natural thing I can come up with is this: imagine lists as `Σ n. Fin n -> A`. (<*>) takes the minimum of two ns. Make join use the minimum over all ns. So, if one row is empty, your whole join is empty, even if there's a non-trivial diagonal. Then maybe that operation is associative. |
| 16:32:25 | <dolio> | However, that doesn't actually work for infinite lists. You can't know how big the output should be without seeing the entire input. |
| 16:32:30 | × | kuribas quits (~user@ip-188-118-57-242.reverse.destiny.be) (Quit: ERC (IRC client for Emacs 26.3)) |
| 16:33:29 | → | timCF joins (~timCF@m91-129-111-87.cust.tele2.ee) |
| 16:33:45 | <LimeGolem> | c_wraith: Oh well, thanks for the help! |
| 16:34:38 | <dolio> | And without infinite lists there is no unit. You could formally adjoin one, but it is not the same type. |
| 16:37:28 | <dolio> | I.E. Maybe ℕ is not the same as the possibly infinite, 'natural numbers,' they have distinct computational topologies. |
| 16:45:04 | × | Guest78 quits (~Guest78@178-78-205-86.customers.ownit.se) (Ping timeout: 256 seconds) |
| 16:46:47 | × | CiaoSen quits (~Jura@p5dcc1a24.dip0.t-ipconnect.de) (Ping timeout: 265 seconds) |
| 16:48:51 | <dolio> | geekosaur: I think you got that slightly wrong. |
| 16:49:11 | <dolio> | (foo x):(y:z) |
| 16:49:19 | <geekosaur> | probably |
| 16:49:27 | <geekosaur> | right, (:) right-associates, sorry |
| 16:49:34 | <dolio> | I had to think about it a while with that many parens. :þ |
| 16:49:42 | <geekosaur> | but the important part was x misassociating |
| 16:50:17 | <lyxia> | dolio: you can't prove that there is no good join by showing that just one join is bad. And that one is not associative either. |
| 16:51:02 | × | chele quits (~chele@user/chele) (Remote host closed the connection) |
| 16:55:26 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds) |
| 16:55:27 | × | MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer) |
| 16:57:35 | → | MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com) |
| 16:59:00 | → | f-a joins (f2a@f2a.jujube.ircnow.org) |
| 17:00:17 | ← | f-a parts (f2a@f2a.jujube.ircnow.org) () |
| 17:02:05 | <dolio> | What is a 'good' join? Is it any arbitrary function that is associative and happens to take the diagonal on squares, regardless of how unpredictable it is on non-square cases? Then I haven't seen a universal disproof of those. |
| 17:06:27 | <dolio> | If the goodness criterion includes corresponding to some simply describable operation on diagonals of ragged squares/cubes, then there are counter example cubes for the obvious ones. |
| 17:09:57 | <awpr> | FWIW infinite streams and fixed-size Vecs do have this diagonalization instance |
| 17:12:50 | × | LimeGolem quits (~LimeGolem@82.40.121.143) (Ping timeout: 256 seconds) |
| 17:18:59 | → | lavaman joins (~lavaman@98.38.249.169) |
| 17:20:56 | <segfaultfizzbuzz> | i am now interested in what abstract "characteristics" code can have. i am not quite sure what i mean by code here, but i probably mean a function as haskellers describe it, or possibly a function or data type. for example: pure, functional, linear, total, synchronous/asynchronous, ... |
| 17:20:57 | <lyxia> | Yes to "What is a 'good' join? Is it ..." |
| 17:21:35 | <segfaultfizzbuzz> | is there a list of these abstract characteristics somewhere? |
| 17:23:45 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 260 seconds) |
| 17:24:51 | → | kupi joins (uid212005@id-212005.hampstead.irccloud.com) |
| 17:27:52 | → | Guest78 joins (~Guest78@178-78-205-86.customers.ownit.se) |
| 17:30:17 | → | RoxSive joins (~RoxSive@95-30-22-55.broadband.corbina.ru) |
| 17:30:22 | <Guest78> | I have another question, if someone has the time. I'm now on p. 36 of Learn You a Haskell... and am practicing with case. I can do fibonacci numbers with pattern match, if-then-else and guards, but with case I get a parse error. Here is my attempt: |
| 17:30:42 | <Guest78> | myfib4 :: (Integral a) => a -> a |
| 17:30:42 | <Guest78> | myfib4 n = case n of < 2 -> n |
| 17:30:43 | <Guest78> | case n of _ -> myfib3 (n - 1) + myfib3 (n - 2) |
| 17:31:08 | <Guest78> | The parse error is on the first case. Emacs marks it at the arrow. |
| 17:31:10 | <geekosaur> | case does pattern matches on structure; you need guards to do numeric comparisons |
| 17:31:45 | <Guest78> | Ok, so I can't use case for this at all? |
| 17:31:49 | <geekosaur> | so you can't do that check directly using case, only with a guard |
| 17:32:21 | <Guest78> | Thanks a lot :). I'll just move on then! |
| 17:35:52 | × | haasn quits (~nand@haasn.dev) (Quit: ZNC 1.7.5+deb4 - https://znc.in) |
| 17:36:17 | → | haasn joins (~nand@haasn.dev) |
| 17:36:37 | × | mbuf quits (~Shakthi@171.61.241.145) (Quit: Leaving) |
| 17:37:36 | → | jgeerds joins (~jgeerds@55d4da80.access.ecotel.net) |
| 17:38:37 | → | Guest377 joins (~Guest37@93-172-116-38.bb.netvision.net.il) |
| 17:39:25 | × | Guest377 quits (~Guest37@93-172-116-38.bb.netvision.net.il) (Client Quit) |
| 17:39:41 | → | Guest7483 joins (~Guest7483@93-172-116-38.bb.netvision.net.il) |
| 17:40:13 | × | Guest7483 quits (~Guest7483@93-172-116-38.bb.netvision.net.il) (Client Quit) |
| 17:40:28 | → | Guest28 joins (~Guest28@93-172-116-38.bb.netvision.net.il) |
| 17:46:52 | → | lavaman joins (~lavaman@98.38.249.169) |
| 17:48:32 | <Inst> | also, this is interesting |
| 17:49:43 | <Inst> | it turns out HPF1P does the Main / Do in Chapter 3 |
| 17:51:54 | × | Null_A quits (~null_a@2601:645:8700:2290:a891:322d:b92c:f184) (Remote host closed the connection) |
| 17:52:29 | → | Null_A joins (~null_a@2601:645:8700:2290:a891:322d:b92c:f184) |
| 17:53:17 | × | RoxSive quits (~RoxSive@95-30-22-55.broadband.corbina.ru) (Quit: Leaving) |
| 17:57:01 | × | Null_A quits (~null_a@2601:645:8700:2290:a891:322d:b92c:f184) (Ping timeout: 252 seconds) |
| 17:59:23 | → | Null_A joins (~null_a@2601:645:8700:2290:a891:322d:b92c:f184) |
| 18:00:14 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 18:00:21 | × | burnsidesLlama quits (~burnsides@dhcp168-036.wadham.ox.ac.uk) (Remote host closed the connection) |
| 18:00:30 | × | xff0x quits (~xff0x@2001:1a81:524c:400:5205:21d5:64e1:92) (Ping timeout: 260 seconds) |
| 18:00:53 | → | burnsidesLlama joins (~burnsides@dhcp168-036.wadham.ox.ac.uk) |
| 18:01:20 | → | Guest372 joins (~xxx@47.245.54.240) |
| 18:01:20 | × | MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer) |
| 18:02:01 | → | MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com) |
| 18:02:10 | → | k joins (~user@152.1.137.158) |
| 18:02:14 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 18:02:38 | <k> | Where is the source for the `Ord` class? I can't find it in GHC.Base. |
| 18:03:21 | → | Guest372 joins (~xxx@47.245.54.240) |
| 18:03:51 | <davean> | GHC.Classes perhaps |
| 18:03:57 | <geekosaur> | https://downloads.haskell.org/ghc/latest/docs/html/libraries/ghc-prim-0.7.0/src/GHC-Classes.html#Ord |
| 18:04:02 | <davean> | The thing you get when you click on "Source" next to Ord in Data.Ord? |
| 18:04:15 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 18:04:25 | <geekosaur> | or in Prelude for that matter |
| 18:04:37 | <Hecate> | found it |
| 18:04:44 | <Hecate> | ah yes, thanks geekosaur |
| 18:04:52 | <k> | geekosaur: thanks! |
| 18:05:03 | <Hecate> | davean: I had to click on the source for the Ord Bool implementation in the "Instances" dropdown |
| 18:05:05 | <k> | davean: Couldn't get to the source that way. |
| 18:05:06 | <Hecate> | to get to GHC.Classes |
| 18:05:21 | → | Guest372 joins (~xxx@47.245.54.240) |
| 18:05:26 | × | burnsidesLlama quits (~burnsides@dhcp168-036.wadham.ox.ac.uk) (Ping timeout: 260 seconds) |
| 18:06:15 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 18:07:21 | → | Guest372 joins (~xxx@47.245.54.240) |
| 18:08:15 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 18:09:22 | → | Guest372 joins (~xxx@47.245.54.240) |
| 18:10:15 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 18:11:22 | → | Guest372 joins (~xxx@47.245.54.240) |
| 18:12:16 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 18:12:48 | → | ArtVandelayer joins (~ArtVandel@ip174-68-147-20.lv.lv.cox.net) |
| 18:13:22 | → | Guest372 joins (~xxx@47.245.54.240) |
| 18:14:16 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 18:14:29 | <geekosaur> | come to think of it I did the same thing, but I intended it as a shortcut. if it's not directly documented in either Data.Ord or Prelude, that's a bug imo |
| 18:14:49 | <geekosaur> | shouldn't force preople to go digging for GHC.Classes for basic stuff like Ord and Eq |
| 18:15:22 | → | Guest372 joins (~xxx@47.245.54.240) |
| 18:16:02 | <k> | Does `compare` imply that `Ord` defines a total order? If not, why not? |
| 18:16:16 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 18:16:16 | <geekosaur> | Ord is supposed to define a total order |
| 18:16:37 | <geekosaur> | Sadly this gets abused a bit, including by Double |
| 18:16:52 | × | Null_A quits (~null_a@2601:645:8700:2290:a891:322d:b92c:f184) (Remote host closed the connection) |
| 18:17:07 | <Hecate> | I'm waiting for the CLC to be operational to push for a PartialEq / PartialOrd |
| 18:17:20 | <Hecate> | that Eq/Ord would inherit, and as such become Laws-only typeclasses |
| 18:17:22 | → | Guest372 joins (~xxx@47.245.54.240) |
| 18:17:34 | <k> | Per the docs: 'The Haskell Report defines not laws for 'Ord'. However, '<=' is customarily expected to implement a non-strict partial order ...' |
| 18:18:07 | <k> | *no laws |
| 18:18:13 | <Hecate> | yep |
| 18:18:16 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 18:18:23 | <davean> | Thats not what the documentation says: "" |
| 18:18:26 | <davean> | Thats not what the documentation says: "<= is customarily expected to implement a non-strict partial order" |
| 18:19:08 | <davean> | The only total order class I know of in Haskell is in a library |
| 18:19:16 | <davean> | Ironicly, a partial order library |
| 18:19:23 | → | Guest372 joins (~xxx@47.245.54.240) |
| 18:20:02 | <k> | I guess `EQ` is not supposed to mean `equal` or `equivalent`? |
| 18:20:16 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 18:20:24 | <k> | But maybe `not comparably greater or less than`? |
| 18:21:12 | → | xff0x joins (~xff0x@2001:1a81:524c:400:5205:21d5:64e1:92) |
| 18:21:23 | → | Guest372 joins (~xxx@47.245.54.240) |
| 18:21:30 | × | jgeerds quits (~jgeerds@55d4da80.access.ecotel.net) (Ping timeout: 260 seconds) |
| 18:22:16 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 18:23:23 | → | Guest372 joins (~xxx@47.245.54.240) |
| 18:24:17 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 18:24:59 | × | iqofi quits (~ixosa@217.138.222.92) (Remote host closed the connection) |
| 18:25:22 | → | Null_A joins (~null_a@2601:645:8700:2290:a891:322d:b92c:f184) |
| 18:25:23 | → | Guest372 joins (~xxx@47.245.54.240) |
| 18:25:29 | <k> | Ah, never mind. I don't really know what I'm talking about. |
| 18:25:57 | × | albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection) |
| 18:26:17 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 18:26:59 | <k> | I still don't understand why all of `>`, `>=`, and `<` are defined in terms of `compare`. Or, honestly, why they're methods. Seems like a waste of code. |
| 18:27:04 | → | albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8) |
| 18:27:23 | → | Guest372 joins (~xxx@47.245.54.240) |
| 18:27:38 | <monochrom> | Standard libraries such as Data.Map and Data.Set already treats Ord as a total order. I think it is too late to defend "but it has no laws". |
| 18:27:58 | × | albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Read error: Connection reset by peer) |
| 18:27:59 | → | econo joins (uid147250@user/econo) |
| 18:28:17 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 18:28:25 | <janus> | k: how would they be if they were not methods and not defined in terms of `compare`? |
| 18:29:04 | → | albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8) |
| 18:29:15 | <k> | janus: You could define them in terms of `<=` as constrained functions rather than methods. |
| 18:29:24 | → | Guest372 joins (~xxx@47.245.54.240) |
| 18:29:37 | <monochrom> | "MINIMAL compare | (<=)" allows starting with <= |
| 18:30:05 | <k> | Oh, I'm aware of that, but you still end up defining everything in terms of `compare` when you start with only `<=`. |
| 18:30:09 | <monochrom> | Though, I am surprised that you don't also raise "but (>) is better" |
| 18:30:12 | <janus> | k: but then NaN <= NaN would be unequal NaN > NaN, right? |
| 18:30:17 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 18:31:10 | <monochrom> | If you are referring to default implementations... |
| 18:31:20 | <monochrom> | You can always override them for your type. |
| 18:31:24 | → | Guest372 joins (~xxx@47.245.54.240) |
| 18:31:34 | <davean> | k: Making them members allows optimizations for their specific cases |
| 18:32:16 | <monochrom> | Default implementations are meant to "work under maximum mathematical generality" not "efficient". |
| 18:32:18 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 18:32:29 | <k> | > (0/0 :: Double) > (0/0 :: Double) |
| 18:32:30 | <monochrom> | Just look at Foldable. |
| 18:32:31 | <lambdabot> | False |
| 18:32:59 | <k> | > (0/0 :: Double) <= (0/0 :: Double) |
| 18:33:01 | <lambdabot> | False |
| 18:33:04 | <monochrom> | Who would code up foldl' in terms of foldr, really. And foldr' in terms of foldl, for the LOL. |
| 18:33:24 | → | Guest372 joins (~xxx@47.245.54.240) |
| 18:33:46 | <k> | And foldr in terms of foldMap, for that matter... |
| 18:33:57 | <k> | Fair enough. |
| 18:34:18 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 18:35:07 | <k> | I was just thinking that if there's a default implementation that is basically always as efficient as any hand-crafted implementation, there's no need to make it a method. There was a similar discussion about `Eq` on haskell-cafe. |
| 18:35:24 | → | Guest372 joins (~xxx@47.245.54.240) |
| 18:35:36 | <k> | Although that had the added issue of newtype dictionaries. |
| 18:35:40 | <monochrom> | That's a big "IF". |
| 18:36:18 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 18:36:23 | <monochrom> | In practice, that statement is vacuously satisfied by all classes we hav. |
| 18:37:25 | → | Guest372 joins (~xxx@47.245.54.240) |
| 18:37:27 | <davean> | Thats basicly non-sensicil |
| 18:37:39 | <davean> | You've derived why they are in the class - because thats false |
| 18:37:44 | <davean> | and almost has to be |
| 18:38:09 | <davean> | I say almost because in SOME specific cases a sufficiently smart SMT solver style compiler COULD optimize |
| 18:38:17 | <davean> | But lets be real - thats horribly unrealistic |
| 18:38:18 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 18:39:00 | <Inst> | nice, just got GHCI running in visual studio code |
| 18:39:10 | <Inst> | honestly they should advertise visual studio code for haskell in windows |
| 18:39:24 | → | Guest372 joins (~xxx@47.245.54.240) |
| 18:40:14 | <k> | I'd say there's a big difference between `notElem x` = `not . elem x` and `foldl f z xs = appEndo (getDual (foldMap (Dual . Endo . flip f) xs)) z`. |
| 18:40:18 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 18:40:54 | → | burnsidesLlama joins (~burnsides@dhcp168-036.wadham.ox.ac.uk) |
| 18:41:26 | → | Guest372 joins (~xxx@47.245.54.240) |
| 18:41:48 | <davean> | k: Thats trivially false. |
| 18:42:15 | <k> | davean: OK, please explain. |
| 18:42:19 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 18:42:29 | <k> | Sometimes 'trivial' things are hard for me to figure out. |
| 18:42:53 | <davean> | k: consider the infinite cases |
| 18:43:25 | → | Guest372 joins (~xxx@47.245.54.240) |
| 18:43:55 | <k> | OK. So elem of an infinite structure can terminate; `notElem` cannot be defined to terminate. |
| 18:44:19 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 18:45:06 | <k> | foldl of an infinite right-to-left structure can terminate; foldl of an infinite left-to-right structure cannot terminate. |
| 18:45:27 | → | Guest372 joins (~xxx@47.245.54.240) |
| 18:46:05 | <k> | `elem` and `notElem` have the same termination characteristics regardless of the bias of the infinite structure. What is your point? |
| 18:46:20 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 18:47:29 | → | Guest372 joins (~xxx@47.245.54.240) |
| 18:48:20 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 18:49:19 | × | dhouthoo quits (~dhouthoo@178-117-36-167.access.telenet.be) (Quit: WeeChat 3.3) |
| 18:49:26 | → | Guest372 joins (~xxx@47.245.54.240) |
| 18:49:46 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 260 seconds) |
| 18:50:20 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 18:51:22 | × | hnOsmium0001 quits (uid453710@id-453710.hampstead.irccloud.com) (Quit: Connection closed for inactivity) |
| 18:51:26 | → | Guest372 joins (~xxx@47.245.54.240) |
| 18:52:16 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 18:52:20 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 18:53:27 | → | Guest372 joins (~xxx@47.245.54.240) |
| 18:53:52 | × | burnsidesLlama quits (~burnsides@dhcp168-036.wadham.ox.ac.uk) (Remote host closed the connection) |
| 18:54:19 | → | burnsidesLlama joins (~burnsides@dhcp168-036.wadham.ox.ac.uk) |
| 18:54:21 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 18:54:51 | × | coot quits (~coot@37.30.49.107.nat.umts.dynamic.t-mobile.pl) (Quit: coot) |
| 18:54:51 | × | burnsidesLlama quits (~burnsides@dhcp168-036.wadham.ox.ac.uk) (Remote host closed the connection) |
| 18:55:02 | → | burnsidesLlama joins (~burnsides@dhcp168-036.wadham.ox.ac.uk) |
| 18:55:27 | → | Guest372 joins (~xxx@47.245.54.240) |
| 18:56:21 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 18:57:27 | → | Guest372 joins (~xxx@47.245.54.240) |
| 18:58:21 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 18:58:58 | × | mei quits (~mei@user/mei) (Read error: Connection reset by peer) |
| 18:58:59 | → | reumeth joins (~reumeth@user/reumeth) |
| 18:59:27 | → | Guest372 joins (~xxx@47.245.54.240) |
| 19:00:21 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 19:01:28 | → | Guest372 joins (~xxx@47.245.54.240) |
| 19:02:21 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 19:03:28 | → | Guest372 joins (~xxx@47.245.54.240) |
| 19:04:03 | → | jgeerds joins (~jgeerds@55d4da80.access.ecotel.net) |
| 19:04:21 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 19:05:28 | → | Guest372 joins (~xxx@47.245.54.240) |
| 19:06:22 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 19:06:58 | × | burnsidesLlama quits (~burnsides@dhcp168-036.wadham.ox.ac.uk) (Remote host closed the connection) |
| 19:07:26 | → | burnsidesLlama joins (~burnsides@dhcp168-036.wadham.ox.ac.uk) |
| 19:07:28 | → | Guest372 joins (~xxx@47.245.54.240) |
| 19:07:34 | <k> | I wonder what trivial thing I was missing. Happy Friday everyone. |
| 19:07:43 | × | k quits (~user@152.1.137.158) (Quit: ERC (IRC client for Emacs 27.1)) |
| 19:08:22 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 19:08:26 | × | Guest78 quits (~Guest78@178-78-205-86.customers.ownit.se) (Ping timeout: 256 seconds) |
| 19:08:28 | <koala_man> | is there a class or something I can use to automatically enumerate each value in a data type, e.g. data Foo = Bar | Baz; (something :: [Foo]) == [ Bar, Baz ]? |
| 19:08:49 | <geekosaur> | something in Data.Generic |
| 19:09:00 | <geekosaur> | requires deriving Generic |
| 19:09:03 | × | burnsidesLlama quits (~burnsides@dhcp168-036.wadham.ox.ac.uk) (Remote host closed the connection) |
| 19:09:09 | → | burnsidesLlama joins (~burnsides@dhcp168-036.wadham.ox.ac.uk) |
| 19:09:22 | <awpr> | > `enumFrom minBound :: [Word8]` |
| 19:09:23 | <lambdabot> | <hint>:1:1: error: parse error on input ‘`’ |
| 19:09:29 | <awpr> | > enumFrom minBound :: [Word8] |
| 19:09:29 | → | Guest372 joins (~xxx@47.245.54.240) |
| 19:09:31 | <lambdabot> | [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,2... |
| 19:09:50 | <awpr> | for simple enums with Enum and Bounded, that should do it |
| 19:10:22 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 19:10:52 | <monochrom> | data Foo = Bar | Baz deriving (Bounded, Enum) |
| 19:11:04 | → | CiaoSen joins (~Jura@p200300c95730dd002a3a4dfffe84dbd5.dip0.t-ipconnect.de) |
| 19:11:13 | <monochrom> | then you can [minBound .. maxBound] |
| 19:11:29 | → | Guest372 joins (~xxx@47.245.54.240) |
| 19:11:38 | <monochrom> | This doesn't work for "larger" examples. |
| 19:11:40 | × | myShoggoth quits (~myShoggot@97-120-85-195.ptld.qwest.net) (Ping timeout: 260 seconds) |
| 19:11:48 | → | aegon joins (~mike@174.127.249.180) |
| 19:11:54 | <koala_man> | nice, thanks! |
| 19:12:20 | <awpr> | for more complicated types like tuples of enums, sum types with fields, etc. there's https://hackage.haskell.org/package/finite-table-0.1.0.1/docs/Data-Finite.html#v:enumerate |
| 19:12:22 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 19:13:21 | → | mikoto-chan joins (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) |
| 19:13:29 | → | Guest372 joins (~xxx@47.245.54.240) |
| 19:14:11 | × | slowButPresent quits (~slowButPr@user/slowbutpresent) (Ping timeout: 264 seconds) |
| 19:14:23 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 19:15:29 | → | Guest372 joins (~xxx@47.245.54.240) |
| 19:15:33 | <awpr> | (note `[minBound..maxBound]` is exactly `enumFromTo minBound maxBound`, and for derived instances for finite enums, those are the same as `[minBound..]` and `enumFrom minBound`) |
| 19:16:23 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 19:16:26 | → | myShoggoth joins (~myShoggot@97-120-85-195.ptld.qwest.net) |
| 19:17:29 | → | Guest372 joins (~xxx@47.245.54.240) |
| 19:17:31 | → | gomma joins (~gomma@c-73-132-243-63.hsd1.md.comcast.net) |
| 19:18:14 | <gomma> | Is conan in here? |
| 19:18:23 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 19:18:32 | <Franciman> | not now, apparently |
| 19:18:57 | <gomma> | but he is sometimes here? |
| 19:19:16 | <Franciman> | conal^ |
| 19:19:18 | <Franciman> | ? |
| 19:19:22 | <Franciman> | yes usually I see him online |
| 19:19:25 | <gomma> | yes that's probably it! |
| 19:19:29 | <gomma> | thank u |
| 19:19:30 | → | Guest372 joins (~xxx@47.245.54.240) |
| 19:19:44 | <gomma> | ok thanks |
| 19:20:22 | <gomma> | he helped me years ago and i wanted to discuss stuff with him since i've grown a lot since then |
| 19:20:24 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 19:20:30 | <gomma> | but since i have the right name now, i found his publications |
| 19:20:34 | → | jaitoon joins (~Jaitoon@2a02:c7f:a5f:1d00:3901:d03b:2d77:c4b6) |
| 19:20:41 | → | slowButPresent joins (~slowButPr@user/slowbutpresent) |
| 19:21:22 | <gomma> | I think I want to read through those before engaging again |
| 19:21:29 | <gomma> | Thanks so much! Goodbye y'all |
| 19:21:30 | → | Guest372 joins (~xxx@47.245.54.240) |
| 19:21:35 | × | gomma quits (~gomma@c-73-132-243-63.hsd1.md.comcast.net) (Client Quit) |
| 19:21:43 | <janus> | goodbye gomma |
| 19:22:24 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 19:23:30 | → | Guest372 joins (~xxx@47.245.54.240) |
| 19:24:24 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 19:25:31 | → | Guest372 joins (~xxx@47.245.54.240) |
| 19:25:51 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 258 seconds) |
| 19:26:25 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 19:27:31 | → | Guest372 joins (~xxx@47.245.54.240) |
| 19:27:36 | <aegon> | is there an applicative version of ^. for lens? |
| 19:28:25 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 19:29:31 | → | Guest372 joins (~xxx@47.245.54.240) |
| 19:30:20 | × | slowButPresent quits (~slowButPr@user/slowbutpresent) (Ping timeout: 260 seconds) |
| 19:30:25 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 19:31:31 | → | Guest372 joins (~xxx@47.245.54.240) |
| 19:31:42 | → | slowButPresent joins (~slowButPr@user/slowbutpresent) |
| 19:32:25 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 19:33:32 | → | Guest372 joins (~xxx@47.245.54.240) |
| 19:34:26 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 19:35:32 | → | Guest372 joins (~xxx@47.245.54.240) |
| 19:36:26 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 19:37:32 | → | Guest372 joins (~xxx@47.245.54.240) |
| 19:38:26 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 19:39:33 | → | Guest372 joins (~xxx@47.245.54.240) |
| 19:39:33 | × | MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer) |
| 19:39:56 | → | MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com) |
| 19:40:27 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 19:41:33 | → | Guest372 joins (~xxx@47.245.54.240) |
| 19:42:27 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 19:43:33 | → | Guest372 joins (~xxx@47.245.54.240) |
| 19:44:27 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 19:45:11 | × | _ht quits (~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection) |
| 19:45:34 | → | Guest372 joins (~xxx@47.245.54.240) |
| 19:45:39 | <kronicmage> | wdym by applicative? |
| 19:45:42 | <kronicmage> | aegon |
| 19:46:28 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 19:47:34 | → | Guest372 joins (~xxx@47.245.54.240) |
| 19:48:28 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 19:49:34 | → | Guest372 joins (~xxx@47.245.54.240) |
| 19:50:28 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 19:51:14 | → | tomsmeding joins (~tomsmedin@tomsmeding.com) |
| 19:51:35 | → | Guest372 joins (~xxx@47.245.54.240) |
| 19:52:27 | × | rond_ quits (~rond_@2a01:115f:943:5e00:7fe4:4b4a:851b:ca4d) (Quit: Client closed) |
| 19:52:29 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 19:53:36 | → | Guest372 joins (~xxx@47.245.54.240) |
| 19:54:29 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 19:55:36 | → | Guest372 joins (~xxx@47.245.54.240) |
| 19:56:30 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 19:57:37 | → | Guest372 joins (~xxx@47.245.54.240) |
| 19:58:05 | → | acidjnk_new3 joins (~acidjnk@p200300d0c703cb87897f933eeab9e85f.dip0.t-ipconnect.de) |
| 19:58:30 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 19:59:37 | → | Guest372 joins (~xxx@47.245.54.240) |
| 20:00:30 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 20:01:37 | → | Guest372 joins (~xxx@47.245.54.240) |
| 20:02:30 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 20:02:58 | <aegon> | kronicmage: i want to apply a lens to a value within a monadic context or functor context |
| 20:03:25 | <aegon> | so instead of doing somethign like val >>= \x -> x ^. lens i'm wondering if anyones made a applicative for m so i can do val ^. lens |
| 20:03:34 | → | Tuplanolla joins (~Tuplanoll@91-159-69-50.elisa-laajakaista.fi) |
| 20:03:37 | → | Guest372 joins (~xxx@47.245.54.240) |
| 20:04:06 | <aegon> | well, binds used wrong there :\ but thats the jist |
| 20:04:31 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 20:04:44 | <awpr> | I'm not aware of such a thing existing. I would just use `view l <$> val` |
| 20:04:58 | <awpr> | (since the operator form would require a kinda ugly operator section) |
| 20:05:06 | × | juhp quits (~juhp@128.106.188.220) (Ping timeout: 245 seconds) |
| 20:05:37 | → | Guest372 joins (~xxx@47.245.54.240) |
| 20:05:59 | <janus> | i want to marry Operator Section <3 |
| 20:06:31 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 20:06:53 | <awpr> | I do like operator sections in general, but this case I find just looks better with the alphanumeric name (compare `(^. l) <$> val` |
| 20:06:56 | → | juhp joins (~juhp@128.106.188.220) |
| 20:07:04 | <awpr> | ) |
| 20:07:06 | <janus> | is it ugly because it is followed by infix fmap? so `fmap (^. l) val` is ok? :P |
| 20:07:37 | <awpr> | hmm, even with fmap, I'd still probably write `fmap (view l) val` |
| 20:07:38 | → | Guest372 joins (~xxx@47.245.54.240) |
| 20:07:51 | <geekosaur> | operator glazeover :þ |
| 20:08:13 | <aegon> | awpr: didn't think of using the non operator version |
| 20:08:15 | <aegon> | :t compare |
| 20:08:16 | <lambdabot> | Ord a => a -> a -> Ordering |
| 20:08:18 | <awpr> | so I guess it's just that I prefer a partial application of a well-known alphanumeric-named function over an operator section |
| 20:08:31 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 20:08:34 | <awpr> | ("compare" is just prose in that message) |
| 20:08:50 | <aegon> | :) |
| 20:09:00 | → | rond_ joins (~rond_@2a01:115f:943:5e00:7fe4:4b4a:851b:ca4d) |
| 20:09:09 | <aegon> | what about val <&> (^. l) |
| 20:09:21 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:b5c0:69fb:2ebc:745e) (Remote host closed the connection) |
| 20:09:26 | <janus> | Mrs Perl approves :+1: |
| 20:09:26 | <aegon> | i'm just guessing at that, going to go play around in ghci |
| 20:09:38 | → | Guest372 joins (~xxx@47.245.54.240) |
| 20:10:02 | <awpr> | I think I've concluded that I'd always personally choose `view l` over `(^. l)` (when not immediately applied to another argument) |
| 20:10:32 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 20:10:58 | <janus> | come on, why not just use `flip (<$>) (`(^.)` l)` |
| 20:11:14 | <geekosaur> | have you tried it? |
| 20:11:39 | → | Guest372 joins (~xxx@47.245.54.240) |
| 20:11:59 | <janus> | i seems to be having some kind of problem with my diacretics, must reconfigure my keyboard configuration in nix first. i'll report back next week |
| 20:12:03 | <geekosaur> | (`` syntax is limited, you can't nest it that way) |
| 20:12:14 | <aegon> | yeah i think its clearer too, thanks for the tip, i'm still not used to thinking applicatively over monadicly |
| 20:12:32 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 20:12:46 | <geekosaur> | on the one hand it's probably for the best, on the other imagine being able to `(`(`(...)`)`)` |
| 20:13:08 | <geekosaur> | (then think about how you'd escape the `s) |
| 20:13:22 | <awpr> | needs guillemets |
| 20:13:35 | × | alx741 quits (~alx741@186.178.109.50) (Ping timeout: 264 seconds) |
| 20:13:38 | → | Guest372 joins (~xxx@47.245.54.240) |
| 20:13:40 | <awpr> | (since they can be balanced like parentheses) |
| 20:14:23 | → | ub joins (~Thunderbi@77.119.198.223.wireless.dyn.drei.com) |
| 20:14:32 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 20:14:47 | × | ikex quits (ash@user/ikex) (Ping timeout: 264 seconds) |
| 20:15:17 | × | Midjak quits (~Midjak@82-65-111-221.subs.proxad.net) (Quit: Leaving) |
| 20:15:26 | → | ikex joins (ash@user/ikex) |
| 20:15:39 | → | Guest372 joins (~xxx@47.245.54.240) |
| 20:15:50 | × | mikoto-chan quits (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) (Ping timeout: 260 seconds) |
| 20:16:33 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 20:17:39 | → | Guest372 joins (~xxx@47.245.54.240) |
| 20:18:33 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 20:18:33 | <aegon> | oh man with `view l <$> var >>= \case ...` hlint recommends a super hard to read: `var >>= (\case ...) . view Snapshot` |
| 20:19:08 | <aegon> | er view l |
| 20:19:25 | <geekosaur> | hlolint |
| 20:19:36 | <aegon> | oh man with `view l <$> var >>= \case ...` hlint recommends a super hard to read: `var >>= (\case ...) . view l` imo hlint is wrong here, is it optimizing for some sort of perf thing? |
| 20:19:39 | → | Guest372 joins (~xxx@47.245.54.240) |
| 20:20:30 | <geekosaur> | imo if it is then it should be shot; fix the compiler instead |
| 20:20:33 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 20:20:58 | → | mikoto-chan joins (~mikoto-ch@185.237.102.126) |
| 20:21:39 | → | Guest372 joins (~xxx@47.245.54.240) |
| 20:21:51 | <awpr> | that's a left-associated fmap if I'm reading it correctly |
| 20:22:33 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 20:22:59 | × | Inst quits (~Inst@2601:6c4:4080:3f80:887d:efb8:1cec:d51f) (Remote host closed the connection) |
| 20:23:01 | <aegon> | it doesnt suggest any change for `var <&> (^. l) >>= \case ...` wonder whats going on here / what its trying to hint at |
| 20:23:07 | <awpr> | generally things should be right-associated to avoid re-traversing the whole left structure (same sort of reason you don't left-associate string concatenations) |
| 20:23:16 | → | Inst joins (~Inst@2601:6c4:4080:3f80:84fc:7e49:3098:491f) |
| 20:23:40 | → | Guest372 joins (~xxx@47.245.54.240) |
| 20:23:45 | <awpr> | maybe it just doesn't know about `<&>`? |
| 20:24:01 | <aegon> | sos view l <$> var is left associative but the . view l is right? i need to churn on that |
| 20:24:34 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 20:24:50 | <awpr> | well, `(view l <$> var) >>= f` is left-associated, and `var >>= \x -> f (view x)` is right-associate |
| 20:24:52 | <awpr> | d |
| 20:25:40 | → | Guest372 joins (~xxx@47.245.54.240) |
| 20:26:34 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 20:26:35 | <awpr> | if the monad in question is a list, for example, the left version goes through the whole list to apply `view l`, then goes through that whole list to `concatMap` `f`, while the right version goes through the list just once |
| 20:27:24 | → | alx741 joins (~alx741@186.178.108.23) |
| 20:27:40 | → | Guest372 joins (~xxx@47.245.54.240) |
| 20:28:34 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 20:28:39 | <aegon> | interesting, ok, that makes sense, wow thats a possible perf hit thats very hard to keep in mind for me at the moment |
| 20:29:13 | <aegon> | the monad in question here is IO but i'm glad hlint yelled at me |
| 20:29:23 | → | __monty__ joins (~toonn@user/toonn) |
| 20:29:41 | → | Guest372 joins (~xxx@47.245.54.240) |
| 20:30:24 | → | coot joins (~coot@37.30.49.107.nat.umts.dynamic.t-mobile.pl) |
| 20:30:34 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 20:31:41 | → | Guest372 joins (~xxx@47.245.54.240) |
| 20:32:11 | × | timCF quits (~timCF@m91-129-111-87.cust.tele2.ee) (Ping timeout: 264 seconds) |
| 20:32:35 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 20:33:01 | → | timCF joins (~timCF@m91-129-111-87.cust.tele2.ee) |
| 20:33:23 | × | Inst quits (~Inst@2601:6c4:4080:3f80:84fc:7e49:3098:491f) (Ping timeout: 264 seconds) |
| 20:33:41 | → | Guest372 joins (~xxx@47.245.54.240) |
| 20:34:35 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 20:35:11 | × | coot quits (~coot@37.30.49.107.nat.umts.dynamic.t-mobile.pl) (Ping timeout: 264 seconds) |
| 20:35:41 | → | Guest372 joins (~xxx@47.245.54.240) |
| 20:35:48 | → | Guest3072 joins (~Guest30@eth-west-pareq2-46-193-4-100.wb.wifirst.net) |
| 20:36:35 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 20:37:37 | → | coot joins (~coot@37.30.49.107.nat.umts.dynamic.t-mobile.pl) |
| 20:37:42 | → | Guest372 joins (~xxx@47.245.54.240) |
| 20:38:36 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 20:38:41 | × | reumeth quits (~reumeth@user/reumeth) (Ping timeout: 258 seconds) |
| 20:39:13 | × | ub quits (~Thunderbi@77.119.198.223.wireless.dyn.drei.com) (Quit: ub) |
| 20:39:42 | → | Guest372 joins (~xxx@47.245.54.240) |
| 20:40:36 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 20:41:42 | → | Guest372 joins (~xxx@47.245.54.240) |
| 20:42:20 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:b5c0:69fb:2ebc:745e) |
| 20:42:36 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 20:43:43 | → | Guest372 joins (~xxx@47.245.54.240) |
| 20:44:36 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 20:45:43 | → | Guest372 joins (~xxx@47.245.54.240) |
| 20:46:16 | × | kupi quits (uid212005@id-212005.hampstead.irccloud.com) (Quit: Connection closed for inactivity) |
| 20:46:36 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 20:47:43 | → | Guest372 joins (~xxx@47.245.54.240) |
| 20:48:29 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
| 20:48:37 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 20:49:43 | → | Guest372 joins (~xxx@47.245.54.240) |
| 20:50:37 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 20:50:37 | × | mikoto-chan quits (~mikoto-ch@185.237.102.126) (Read error: Connection reset by peer) |
| 20:51:44 | → | Guest372 joins (~xxx@47.245.54.240) |
| 20:52:37 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 20:53:45 | → | Guest372 joins (~xxx@47.245.54.240) |
| 20:54:38 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 20:55:44 | → | Guest372 joins (~xxx@47.245.54.240) |
| 20:56:38 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 20:57:44 | → | Guest372 joins (~xxx@47.245.54.240) |
| 20:58:38 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 20:59:44 | → | Guest372 joins (~xxx@47.245.54.240) |
| 20:59:55 | → | Cajun joins (~Cajun@user/cajun) |
| 21:00:38 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 21:01:44 | → | Guest372 joins (~xxx@47.245.54.240) |
| 21:02:38 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 21:03:45 | → | Guest372 joins (~xxx@47.245.54.240) |
| 21:04:38 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 21:05:46 | → | Guest372 joins (~xxx@47.245.54.240) |
| 21:06:39 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 21:07:45 | → | Guest372 joins (~xxx@47.245.54.240) |
| 21:08:30 | × | fendor quits (~fendor@178.115.78.81.wireless.dyn.drei.com) (Remote host closed the connection) |
| 21:08:39 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 21:08:43 | <monochrom> | Ah, Bird's Thinking Functionally with Haskell is the one that suffers "right before AMP". |
| 21:09:46 | → | Guest372 joins (~xxx@47.245.54.240) |
| 21:10:39 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 21:10:54 | × | coot quits (~coot@37.30.49.107.nat.umts.dynamic.t-mobile.pl) (Quit: coot) |
| 21:11:46 | → | Guest372 joins (~xxx@47.245.54.240) |
| 21:12:39 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 21:13:46 | → | Guest372 joins (~xxx@47.245.54.240) |
| 21:14:12 | → | lavaman joins (~lavaman@98.38.249.169) |
| 21:14:40 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 21:15:46 | → | Guest372 joins (~xxx@47.245.54.240) |
| 21:16:40 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 21:17:05 | × | __monty__ quits (~toonn@user/toonn) (Quit: leaving) |
| 21:17:46 | → | Guest372 joins (~xxx@47.245.54.240) |
| 21:17:50 | → | Feuermagier joins (~Feuermagi@user/feuermagier) |
| 21:18:40 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 21:19:46 | → | Guest372 joins (~xxx@47.245.54.240) |
| 21:20:40 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 21:21:47 | → | Guest372 joins (~xxx@47.245.54.240) |
| 21:22:12 | × | rond_ quits (~rond_@2a01:115f:943:5e00:7fe4:4b4a:851b:ca4d) (Quit: Client closed) |
| 21:22:25 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 21:22:41 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 21:23:47 | → | Guest372 joins (~xxx@47.245.54.240) |
| 21:24:41 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 21:25:10 | × | gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving) |
| 21:25:48 | → | Guest372 joins (~xxx@47.245.54.240) |
| 21:26:41 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 21:27:23 | × | CiaoSen quits (~Jura@p200300c95730dd002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 264 seconds) |
| 21:27:41 | → | allbery_b joins (~geekosaur@xmonad/geekosaur) |
| 21:27:41 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b))) |
| 21:27:44 | allbery_b | is now known as geekosaur |
| 21:27:48 | → | Guest372 joins (~xxx@47.245.54.240) |
| 21:28:42 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 21:29:48 | → | Guest372 joins (~xxx@47.245.54.240) |
| 21:30:42 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 21:31:40 | × | ubert quits (~Thunderbi@77.119.198.223.wireless.dyn.drei.com) (Ping timeout: 260 seconds) |
| 21:31:49 | → | Guest372 joins (~xxx@47.245.54.240) |
| 21:32:11 | × | myShoggoth quits (~myShoggot@97-120-85-195.ptld.qwest.net) (Ping timeout: 264 seconds) |
| 21:32:42 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 21:33:06 | × | slowButPresent quits (~slowButPr@user/slowbutpresent) (Ping timeout: 260 seconds) |
| 21:33:23 | × | Guest3072 quits (~Guest30@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Quit: Client closed) |
| 21:33:48 | → | Guest372 joins (~xxx@47.245.54.240) |
| 21:34:42 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 21:35:49 | → | Guest372 joins (~xxx@47.245.54.240) |
| 21:36:43 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 21:37:16 | × | wonko quits (~wjc@62.115.229.50) (Ping timeout: 265 seconds) |
| 21:37:49 | → | Guest372 joins (~xxx@47.245.54.240) |
| 21:38:43 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 21:39:15 | → | Guest54 joins (~Guest54@207.151.52.24) |
| 21:39:50 | → | Guest372 joins (~xxx@47.245.54.240) |
| 21:40:43 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 21:41:50 | → | Guest372 joins (~xxx@47.245.54.240) |
| 21:42:44 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 21:43:34 | → | slowButPresent joins (~slowButPr@user/slowbutpresent) |
| 21:43:50 | → | Guest372 joins (~xxx@47.245.54.240) |
| 21:44:44 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 21:45:50 | → | Guest372 joins (~xxx@47.245.54.240) |
| 21:46:44 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 21:47:51 | → | Guest372 joins (~xxx@47.245.54.240) |
| 21:48:44 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 21:49:51 | → | Guest372 joins (~xxx@47.245.54.240) |
| 21:50:44 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 21:51:25 | × | max22- quits (~maxime@2a01cb0883359800acc7df5c88e6f73e.ipv6.abo.wanadoo.fr) (Quit: Leaving) |
| 21:51:51 | → | Guest372 joins (~xxx@47.245.54.240) |
| 21:52:45 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 21:53:51 | → | Guest372 joins (~xxx@47.245.54.240) |
| 21:54:45 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 21:55:36 | × | Guest54 quits (~Guest54@207.151.52.24) (Ping timeout: 256 seconds) |
| 21:55:51 | → | Guest372 joins (~xxx@47.245.54.240) |
| 21:56:45 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 21:56:45 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds) |
| 21:57:52 | → | Guest372 joins (~xxx@47.245.54.240) |
| 21:58:34 | → | myShoggoth joins (~myShoggot@97-120-85-195.ptld.qwest.net) |
| 21:58:45 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 21:59:52 | → | Guest372 joins (~xxx@47.245.54.240) |
| 22:00:34 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 22:00:46 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 22:01:52 | → | Guest372 joins (~xxx@47.245.54.240) |
| 22:02:46 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 22:03:53 | → | Guest372 joins (~xxx@47.245.54.240) |
| 22:04:46 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 22:05:30 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds) |
| 22:05:52 | → | Guest372 joins (~xxx@47.245.54.240) |
| 22:06:08 | <dsal> | Is it possible to have a function that uses a type without declaring the type it uses? I want to make a thing that, for example, verifies round tripping of an enum without having to specify the values since it's a bounded enum already. |
| 22:06:20 | <dsal> | I guess I can use a Proxy. |
| 22:06:46 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 22:07:11 | <monochrom> | Yeah I would use a proxy type. |
| 22:07:33 | <monochrom> | Type application can also be acceptable in simple cases. |
| 22:07:53 | → | Guest372 joins (~xxx@47.245.54.240) |
| 22:08:47 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 22:09:53 | → | Guest372 joins (~xxx@47.245.54.240) |
| 22:10:47 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 22:11:27 | × | Guest28 quits (~Guest28@93-172-116-38.bb.netvision.net.il) (Ping timeout: 256 seconds) |
| 22:11:53 | → | Guest372 joins (~xxx@47.245.54.240) |
| 22:12:46 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 252 seconds) |
| 22:12:47 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 22:13:54 | → | Guest372 joins (~xxx@47.245.54.240) |
| 22:14:27 | × | lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection) |
| 22:14:37 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 22:14:42 | → | lavaman joins (~lavaman@98.38.249.169) |
| 22:14:47 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 22:14:49 | × | lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection) |
| 22:15:54 | → | Guest372 joins (~xxx@47.245.54.240) |
| 22:16:48 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 22:17:54 | → | Guest372 joins (~xxx@47.245.54.240) |
| 22:18:48 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 22:19:54 | → | Guest372 joins (~xxx@47.245.54.240) |
| 22:20:21 | × | pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.3) |
| 22:20:48 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 22:21:18 | × | Null_A quits (~null_a@2601:645:8700:2290:a891:322d:b92c:f184) (Remote host closed the connection) |
| 22:21:23 | → | mestre joins (~mestre@191.177.175.57) |
| 22:21:55 | → | Guest372 joins (~xxx@47.245.54.240) |
| 22:22:49 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 22:23:34 | × | burnsidesLlama quits (~burnsides@dhcp168-036.wadham.ox.ac.uk) (Remote host closed the connection) |
| 22:23:51 | → | brainfreeze joins (~brainfree@2a03:1b20:4:f011::20d) |
| 22:23:55 | → | Guest372 joins (~xxx@47.245.54.240) |
| 22:24:00 | → | burnsidesLlama joins (~burnsides@dhcp168-036.wadham.ox.ac.uk) |
| 22:24:49 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 22:25:55 | → | Guest372 joins (~xxx@47.245.54.240) |
| 22:26:17 | → | Null_A joins (~null_a@2601:645:8700:2290:a891:322d:b92c:f184) |
| 22:26:49 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 22:27:55 | → | Guest372 joins (~xxx@47.245.54.240) |
| 22:28:30 | → | Gurkenglas joins (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) |
| 22:28:49 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 22:28:50 | × | burnsidesLlama quits (~burnsides@dhcp168-036.wadham.ox.ac.uk) (Ping timeout: 260 seconds) |
| 22:29:28 | → | burnsidesLlama joins (~burnsides@dhcp168-036.wadham.ox.ac.uk) |
| 22:29:57 | → | Guest372 joins (~xxx@47.245.54.240) |
| 22:30:50 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 22:31:08 | → | Inst joins (~Inst@2601:6c4:4080:3f80:e12b:5f61:be92:9101) |
| 22:31:32 | <Inst> | oh |
| 22:31:33 | <Inst> | hey guys |
| 22:31:40 | <Inst> | Just want to troll a bit more: |
| 22:31:50 | <Inst> | It turns out I have a friend who's been described as a champion influencer. |
| 22:31:56 | → | Guest372 joins (~xxx@47.245.54.240) |
| 22:32:14 | <Inst> | She's a scanlator as a hobby, meaning she scans manga (japanese comics) / manghwa (korean comics) |
| 22:32:22 | <Inst> | translates it, then publishes the illegal pirates |
| 22:32:30 | <Inst> | it turns out that in some game, #1 |
| 22:32:36 | <Inst> | she managed to recruit 1000 or more players almost singlehandedly |
| 22:32:50 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 22:32:58 | <Inst> | #2, in return for scanlated manga, she was able to use the recruited players to generate the real money equivalent of 16,000 USD |
| 22:33:25 | <Inst> | putting this into a haskell context |
| 22:33:56 | → | Guest372 joins (~xxx@47.245.54.240) |
| 22:33:57 | <Inst> | I'm thinking, even though HF thinks it's currently a bad idea |
| 22:34:09 | <Inst> | to target non-programmers and other low-level developers |
| 22:34:13 | × | NinjaTrappeur quits (~ninja@user/ninjatrappeur) (Ping timeout: 252 seconds) |
| 22:34:50 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 22:35:32 | <monochrom> | I think HF is OK with targetting non-programmers, if I understand Andrew Boardman's Haskell.Love talk correctly. |
| 22:35:56 | → | Guest372 joins (~xxx@47.245.54.240) |
| 22:36:26 | → | NinjaTrappeur joins (~ninja@user/ninjatrappeur) |
| 22:36:37 | <jackdk> | I have had good experience teaching Haskell to first-year university students with no prior programming experience |
| 22:36:50 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 22:37:57 | → | Guest372 joins (~xxx@47.245.54.240) |
| 22:38:50 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 22:39:43 | <monochrom> | Low-level developers is a very different story to be sure. Multiple factors such as low ROI. |
| 22:39:57 | → | Guest372 joins (~xxx@47.245.54.240) |
| 22:40:11 | → | dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net) |
| 22:40:50 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 22:41:27 | × | dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Client Quit) |
| 22:41:48 | <jackdk> | dsal: these days you could also use explicit type applications if that feels better |
| 22:41:57 | → | Guest372 joins (~xxx@47.245.54.240) |
| 22:42:51 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 22:43:54 | × | _bo quits (~bo@217.18.216.247) (Read error: Connection reset by peer) |
| 22:43:57 | → | Guest372 joins (~xxx@47.245.54.240) |
| 22:44:41 | → | cjb joins (~cjbayliss@user/cjb) |
| 22:44:51 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 22:44:54 | × | cjb quits (~cjbayliss@user/cjb) (Client Quit) |
| 22:45:58 | → | Guest372 joins (~xxx@47.245.54.240) |
| 22:46:06 | → | bitmapper joins (uid464869@id-464869.lymington.irccloud.com) |
| 22:46:51 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 22:47:58 | → | Guest372 joins (~xxx@47.245.54.240) |
| 22:48:35 | <Inst> | @monochrom: the problem is the instruction, if experienced developers are bad at grokking haskell, what are the odds that non-haskell programmers would get it? |
| 22:48:35 | <lambdabot> | Unknown command, try @list |
| 22:48:52 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 22:48:54 | <monochrom> | Indeed. |
| 22:49:01 | <Inst> | IMO, there's two issues, #1, the ecosystem (haskell jobs) is not properly developed, but doing a supply side drop (there's tons of coders and they all know haskell) |
| 22:49:10 | <Inst> | might work, although it'd be risky |
| 22:49:21 | <Inst> | #2, the education quality has to be assured beforehand |
| 22:49:35 | <Inst> | if you convert someone to try haskell, and it doesn't stick, you're going to have a much harder time trying to convert them again |
| 22:49:38 | × | mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection) |
| 22:49:38 | <Inst> | but i'm trying to point out |
| 22:49:49 | <monochrom> | If 90-yos are bad at learning a musical instrument, what chance do 9-yos have? Or do they? |
| 22:49:58 | → | Guest372 joins (~xxx@47.245.54.240) |
| 22:50:02 | <Inst> | you can do a supply side drop, although it might not be "avoid success at all costs" |
| 22:50:45 | <Inst> | if you use a guerrilla marketing technique which is Standard Operating Procedure in China |
| 22:50:50 | <Inst> | i.e, use influencers to advertise your language |
| 22:50:52 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 22:51:02 | <Inst> | it's not "avoid success at all costs" because it'll damage Haskell's reputation |
| 22:51:18 | <Inst> | "that time Haskell became popular because someone dumped an advertising budget into Youtube influencers" |
| 22:51:26 | <monochrom> | BTW what's the connection with the champion influecer and scanlating and making 100k? |
| 22:51:39 | <Inst> | I mean she's a good influencer |
| 22:51:56 | <Inst> | she scanlated Manhwa (Korean comics) to generate the equivalent of 16,000 USD in a MMO |
| 22:51:57 | <monochrom> | Hell, what's the connection between those 3 in the first place hahah |
| 22:51:58 | → | Guest372 joins (~xxx@47.245.54.240) |
| 22:52:06 | <yushyin> | /fa Inst |
| 22:52:07 | <Inst> | by using the Manhwa as a lure |
| 22:52:10 | × | NinjaTrappeur quits (~ninja@user/ninjatrappeur) (Ping timeout: 260 seconds) |
| 22:52:14 | <yushyin> | oh, sorry |
| 22:52:36 | × | hendursaga quits (~weechat@user/hendursaga) (Ping timeout: 276 seconds) |
| 22:52:47 | <yushyin> | damn space key |
| 22:52:52 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 22:53:01 | <aegon> | i've been working on a project for ~7 months in haskell now and most of my collegues are low level code enthusiasts from the gaming land (very c++ / lua happy). My experience sharing code and war stories with them about haskell is that they actually really dig it, just don't see a route to using it professionally. I think its more a chicken and egg scenario. IMO a high quality open implementation of |
| 22:53:07 | <aegon> | something that people say "haskell is not good" for would do wonders |
| 22:53:57 | <Inst> | i mean, well, are you saying the supply side is already there? |
| 22:53:59 | → | Guest372 joins (~xxx@47.245.54.240) |
| 22:54:03 | × | meinside quits (uid24933@helmsley.irccloud.com) (Quit: Connection closed for inactivity) |
| 22:54:04 | <monochrom> | Well, IOHK is causing people to think "Haskell is a blockchain language" now. |
| 22:54:50 | <Inst> | by the way |
| 22:54:52 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 22:54:55 | <aegon> | i think the want to work in it is there, the route to that is unclear. I've gotten the most serious conversations about it from linking articles about low level optimization and what it looks like in haskell |
| 22:54:57 | <Inst> | this is 100% doable in Haskell, right? |
| 22:54:59 | <Inst> | The influencer girl |
| 22:55:11 | <Inst> | One way to sell Haskell to her would be to say, automate her scanlation process |
| 22:55:23 | <Inst> | build a Haskell-based framework that can process JPgs / PNGs |
| 22:55:32 | <aegon> | i think something low level folks really want to know is more what does optimizing look like and how painfull is it, they want simpler and more concise / composable things, they just don't want it at the cost of resources |
| 22:55:47 | <Inst> | run text recognition on existing text |
| 22:55:52 | <Inst> | aegon: but it's always at the cost of resources, no? |
| 22:55:59 | → | Guest372 joins (~xxx@47.245.54.240) |
| 22:56:11 | <monochrom> | Oh OK, I see. |
| 22:56:14 | <Inst> | run text recognition on an existing text, rip it off the jpg/png, and input new text |
| 22:56:29 | <Inst> | so she'd have a haskell-based tool for her scanlation hobby |
| 22:56:34 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection) |
| 22:56:37 | <Inst> | and consequently she'd need haskellers to maintain it |
| 22:56:38 | <aegon> | Inst: debatable, it depends on if hte language gives you all the tools ot not cost resources when you don't want to. Like ify ou want to you can hack away at haskells intermediary language and pin memory etc. there are quite a few tools for optimizing haskell out there |
| 22:56:43 | <monochrom> | Does "low-level developer" means they write asm code? Or does it mean they are low in the corporate ladder? |
| 22:56:51 | <monochrom> | Because I thought the latter. |
| 22:56:52 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 22:57:00 | <Inst> | (very c++ / lua happy) |
| 22:57:20 | <aegon> | monochrom: i mean they work on game engines and such all day, trying to sqeeze perf out of consoles with bare bones hardware |
| 22:57:44 | → | wroathe joins (~wroathe@173-160-115-161-Minnesota.hfc.comcastbusiness.net) |
| 22:57:44 | × | wroathe quits (~wroathe@173-160-115-161-Minnesota.hfc.comcastbusiness.net) (Changing host) |
| 22:57:44 | → | wroathe joins (~wroathe@user/wroathe) |
| 22:57:47 | <monochrom> | I guess in the game dev industry the two are equivalent >:) |
| 22:57:52 | × | waleee quits (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 252 seconds) |
| 22:57:59 | → | Guest372 joins (~xxx@47.245.54.240) |
| 22:58:21 | → | geekosaur joins (~geekosaur@xmonad/geekosaur) |
| 22:58:29 | <aegon> | lol |
| 22:58:53 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 22:58:53 | <Inst> | i also sort of wish Android / iOS supported Haskell as compiled code ;_; |
| 22:59:03 | <Inst> | or at least as intermediary code for their VMs |
| 22:59:09 | <Axman6> | Inst: to be perfectly honest, that sounds like an incredibly boring project |
| 22:59:09 | × | MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer) |
| 22:59:32 | <Inst> | Axman6: you mean the autmoating scanlation thing? |
| 22:59:37 | <Inst> | It's boring if you're not the end-user. |
| 22:59:39 | <aegon> | haskell on mobile is scary to me because i don't know how to reason about the rts's garbage collector and power usage |
| 22:59:53 | <monochrom> | I am pessimistic about pitching to game engine tweakers. |
| 22:59:57 | <aegon> | if that were an option i would be concerned about power usage |
| 22:59:59 | → | Guest372 joins (~xxx@47.245.54.240) |
| 23:00:03 | <Axman6> | it sounds like a couple of days od work in bash, no need for haskell |
| 23:00:09 | → | waleee joins (~waleee@h-98-128-228-119.NA.cust.bahnhof.se) |
| 23:00:11 | <monochrom> | I now how to explain Haskell code optimization, both by hand and what GHC does. |
| 23:00:28 | <monochrom> | I'm also pretty sure that after I'm done, the conclusion is "carry on". |
| 23:00:38 | <monochrom> | s/now/know/ |
| 23:00:53 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 23:00:57 | <aegon> | monochrom: heh, what makes you say that. What aspect of the perf stuff. |
| 23:01:20 | <Inst> | I mean there's a reason I'm going initially for a C++ / Haskell combo |
| 23:01:59 | → | Guest372 joins (~xxx@47.245.54.240) |
| 23:02:14 | <monochrom> | Haskell code optimization involves very advanced techniques. |
| 23:02:32 | <Axman6> | I don;t actually think writing well performing Haskell code is that difficult, optimisation is very _different_ to other languages, but people put in a shitload of effort to learn to optimise code in other languages. I don't understand why people think that you shouldn't also spend some time learning how optimisations in haskell work |
| 23:02:37 | <monochrom> | and knowledge |
| 23:02:40 | × | pmk quits (~user@2a02:587:9414:7d03:fb87:7810:40ab:edc0) (Ping timeout: 260 seconds) |
| 23:02:48 | <Inst> | iirc is it valid to dumb it down to "Haskell, as a functional language, is going to have intrinsic performance losses compared to an imperative language"? |
| 23:02:53 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 23:03:07 | <awpr> | no. bash is an imperative language |
| 23:03:15 | <monochrom> | And don't seem to worth learning if one isn't forced to use Haskell. |
| 23:03:16 | <aegon> | i woudl like to read up on more. Yeah these are people who spend hours reading up on lvalue / rvalue semantics in new langauge standards to save a couple cycles |
| 23:03:21 | → | lavaman joins (~lavaman@98.38.249.169) |
| 23:03:31 | <aegon> | i'd think they'd be up to the task |
| 23:03:35 | <Axman6> | the C++ / Haskell combo is working well for Facebook... |
| 23:03:40 | <Inst> | but assembly is imperative |
| 23:03:57 | <Inst> | you're being sardonic, right? |
| 23:04:00 | → | Guest372 joins (~xxx@47.245.54.240) |
| 23:04:03 | <Inst> | given their recent massive service outage |
| 23:04:16 | <Axman6> | Inst: no, that's not a fair description of Haskell's performance |
| 23:04:33 | <Axman6> | No, it was a comment about their Sigma system |
| 23:04:53 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 23:04:56 | <monochrom> | In this case, the sunk cost policy applies. |
| 23:04:58 | <Inst> | ah |
| 23:05:30 | <Axman6> | aegon: yeah exactly, and IMO optimisations in imperative languages are just kind of boring |
| 23:05:31 | → | NinjaTrappeur joins (~ninja@user/ninjatrappeur) |
| 23:05:45 | <monochrom> | Hypothetically if you are starting to write a game engine from scratch now, Haskell and C++ are equally painful, just in different ways. |
| 23:06:00 | → | Guest372 joins (~xxx@47.245.54.240) |
| 23:06:01 | <Inst> | who writes game engines from scratch now? |
| 23:06:10 | <monochrom> | But who actually starts to write a game engine from scratch now? |
| 23:06:13 | <Axman6> | like, I love me some low level code, I keep a copy of Hacker's Delight on hand for a reason, because I like writing that sort of code, but real optimisation comes from a higher level |
| 23:06:20 | <Inst> | iirc they just license an engine and call it a day |
| 23:06:29 | → | kong4ndrew joins (~kong4ndre@199.247.111.247) |
| 23:06:31 | <monochrom> | All the existing game engine tweakers have already finished learning C++ optimizations. |
| 23:06:53 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 23:07:07 | <Inst> | have you seen, like, Astral Chain? |
| 23:07:08 | <geekosaur> | doesn't Cale's company have a Haskell game engine? then again who's going to license it much less learn how to tweak it |
| 23:07:19 | <monochrom> | "carry on" carries no extra cost, that cost is already sunk. "switch to Haskell" carries huge extra costs, this is important even though it's <= C++ sunk cost. |
| 23:07:55 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 260 seconds) |
| 23:07:57 | <Inst> | it's amazing since Astral Chain was originally intended to be multiplatform, but it ended up being a Nintendo Switch exclusive |
| 23:08:00 | → | Guest372 joins (~xxx@47.245.54.240) |
| 23:08:10 | <Inst> | and the Switch is running on mobile hardware |
| 23:08:19 | <Inst> | but it looks incredible |
| 23:08:54 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 23:08:57 | <Inst> | just saying ,the optimizers have gotten really good |
| 23:09:43 | × | betelgeuse quits (~betelgeus@94-225-47-8.access.telenet.be) (Quit: The Lounge - https://thelounge.chat) |
| 23:10:00 | → | Guest372 joins (~xxx@47.245.54.240) |
| 23:10:16 | <aegon> | yeah, a lot of that is that the graphics apis have gotten really flexible, and ify ou know the exact hardware your running on you can do silly things like optimize thread timing and pin threads / spread them out optimally across the given cores |
| 23:10:44 | <Axman6> | Inst: I have to ask, do you have a point to any of this? I feel like you're saying a lot of stuff while not saying very much at all, and "Just want to troll a bit more" is feeling more and more true by the minute. |
| 23:10:54 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 23:10:56 | <aegon> | a lot of work in pushing consoles is staring at cor usages and tweaking |
| 23:12:01 | → | Guest372 joins (~xxx@47.245.54.240) |
| 23:12:54 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 23:13:11 | <aegon> | monochrom: aye, ultimately all of them were more open to it as a langauge that could be used but happy with c++. I want to some day play around with a game engine in hask but the recent findings about run time library loading on windows are a downer. If you have refernce on haskell optimization i'd love to grab em and read through it. I'm workign off of what i've been able to find on the wiki and some blog |
| 23:13:17 | <aegon> | posts |
| 23:13:36 | × | kong4ndrew quits (~kong4ndre@199.247.111.247) (Remote host closed the connection) |
| 23:13:56 | × | Gurkenglas quits (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 265 seconds) |
| 23:14:01 | → | Guest372 joins (~xxx@47.245.54.240) |
| 23:14:04 | <aegon> | also apparently up untill GHC 9 the concurrency loop was using an incorrect api from the kernel and messing with the scheduler / greedy looping? |
| 23:14:19 | <Inst> | i mean the point re astral chain is that it's a heavily optimized game that uses certain tweaks to be able to run on mobile hardware, but taking a 10-20% penalty in haskell might make it inoperable |
| 23:14:21 | <aegon> | i forget the talk but i think it was sometime recent |
| 23:14:55 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 23:15:03 | <aegon> | Inst: i'm not sure haskell woudl incur a 10 - 20% penalty given what i've read and how much of that is actually just shipping things off to the gpu / apu |
| 23:15:14 | <Inst> | it already has framerate drops on existing hardware, although it's also an example insofar as switch devs typically make stylistic choices in order to avoid taxing the tegra x1 |
| 23:15:32 | <Axman6> | I've never considered making games in Haskell, it doesn't seem like a niche it would be well suited to, making other real world apps makes much more sense. |
| 23:16:01 | → | Guest372 joins (~xxx@47.245.54.240) |
| 23:16:18 | → | [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470) |
| 23:16:38 | <sm> | lots of people have though, #haskell-game:matrix.org / #haskell-game:libera.chat is where they hang out |
| 23:16:50 | <Axman6> | the gaming world has found their local minima with C++ (and really, pushing everything to the GPU). I can't see what advantages there would be persuing that given the amount of money invested in the games world already |
| 23:16:55 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 23:17:05 | <aegon> | Inst: a lot of times frame hiccups are caused by memory allocation /deallocation or reading from disk more so than cpu throughput, i'm not sure haskell would be better or worse w.r.t. |
| 23:17:39 | <Axman6> | yeah absolutely, not saying it can't be done, but the fact that Haskell isn't (currently) well suited to that domain doesn't make it not a good choice of language for gettingh real work done. It'd been paying my bills doing that for like 7 years, so something's working out |
| 23:18:02 | → | Guest372 joins (~xxx@47.245.54.240) |
| 23:18:37 | <Inst> | also given that virtually everyone's already running off an engine, and everything else is just a mod to an engine, would haskell actually be useful since development and testing times wouldn't necessarily be that big a part of total development? |
| 23:18:49 | <Inst> | they spend a lot of time and resources on graphical assets, music, plots, etc |
| 23:18:55 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 23:19:09 | <aegon> | i'm just a haskell enthusiast from the gaming world, I want to try pushing it into that niche for fun. c++20 concepts might change my mind but i'm tired of pushing things in that world from a c++ perspective, its like infinate boiler plate thats inflexible no matter what you do |
| 23:19:09 | <Inst> | total development -> add resource expenditures |
| 23:19:10 | <Cale> | geekosaur: It's not really in a state where it would be licenseable at the moment... and it's full of arrow-y FRP, which we'd probably want to rewrite to use Reflex if we were resuscitating it today. |
| 23:20:02 | → | Guest372 joins (~xxx@47.245.54.240) |
| 23:20:15 | <Axman6> | Can someone do something about Guest372? |
| 23:20:36 | <Axman6> | just realised every second line of my log is them joining or parting |
| 23:20:40 | <Inst> | aegon: maybe if someone needs a completely different engine, there might be a chance to get haskell in there |
| 23:20:53 | <aegon> | Axman6: lol, connection woes? |
| 23:20:55 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 23:21:09 | <sm> | I think Zig is more likely the next big thing for games, https://news.ycombinator.com/item?id=28897469 |
| 23:21:17 | → | hendursaga joins (~weechat@user/hendursaga) |
| 23:21:21 | <Inst> | alternate possibility: they're on mobile internet |
| 23:21:40 | <Inst> | and they're driving in and out of a tunnel, say, in Italy or something |
| 23:21:59 | <Inst> | oh, cool |
| 23:22:02 | <Inst> | i just checked the IP out |
| 23:22:03 | → | Guest372 joins (~xxx@47.245.54.240) |
| 23:22:47 | × | peterhil quits (~peterhil@dsl-hkibng32-54fb56-2.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 23:22:56 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 23:23:08 | → | peterhil joins (~peterhil@dsl-hkibng32-54fb56-2.dhcp.inet.fi) |
| 23:23:12 | <sm> | so here's a piece of haskell-related trivia: if you're using Show/Read to serialise/deserialise, you can use pretty-show to make a more human readable format, and still read by just stripping the newlines |
| 23:23:42 | <Inst> | is it considered rude to point out guest372's ip? |
| 23:24:02 | → | Guest372 joins (~xxx@47.245.54.240) |
| 23:24:04 | <sm> | usually a bit invasive and off topic Inst, yes |
| 23:24:19 | <Axman6> | and we can all see it if we want to |
| 23:24:20 | × | Tuplanolla quits (~Tuplanoll@91-159-69-50.elisa-laajakaista.fi) (Quit: Leaving.) |
| 23:24:24 | <aegon> | also its not hidden in irc, i get a message with it everytime they leave or go |
| 23:24:27 | <Inst> | no, but where the IP resolves to |
| 23:24:29 | <davean> | Inst: probably considered generally passive agressive to do it indirectly. |
| 23:24:39 | <Inst> | fine, it's an alibaba ip |
| 23:24:56 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 23:25:08 | <Inst> | then again, alibaba has cloud services so it might have nothing to do with the actual firm |
| 23:25:31 | <aegon> | yeah I'd feel uncomfortable if someone started discussing my geolocation even though its out there by default |
| 23:25:45 | <davean> | Especially being so weird about it |
| 23:25:50 | <davean> | instead of just saying what they want to get at |
| 23:26:02 | → | Guest372 joins (~xxx@47.245.54.240) |
| 23:26:04 | <davean> | like clearly Inst is uncomfortable with what they're thinking, which is super suspicious |
| 23:26:07 | × | Null_A quits (~null_a@2601:645:8700:2290:a891:322d:b92c:f184) (Remote host closed the connection) |
| 23:26:10 | <sm> | so can we talk about Haskell again |
| 23:26:15 | <davean> | Please |
| 23:26:20 | <Axman6> | yeah |
| 23:26:55 | <Inst> | davean: it's cloud, but I just thought it would have been cool if Alibaba programmers were expressing an interest in Haskell |
| 23:26:56 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 23:27:02 | <sm> | Can Haskell Be Marketed To Beginners As A Better Python |
| 23:27:03 | <Axman6> | hey anyone want to review a PR on my package amazonka-s3-streaming? it's been mostly rewritten because it was honestly absolutely awful initally https://github.com/axman6/amazonka-s3-streaming/pull/25 |
| 23:27:44 | <sm> | also, when GHC 9.2! |
| 23:27:53 | <davean> | sm: Oh man |
| 23:27:55 | <davean> | sm: uh about that |
| 23:28:03 | → | Guest372 joins (~xxx@47.245.54.240) |
| 23:28:04 | <Axman6> | sm: yes! https://www.youtube.com/watch?v=BvECNQRrjCY |
| 23:28:06 | <davean> | WTF knows |
| 23:28:21 | <Axman6> | GHC 9.2???? |
| 23:28:25 | <aegon> | sm: pythoners don't know what types are |
| 23:28:34 | aegon | let my bias out |
| 23:28:47 | <aegon> | i worked in it for 6 years in the web world and its maddening |
| 23:28:47 | <davean> | Axman6: Yah, its a bit cursed with fixes ATM |
| 23:28:57 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 23:29:08 | <aegon> | loose dicts everywhere |
| 23:29:27 | <Axman6> | I've been translating a python project into HAskell, they've gone all in on using the python typing stuff, makes the job a hell of a lot easier |
| 23:29:42 | <sm> | nice |
| 23:29:59 | <Axman6> | (it's code from Microsoft that's pretty academic so I'm not too surprised) |
| 23:30:03 | <aegon> | thats rare imo, i have yet to see a python project at a company attempt types |
| 23:30:03 | → | Guest372 joins (~xxx@47.245.54.240) |
| 23:30:11 | <Axman6> | loose dicts sink ships |
| 23:30:23 | <Inst> | lol ax, sorry, i'll stop annoying you guys |
| 23:30:34 | <Inst> | nice video |
| 23:30:48 | <Axman6> | I think this has been using types from the outset, and it feels fairly haskellish a lot of the time. deciding when something should be a typeclass is a bit of a pain |
| 23:30:57 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 23:30:59 | <davean> | aegon: Do the python programmers you know not write type systems? |
| 23:31:21 | <monochrom> | "Inside every Haskell discussion is a Python discussion that tries to get out" >:) |
| 23:31:24 | <davean> | aegon: you know types are required for some of the accelerated python stuff? |
| 23:31:36 | <davean> | aegon: several companies I know use the python-to-machine-code compilation stuff |
| 23:31:49 | <aegon> | davean: heallll no. its funcs that take dicts all the way down. |
| 23:32:03 | → | Guest372 joins (~xxx@47.245.54.240) |
| 23:32:13 | <davean> | I mean thats the language semantics sure - but that deosn't mean the dicts aren't nominal structures |
| 23:32:22 | <aegon> | but i jumped from web land to game / graphics land ~4-ish years ago and have only ever gone back to python to play with machine learning so I'm probably out of date there |
| 23:32:37 | <davean> | aegon: yah I'm talking web python here |
| 23:32:40 | <aegon> | and most the companies i interact with are now using node / typescript for web stuff |
| 23:32:48 | <Axman6> | I feel like every haskeller who comes up against criticism from pythonisters should have that video on speed dial |
| 23:32:57 | <davean> | aegon: honestly its the web where I've seen python need the performance to get compiled with types |
| 23:32:57 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 23:33:32 | <davean> | Things like science and machine learning and data analysis are all on like numpy and scipy that have C backends already |
| 23:33:45 | <davean> | its the business logic stuff thats slow and needs direct perforamnce improvements |
| 23:34:04 | → | Guest372 joins (~xxx@47.245.54.240) |
| 23:34:10 | <davean> | anyway, still not Haskell, but at least closer :) |
| 23:34:57 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 23:35:54 | <aegon> | roger. I hope i don't hav to python again but it wouldn't be the end of the world. the type system last time i used it felt about on par with typescripts stuff. I didn't know they were using it to inform compilation anywhere |
| 23:36:04 | → | Guest372 joins (~xxx@47.245.54.240) |
| 23:36:54 | <aegon> | i've been eager to try my hand at optimizing some haskell after reading up on it but haven't come across any place where its needed yet. monochrom do have a good toy project idea that will put in c-- land? :D or other resources on optimization |
| 23:36:57 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 23:37:15 | <aegon> | i guess i should say optimizing GHC |
| 23:37:18 | <davean> | aegon: oh optimizing Haskell is fun! |
| 23:37:28 | <monochrom> | I don't. |
| 23:37:39 | <davean> | I did a talk on that almost a year ago now |
| 23:38:04 | → | Guest372 joins (~xxx@47.245.54.240) |
| 23:38:06 | <monochrom> | But look for "fusion" papers and SPJ's "core" talks. |
| 23:38:33 | <monochrom> | "core" referring to the intermediate language in GHC. |
| 23:38:58 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 23:39:32 | <monochrom> | SPJ's "core" talks don't just teach you it, they also show you an optimization pass that interested SPJ at the time of the talk. |
| 23:40:04 | → | Guest372 joins (~xxx@47.245.54.240) |
| 23:40:21 | <davean> | aegon: what sort of optimizations are you interested in doing? |
| 23:40:58 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 23:41:18 | <davean> | Are you interested in optizing Haskell libraries, programs, GHC specificly, or the code GHC produces in general (Or something I've missed as an option) |
| 23:41:38 | <aegon> | monochrom: awesome, collecting links based on those criteria |
| 23:42:05 | → | Guest372 joins (~xxx@47.245.54.240) |
| 23:42:58 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 23:43:36 | <aegon> | davean: i want to have more experience optimizing memory usage and the code ghc produces. Get a better feel for reasoning about how nested recursion or iterating over a list is going ot actually play out in core land and if it doesen't remove the complexity i expect it to, where to poke or look for in the source |
| 23:43:38 | → | natechan joins (~nate@108-233-125-227.lightspeed.sntcca.sbcglobal.net) |
| 23:44:05 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 260 seconds) |
| 23:44:06 | → | Guest372 joins (~xxx@47.245.54.240) |
| 23:44:11 | <davean> | Ok so specific programs (or maybe libraries) |
| 23:44:13 | × | jgeerds quits (~jgeerds@55d4da80.access.ecotel.net) (Ping timeout: 258 seconds) |
| 23:44:26 | <aegon> | i'm writing haskell right now as if its going to take everything up into lambda calculus land and distill it into the best iterative set of instructions possible but i know thats a pretty brittle / bad assumption |
| 23:44:59 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 23:45:20 | → | MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com) |
| 23:45:27 | <aegon> | I've read up on fusion, inlining pragmas, the stages of compilation but just have no reasonable experince with hacking at any of it. The stuff i've written so far performs well enough which means GHC is great :D because i'm not being particularly careful |
| 23:46:05 | → | Guest372 joins (~xxx@47.245.54.240) |
| 23:46:14 | <davean> | yah usually GHC compiles Haskell code well, even though it doesn't even try that hard |
| 23:46:54 | <aegon> | but I'm also mainly processing lazy bytestrings for the "work" of the application. I should probably be forming everything as pipes or with conduit but when i started those were super scary libraries |
| 23:46:54 | <sm> | Axman6: I have now watched your video and understand, that's great :) |
| 23:46:59 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 23:47:11 | <sm> | this new language looks a bit verbose, but powerful |
| 23:47:13 | <davean> | aegon: oh but machines is so much more fun :) |
| 23:47:45 | <Axman6> | verbosity gives the ~compiler~ interpreter more options for optimisation |
| 23:48:01 | <awpr> | lazy bytestrings get a lot of undeserved hate because they get conflated with lazy IO returning lazy bytestrings |
| 23:48:05 | → | Guest372 joins (~xxx@47.245.54.240) |
| 23:48:13 | <monochrom> | I like the machines package too. |
| 23:48:19 | <monochrom> | My only complain is: |
| 23:48:23 | × | akspecs__ quits (~akspecs@user/akspecs) (Ping timeout: 264 seconds) |
| 23:48:26 | <monochrom> | Data.Machine and Control.Lens |
| 23:48:39 | <monochrom> | Does anyone see the oxymorons I see? |
| 23:48:50 | <monochrom> | Why is it not Control.Machine and Data.Lens? |
| 23:48:50 | <geekosaur> | that ship sank years ago :( |
| 23:48:56 | <davean> | monochrom: Oh I see it, but I just read them as different jokes |
| 23:48:57 | <awpr> | at this point `Data.` is basically the `.com` of Haskell module names |
| 23:48:59 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 23:49:18 | <davean> | I really just need to figure out my selector transformer semantics |
| 23:49:21 | × | renzhi quits (~xp@2607:fa49:6500:b100::6e7f) (Quit: WeeChat 2.3) |
| 23:49:21 | <monochrom> | Both Data. and Control. are .com |
| 23:49:24 | <davean> | So I can publish that package :( |
| 23:49:33 | <davean> | instead of just having a bunch of non-composible transformers |
| 23:49:39 | <monochrom> | Hell, even better: |
| 23:50:02 | <awpr> | `Com.Kmett.Lens` go full Java style |
| 23:50:05 | → | Guest372 joins (~xxx@47.245.54.240) |
| 23:50:08 | <davean> | I'm actually sad "Control.Lens" wasn't just "Lens" |
| 23:50:13 | <geekosaur> | Control is a misnomer because your data *is* control structures |
| 23:50:25 | <monochrom> | (|Data> + |Control>)/sqrt2 = (|.com> + |.org|)/sqrt2 |
| 23:50:59 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 23:51:39 | <geekosaur> | and of course everything is data, so we reach ==davean |
| 23:52:03 | <geekosaur> | well, or codata |
| 23:52:06 | → | Guest372 joins (~xxx@47.245.54.240) |
| 23:53:00 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 23:53:27 | <aegon> | Axman6: python 5 looks dope |
| 23:54:06 | → | Guest372 joins (~xxx@47.245.54.240) |
| 23:55:00 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 23:56:06 | → | Guest372 joins (~xxx@47.245.54.240) |
| 23:56:56 | → | acidjnk_new joins (~acidjnk@p200300d0c703cb932154b917507392a6.dip0.t-ipconnect.de) |
| 23:57:00 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 23:58:06 | → | Guest372 joins (~xxx@47.245.54.240) |
| 23:59:00 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 23:59:39 | <dolio> | They're on 5 now? I thought 3 was still controversial. |
All times are in UTC on 2021-10-21.