Logs: freenode/#haskell
| 2020-10-06 13:09:55 | <kuribas> | ski: clojure is trying to be the cool kid, but adopting part of the new developments (purity), and completly trashing the rest (static types). |
| 2020-10-06 13:10:32 | <dminuoso> | frdg: In fact, completely unlimited sets lead to Russels Paradox! |
| 2020-10-06 13:10:39 | <kuribas> | ski: it's also a rather inefficient and clumsy approach to leverage the JVM. |
| 2020-10-06 13:11:30 | <ski> | frdg : the problem is that (due to the influence of Zermelo-Fraenkel set theory), math literature tends to not talk about the distinction between subsets (aka material sets), and sets/types (aka structural sets) .. even though, imho, it's a distinction that's implicitly present, very often |
| 2020-10-06 13:11:48 | <quazimod1> | ski: CL is like a perfect vision of beauty has had that 'the fly' thing done to it |
| 2020-10-06 13:12:11 | <ski> | quazimod1 : .. yea, i tend to lean more to the Scheme side |
| 2020-10-06 13:12:20 | <quazimod1> | ever seen CLOS |
| 2020-10-06 13:12:25 | <quazimod1> | you _never_ need CLOS |
| 2020-10-06 13:12:29 | <frdg> | ski: ok this is nice to know |
| 2020-10-06 13:12:33 | <dminuoso> | My opinion is, if I wanted to drive a startup, I wouldn't pick a language that I had to learn first, especially if that language was so exotic, that I couldn't reasonably start to become productive in 2 weeks. |
| 2020-10-06 13:12:40 | <quazimod1> | it's okay, great to read about it just to see how else you could do OOP |
| 2020-10-06 13:12:59 | <quazimod1> | instrumented multiple inheritance. Yes please, sign me up. I'll take some flagellation too |
| 2020-10-06 13:13:22 | <quazimod1> | dminuoso: i'm not worried about that, i'm a consulting tech lead, that's all i do |
| 2020-10-06 13:13:28 | ski | . o O ( "Interface-passing style" by Fare (François-René Rideau) in 2010-02-17 at <https://fare.livejournal.com/155094.html> ) |
| 2020-10-06 13:13:28 | <kuribas> | CL was made to bring order in the chaos of all the different lisps, but without rewriting the language. Scheme was made to rewrite the language, and make it small, elegant and consistent. |
| 2020-10-06 13:13:34 | <dminuoso> | Consulting on a language youd ont even know. |
| 2020-10-06 13:13:38 | <dminuoso> | Not sure whether that its better. |
| 2020-10-06 13:13:40 | <dminuoso> | :) |
| 2020-10-06 13:13:45 | <quazimod1> | dminuoso: getting paid a goddamn lot to do it too :P |
| 2020-10-06 13:13:53 | <quazimod1> | hey man all my customers are happy i make shit happen |
| 2020-10-06 13:13:57 | <dminuoso> | Maybe I should switch jobs |
| 2020-10-06 13:14:09 | <dminuoso> | I could do COBOL consulting perhaps. |
| 2020-10-06 13:14:17 | <quazimod1> | could probably make good money there too |
| 2020-10-06 13:14:22 | <quazimod1> | i know that the banks are having a hard time |
| 2020-10-06 13:14:23 | <kuribas> | quazimod1: cool, then you can start consulting on haskell? |
| 2020-10-06 13:14:35 | <quazimod1> | kuribas: if I took it seriously, yeah |
| 2020-10-06 13:14:40 | <dminuoso> | Didn't Facebook just kick off some artificial intelligence project aimed to rewrite cobol in traditional languages? |
| 2020-10-06 13:14:42 | <ski> | that "Interface-passing style" is more or less using type classes (sans the uniqueness of instance), or rather, the explicit dictionary-passing implementation of it. (in a Lisp context) |
| 2020-10-06 13:14:43 | <quazimod1> | i wouldn't shy away from it |
| 2020-10-06 13:14:53 | <dminuoso> | frdg: Also, consider that `Set a` has an additional limitation in that it needs to satisfy a `Ord a` constraint (well not the type, but almost all its functions) |
| 2020-10-06 13:15:14 | <quazimod1> | i know i'd be studying my ass off to learn & understand it, and I don't lie to my clients about my understanding of something |
| 2020-10-06 13:16:21 | <ski> | kuribas : how does Clojure fare with STM ? i think i've heard they mentioned at the same time. and do you have any mutability (not counting if they're separated from the rest of the code like with `IORef' in Haskell. yes, that can be done, without static types) ? |
| 2020-10-06 13:16:36 | <dminuoso> | frdg: So that alone mandates the set be uniform, so comparisons even work. |
| 2020-10-06 13:16:41 | <quazimod1> | man 99% of my income is because, outside of IRC tomfoolery, I communicate pretty well and expect my staff to communicate pretty well too, you'd be surprised how well a venture can go with pretty meh commodity devs who are communicating with each other & the stake holders |
| 2020-10-06 13:16:44 | <dminuoso> | Without this, we couldn't have a performant (and thus useful) implementation |
| 2020-10-06 13:17:04 | <kuribas> | ski: I haven't done anything with concurrency in clojure... |
| 2020-10-06 13:17:43 | <frdg> | dminuoso: So what we have in haskell is `uniform sets`? |
| 2020-10-06 13:18:24 | <dminuoso> | or "homogenous" rather. yeah |
| 2020-10-06 13:18:30 | <kuribas> | ski: and yes, clojure has mutability, as it can access java objects. But most clojure datatypes are immutable. |
| 2020-10-06 13:18:35 | <ski> | frdg : it doesn't happen, for the same reason as in programming. you need to know how to use the data as well. for a list in Haskell, if you have no idea whether an element is an integer, or a string, or another list, you can't do much useful, except passing them on to someone who knows. and even if you can query (like with dynamic typing), this tends to be clumsy, not lead to well-structured developments |
| 2020-10-06 13:19:07 | <frdg> | ok I understand |
| 2020-10-06 13:19:09 | → | cr3 joins (~cr3@192-222-143-195.qc.cable.ebox.net) |
| 2020-10-06 13:20:08 | × | toorevitimirp quits (~tooreviti@117.182.180.245) (Ping timeout: 256 seconds) |
| 2020-10-06 13:20:51 | <sm[m]> | quazimod1: do you hire only good communicators, or do you channel client communications through a few senior people ? |
| 2020-10-06 13:21:03 | <ski> | kuribas : ok. i take that the mutability isn't "warded off / contained", or explicitly marked, with some kind of effect stuff ("tainting" ?), then |
| 2020-10-06 13:21:11 | <kuribas> | ski: nope |
| 2020-10-06 13:21:25 | <quazimod1> | sm[m]: my rule of thumb is to hire good natured & helpful seniors |
| 2020-10-06 13:22:01 | <maerwald> | quazimod1: many ppl hire for "IQ" in tech and then get confused why their team is an unmanagable mess :) |
| 2020-10-06 13:22:04 | <quazimod1> | client comms are tricky sometimes, ofc, especially when you've got arrogant fuckheads on the other side, frequntly happens |
| 2020-10-06 13:22:29 | <quazimod1> | maerwald: dont get me started on 'smart' people |
| 2020-10-06 13:22:33 | <quazimod1> | fucking worthless |
| 2020-10-06 13:22:36 | <ski> | frdg : of course, you can have more exotic things, like a list where the first element is a number, the next is a pair of numbers, the next is a pair of pair of numbers, &c. .. to express many such, you need dependent types (although sometimes one can encode them without) |
| 2020-10-06 13:22:52 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 2020-10-06 13:23:13 | <sm[m]> | yes please don't maerwald :) |
| 2020-10-06 13:23:18 | <maerwald> | :p |
| 2020-10-06 13:23:22 | <dminuoso> | ski: Well, we can still have such things with intermediate data types in Haskell. |
| 2020-10-06 13:23:36 | <quazimod1> | too late i'm starting |
| 2020-10-06 13:23:40 | <ski> | frdg : but generally, you do have some kind of "order" that allows you to know what kind of value you're dealing with, without having to query (at least if you do express some amount of "querying" in terms of "tags", that is sum types) |
| 2020-10-06 13:23:52 | <sm[m]> | quazimod1: interesting but probably |
| 2020-10-06 13:23:52 | <quazimod1> | i have a guy doing ML for us... when he gets "bored" he "starts new projects" |
| 2020-10-06 13:24:00 | <sm[m]> | OT here |
| 2020-10-06 13:24:15 | <maerwald> | yeah, we have OT channels for that |
| 2020-10-06 13:24:26 | <quazimod1> | he's a vestigial remnant of a company that we work with. Soon to be snipped off |
| 2020-10-06 13:24:34 | <quazimod1> | what's OT |
| 2020-10-06 13:24:35 | <ski> | dminuoso : hm, elaborate on what you mean ? |
| 2020-10-06 13:24:52 | <maerwald> | and make sure you don't disclose names :p |
| 2020-10-06 13:24:57 | <quazimod1> | oh right, yeah n/p i'll let it go. Back to haskell. This white paper is hard to read :/ |
| 2020-10-06 13:25:00 | <sm[m]> | off topic , at least at this busy time. |
| 2020-10-06 13:25:21 | <sm[m]> | especially if it's a rant :) |
| 2020-10-06 13:25:29 | <ski> | quazimod1 : ML as in SML,OCaml or F# ? or Machine Language ? or Machine Learning ? |
| 2020-10-06 13:25:37 | <quazimod1> | ski: machine learning |
| 2020-10-06 13:25:40 | <maerwald> | sm[m]: we barely rant here, do we? :angelface: |
| 2020-10-06 13:25:51 | → | toorevitimirp joins (~tooreviti@117.182.180.245) |
| 2020-10-06 13:26:01 | <dminuoso> | ski: Well the particular example you named could just be encoded by `data P = S Int | P P P deriving (Eq, Ord)`, and then you can have `Set P` just fine. |
| 2020-10-06 13:26:14 | <dminuoso> | Oh wait |
| 2020-10-06 13:26:17 | <dminuoso> | I see what you mean |
| 2020-10-06 13:26:32 | × | GyroW quits (~GyroW@unaffiliated/gyrow) (Remote host closed the connection) |
| 2020-10-06 13:26:44 | <sm[m]> | maerwald not too much really :) |
| 2020-10-06 13:26:51 | → | GyroW joins (~GyroW@ptr-48ujrfd1ztq5fjywfw3.18120a2.ip6.access.telenet.be) |
| 2020-10-06 13:26:51 | × | GyroW quits (~GyroW@ptr-48ujrfd1ztq5fjywfw3.18120a2.ip6.access.telenet.be) (Changing host) |
| 2020-10-06 13:26:51 | → | GyroW joins (~GyroW@unaffiliated/gyrow) |
| 2020-10-06 13:27:09 | × | conal quits (~conal@64.71.133.70) (Ping timeout: 256 seconds) |
| 2020-10-06 13:27:15 | <ski> | dminuoso : no, the example i had was more like `data DoublingList a = Nil | Cons a (DoublingList (a,a))' (a "non-regular data type", since it's not passing the same type parameters in the recursive call) |
| 2020-10-06 13:27:20 | → | AlterEgo- joins (~ladew@124-198-158-163.dynamic.caiway.nl) |
| 2020-10-06 13:27:22 | <dminuoso> | Right |
| 2020-10-06 13:27:37 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 258 seconds) |
| 2020-10-06 13:28:38 | <quazimod1> | , where 7! |
| 2020-10-06 13:28:47 | <quazimod1> | ignore |
| 2020-10-06 13:29:19 | <ski> | then, you can throw a `Maybe', like `data BinNumeral a = Nil | Cons (Maybe a) (BinNumeral (a,a))' and now you have a collection of arbitrary (finite) number of elements of `a', represented as a "binary numeral" "sequence of `1's and `0's". each `1' being a perfectly-balanced binary tree of size `2^n', where `n' is the index of the bit |
| 2020-10-06 13:29:22 | <quazimod1> | oh man so out of my depth, ->* is the reflexive transitive closure of -> |
| 2020-10-06 13:29:25 | <quazimod1> | what the hell does that mean |
| 2020-10-06 13:29:31 | → | conal joins (~conal@66.115.157.135) |
| 2020-10-06 13:29:41 | <ski> | quazimod1 : it means that `->*' is zero or more `->' steps |
| 2020-10-06 13:29:50 | × | jonatanb quits (~jonatanb@79.184.190.239.ipv4.supernova.orange.pl) (Read error: Connection reset by peer) |
| 2020-10-06 13:30:15 | <quazimod1> | lol |
| 2020-10-06 13:30:17 | <quazimod1> | nice |
| 2020-10-06 13:30:23 | → | jonatanb joins (~jonatanb@79.184.190.239.ipv4.supernova.orange.pl) |
| 2020-10-06 13:30:33 | <ski> | quazimod1 : so, for all `x', you have `x ->* x' (zero steps). and if you have `x -> y' and `y ->* z', then you have `x ->* z' (you can "add in" one more step) |
| 2020-10-06 13:30:41 | <sm[m]> | quazimod1: tip: easy to get lost in CS when learning haskell, common mistake is thinking it's the only way to get productive - it's not |
| 2020-10-06 13:31:03 | <quazimod1> | sm[m]: its the best way to not be productive, in fact you need none of this to ever be productive :P |
All times are in UTC.