Logs on 2021-09-15 (liberachat/#haskell)
| 00:14:50 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 00:15:03 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 00:15:49 | <orzo> | A coworker put nearly duplicate versions of all the types in our code for the purposes of having show instances for debugging |
| 00:16:14 | <orzo> | this is to work around the lack of a show for thinks like (TVar Int) or (IO String) |
| 00:16:48 | <orzo> | But it's annoying in obvious ways |
| 00:17:01 | <monochrom> | What would be duplicate versions of those? newtype T = MkT (TVar Int) ? |
| 00:17:03 | <orzo> | Is there some more elegant way to display -anything- for debugging? |
| 00:17:09 | <awpr> | `newtype Hide a = Hide a; instance Show (Hide a) where showsPrec _ _ = <hidden>` |
| 00:17:41 | <orzo> | awpr, that's the idea |
| 00:17:56 | <orzo> | but I don't want to replace fields in records with Hide |
| 00:17:59 | <orzo> | just for debugging |
| 00:18:25 | <awpr> | that's the best I've seen. that or manually write show instances that don't include the unshowable fields |
| 00:18:30 | <orzo> | we left the field types alone and made duplicates with types that have "hiddien" style show instances |
| 00:19:33 | <orzo> | hm |
| 00:20:23 | × | aegon quits (~mike@174.127.249.180) (Remote host closed the connection) |
| 00:20:23 | × | chisui quits (~chisui@200116b86890460075c9988d490fe8d7.dip.versatel-1u1.de) (Ping timeout: 256 seconds) |
| 00:21:15 | <monochrom> | I would create "class NoShow a where noshow :: a -> String", "instance NoShow (TVar a) where noshow _ = "TVar"", similarly for IO a. |
| 00:21:54 | <monochrom> | Optionally, instance Typeable a => NoShow (TVar a) where noshow x = "TVar " ++ show (typeOf x) |
| 00:22:44 | <monochrom> | And then for your "data MyType = Make (TVar Int) (IO String)", I would handwrite a Show instance that uses noshow for the no-show fields. |
| 00:23:16 | × | tremon quits (~tremon@217-63-61-89.cable.dynamic.v4.ziggo.nl) (Quit: getting boxed in) |
| 00:23:25 | → | MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com) |
| 00:25:26 | × | pony quits (~ed@101.100.135.26) (Quit: WeeChat 2.8) |
| 00:25:35 | <orzo> | thanks |
| 00:27:37 | × | proofofkeags_ quits (~proofofke@205.209.28.54) (Ping timeout: 265 seconds) |
| 00:30:58 | <monochrom> | Actually, TVar a is probably already Typeable whenever a is, so noshow can be simply "noshow x = show (typeOf x)" |
| 00:31:41 | <monochrom> | But I would still need to say "instance ... => NoShow (TVar a)" because I cannot say "instance ... => NoShow a". |
| 00:33:10 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds) |
| 00:33:14 | × | thyriaen quits (~thyriaen@dynamic-078-055-255-174.78.55.pool.telefonica.de) (Remote host closed the connection) |
| 00:33:16 | <orzo> | we could just put a Typeable constraint on awpr's Show instance to Hide |
| 00:33:58 | <orzo> | maybe rename it as ShowType or something |
| 00:34:17 | → | System123 joins (~System123@203-134-35-213.sta.estpak.ee) |
| 00:35:08 | <orzo> | i don't like the idea of changing the field types, but maybe its beter than the alternatives |
| 00:37:54 | <monochrom> | There is still the quirky solution of making your orphaned instances of "instance Typeable a => Show (TVar a)" |
| 00:38:16 | <monochrom> | Whether it's saner or crazier depends on the rest of your code base and your team consensus. |
| 00:38:46 | <awpr> | seems like there should be a way to tell GHC to use `via ShowType (TVar a)` for a single field when deriving `Show` |
| 00:38:51 | × | System123 quits (~System123@203-134-35-213.sta.estpak.ee) (Ping timeout: 268 seconds) |
| 00:39:51 | <awpr> | although that might be going too far into "deriving is secretly a tactics language" territory |
| 00:40:10 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 00:40:32 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 00:40:56 | <monochrom> | Perhaps it should openly be a tactics language :) |
| 00:41:25 | <Cajun> | when i think of trying to define instances of types specifically for debugging, i immediately think of some compilation flag that would selectively choose some instance, but idk if thats possible in the first place |
| 00:41:26 | <awpr> | yeah I just had that thought bouncing around the back of my head. that could be really cool |
| 00:41:54 | × | pbrisbin quits (~patrick@pool-173-49-147-250.phlapa.fios.verizon.net) (Ping timeout: 260 seconds) |
| 00:42:18 | <awpr> | I mean what is GND and deriving Show and DeriveGeneric if not builtin tactics? |
| 00:43:18 | <orzo> | I'm thinking to use awpr's solution combined with a field-accessor operator that automatically peels the Hide constructor. What'd make a good operator for that? |
| 00:44:17 | <awpr> | if you're using lens, `, _myField_ :: Hide X` and then `myField = myField_.hide` |
| 00:44:50 | <awpr> | i.e. bake it into the exported lenses for those fields |
| 00:44:51 | <orzo> | i've not been using lens |
| 00:45:05 | <awpr> | could also bake it into accessor functions and pattern synonyms |
| 00:47:03 | × | pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.2.1) |
| 00:55:37 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 00:55:50 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 00:55:54 | × | waleee quits (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 260 seconds) |
| 00:56:22 | → | favonia joins (~favonia@user/favonia) |
| 01:00:12 | × | doyougnu quits (~user@c-73-25-202-122.hsd1.or.comcast.net) (Remote host closed the connection) |
| 01:00:25 | × | oats quits (~thomas@user/oats) (Quit: until later, my friends) |
| 01:01:07 | → | oats joins (~thomas@user/oats) |
| 01:01:27 | × | favonia quits (~favonia@user/favonia) (Ping timeout: 265 seconds) |
| 01:04:51 | × | asivitz quits (uid178348@id-178348.tinside.irccloud.com) (Quit: Connection closed for inactivity) |
| 01:08:02 | × | _bin quits (~bin@user/bin/x-1583188) (Ping timeout: 260 seconds) |
| 01:11:12 | × | Guest372 quits (~xxx@47.245.54.240) (Remote host closed the connection) |
| 01:12:19 | → | Guest372 joins (~xxx@47.245.54.240) |
| 01:12:51 | → | favonia joins (~favonia@user/favonia) |
| 01:13:08 | wrengr | is now known as wrengr_away |
| 01:13:08 | × | MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer) |
| 01:13:21 | → | MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com) |
| 01:16:10 | × | xff0x quits (~xff0x@2001:1a81:53ed:e500:564f:86e7:d174:9c84) (Ping timeout: 240 seconds) |
| 01:16:31 | × | fjmorazan quits (~quassel@user/fjmorazan) (Quit: fjmorazan) |
| 01:16:44 | → | fjmorazan joins (~quassel@user/fjmorazan) |
| 01:18:13 | → | xff0x joins (~xff0x@2001:1a81:522c:4300:7515:65a1:dfa5:eb8b) |
| 01:21:06 | × | favonia quits (~favonia@user/favonia) (Ping timeout: 260 seconds) |
| 01:24:55 | × | fjmorazan quits (~quassel@user/fjmorazan) (Quit: fjmorazan) |
| 01:25:32 | → | fjmorazan joins (~quassel@user/fjmorazan) |
| 01:27:58 | × | cheater quits (~Username@user/cheater) (Ping timeout: 268 seconds) |
| 01:29:26 | → | moats joins (~oats@user/oats) |
| 01:29:44 | → | neurocyte4 joins (~neurocyte@IP-185189140114.dynamic.medianet-world.de) |
| 01:29:44 | × | neurocyte4 quits (~neurocyte@IP-185189140114.dynamic.medianet-world.de) (Changing host) |
| 01:29:44 | → | neurocyte4 joins (~neurocyte@user/neurocyte) |
| 01:30:59 | → | cheater joins (~Username@user/cheater) |
| 01:31:53 | × | neurocyte quits (~neurocyte@user/neurocyte) (Ping timeout: 268 seconds) |
| 01:31:53 | neurocyte4 | is now known as neurocyte |
| 01:33:55 | → | favonia joins (~favonia@user/favonia) |
| 01:34:19 | × | zaquest quits (~notzaques@5.128.210.178) (Quit: Leaving) |
| 01:41:32 | × | favonia quits (~favonia@user/favonia) (Ping timeout: 268 seconds) |
| 01:42:26 | → | zaquest joins (~notzaques@5.128.210.178) |
| 01:44:11 | → | abhixec joins (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) |
| 01:44:19 | × | burnside_ quits (~burnsides@client-8-86.eduroam.oxuni.org.uk) (Remote host closed the connection) |
| 01:44:45 | oats | is now known as oats_ |
| 01:45:46 | moats | is now known as oats |
| 01:47:02 | × | sayola quits (~vekto@dslb-088-064-186-138.088.064.pools.vodafone-ip.de) (Read error: Connection reset by peer) |
| 01:50:57 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 01:51:04 | × | tomku quits (~tomku@user/tomku) (Ping timeout: 252 seconds) |
| 01:51:11 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 01:51:24 | × | vysn quits (~vysn@user/vysn) (Ping timeout: 268 seconds) |
| 01:53:23 | → | favonia joins (~favonia@user/favonia) |
| 01:53:40 | → | pony joins (~ed@101.100.135.26) |
| 01:54:13 | × | sim590 quits (~simon@modemcable090.207-203-24.mc.videotron.ca) (Ping timeout: 252 seconds) |
| 01:57:35 | → | tomku joins (~tomku@user/tomku) |
| 01:59:54 | × | lemonsnicks quits (~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net) (Quit: ZNC 1.8.2 - https://znc.in) |
| 02:00:24 | → | lemonsnicks joins (~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net) |
| 02:01:22 | × | favonia quits (~favonia@user/favonia) (Ping timeout: 252 seconds) |
| 02:01:23 | × | slep quits (~slep@cpc150002-brnt4-2-0-cust437.4-2.cable.virginm.net) (Ping timeout: 265 seconds) |
| 02:02:16 | → | slep joins (~slep@cpc150002-brnt4-2-0-cust437.4-2.cable.virginm.net) |
| 02:04:10 | × | shapr quits (~user@pool-100-36-247-68.washdc.fios.verizon.net) (Ping timeout: 252 seconds) |
| 02:04:18 | × | lbseale quits (~lbseale@user/ep1ctetus) (Read error: Connection reset by peer) |
| 02:05:03 | → | Toast52 joins (~Toast52@151.192.167.120) |
| 02:07:53 | → | sim590 joins (~simon@modemcable090.207-203-24.mc.videotron.ca) |
| 02:14:33 | → | favonia joins (~favonia@user/favonia) |
| 02:16:17 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 02:16:32 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 02:21:10 | × | favonia quits (~favonia@user/favonia) (Ping timeout: 252 seconds) |
| 02:23:28 | × | td_ quits (~td@muedsl-82-207-238-177.citykom.de) (Ping timeout: 268 seconds) |
| 02:25:02 | → | td_ joins (~td@muedsl-82-207-238-063.citykom.de) |
| 02:25:04 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 252 seconds) |
| 02:26:41 | × | alx741 quits (~alx741@181.196.68.49) (Quit: alx741) |
| 02:26:44 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 02:29:42 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 02:31:51 | → | machinedgod joins (~machinedg@135-23-192-217.cpe.pppoe.ca) |
| 02:34:05 | × | zebrag quits (~chris@user/zebrag) (Quit: Konversation terminated!) |
| 02:34:35 | → | favonia joins (~favonia@user/favonia) |
| 02:35:42 | × | gioyik quits (~gioyik@gateway/tor-sasl/gioyik) (Ping timeout: 276 seconds) |
| 02:35:50 | → | System123 joins (~System123@203-134-35-213.sta.estpak.ee) |
| 02:39:14 | × | betelgeuse quits (~betelgeus@94-225-47-8.access.telenet.be) (Quit: Ping timeout (120 seconds)) |
| 02:40:20 | × | System123 quits (~System123@203-134-35-213.sta.estpak.ee) (Ping timeout: 268 seconds) |
| 02:41:30 | × | favonia quits (~favonia@user/favonia) (Ping timeout: 265 seconds) |
| 02:41:42 | → | betelgeuse joins (~betelgeus@94-225-47-8.access.telenet.be) |
| 02:46:02 | × | myShoggoth quits (~myShoggot@97-120-70-214.ptld.qwest.net) (Ping timeout: 260 seconds) |
| 02:51:48 | → | _bin joins (~bin@user/bin/x-1583188) |
| 02:53:16 | → | favonia joins (~favonia@user/favonia) |
| 02:57:19 | × | meinside quits (uid24933@id-24933.helmsley.irccloud.com) (Quit: Connection closed for inactivity) |
| 02:58:04 | × | favonia quits (~favonia@user/favonia) (Ping timeout: 252 seconds) |
| 02:58:34 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 252 seconds) |
| 02:59:21 | × | [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection) |
| 03:00:40 | → | FinnElija joins (~finn_elij@user/finn-elija/x-0085643) |
| 03:04:04 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds) |
| 03:11:07 | → | favonia joins (~favonia@user/favonia) |
| 03:11:13 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 252 seconds) |
| 03:13:22 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 03:19:28 | → | sneedsfeed joins (~sneedsfee@rrcs-173-95-122-169.midsouth.biz.rr.com) |
| 03:20:42 | <sneedsfeed> | test |
| 03:21:41 | oats | is now known as moats |
| 03:22:25 | <sneedsfeed> | I know this is a dumb question... by why is this function https://hastebin.com/kesayufuje.hs a list? Is it just that the compiler assumes that with any infinitely recursive series the programmer must want a list? |
| 03:22:51 | <awpr> | `:` is an operator that prepends an item onto a list specifically |
| 03:22:59 | <sneedsfeed> | but I tried that in ghci |
| 03:23:00 | <sneedsfeed> | 1 : 1 |
| 03:23:01 | → | meinside joins (uid24933@id-24933.helmsley.irccloud.com) |
| 03:23:18 | <sneedsfeed> | Non type-variable argument in the constraint: Num [a] |
| 03:23:18 | <sneedsfeed> | (Use FlexibleContexts to permit this) |
| 03:23:39 | <awpr> | 1 isn't a list, it's a number; the RHS has to be a list, e.g. `1 : []` or `1 : [2, 4]` |
| 03:23:57 | <sneedsfeed> | but the function i linked has no bracket anywhere |
| 03:24:19 | <sneedsfeed> | thats the essence of my confusion |
| 03:24:31 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 265 seconds) |
| 03:24:43 | <awpr> | ah, the infinite recursion is potentially confusing; there's no brackets because no suffix of the list it generates is finite |
| 03:25:04 | oats_ | is now known as oats |
| 03:25:41 | <sneedsfeed> | is that not just a different way of saying "Is it just that the compiler assumes that with any infinitely recursive series the programmer must want a list?"? |
| 03:26:00 | <awpr> | no, it figured out a list was wanted because of the `:` operator |
| 03:26:58 | <sneedsfeed> | so : followed by infinite recursion works sort of like : followed by [] |
| 03:27:07 | <sneedsfeed> | the infinite recursion fills in for the [] |
| 03:27:10 | <awpr> | I guess you could say that, yeah |
| 03:27:17 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 03:27:22 | <sneedsfeed> | (y) |
| 03:27:43 | <Axman6> | this would be a l;ot easier if you added types. f has this type: f :: Integer -> Integer -> [Integer]. we can see that in its definition we use (:) to create a list, where the head of the list is a, and the tail of the list is the result of calling f b (a+b), which, according to its type, is a list, becausde we have applied two Integers to something of type Integer -> Integer -> [Integer] giving us [Integer] |
| 03:27:44 | <awpr> | specifically a recursive call of the appropriate list type, though |
| 03:28:33 | <sneedsfeed> | ah so its making a type assumption and then using that assumption to deduce the intention |
| 03:28:36 | <Axman6> | the compiler isn't assuming anything, it is just following the typeing rules |
| 03:28:42 | <Axman6> | typing* |
| 03:29:01 | × | _\_ quits (~o@user/ding) (Quit: ___) |
| 03:29:44 | → | _\_ joins (~o@user/ding) |
| 03:30:15 | × | _\_ quits (~o@user/ding) (Remote host closed the connection) |
| 03:30:50 | → | _\_ joins (~o@user/ding) |
| 03:31:00 | × | lemonsnicks quits (~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net) (Quit: ZNC 1.8.2 - https://znc.in) |
| 03:31:25 | → | Toast52_ joins (~Toast52@151.192.167.120) |
| 03:31:34 | <Axman6> | sneedsfeed: have a look at https://hastebin.com/awuvuhiveg.php |
| 03:31:50 | → | lemonsnicks joins (~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net) |
| 03:32:17 | <Axman6> | it's the same code, but with some types added - these can all be inferred by the compiler (it might infer something more general then Integer, but let's keep it simple) |
| 03:32:42 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 260 seconds) |
| 03:34:31 | <sneedsfeed> | but then... if the type is whats sorting all of this out for us... how come this doesnt work? https://hastebin.com/uyarofolet.hs |
| 03:34:40 | × | Toast52 quits (~Toast52@151.192.167.120) (Ping timeout: 265 seconds) |
| 03:34:57 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 03:35:12 | <Axman6> | what is the type of (:)? |
| 03:35:39 | <Axman6> | I put it in that file in the comments |
| 03:35:51 | <sneedsfeed> | yea I mean I get that |
| 03:36:04 | <Axman6> | I want you to tell me a) the type in Haskell syntax, and what it means in english |
| 03:36:11 | <Axman6> | and b) |
| 03:36:23 | <sneedsfeed> | but (:) is working fine here https://hastebin.com/kesayufuje.hs witout any [a] |
| 03:36:36 | × | _\_ quits (~o@user/ding) (Quit: ___) |
| 03:36:49 | <Axman6> | because if you did get that, you wouldn't be asking why that code doesn't work, because looking at the types, it's obvious why it can't work |
| 03:37:11 | → | _\_ joins (~o@user/ding) |
| 03:37:11 | <Axman6> | there doesn't have to be any []'s for you to be using lists, there just has to be things which have the type of lists |
| 03:37:13 | <sneedsfeed> | oh sure (:) :: a -> [a] -> [a] so : take a type a and a list of type as and returns a list of type a |
| 03:37:38 | <Axman6> | ok, so why can't f :: Int -> Int -> [Int]; f a b = a : b work? |
| 03:37:44 | <sneedsfeed> | infinite recursion like that is "a thing that has the type of lists"? |
| 03:37:47 | <Axman6> | what is the type of b? |
| 03:38:05 | <Axman6> | stop thinking about recursion, you're missing some much more basic things here |
| 03:38:21 | <Axman6> | tell me why f above can't possibly work |
| 03:38:50 | <sneedsfeed> | oh its a type mismatch, I perfectly understand why f doesnt work |
| 03:38:56 | <Axman6> | good |
| 03:38:59 | <sneedsfeed> | i mean at least I think I do |
| 03:39:30 | <Axman6> | you're applying (:) to a and b, where a :: Int and b :: Int, and b definitely does not match [a], an Int is definitely not a list |
| 03:40:02 | <sneedsfeed> | can I ask you if this statement is accurate: infinite recursion plus the aproprite type signature is ""a thing that has the type of lists"" |
| 03:40:06 | <Axman6> | what _would_ have worked though is: f a b = a : [b] -- we haveput b into a list |
| 03:40:14 | <Axman6> | no, that is not true |
| 03:40:20 | <sneedsfeed> | dang |
| 03:40:33 | <Axman6> | you have lists because you have used (:), that's it |
| 03:41:11 | <Axman6> | the list you are making happens to be infinite but that is an orthogonal thing to the fact that you do have lists, at least to me |
| 03:41:49 | <Axman6> | it is infinite because we only ever create cons', we never produce a [] constructor to give us somewhere to stop |
| 03:42:14 | <sneedsfeed> | okay I think I can grok that and accept it |
| 03:42:46 | <sneedsfeed> | a bit abstract but not too far out there |
| 03:43:08 | <Axman6> | it's kind og like: let a = 1 : a -- this is an infinite list where, when we try to pattern match on the head: case a of (x:xs) we get x = 1, and xs is, according to that definition, a again |
| 03:43:57 | <sneedsfeed> | [1,1,1...] |
| 03:44:47 | <Axman6> | so, it's worth remembering that the syntax which uses [ and ] is syntax sugar. your pseudo syntax for [1,1,1,...] really means 1:1:1:... |
| 03:46:01 | <sneedsfeed> | could you say that 1:1:1.... is just syntax sugar on a = 1 : a? |
| 03:46:14 | × | justsomeguy quits (~justsomeg@user/justsomeguy) (Quit: WeeChat 3.2) |
| 03:46:31 | → | myShoggoth joins (~myShoggot@97-120-70-214.ptld.qwest.net) |
| 03:47:04 | <sneedsfeed> | sorry that really doesnt have anything to do with the point |
| 03:47:23 | <sneedsfeed> | I appreciate the insights. |
| 03:47:50 | <Axman6> | yeah I guess you could, but it's human syntax sugar, not Haskell syntax sugar :) |
| 03:49:20 | <Axman6> | so is the definition of fibs making any more sense? |
| 03:49:22 | <sneedsfeed> | this is going to help a lot with writing recursive functions, up till now i've never even tried to write one that didnt have a bracket in it |
| 03:49:33 | <sneedsfeed> | a lot (y) |
| 03:49:58 | <Axman6> | great - an useful exercise might be for you to explain to us how fibs works, based on what you now know |
| 03:50:35 | <Axman6> | this is also a great example of where writing things out on a piece of paper is useful |
| 03:53:50 | <sneedsfeed> | its not really the recursion itself that I was hung up on.. I really do get that part. I was essentially confused by the type of (:) saying it needed a [a] while the fib function didnt even have a bracket in it |
| 03:54:22 | <Axman6> | https://hastebin.com/ujuzumaquj.yaml |
| 03:55:03 | <Axman6> | yeah it's a very common beginner misunderstanding that lists need []'s in the code, but a list is really either the [] constructor or the (:) constructor, everything else is syntax sugar |
| 03:55:41 | <sneedsfeed> | thanks again friend, think im going to turn in |
| 03:56:12 | <Axman6> | good luck , try not to fully evaluate any infinitely recursive definitions in your dreams |
| 04:04:10 | × | xlei quits (znc@pool-68-129-84-118.nycmny.fios.verizon.net) (Ping timeout: 240 seconds) |
| 04:06:12 | → | Gurkenglas joins (~Gurkengla@dslb-002-207-014-195.002.207.pools.vodafone-ip.de) |
| 04:06:52 | × | Gurkenglas quits (~Gurkengla@dslb-002-207-014-195.002.207.pools.vodafone-ip.de) (Read error: Connection reset by peer) |
| 04:07:10 | → | Gurkenglas joins (~Gurkengla@dslb-002-207-014-195.002.207.pools.vodafone-ip.de) |
| 04:09:16 | <ldlework> | With regards to bind chaining like `foo v >>= bar >>= baz`, what if foo, bar and baz are coming from a list function parameter? |
| 04:09:27 | <ldlework> | oh recursion maybe |
| 04:12:32 | × | lemonsnicks quits (~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net) (Quit: ZNC 1.8.2 - https://znc.in) |
| 04:13:23 | → | lemonsnicks joins (~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net) |
| 04:20:12 | <ldlework> | I am trying to figure out how I can make a nice input validation pipeline where values of a validation type can check and map a value to a new value type |
| 04:20:27 | <ldlework> | in order to get that in a nice composable pipeline, do I need to look into "transformers"? |
| 04:20:38 | <ldlework> | I see it is a chapter in HFFP a bit ahead from where I'm at |
| 04:23:08 | <ldlework> | like I wonder how you compose IO actions with functions that can transform strings into ints, for example |
| 04:25:54 | × | Toast52_ quits (~Toast52@151.192.167.120) (Ping timeout: 265 seconds) |
| 04:27:48 | <ldlework> | oh, fmap |
| 04:27:55 | <ldlework> | thanks hlint |
| 04:29:10 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 260 seconds) |
| 04:39:13 | × | abhixec quits (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Ping timeout: 252 seconds) |
| 04:39:45 | <ldlework> | Can anyone help me figure out how to get something like this working? |
| 04:39:47 | <ldlework> | https://gist.github.com/dustinlacewell/f61df03ffeb41976ea16193281978f09 |
| 04:45:03 | → | phma_ joins (~phma@host-67-44-208-112.hnremote.net) |
| 04:46:22 | × | phma quits (~phma@host-67-44-208-112.hnremote.net) (Ping timeout: 252 seconds) |
| 04:48:06 | × | sneedsfeed quits (~sneedsfee@rrcs-173-95-122-169.midsouth.biz.rr.com) (Quit: Client closed) |
| 04:48:45 | → | phma joins (~phma@host-67-44-208-112.hnremote.net) |
| 04:49:18 | × | lemonsnicks quits (~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net) (Quit: ZNC 1.8.2 - https://znc.in) |
| 04:49:37 | → | lemonsnicks joins (~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net) |
| 04:50:27 | × | myShoggoth quits (~myShoggot@97-120-70-214.ptld.qwest.net) (Ping timeout: 268 seconds) |
| 04:51:34 | × | MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Remote host closed the connection) |
| 04:51:34 | × | phma_ quits (~phma@host-67-44-208-112.hnremote.net) (Ping timeout: 260 seconds) |
| 04:51:36 | → | xlei joins (akans@pool-68-129-84-118.nycmny.fios.verizon.net) |
| 04:51:47 | → | MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com) |
| 04:54:06 | <dsal> | ldlework: Really would recommend types on every toplevel definition. Half the time, that clears up much of the confusion for me. |
| 04:54:28 | <ldlework> | dsal: the editor tells me what it thinks they inferred as |
| 04:55:00 | <awpr> | the most difficult issue with something like that is that the validators in a list would want to have different types: the first one from `String` to `Int`, and the second from `Int` to `Int`. it is possible to make a list-like structure that supports that, but it's moderately advanced. it might be easier to have `getInput` take one composite validator, and call it like `getInput "n: " (asInt >=> atLeast2)` |
| 04:56:06 | × | hendursaga quits (~weechat@user/hendursaga) (Ping timeout: 276 seconds) |
| 04:56:30 | <dsal> | ldlework: Sure, but the types are the intent. You can write down what was inferred and then decide whether it's what you meant, or you can realize that it's hard to combine some things the way you planned to. |
| 04:57:17 | <ldlework> | awpr: that was the answer i was looking for thank you! |
| 04:57:22 | <ldlework> | dsal: yeah i need to work on the habit |
| 05:00:26 | → | phma_ joins (~phma@host-67-44-208-70.hnremote.net) |
| 05:01:22 | × | phma quits (~phma@host-67-44-208-112.hnremote.net) (Ping timeout: 260 seconds) |
| 05:02:09 | → | fef joins (~thedawn@user/thedawn) |
| 05:02:12 | → | ksu joins (~ksu@user/prtr) |
| 05:02:25 | → | _ht joins (~quassel@82-169-194-8.biz.kpn.net) |
| 05:04:01 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 05:06:50 | → | ubert joins (~Thunderbi@178.165.181.26.wireless.dyn.drei.com) |
| 05:11:38 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 05:11:51 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 05:22:45 | → | abhixec joins (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) |
| 05:29:32 | → | dsrt^ joins (~dsrt@68.101.54.227) |
| 05:35:09 | <ldlework> | awpr: i'm really close |
| 05:35:11 | <ldlework> | https://gist.github.com/dustinlacewell/49f4f682f91465e055c691c2778c9501 |
| 05:35:15 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds) |
| 05:35:26 | <ldlework> | what's the egronomic way here to pull the values out of the Rights? |
| 05:36:00 | <ldlework> | oh |
| 05:36:02 | <ldlework> | i solved it |
| 05:36:31 | <ldlework> | changing `getInput` from returning `IO (Either String a)` to `IO a` fixed it |
| 05:37:31 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 252 seconds) |
| 05:37:41 | <awpr> | `readEither` probably also doesn't do quite what it's expected to there; its string parameter is the thing to parse, not an error message |
| 05:38:12 | → | Toast52 joins (~Toast52@151.192.167.120) |
| 05:38:22 | <ldlework> | oh |
| 05:38:28 | <ldlework> | that explains the error i'm getting |
| 05:38:30 | <ldlework> | haha |
| 05:38:33 | × | hyiltiz quits (~quassel@31.220.5.250) (Ping timeout: 268 seconds) |
| 05:42:07 | → | hyiltiz joins (~quassel@31.220.5.250) |
| 05:42:24 | × | slowButPresent quits (~slowButPr@user/slowbutpresent) (Quit: leaving) |
| 05:42:40 | → | takuan joins (~takuan@178-116-218-225.access.telenet.be) |
| 05:42:56 | <ldlework> | it works! |
| 05:42:58 | <ldlework> | \o/ |
| 05:45:15 | <ldlework> | https://gist.github.com/dustinlacewell/49f4f682f91465e055c691c2778c9501 |
| 05:47:17 | → | Lycurgus joins (~juan@98.4.112.204) |
| 05:48:41 | → | gioyik joins (~gioyik@gateway/tor-sasl/gioyik) |
| 05:49:21 | × | _ht quits (~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection) |
| 05:49:46 | → | dut joins (~dut@user/dut) |
| 05:50:50 | × | abhixec quits (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Ping timeout: 260 seconds) |
| 05:51:40 | <awpr> | great! for a random bonus topic you could check out, there's a function `either` that could be used to replace the error message in fewer lines |
| 05:54:45 | → | ubert1 joins (~Thunderbi@178.165.181.26.wireless.dyn.drei.com) |
| 05:54:50 | × | hyiltiz quits (~quassel@31.220.5.250) (Ping timeout: 265 seconds) |
| 05:55:19 | → | hyiltiz joins (~quassel@31.220.5.250) |
| 05:57:44 | × | ubert quits (~Thunderbi@178.165.181.26.wireless.dyn.drei.com) (Ping timeout: 265 seconds) |
| 05:57:45 | ubert1 | is now known as ubert |
| 05:58:06 | <ldlework> | awpr: do you mean for `getInput` or for the validation functions like `atLeast2` |
| 05:59:42 | <awpr> | I meant for `readEither'`, where there's already an `Either` that needs a different thing in `Left` |
| 06:02:26 | <ldlework> | awpr: this? |
| 06:02:28 | <ldlework> | readEither' e i = either (\x -> Left e) Right |
| 06:02:40 | <ldlework> | hmm no |
| 06:03:16 | ldlework | scratches his head |
| 06:03:25 | <awpr> | that's the core idea, it just lost the initial call to `readEither` |
| 06:03:43 | <ldlework> | maybe |
| 06:03:45 | <ldlework> | readEither' e i = either (\x -> Left e) Right (readEither i) |
| 06:04:01 | <awpr> | yep! |
| 06:04:23 | <ldlework> | OK that actually makes sense |
| 06:05:05 | <Axman6> | ldlework: regarding puttiong types on top level definitions, I would say this is a habbit all god Haskell developers develop - you will find that you start thinking in typed before you think in program code soon enough, and writing down the types helps you design the code you want to write |
| 06:05:11 | × | pony quits (~ed@101.100.135.26) (Quit: WeeChat 2.8) |
| 06:05:30 | <ldlework> | Axman6: certainly it will help copilot write the code I want to write :D |
| 06:05:53 | <ldlework> | i'm just kidding, i hear that |
| 06:06:05 | <Lycurgus> | what my srsly? |
| 06:06:20 | <Axman6> | most haskell I write these days starts with writing the types and making the definitions = undefined |
| 06:06:48 | → | pony joins (~ed@101.100.135.26) |
| 06:07:13 | × | machinedgod quits (~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 252 seconds) |
| 06:08:04 | <Lycurgus> | there's a wait list (for copilot) |
| 06:09:35 | × | pony quits (~ed@101.100.135.26) (Client Quit) |
| 06:09:47 | <ldlework> | Lycurgus: i've had access for months |
| 06:09:58 | <ldlework> | awpr: nice I used `either` to refactor getInput too |
| 06:10:03 | × | fef quits (~thedawn@user/thedawn) (Quit: Leaving) |
| 06:10:18 | × | xlei quits (akans@pool-68-129-84-118.nycmny.fios.verizon.net) (Ping timeout: 265 seconds) |
| 06:10:26 | <ldlework> | not sure if it's better |
| 06:10:28 | <ldlework> | lol |
| 06:10:35 | <Lycurgus> | ldlework, and you do in fact use it with haskell? |
| 06:10:47 | <ldlework> | Lycurgus: oh yeah, it's been super helpful |
| 06:11:12 | <awpr> | yeah, that one would be a bit noisier than the case in `readEither'` |
| 06:11:14 | <Lycurgus> | could be the works |
| 06:14:04 | <ldlework> | awpr: is there a >=> that drops the value like >> |
| 06:14:38 | <Axman6> | const foo >=> bar? |
| 06:15:35 | <ldlework> | Axman6: that will pass foo to bar, right? |
| 06:15:51 | <awpr> | hmm, like `Monad m => (a -> m b) -> m c -> m c`? don't know of one, but `foo >=> const bar` might be what you're looking fdor |
| 06:16:00 | <Axman6> | :t \foo bar -> const foo >=> bar |
| 06:16:01 | <lambdabot> | Monad m => m b1 -> (b1 -> m c) -> b2 -> m c |
| 06:16:18 | <ldlework> | oh |
| 06:16:24 | <awpr> | er, I missed an `a` in my type signature |
| 06:16:31 | <Axman6> | I don't understand your question though |
| 06:16:37 | <ldlework> | print >=> const (getInput prompt check |
| 06:16:39 | <ldlework> | this worked |
| 06:16:52 | <ldlework> | does const eval `a` though |
| 06:16:58 | <ldlework> | oh |
| 06:17:06 | <ldlework> | also I need to return the return value of getInput |
| 06:17:18 | → | pony joins (~ed@101.100.135.26) |
| 06:17:47 | <ldlework> | Left msg -> do |
| 06:17:49 | <ldlework> | print msg |
| 06:17:51 | <ldlework> | getInput prompt check |
| 06:18:08 | <ldlework> | Trying to refactor this into a composed function I can pass to `either` |
| 06:18:54 | <Axman6> | (\msg -> print msg >> getInput ...) |
| 06:20:18 | <ldlework> | right i had it working with a lambda |
| 06:20:29 | <ldlework> | was wondering if there was a way to compose it so the msg just naturally hits the print |
| 06:21:01 | <Axman6> | print >=> const (getInput prompt check) seems fine to me then |
| 06:21:04 | <Axman6> | @src const |
| 06:21:04 | <lambdabot> | const x _ = x |
| 06:21:33 | <ldlework> | oh right, it will evaluate and return the first arg |
| 06:21:44 | <Axman6> | no, it will return its first arg |
| 06:21:54 | <Axman6> | there is no evaluation there |
| 06:22:28 | <Lycurgus> | it will be interesting to see if copilot can actually clear the licensing issues and enter GA |
| 06:22:43 | → | falafel joins (~falafel@2603-8000-d800-688c-4852-3b82-73df-20ff.res6.spectrum.com) |
| 06:22:45 | <Lycurgus> | and how it does that |
| 06:23:32 | <Lycurgus> | obviously with its default use of github as repo, hs is a likely target |
| 06:24:26 | → | kenran joins (~kenran@b2b-37-24-119-190.unitymedia.biz) |
| 06:25:06 | × | phma_ quits (~phma@host-67-44-208-70.hnremote.net) (Read error: Connection reset by peer) |
| 06:25:29 | → | phma_ joins (~phma@host-67-44-208-70.hnremote.net) |
| 06:28:37 | × | dut quits (~dut@user/dut) (Quit: Leaving) |
| 06:29:04 | → | michalz joins (~michalz@185.246.204.57) |
| 06:29:57 | × | chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection) |
| 06:31:34 | → | chele joins (~chele@user/chele) |
| 06:33:00 | → | chexum joins (~quassel@gateway/tor-sasl/chexum) |
| 06:36:58 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 06:37:11 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 06:42:58 | × | Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 252 seconds) |
| 06:43:01 | → | dhouthoo joins (~dhouthoo@178-117-36-167.access.telenet.be) |
| 06:47:18 | → | max22- joins (~maxime@2a01cb088335980009e300fcb92e8769.ipv6.abo.wanadoo.fr) |
| 06:50:18 | × | VoidNoir0 quits (~VoidNoir0@72.80.203.52) (Quit: Connection closed) |
| 06:52:18 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 06:52:38 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 06:53:54 | → | vysn joins (~vysn@user/vysn) |
| 06:56:27 | → | cfricke joins (~cfricke@user/cfricke) |
| 06:56:53 | → | tromp joins (~textual@dhcp-077-249-230-040.chello.nl) |
| 07:00:12 | <AWizzArd> | How (i.e. syntax) can I do record projection in a Dhall function? let myFn = \(val : {x, y, z}) -> x <== doesn't work, `x` is unbound. |
| 07:01:16 | × | lep quits (~lep@94.31.80.176) (Ping timeout: 252 seconds) |
| 07:02:45 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 07:03:00 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 07:04:13 | × | phma_ quits (~phma@host-67-44-208-70.hnremote.net) (Read error: No route to host) |
| 07:05:24 | × | pony quits (~ed@101.100.135.26) (Quit: WeeChat 2.8) |
| 07:06:30 | × | Lycurgus quits (~juan@98.4.112.204) (Quit: Exeunt) |
| 07:07:01 | → | phma_ joins (~phma@host-67-44-208-70.hnremote.net) |
| 07:08:00 | → | pony joins (~ed@101.100.135.26) |
| 07:08:29 | → | fendor joins (~fendor@91.141.60.54.wireless.dyn.drei.com) |
| 07:10:29 | → | ub joins (~Thunderbi@178.165.181.26.wireless.dyn.drei.com) |
| 07:12:54 | × | ubert quits (~Thunderbi@178.165.181.26.wireless.dyn.drei.com) (Ping timeout: 268 seconds) |
| 07:12:54 | ub | is now known as ubert |
| 07:14:50 | × | falafel quits (~falafel@2603-8000-d800-688c-4852-3b82-73df-20ff.res6.spectrum.com) (Ping timeout: 260 seconds) |
| 07:15:45 | × | Toast52 quits (~Toast52@151.192.167.120) (Quit: Leaving) |
| 07:16:26 | → | eggplant_ joins (~Eggplanta@2600:1700:bef1:5e10:7d7c:377a:4e03:5107) |
| 07:17:07 | × | gioyik quits (~gioyik@gateway/tor-sasl/gioyik) (Quit: WeeChat 3.1) |
| 07:18:13 | → | lep joins (~lep@94.31.80.176) |
| 07:20:05 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:d58c:2ecc:67d4:668) (Ping timeout: 268 seconds) |
| 07:21:32 | → | acidjnk_new joins (~acidjnk@p200300d0c7203004a4342413982b89a9.dip0.t-ipconnect.de) |
| 07:24:33 | → | phma joins (~phma@host-67-44-208-59.hnremote.net) |
| 07:25:19 | × | phma_ quits (~phma@host-67-44-208-70.hnremote.net) (Ping timeout: 252 seconds) |
| 07:27:25 | → | ubert1 joins (~Thunderbi@178.165.181.26.wireless.dyn.drei.com) |
| 07:29:57 | × | ubert quits (~Thunderbi@178.165.181.26.wireless.dyn.drei.com) (Ping timeout: 268 seconds) |
| 07:29:57 | ubert1 | is now known as ubert |
| 07:31:32 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 07:33:14 | → | jstolarek joins (~jstolarek@ers4.neoplus.adsl.tpnet.pl) |
| 07:34:31 | × | Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 07:38:21 | → | phma_ joins (~phma@host-67-44-208-80.hnremote.net) |
| 07:41:16 | × | phma quits (~phma@host-67-44-208-59.hnremote.net) (Ping timeout: 252 seconds) |
| 07:47:19 | × | phma_ quits (~phma@host-67-44-208-80.hnremote.net) (Ping timeout: 252 seconds) |
| 07:47:27 | → | phma joins (~phma@host-67-44-208-20.hnremote.net) |
| 07:48:11 | → | benin036932301 joins (~benin@183.82.24.197) |
| 07:49:29 | × | eggplant_ quits (~Eggplanta@2600:1700:bef1:5e10:7d7c:377a:4e03:5107) (Remote host closed the connection) |
| 07:57:54 | → | phma_ joins (~phma@host-67-44-208-86.hnremote.net) |
| 07:58:52 | × | phma quits (~phma@host-67-44-208-20.hnremote.net) (Ping timeout: 252 seconds) |
| 08:05:56 | → | acidjnk_new3 joins (~acidjnk@p200300d0c7203004e1439791f2b63139.dip0.t-ipconnect.de) |
| 08:07:06 | × | phma_ quits (~phma@host-67-44-208-86.hnremote.net) (Ping timeout: 260 seconds) |
| 08:07:26 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection) |
| 08:07:37 | → | phma_ joins (~phma@host-67-44-208-13.hnremote.net) |
| 08:07:40 | → | acidjnk joins (~acidjnk@p200300d0c720300449bf8ace8b93cd9d.dip0.t-ipconnect.de) |
| 08:08:19 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 08:09:38 | × | acidjnk_new quits (~acidjnk@p200300d0c7203004a4342413982b89a9.dip0.t-ipconnect.de) (Ping timeout: 268 seconds) |
| 08:10:20 | × | tzh quits (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz) |
| 08:10:34 | × | acidjnk_new3 quits (~acidjnk@p200300d0c7203004e1439791f2b63139.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
| 08:13:06 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 08:13:19 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 08:13:23 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Client Quit) |
| 08:13:53 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 08:14:41 | → | phma joins (~phma@host-67-44-208-13.hnremote.net) |
| 08:14:50 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:c8a8:7443:54e5:e9f7) |
| 08:15:22 | × | phma_ quits (~phma@host-67-44-208-13.hnremote.net) (Ping timeout: 252 seconds) |
| 08:16:42 | → | __celeste joins (~celeste@ip98-162-196-252.ok.ok.cox.net) |
| 08:17:44 | → | allbery_b joins (~geekosaur@xmonad/geekosaur) |
| 08:17:44 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b))) |
| 08:17:47 | allbery_b | is now known as geekosaur |
| 08:19:10 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:c8a8:7443:54e5:e9f7) (Ping timeout: 240 seconds) |
| 08:19:50 | × | notzmv quits (~zmv@user/notzmv) (Ping timeout: 260 seconds) |
| 08:22:27 | → | phma_ joins (~phma@host-67-44-208-95.hnremote.net) |
| 08:23:07 | → | arjun joins (~Srain@user/arjun) |
| 08:23:09 | <arjun> | hi |
| 08:23:40 | × | phma quits (~phma@host-67-44-208-13.hnremote.net) (Ping timeout: 252 seconds) |
| 08:23:41 | <arjun> | can anyone explain me what's the deal with the `run` functions pattern in record types? |
| 08:23:58 | <maerwald> | arjun: like? |
| 08:24:24 | <opqdonut> | :t runState |
| 08:24:25 | <lambdabot> | State s a -> s -> (a, s) |
| 08:24:36 | <arjun> | eg:- type Parser a = { runParser :: String -> (String, Either someError a) } |
| 08:24:47 | <opqdonut> | if you look at the type, that's a very reasonable name for it |
| 08:24:59 | <opqdonut> | just like `runParser :: Parser a -> String -> (String, Either SomeError a)` |
| 08:25:03 | <opqdonut> | run this parser on that string |
| 08:25:34 | <arjun> | i get that, i am more inclined on the side of knowing is there a reason we do it this way ? |
| 08:26:07 | <opqdonut> | it saves a definition compared to defining `data Parser a = Parser (String -> (String, Either someError a)); runParser (Parser f) s = f s` |
| 08:26:27 | <arjun> | opqdonut, that's it right? |
| 08:26:39 | <opqdonut> | yeah that's all there is to this idiom |
| 08:26:44 | <arjun> | smh |
| 08:26:57 | <maerwald> | It's more interesting to understand why you put a function into a data type |
| 08:27:02 | <opqdonut> | yeah |
| 08:27:09 | <arjun> | maerwald: yea, that too |
| 08:27:33 | <opqdonut> | reasons can include: making a nicer api (a Parser is a black box), being able to define an instance (say Monad Parser) |
| 08:27:43 | <arjun> | i understand "a parser is a function that takes a string and gives us error or parsed thing" |
| 08:28:00 | <arjun> | and my first instinct was to write a function, and not define it as a type |
| 08:31:43 | → | __monty__ joins (~toonn@user/toonn) |
| 08:32:18 | → | phma joins (~phma@host-67-44-208-80.hnremote.net) |
| 08:32:27 | <arjun> | opqdonut: ah, i see |
| 08:32:36 | <arjun> | is that it maerwald ? |
| 08:33:01 | × | phma_ quits (~phma@host-67-44-208-95.hnremote.net) (Ping timeout: 252 seconds) |
| 08:34:01 | × | azeem quits (~azeem@2a00:801:3c1:c79f:2f67:8901:c99e:d77d) (Read error: Connection reset by peer) |
| 08:34:20 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds) |
| 08:34:44 | → | azeem joins (~azeem@emp-91-123.eduroam.uu.se) |
| 08:35:17 | <maerwald> | the point is that you're passing the input implicitly to the next "instance" of the parser through the monadic bind function |
| 08:35:23 | <maerwald> | similar with state |
| 08:35:47 | <maerwald> | otherwise there's not much point in having a type like that |
| 08:36:21 | <arjun> | its for ergonomics then ? |
| 08:36:37 | <maerwald> | yes, nothing more |
| 08:36:44 | <maerwald> | you don't need monads |
| 08:36:58 | <arjun> | i've been banging my head at it for so long. -_- |
| 08:37:09 | <maerwald> | write a Reader monad |
| 08:37:13 | → | Akronymus joins (~Akronymus@85.31.8.180) |
| 08:37:18 | <maerwald> | functor, applicative and monad instance |
| 08:37:36 | <arjun> | one that passes the environment arround implicitly right? |
| 08:38:00 | <arjun> | i vaguely remember doing that in the past |
| 08:38:19 | <Akronymus> | https://wiki.haskell.org/Zygohistomorphic_prepromorphisms some day I'll understand this one. |
| 08:38:35 | <maerwald> | newtype Reader env a = Reader { runReader :: env -> a } |
| 08:38:42 | <maerwald> | now write the instances |
| 08:38:56 | × | econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity) |
| 08:39:17 | <maerwald> | or probably rather the transformer version |
| 08:39:23 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:2c24:ccb8:c224:8028) |
| 08:39:52 | <maerwald> | newtype ReaderT env m a = ReaderT { runReaderT :: env -> m a } |
| 08:40:13 | <arjun> | @.@ |
| 08:40:13 | <lambdabot> | Maybe you meant: @ . |
| 08:40:18 | <arjun> | bad bot |
| 08:40:45 | <arjun> | maerwald: noted! will do. |
| 08:40:52 | <arjun> | gotta runs for now |
| 08:40:59 | → | phma_ joins (~phma@host-67-44-208-51.hnremote.net) |
| 08:41:49 | × | phma quits (~phma@host-67-44-208-80.hnremote.net) (Ping timeout: 252 seconds) |
| 08:43:23 | <maerwald> | monads are boring |
| 08:43:32 | <maerwald> | but the best features usually are |
| 08:43:39 | <maerwald> | like sum types |
| 08:43:57 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:2c24:ccb8:c224:8028) (Ping timeout: 268 seconds) |
| 08:44:50 | <tdammers> | a lot of things in Haskell are perfectly simple, almost offensively so, they're just difficult to explain, because they're so abstract |
| 08:45:06 | <maerwald> | unless you get into all the type level extensions like DataKinds |
| 08:45:57 | <Akronymus> | tdammers or because people have been poisoned by oop/procedural already |
| 08:46:09 | <maerwald> | they don't have a proper abstract intuition, imo, unless you know why they're so easy to implement in GHC |
| 08:46:25 | × | hnOsmium0001 quits (uid453710@id-453710.hampstead.irccloud.com) (Quit: Connection closed for inactivity) |
| 08:46:29 | <maerwald> | and at that point, you have a leaky abstraction, no? |
| 08:47:15 | <arjun> | yea, that's kind of what i've been struggling with lately, wait, why is done like this? it should just be function but it's a (fancy type, monad, weird extension stuff) |
| 08:47:25 | <tdammers> | Akronymus: I don't think of procedural as poison; procedural / structured programming is actually a pretty solid basis for practical FP. OOP, and particularly the mainstream incarnations (class-based and "dynamically typed"), however, are pretty bad for the brain, especially when presented as the universal foundation of program design. |
| 08:47:36 | <Akronymus> | Are you talking about "hiding complexity" or about "different way to think about it" abstractions? maerwald |
| 08:47:47 | <arjun> | dang, why do i have to leave when this is just getting good : P |
| 08:48:04 | <maerwald> | Ak |
| 08:48:16 | <maerwald> | Akronymus: I believe that "hiding complexity" has nothing to do with abstraction |
| 08:48:23 | <maerwald> | you can hide complexity with large amounts of CPP |
| 08:48:32 | <Akronymus> | tdammers I have had the experience that when starting from 0, as in no prior knowledge of programming at all, it is easier for them to learn FP than procedural |
| 08:48:55 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 08:48:58 | <Akronymus> | maerwald in school I've been taught that abstractions are exactly for hiding complexity. |
| 08:49:08 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 08:49:09 | <Akronymus> | I did butt heads with that teacher frequently. |
| 08:49:19 | <tdammers> | Akronymus: that might very well be true. The popularity of Excel seems to support this notion. |
| 08:49:23 | ← | arjun parts (~Srain@user/arjun) () |
| 08:49:28 | <maerwald> | I'd say it's a possible side effect of abstractions |
| 08:49:46 | <Akronymus> | Yeah that is definitely the case. |
| 08:50:09 | <Akronymus> | Instead of thinking in some unnatural way about certain things, you can abstract it to a different one that makes more sense. |
| 08:50:11 | <maerwald> | But they can introduce complexity as well (e.g. intellectual complexity) |
| 08:50:18 | <Akronymus> | And in the process it becomes easier to reason about. |
| 08:50:51 | <Akronymus> | for example, thinking of a csv as rows of columns is quite natural in the sense of reading data in. |
| 08:51:19 | <Akronymus> | Labelling the data though and converting it to a different format is a abstraction that enables you to think about it in a different way. |
| 08:51:39 | <maerwald> | E.g. the react model is an abstraction, but I believe it's a high-complexity abstraction and most react developers don't fully understand the semantics |
| 08:51:41 | <Akronymus> | So, that instead of accessing row x column y, you access the value of this record. |
| 08:51:52 | <tdammers> | abstraction is about capturing and naming common patterns in complex code, so that we can reason about those patterns in a smaller representation |
| 08:52:18 | <Akronymus> | And such a representation can be as complex, if not more than just the pure csv |
| 08:52:32 | <Akronymus> | Except that it is more natural and thus easier to reason about. |
| 08:52:42 | <maerwald> | I don't even think that the react model is leaky |
| 08:52:45 | × | pony quits (~ed@101.100.135.26) (Quit: WeeChat 2.8) |
| 08:52:55 | <maerwald> | Semantics is just complicated |
| 08:53:13 | <tdammers> | I'm inclined to say that when the abstraction is bigger than the things it abstracts over, it no longer qualifies as a proper abstraction |
| 08:53:27 | × | max22- quits (~maxime@2a01cb088335980009e300fcb92e8769.ipv6.abo.wanadoo.fr) (Quit: Leaving) |
| 08:53:32 | <maerwald> | "bigger"? |
| 08:54:01 | <tdammers> | yes, bigger. As in, requiring more "space" (in source code, or in the programmer's brain) to represent the same thing |
| 08:54:13 | <Akronymus> | tdammers I'd say a model that relates data to each other is "bigger" than a straight up 2 dimensional array for a csv. |
| 08:54:30 | <Akronymus> | But the model is usually much easier to reason about. |
| 08:54:30 | <maerwald> | tdammers: then you seem to agree with my "intellectual complexity" assessment |
| 08:54:38 | <maerwald> | but that means a lot of abstractions in haskell are non-abstractions |
| 08:54:51 | <tdammers> | like which ones? |
| 08:55:00 | <maerwald> | Transformers |
| 08:55:13 | <Akronymus> | https://www.cs.cornell.edu/courses/cs211/2006sp/Lectures/L08-Abstraction/08_abstraction.html |
| 08:55:23 | <Akronymus> | > The solution to complexity is abstraction, also known as information hiding. |
| 08:55:24 | <lambdabot> | <hint>:1:42: error: parse error on input ‘,’ |
| 08:55:29 | <Akronymus> | That is IMO outright wrong |
| 08:55:30 | <tdammers> | Transformers are smaller than spelling out the entire thing |
| 08:55:32 | <tdammers> | usually |
| 08:55:54 | <maerwald> | You have to keep a lot of info in your brain to understand a transformer stack. Usually people follow their intuition on it, which is correct 90% of the time |
| 08:55:54 | <Akronymus> | " Abstraction is simply the removal of unnecessary detail. " |
| 08:56:00 | <maerwald> | the other 10% is "oops" |
| 08:56:05 | × | __celeste quits (~celeste@ip98-162-196-252.ok.ok.cox.net) (Ping timeout: 265 seconds) |
| 08:56:10 | <Akronymus> | I fucking hate how programming is taught. |
| 08:56:17 | <tdammers> | teaching programming is hard |
| 08:56:42 | <jneira[m]> | maerwald: And carefully honour the necessary ones ;-) |
| 08:57:11 | <Akronymus> | tdammers part of the reason I am working through HtDP |
| 08:57:15 | <maerwald> | tdammers: or conduit :> |
| 08:57:18 | <Akronymus> | And in the future, sicp |
| 08:57:25 | <maerwald> | I think conduit is really not an abstraction |
| 08:57:46 | <maerwald> | if you keep using it, it'll probably be useful, because you got used to it |
| 08:57:47 | <tdammers> | conduit *contains* some abstractions, but it is more than just that |
| 08:58:07 | <maerwald> | but "useful" is a different concept |
| 08:58:14 | <maerwald> | abstractions aren't always useful |
| 08:59:01 | → | sedeki joins (~textual@user/sedeki) |
| 08:59:26 | <tdammers> | true. an abstraction that is itself so complicated that it adds to overall complexity, or introduces too many other problems, isn't worth it |
| 09:01:03 | <maerwald> | this might be a good example of effects systems |
| 09:01:16 | <maerwald> | It's an amazing abstraction |
| 09:01:20 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 09:01:24 | <maerwald> | but I think no one yet has been able to make it really useful |
| 09:01:50 | <maerwald> | (all haskell discussions eventually end with "effects systems") :D |
| 09:03:51 | <earthy> | Akronymus: 'we' (as in all devs) do not actually know how to teach programming well. We have some ideas as to what works, and a reasonable set of goals, but the path towards those goals is unclear at best. But see also the work by S. Papert, on Scratch, Hedy, Alice |
| 09:04:13 | <Akronymus> | earthy practice, practice, practice |
| 09:04:21 | <tdammers> | fun fact: 'we' (as in most humans) do not actually know how to teach *anything* well. |
| 09:04:23 | <Akronymus> | Preferably in the real world |
| 09:04:25 | <maerwald> | I think we should learn programming instead of teaching it. |
| 09:04:30 | <tdammers> | ^ ths |
| 09:04:34 | × | shriekingnoise quits (~shrieking@186.137.144.80) (Quit: Quit) |
| 09:04:36 | <Akronymus> | Teaching is a really young concept in the first place |
| 09:04:46 | <tdammers> | it's also a bit of a flawed concept |
| 09:05:02 | <Akronymus> | School system is quite flawed. |
| 09:05:07 | <tdammers> | so much |
| 09:05:08 | <Akronymus> | but teaching itself, I find hard. |
| 09:05:14 | <Akronymus> | to believe. |
| 09:05:58 | <earthy> | tdammers: well, there is quite a bit of knowledge as to more helpful and less helpful ways of teaching, and many primary school children do get to a reasonable level of reading and basic calculation |
| 09:06:05 | <dminuoso> | A good teacher is just an autodictacticism assistant. |
| 09:06:14 | <tdammers> | "Teaching" has it backwards - it suggests that the teacher is the driver, the party that determines the pace, the goals, the form, etc., while the student is the subject of the teaching activity. If you think about it for more than a minute, that should seem completely ridiculous. |
| 09:06:14 | <earthy> | dminuoso: yeah. no. |
| 09:06:39 | <dminuoso> | Yeah yes. In the end knowledge can only be learned by yourself, teachers can - at best - guide you on that path. |
| 09:06:58 | <sedeki> | "Learning Haskell is not a spectator sport" |
| 09:06:58 | <tdammers> | That's not to say that teachers can't be incredibly valuable. It's just that the model "I put knowledge into your head" is not how that works |
| 09:06:59 | <Akronymus> | I had it quite easy for a long time in school, so I never learned to learn. |
| 09:07:15 | <dminuoso> | tdammers: Or perhaps you just have a biased interpretation of the word "teacher" |
| 09:07:17 | <Akronymus> | Which caused me to trip and fall flat later on, when I didn't just /get/ it |
| 09:07:22 | <earthy> | dminuoso: that is the 'montessori' method, which actually does have teachers as a required ingredient. |
| 09:07:28 | <maerwald> | 1. you need to figure out how your brains works, so you can 2. apply your brains natural thought process to problems and new ideas |
| 09:07:34 | <tdammers> | Akronymus: same here, though by now, I have realized that I can learn just fine, what I actually have trouble with is conforming to arbitrary external norms and expectations |
| 09:07:37 | <maerwald> | you don't learn that in school |
| 09:07:45 | <ldlework> | I'm worried that after studying and picking up Haskell the last few weeks, that when I start my new TypeScript job in a few days my brain is just going to be completely broken |
| 09:08:01 | <earthy> | ofcourse, we need to distinguish 'teaching' from 'instruction'. |
| 09:08:07 | <Akronymus> | tdammers if I have the why it isn't that hard for me to learn something. |
| 09:08:09 | <dminuoso> | earthy: It's just an observation that the only person that can put new information into my brain is myself. |
| 09:08:12 | <tdammers> | dminuoso: I'm criticizing the word "teaching". "Learning" captures the process much better. |
| 09:08:17 | <Akronymus> | (Why it is useful, why it is like that and such) |
| 09:08:19 | <maerwald> | E.g. I remember monochrom saying he looks at problems/ideas in a "gamification" way... I envy that, because I can't do it. |
| 09:08:22 | <Akronymus> | But rote memorization... |
| 09:08:22 | <dminuoso> | tdammers: I see. Yes, I agree. |
| 09:08:35 | <Akronymus> | I just can't keep such information in my head. |
| 09:08:38 | <dminuoso> | And Im proposing the ideal teacher is just somebody who assists in your learning process. |
| 09:08:45 | <Akronymus> | I personally quite like the method of asking questions to teach. |
| 09:08:45 | <earthy> | dminuoso: but you *won't* if you're not exposed to new information |
| 09:08:51 | <dminuoso> | Music teachers have been doing this for centuries. |
| 09:08:53 | <ldlework> | Akronymus: socratic method |
| 09:08:56 | <earthy> | and you won't be able to if you're exposed to too much new information |
| 09:08:57 | <Akronymus> | Yeah that one |
| 09:09:01 | <tdammers> | Akronymus: rote memorization is something I have had huge problems with for a long time. Two things helped me with that: running and drumming. |
| 09:09:15 | <Akronymus> | tdammers do you have a "minds eye" |
| 09:09:21 | <tdammers> | a what? |
| 09:09:30 | <Akronymus> | Able to visualize images in your head |
| 09:09:38 | × | sedeki quits (~textual@user/sedeki) (Quit: Textual IRC Client: www.textualapp.com) |
| 09:09:44 | <dminuoso> | earthy: Sure, but the actual learning process still happens in the students head and practice. |
| 09:09:54 | → | Guest66 joins (~Guest66@2a02:26f7:c351:8000:0:41c7:95c6:c12d) |
| 09:09:58 | <earthy> | so the role of a good teacher is to expose you to the right amount of information at the appropriate time for you to learn it. |
| 09:10:11 | <maerwald> | To me, learning is all about "navigation". I start to understand something when I figure out how to navigate through the topic. So I need a lot of context. |
| 09:10:12 | <tdammers> | No better than the average person I'd say. My usual mode of thinking isn't very visual though, it's mostly abstract concepts somehow. |
| 09:10:14 | <dminuoso> | For school, the actual learning - if any - happens if the student repeatedly exposes himself to the same knowledge and goes indepth. Something that can only realistically occur at home. |
| 09:10:15 | <Akronymus> | earthy and foster an interest |
| 09:10:16 | <earthy> | and to expose you to those bits that haven't stuck when you need it |
| 09:10:32 | <Akronymus> | tdammers https://en.wikipedia.org/wiki/Aphantasia |
| 09:10:52 | × | Guest66 quits (~Guest66@2a02:26f7:c351:8000:0:41c7:95c6:c12d) (Client Quit) |
| 09:11:01 | <Akronymus> | Is "counting sheeps" figurative or literal? tdammers |
| 09:11:08 | <maerwald> | It's amazing, learning types def. need more research. |
| 09:12:18 | <tdammers> | maerwald: "learning types" has been largely debunked, and has never been based on experimental evidence. what actually works is multi-modal learning, the key is not to match the student's "learning type", but to maximize their engagement with the material across as many senses as possible, and as actively as possible |
| 09:13:01 | <tdammers> | Akronymus: no, Aphantasia is not it. I *can* visualize things just fine, I'm actually fairly good at spatial insight and such. It's just not my default mode of thinking. |
| 09:13:13 | <Akronymus> | Gotcha. |
| 09:13:14 | <tdammers> | I don't *have* to visualize things in order to think them. |
| 09:13:24 | <Akronymus> | I have pretty decent spatial thinking too. |
| 09:13:29 | <Akronymus> | But I literally can't visualize |
| 09:13:38 | <earthy> | one thing my kids' school does is 'writing dance' which helps the kids translate big movements into shapes and shape into movement. that's definitely multimodal. :) |
| 09:14:28 | <tdammers> | earthy: it is. only downside of that is that it lacks connection to actual uses. apart from artistic expression, there's little practical reason why you would dance a letter |
| 09:14:42 | <tdammers> | but on a more fundamental level, it's great |
| 09:14:54 | <maerwald> | tdammers: IMO, learning types aren't for teaching purposes, but solely for yourself to figure out how to attack a problem and what your shortcomings are |
| 09:15:03 | <tdammers> | in fact, I think the arts are grossly under- and misrepresented in education |
| 09:15:25 | <maerwald> | e.g. when I worked in blockchain, due to my "figure out navigation" approache, I almost burned out very early on |
| 09:15:36 | <maerwald> | because navigating in the topic of blockchain is insanely hard |
| 09:15:45 | <tdammers> | maerwald: ah, OK. "learning types" is generally taken to refer to the theory of learning types, which states that best learning results are achieved by matching the mode of presentation to the learner's preferred mode |
| 09:16:04 | <Akronymus> | tdammers maths should be taught like an art, to a certain extent. |
| 09:16:10 | <earthy> | you mean 'styles', tdammers? |
| 09:16:40 | <tdammers> | ah yes, 'learning styles' is the word |
| 09:16:52 | <earthy> | (visual, kinesthetic, auditory). yeah. that's been quite well debunked. |
| 09:17:04 | <tdammers> | wikipedia roasts them rather savagely |
| 09:18:03 | <tdammers> | "a range of competing and debunked theories", "Studies further show that teachers cannot assess the learning style of their students accurately." |
| 09:18:26 | <maerwald> | for me it's more about "thinking style" |
| 09:18:45 | <maerwald> | and having worked with other coders, I'm aware there are substantial differences |
| 09:18:59 | <maerwald> | and these lead to substantially different code |
| 09:19:15 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 09:19:18 | <Akronymus> | tdammers wikipedia is quite shit for anything that heavily relies on opinions IME |
| 09:19:28 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 09:19:49 | <tdammers> | it is, but 'learning styles' aren't subject to opinion, the topic has been well researched |
| 09:19:57 | → | waleee joins (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) |
| 09:20:07 | <Akronymus> | Yeah I can give you that |
| 09:23:56 | <maerwald[m]> | Too bad monochrom isn't awake :p |
| 09:24:01 | × | tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 09:24:09 | <maerwald[m]> | Surely he'd roast us now |
| 09:25:06 | <tdammers> | back on the topic of rote memorization, though: once you realize that, just like physical exercise and neuromotoric training, it is an almost mechanical process, it becomes easier |
| 09:26:25 | <tdammers> | simply because that impulse that says if only you understand this better you will remember it automatically does not work here, and realizing this makes that impulse go away, and just doing the bloody thing becomes less daunting |
| 09:26:40 | <maerwald[m]> | I found the only way to extend my thinking style was to work very closely with other coders (pair programming, review sessions, debates ) |
| 09:26:57 | <Akronymus> | Some topics simply don't stick despite trying my best, when rote learning |
| 09:27:06 | <Akronymus> | As in daily repetitions. |
| 09:27:27 | <Akronymus> | For example, geography or history. |
| 09:28:02 | <Akronymus> | Literally every single day from when it was introduced in class and until the test where it was relevant. |
| 09:28:16 | <Akronymus> | Still forgot it during the test or soon after. |
| 09:28:20 | <tdammers> | fwiw, the way these subjects are traditionally taught is absolute shit |
| 09:28:41 | <Akronymus> | Yeah, why is it important to know the exact date of it? |
| 09:28:50 | <Akronymus> | Instead of knowing WHY it happened. |
| 09:28:58 | <Akronymus> | What was the motivation for x doing y |
| 09:28:58 | → | qbt joins (~edun@user/edun) |
| 09:29:03 | <tdammers> | indeed. and the stuff that *actually* matters is conveniently left out, because it is, frankly, a bit awkward |
| 09:29:06 | <Akronymus> | How was the culture at the time and location |
| 09:29:19 | → | max22- joins (~maxime@2a01cb088335980025f007adc3069cd5.ipv6.abo.wanadoo.fr) |
| 09:29:30 | <Akronymus> | For example, why is it important to know when hitler was elected? |
| 09:29:30 | <tdammers> | I also find it quite strange how commonplace Great Man Theory thinking still is |
| 09:29:50 | <Akronymus> | Where it is much more important to know why he was. |
| 09:30:43 | <tdammers> | I mean, yeah, Hitler certainly was an important figure, but I daresay Europe would have caused a worldwide carnage one way or another, with Hitler or without. He was a spark that ignited things, but the gunpowder had been in place for a long time. |
| 09:31:01 | <Akronymus> | Hitler was a product of the times. |
| 09:31:13 | <Akronymus> | If it wasn't him it'd have been someone else |
| 09:31:33 | <tdammers> | Yes. Maybe not in this exact form, but shit would have hit the fan big time either way. |
| 09:31:34 | <Akronymus> | Hitler partially got elected because of promising to fix the economy |
| 09:31:59 | <Akronymus> | The economy was broken in a large part because of the extreme reparations from ww1. |
| 09:32:12 | <Akronymus> | Along with having to give a LOT of industry over to france |
| 09:33:08 | <Akronymus> | Also: Fascism was quite attractive because the communists were literally on the street beating people up |
| 09:33:14 | <Akronymus> | Or well, fascists. |
| 09:33:24 | <Akronymus> | There are MANY causes. |
| 09:33:29 | <Akronymus> | All interwoven. |
| 09:34:12 | <Akronymus> | But what do we learn: on the 19th august 1934 got elected president |
| 09:34:24 | <tdammers> | There's even more; German culture at the time already had a long history of being caught between rationality and romanticism, between radical futurism and radical conservatism. It's a cultural theme that can be traced back into the Middle Ages. |
| 09:34:35 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 09:34:52 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 09:35:40 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds) |
| 09:36:09 | <tdammers> | And that, in turn, is a consequence of how the Roman Empire and the Germanic peoples interacted throughout antiquity, and *that* in turn is a product of the collapse of the mediterranean Bronze Age economy leaving a gap that the Romans jumped into, and all that, in turn, is part of the bigger picture of humans discovering agriculture and starting to improve it. |
| 09:36:55 | <tdammers> | But they don't tell you about those big pictures, they don't tell you about the interesting transitions; they zoom in on the boring stable periods in between, and on the events for which plenty of sources exist, because that's so easy. |
| 09:37:01 | <Akronymus> | While you don't have to go that deep into why's, it is certainly easier to learn than just having dates and such |
| 09:37:27 | <tdammers> | It also makes a lot more sense |
| 09:37:39 | × | gentauro quits (~gentauro@user/gentauro) (Ping timeout: 265 seconds) |
| 09:37:40 | <Akronymus> | But it takes a LOT more effort. |
| 09:39:31 | <tdammers> | Like, why did WWI happen at the time it did? Well, because at the time, industrialization had been going on for a while, and the old feudal system, which had worked so well throughout the agricultural age, was showing its inadequacy, and that caused all sorts of friction - aristocrats trying to maintain the status quo despite no longer being as necessary as they were, workers becoming an important |
| 09:39:33 | <tdammers> | demographic, industrial capitalists and merchants holding economic power, etc. |
| 09:39:49 | <tdammers> | All this happened not because someone somewhere said something or declared war on someone |
| 09:40:09 | <tdammers> | it happened because the world had changed due to new technology being invented |
| 09:40:16 | <Akronymus> | Also there was a quite intricate web of alliances and defensive pacts. |
| 09:40:24 | <Akronymus> | That caused a domino effect. |
| 09:40:53 | <Akronymus> | So, instead of many local conflicts, it snowballed into the great war, or as we know it, ww1 |
| 09:41:01 | <tdammers> | sure, yes. but that's details on the larger backdrop of the old system falling apart, creating a power vacuum, and various forces struggling to chomp up a part of it |
| 09:41:49 | <Akronymus> | I meant it more in the sense, that the alliances are what makes us refer to it as ww1 rather than as many smaller things now. |
| 09:41:51 | <tdammers> | there's also the part where WWI coincides with a peculiar moment in military tech: a massive increase in firepower and range, but no comparable increase in mobility |
| 09:42:50 | <Akronymus> | And tactics lagged behind quite badly. |
| 09:42:58 | <Akronymus> | Or strategy. |
| 09:43:07 | <Akronymus> | Keep confusing the two |
| 09:43:29 | <tdammers> | so now you have belligerents who, unlike in earlier conflicts, have no problem defending their positions, but advancing is near impossible because the other side also has strong defenses, and so what happens is you have two armies rushing towards each other, and the moment they meet, the front line solidifies and everyone just keeps shelling each other until one side runs out of men or ammunition |
| 09:44:09 | <Akronymus> | Or they literally are too sick to continue on |
| 09:44:24 | <Akronymus> | Because hygiene wasn't very good. |
| 09:45:04 | <tdammers> | yeah, same thing - it doesn't matter whether you kill or cripple the opponent, or just make them too sick to fight. In fact, sick is better, because a sick man needs to be nursed, which binds additional personnel long-term, whereas a dead man can be buried in an hour |
| 09:45:21 | <tdammers> | hmm, also I just realized this isn't #-offtopic, lol |
| 09:45:26 | <Akronymus> | Oh. |
| 09:45:36 | <Akronymus> | #haskell-offtopic ,right? |
| 09:48:57 | → | tromp joins (~textual@dhcp-077-249-230-040.chello.nl) |
| 09:49:28 | → | gentauro joins (~gentauro@user/gentauro) |
| 09:50:09 | × | infinity0 quits (~infinity0@occupy.ecodis.net) (Ping timeout: 268 seconds) |
| 09:50:20 | → | Drezil joins (~drezilkif@2001:470:69fc:105::7f8) |
| 09:51:41 | × | Drezil quits (~drezilkif@2001:470:69fc:105::7f8) (Client Quit) |
| 09:51:53 | → | Drezil joins (~drezilkif@2001:470:69fc:105::7f8) |
| 09:54:03 | → | infinity0 joins (~infinity0@occupy.ecodis.net) |
| 09:55:09 | ← | Drezil parts (~drezilkif@2001:470:69fc:105::7f8) () |
| 09:59:58 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 10:00:11 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 10:02:17 | × | tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 10:04:51 | × | mousey quits (~sky@gateway/tor-sasl/mousey) (Ping timeout: 276 seconds) |
| 10:09:21 | → | __celeste joins (~celeste@2600:8803:9403:b600::b6f) |
| 10:09:51 | × | keltono quits (~kelton@x-160-94-179-178.acm.umn.edu) (Ping timeout: 250 seconds) |
| 10:10:58 | → | tromp joins (~textual@dhcp-077-249-230-040.chello.nl) |
| 10:12:28 | → | keltono joins (~kelton@x-160-94-179-178.acm.umn.edu) |
| 10:18:31 | × | azeem quits (~azeem@emp-91-123.eduroam.uu.se) (Ping timeout: 268 seconds) |
| 10:20:04 | → | azeem joins (~azeem@emp-91-123.eduroam.uu.se) |
| 10:23:55 | ← | JeHugawa parts (~jehugawa@2a01:4f9:c010:4649::1) (WeeChat 3.0) |
| 10:28:34 | × | biberu quits (~biberu@user/biberu) (Read error: Connection reset by peer) |
| 10:29:03 | → | notzmv joins (~zmv@user/notzmv) |
| 10:37:06 | → | biberu joins (~biberu@user/biberu) |
| 10:39:15 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 10:44:25 | × | peutri quits (~peutri@ns317027.ip-94-23-46.eu) (Ping timeout: 252 seconds) |
| 10:45:13 | → | peutri joins (~peutri@ns317027.ip-94-23-46.eu) |
| 10:48:01 | → | gehmehgeh joins (~user@user/gehmehgeh) |
| 10:50:28 | → | dunj3 joins (~dunj3@2001:16b8:305a:a200:87e0:bcb5:daf8:ae0a) |
| 10:56:38 | × | vysn quits (~vysn@user/vysn) (Quit: WeeChat 3.2) |
| 10:56:56 | → | vysn joins (~vysn@user/vysn) |
| 11:00:57 | → | alx741 joins (~alx741@181.196.68.49) |
| 11:04:42 | → | hendursaga joins (~weechat@user/hendursaga) |
| 11:06:58 | × | azeem quits (~azeem@emp-91-123.eduroam.uu.se) (Ping timeout: 252 seconds) |
| 11:09:47 | phma_ | is now known as phma |
| 11:09:52 | → | azeem joins (~azeem@emp-91-123.eduroam.uu.se) |
| 11:09:57 | → | Everything joins (~Everythin@37.115.210.35) |
| 11:23:17 | → | mc47 joins (~mc47@xmonad/TheMC47) |
| 11:33:28 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 11:33:28 | × | MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer) |
| 11:35:36 | → | MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com) |
| 11:41:50 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:2c24:ccb8:c224:8028) |
| 11:41:50 | × | Vajb quits (~Vajb@n1fdw1j4uyo9saqj8-2.v6.elisa-mobile.fi) (Read error: Connection reset by peer) |
| 11:42:11 | → | Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
| 11:46:04 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:2c24:ccb8:c224:8028) (Ping timeout: 252 seconds) |
| 11:46:52 | × | __celeste quits (~celeste@2600:8803:9403:b600::b6f) (Quit: farewell) |
| 11:49:15 | → | xlei joins (akans@pool-68-129-84-118.nycmny.fios.verizon.net) |
| 11:54:40 | × | Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 11:58:37 | → | dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net) |
| 12:02:38 | → | Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
| 12:05:16 | × | dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Quit: WeeChat 3.2.1) |
| 12:05:34 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds) |
| 12:06:13 | × | max22- quits (~maxime@2a01cb088335980025f007adc3069cd5.ipv6.abo.wanadoo.fr) (Ping timeout: 268 seconds) |
| 12:08:59 | → | burnsidesLlama joins (~burnsides@dhcp168-024.wadham.ox.ac.uk) |
| 12:10:45 | × | hyiltiz quits (~quassel@31.220.5.250) (Ping timeout: 268 seconds) |
| 12:12:53 | <Gurkenglas> | Is it dependent types when you can have an if condition that depends on the dependent type variable or when you can't or both? |
| 12:13:21 | → | acidjnk_new joins (~acidjnk@p5487d0ba.dip0.t-ipconnect.de) |
| 12:15:47 | <hpc> | with dependent types you can write things like |
| 12:16:00 | <hpc> | f :: (b :: Bool) -> if b then String else Int |
| 12:16:05 | <hpc> | f False = "false" |
| 12:16:06 | <hpc> | f True = 1 |
| 12:16:25 | × | acidjnk quits (~acidjnk@p200300d0c720300449bf8ace8b93cd9d.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
| 12:16:42 | <Gurkenglas> | can that be done without carrying them around at runtime? |
| 12:16:52 | → | ub joins (~Thunderbi@178.165.181.26.wireless.dyn.drei.com) |
| 12:17:13 | <Gurkenglas> | oh wait i misread |
| 12:17:16 | <dminuoso> | In this limited form, sure. It's a type checking problem. |
| 12:17:39 | × | tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 12:18:00 | <Gurkenglas> | okay so dependent types is just what i took for granted, that * is more than just what's generated by (->) and (,) and (|). |
| 12:18:33 | <dminuoso> | One description I liked is the lambda cube. |
| 12:19:27 | <dminuoso> | Types binding types gives type functions, terms binding types gives polymorphism, types binding terms gives dependent types. |
| 12:20:00 | × | ubert quits (~Thunderbi@178.165.181.26.wireless.dyn.drei.com) (Ping timeout: 268 seconds) |
| 12:20:00 | ub | is now known as ubert |
| 12:23:51 | → | hyiltiz joins (~quassel@31.220.5.250) |
| 12:25:43 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "") |
| 12:26:43 | → | TranquilEcho joins (~grom@user/tranquilecho) |
| 12:35:08 | → | [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470) |
| 12:35:36 | × | [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection) |
| 12:35:59 | → | [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470) |
| 12:40:56 | × | burnsidesLlama quits (~burnsides@dhcp168-024.wadham.ox.ac.uk) (Remote host closed the connection) |
| 12:41:30 | × | acidjnk_new quits (~acidjnk@p5487d0ba.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
| 12:41:41 | × | benin036932301 quits (~benin@183.82.24.197) (Quit: The Lounge - https://thelounge.chat) |
| 12:44:33 | × | jstolarek quits (~jstolarek@ers4.neoplus.adsl.tpnet.pl) (Quit: leaving) |
| 12:44:51 | → | jstolarek joins (~jstolarek@ers4.neoplus.adsl.tpnet.pl) |
| 12:45:00 | → | pbrisbin joins (~patrick@pool-173-49-147-250.phlapa.fios.verizon.net) |
| 12:45:18 | × | jstolarek quits (~jstolarek@ers4.neoplus.adsl.tpnet.pl) (Client Quit) |
| 12:45:34 | → | jstolarek joins (~jstolarek@ers4.neoplus.adsl.tpnet.pl) |
| 12:45:46 | × | jstolarek quits (~jstolarek@ers4.neoplus.adsl.tpnet.pl) (Client Quit) |
| 12:45:54 | → | jstolarek joins (~jstolarek@ers4.neoplus.adsl.tpnet.pl) |
| 12:45:59 | × | jstolarek quits (~jstolarek@ers4.neoplus.adsl.tpnet.pl) (Client Quit) |
| 12:46:14 | → | jstolarek joins (~jstolarek@ers4.neoplus.adsl.tpnet.pl) |
| 12:46:40 | × | jstolarek quits (~jstolarek@ers4.neoplus.adsl.tpnet.pl) (Client Quit) |
| 12:46:48 | → | jstolarek joins (~jstolarek@ers4.neoplus.adsl.tpnet.pl) |
| 12:46:52 | × | jstolarek quits (~jstolarek@ers4.neoplus.adsl.tpnet.pl) (Client Quit) |
| 12:47:00 | → | machinedgod joins (~machinedg@135-23-192-217.cpe.pppoe.ca) |
| 12:47:09 | → | jstolarek joins (~jstolarek@ers4.neoplus.adsl.tpnet.pl) |
| 12:47:27 | × | jstolarek quits (~jstolarek@ers4.neoplus.adsl.tpnet.pl) (Client Quit) |
| 12:47:37 | <yin[m]> | what is tha state od dependent types in haskell at the noment? |
| 12:47:37 | → | jstolarek joins (~jstolarek@ers4.neoplus.adsl.tpnet.pl) |
| 12:48:11 | <yin[m]> | s/od/of/ |
| 12:48:42 | × | pbrisbin quits (~patrick@pool-173-49-147-250.phlapa.fios.verizon.net) (Client Quit) |
| 12:49:57 | → | pbrisbin joins (~patrick@pool-173-49-147-250.phlapa.fios.verizon.net) |
| 12:50:18 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 12:50:31 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 12:52:39 | → | Guest|98 joins (~Guest|98@91.226.35.204) |
| 12:52:47 | × | Guest|98 quits (~Guest|98@91.226.35.204) (Client Quit) |
| 12:53:19 | <yin[m]> | oh cool. editing a comment in matrix translates to substitutions. cool cool |
| 12:53:41 | <yin[m]> | s/cool/so/ |
| 12:53:58 | <sshine> | ha, nice |
| 12:54:12 | <yin[m]> | s/oh cool. editing a comment in matrix translates to substitutions. cool cool/oh cool. editing a comment in matrix translates to substitutions/ |
| 12:54:16 | × | turlando quits (~turlando@user/turlando) (Ping timeout: 252 seconds) |
| 12:54:22 | <sshine> | I'm tempted to like Matrix. sadly, I really like irssi. |
| 12:54:27 | <yin[m]> | imperfect, but works |
| 12:54:31 | × | MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer) |
| 12:54:50 | <sshine> | well... I think being able to copy-paste pictures and have them convert to a URL for those who use IRC is *neat*. |
| 12:55:10 | → | MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com) |
| 12:55:28 | <sshine> | I also don't really experience Matrix users garble out by accident (I've heard that it can sometimes accidentally send markup language to IRC.) |
| 12:55:38 | <sshine> | sorry, this was offtopic. |
| 12:55:55 | <sshine> | https://www.tweag.io/blog/2021-02-05-refinement-types/ is a somewhat recent status update on the progress of dependent types, but not an actual one. |
| 12:56:24 | <yin[m]> | thanks! |
| 12:56:46 | → | turlando joins (~turlando@93-42-250-112.ip89.fastwebnet.it) |
| 12:56:46 | × | turlando quits (~turlando@93-42-250-112.ip89.fastwebnet.it) (Changing host) |
| 12:56:46 | → | turlando joins (~turlando@user/turlando) |
| 12:56:47 | <sshine> | yin[m], I'd look for a blog post by tweag, richard eisenberg og vladislav zavialov (int-index). |
| 12:56:53 | <sshine> | s/og/or/ |
| 12:57:08 | <sshine> | oops, I'm guessing it corrected the wrong 'og' :) |
| 12:57:50 | <sshine> | yin[m], https://www.reddit.com/r/haskell/comments/pabk7o/dependent_haskell_with_vladislav_zavialov/ is 23 days old |
| 12:58:08 | <sshine> | yin[m], it's a Haskell Weekly interview. |
| 12:58:22 | <sshine> | yin[m], https://haskellweekly.news/episode/51.html |
| 12:58:29 | → | shapr joins (~user@pool-100-36-247-68.washdc.fios.verizon.net) |
| 12:59:42 | → | jokleinn joins (~jokleinn@user/jokleinn) |
| 12:59:56 | <raehik> | How can I get the size of a pointer in C, in Haskell? |
| 13:00:10 | × | hyiltiz quits (~quassel@31.220.5.250) (Ping timeout: 265 seconds) |
| 13:00:34 | <raehik> | I'm currently doing #{size TYPE *} and using hsc2hs, but I wonder if I don't need that |
| 13:02:00 | <Akronymus> | matrix is pretty cool. |
| 13:02:53 | → | hyiltiz joins (~quassel@31.220.5.250) |
| 13:03:55 | → | lbseale joins (~lbseale@user/ep1ctetus) |
| 13:04:29 | <Akronymus> | Joining a room takes a while to show up on the matrix side though. |
| 13:04:52 | → | akronymus[m] joins (~akronymus@2001:470:69fc:105::f7be) |
| 13:05:01 | <sshine> | Akronymus, takes a while for whom? |
| 13:05:13 | <Akronymus> | For me |
| 13:05:20 | <sshine> | Akronymus, there's a delay on joining, as in they queue those operations? |
| 13:05:27 | <Akronymus> | Probably because I am not on the matrix.org homeserver |
| 13:05:35 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:c883:fb5e:dc95:e39d) |
| 13:05:38 | <Akronymus> | But rather a private one. |
| 13:05:49 | × | awpr quits (uid446117@id-446117.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 13:05:55 | <sshine> | and it syncs with matrix.org and that comes in waves? |
| 13:06:09 | <Akronymus> | Naw, just takes a while. |
| 13:06:20 | <Akronymus> | Probably syncinc state. |
| 13:06:58 | <Akronymus> | And technically, joining IRC rooms on libera doesn't even need to talk to matrix.org itself |
| 13:08:35 | <zzz> | i wonder if this works |
| 13:08:41 | <zzz> | s/wonder/test |
| 13:08:55 | <zzz> | it does not |
| 13:09:10 | <zzz> | s/wonder/test/ |
| 13:09:25 | <zzz> | i wonder if this works |
| 13:09:27 | <zzz> | s/wonder/test/ |
| 13:09:39 | → | System123 joins (~System123@x590feea0.dyn.telefonica.de) |
| 13:09:58 | <zzz> | nope |
| 13:09:58 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:c883:fb5e:dc95:e39d) (Ping timeout: 260 seconds) |
| 13:10:14 | <Akronymus> | No sedbot here. :( |
| 13:10:31 | <xsperry> | raehik: sizeOf nullPtr |
| 13:11:09 | <zzz> | i was testing to see if matrix would turn substitutiona into edits |
| 13:11:38 | <zzz> | s/substitutiona/substitutions |
| 13:11:45 | <zzz> | and it doesnt |
| 13:12:02 | <geekosaur> | IRC generally doesn't |
| 13:12:33 | <zzz> | it just turns edits into (imperfect) subs |
| 13:14:19 | <[exa]> | is there some good authoritative guide on how to setup cabal tests in some reasonable way for new projects? something I could show to students and hope they don't mess it up too much |
| 13:14:40 | × | MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Ping timeout: 268 seconds) |
| 13:15:16 | → | burnsidesLlama joins (~burnsides@dhcp168-024.wadham.ox.ac.uk) |
| 13:16:36 | <raehik> | xsperry: perfect that's what I was looking for, many thanks! |
| 13:17:36 | × | ubert quits (~Thunderbi@178.165.181.26.wireless.dyn.drei.com) (Read error: Connection reset by peer) |
| 13:17:55 | → | ubert joins (~Thunderbi@178.165.181.26.wireless.dyn.drei.com) |
| 13:18:04 | → | slowButPresent joins (~slowButPr@user/slowbutpresent) |
| 13:18:32 | → | ubert1 joins (~Thunderbi@178.165.181.26.wireless.dyn.drei.com) |
| 13:19:05 | <xsperry> | np! |
| 13:19:08 | → | MQ-17J joins (~MQ-17J@2607:fb90:4c:3555:c992:1c4a:cf9e:7fd6) |
| 13:19:15 | <dminuoso> | raehik: Fun fact, on some exotic architectures the pointer size might depend on the pointed-at type. |
| 13:19:32 | <dminuoso> | Specifically I recall a TI DSP that did this |
| 13:19:48 | <dminuoso> | It was some weird 17 bits for function pointers I think |
| 13:19:50 | <raehik> | dminuoso: hahaha oh lord. I was reading a bit about func ptrs being potentially troublesome, but figured it was better than hardcoding 8 |
| 13:19:59 | × | burnsidesLlama quits (~burnsides@dhcp168-024.wadham.ox.ac.uk) (Ping timeout: 265 seconds) |
| 13:21:27 | <raehik> | there's a `nullFunPtr :: FunPtr a` too in Foreign.Ptr, wonder if GHC's internals support it |
| 13:22:34 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:fcfd:5153:b61b:fe3d) |
| 13:22:35 | × | ubert quits (~Thunderbi@178.165.181.26.wireless.dyn.drei.com) (Ping timeout: 260 seconds) |
| 13:22:36 | ubert1 | is now known as ubert |
| 13:23:46 | → | jumper149 joins (~jumper149@80.240.31.34) |
| 13:25:38 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 13:25:51 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 13:26:09 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Client Quit) |
| 13:26:22 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 13:27:16 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:fcfd:5153:b61b:fe3d) (Ping timeout: 252 seconds) |
| 13:28:22 | → | tromp joins (~textual@dhcp-077-249-230-040.chello.nl) |
| 13:31:29 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 13:31:42 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 13:35:38 | × | hyiltiz quits (~quassel@31.220.5.250) (Ping timeout: 268 seconds) |
| 13:38:56 | × | arkanoid quits (~arkanoid@2-238-151-49.ip244.fastwebnet.it) (Ping timeout: 268 seconds) |
| 13:41:31 | → | hyiltiz joins (~quassel@31.220.5.250) |
| 13:41:38 | → | arkanoid joins (~arkanoid@2-238-151-49.ip244.fastwebnet.it) |
| 13:49:39 | → | thyriaen joins (~thyriaen@dynamic-078-054-146-050.78.54.pool.telefonica.de) |
| 13:50:20 | → | burnsidesLlama joins (~burnsides@dhcp168-024.wadham.ox.ac.uk) |
| 13:51:49 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 13:52:02 | → | vaucouleur joins (~vaucouleu@176.124.42.130) |
| 13:52:06 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 13:52:10 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Client Quit) |
| 13:52:31 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 13:52:34 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Client Quit) |
| 13:52:47 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 13:54:43 | × | vaucouleur quits (~vaucouleu@176.124.42.130) (Client Quit) |
| 13:54:47 | → | vaucouleur_ joins (~vaucouleu@176.124.42.130) |
| 13:54:54 | × | vaucouleur_ quits (~vaucouleu@176.124.42.130) (Remote host closed the connection) |
| 13:55:08 | → | vaucouleur joins (~vaucouleu@176.124.42.130) |
| 13:55:12 | → | vaucouleur_ joins (~vaucouleu@176.124.42.130) |
| 13:55:23 | × | vaucouleur_ quits (~vaucouleu@176.124.42.130) (Remote host closed the connection) |
| 13:55:23 | × | vaucouleur quits (~vaucouleu@176.124.42.130) (Remote host closed the connection) |
| 13:55:37 | → | vaucouleur joins (~vaucouleu@176.124.42.130) |
| 13:55:40 | × | burnsidesLlama quits (~burnsides@dhcp168-024.wadham.ox.ac.uk) (Ping timeout: 240 seconds) |
| 14:01:16 | <jumper149> | Hi, is there something like `traverse` for `Divisible f` (instead of `Applicative f`)? |
| 14:01:37 | <jumper149> | I just stumbled over `Divisible`, so I'm not even sure if the question makes sense though^^ |
| 14:01:56 | → | ubert1 joins (~Thunderbi@178.165.161.81.wireless.dyn.drei.com) |
| 14:02:40 | → | mikoto-chan joins (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) |
| 14:03:02 | → | max22- joins (~maxime@2a01cb0883359800e3a3878268dcbc1e.ipv6.abo.wanadoo.fr) |
| 14:03:31 | × | ubert quits (~Thunderbi@178.165.181.26.wireless.dyn.drei.com) (Ping timeout: 252 seconds) |
| 14:03:31 | ubert1 | is now known as ubert |
| 14:04:12 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 14:04:22 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 14:10:59 | × | ubert quits (~Thunderbi@178.165.161.81.wireless.dyn.drei.com) (Remote host closed the connection) |
| 14:11:37 | → | ubert joins (~Thunderbi@178.165.161.81.wireless.dyn.drei.com) |
| 14:12:15 | → | shriekingnoise joins (~shrieking@186.137.144.80) |
| 14:12:52 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 14:13:13 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 14:13:26 | → | hnOsmium0001 joins (uid453710@id-453710.hampstead.irccloud.com) |
| 14:13:49 | × | System123 quits (~System123@x590feea0.dyn.telefonica.de) (Remote host closed the connection) |
| 14:14:09 | × | Akronymus quits (~Akronymus@85.31.8.180) (Quit: Client closed) |
| 14:15:34 | → | doyougnu joins (~user@c-73-25-202-122.hsd1.or.comcast.net) |
| 14:17:36 | × | pavonia quits (~user@user/siracusa) (Quit: Bye!) |
| 14:19:38 | → | ub joins (~Thunderbi@178.165.161.81.wireless.dyn.drei.com) |
| 14:21:14 | × | dunj3 quits (~dunj3@2001:16b8:305a:a200:87e0:bcb5:daf8:ae0a) (Remote host closed the connection) |
| 14:21:40 | × | tdammers quits (~tdammers@77.109.72.213.res.static.edpnet.net) (Ping timeout: 240 seconds) |
| 14:24:46 | → | tdammers joins (~tdammers@77.109.72.213.res.static.edpnet.net) |
| 14:26:13 | × | ubert quits (~Thunderbi@178.165.161.81.wireless.dyn.drei.com) (Read error: Connection reset by peer) |
| 14:26:13 | ub | is now known as ubert |
| 14:26:27 | → | ubert1 joins (~Thunderbi@178.165.161.81.wireless.dyn.drei.com) |
| 14:27:51 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 14:27:52 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
| 14:27:52 | → | wroathe joins (~wroathe@user/wroathe) |
| 14:30:28 | × | ubert quits (~Thunderbi@178.165.161.81.wireless.dyn.drei.com) (Ping timeout: 252 seconds) |
| 14:30:28 | ubert1 | is now known as ubert |
| 14:33:19 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 14:33:33 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 14:35:25 | × | tdammers quits (~tdammers@77.109.72.213.res.static.edpnet.net) (Ping timeout: 252 seconds) |
| 14:36:41 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds) |
| 14:37:34 | × | cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.2.1) |
| 14:37:50 | → | Erutuon joins (~Erutuon@user/erutuon) |
| 14:38:05 | × | phma quits (~phma@host-67-44-208-51.hnremote.net) (Read error: Connection reset by peer) |
| 14:38:44 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 14:39:03 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 14:39:25 | → | phma joins (~phma@host-67-44-208-97.hnremote.net) |
| 14:39:38 | → | myShoggoth joins (~myShoggot@97-120-70-214.ptld.qwest.net) |
| 14:44:20 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Read error: Connection reset by peer) |
| 14:46:20 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 14:46:39 | → | timCF joins (~timCF@m91-129-108-244.cust.tele2.ee) |
| 14:50:10 | × | kenran quits (~kenran@b2b-37-24-119-190.unitymedia.biz) (Quit: WeeChat info:version) |
| 14:53:30 | <timCF> | Hi! I have a stange issue with GHC-8.6.5. Maybe it's related only to stack build tool, I don't know. For some reason `stack build` ignores redundant `data` and `newtype` definitions in some file, for example this definition is clearly redundant |
| 14:53:34 | <timCF> | https://github.com/tkachuk-labs/bitfinex-client/blob/442ce95ca17ae35c4e64224f737945f40d8aaf29/src/BitfinexClient/Data/Type.hs#L130-L132 |
| 14:54:10 | × | lbseale quits (~lbseale@user/ep1ctetus) (Remote host closed the connection) |
| 14:54:34 | <timCF> | I have couple of default ghc options and extensions in my project, but I can't see how they can force stack to ignore these warnings |
| 14:54:36 | → | lbseale joins (~lbseale@user/ep1ctetus) |
| 14:55:11 | <timCF> | https://github.com/tkachuk-labs/bitfinex-client/blob/442ce95ca17ae35c4e64224f737945f40d8aaf29/package.yaml#L47-L72 |
| 14:59:07 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 14:59:15 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 15:00:48 | × | [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection) |
| 15:02:51 | → | amahl joins (~amahl@dsl-jklbng12-54fbca-64.dhcp.inet.fi) |
| 15:03:36 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Client Quit) |
| 15:09:21 | × | chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection) |
| 15:12:04 | <timCF> | Did anybody had similar issues? Seems like `deriving` expression supresses `-Wunused-top-binds` GHC warnings. For example with `data Foo = Foo` GHC produces warning, but `data Foo = Foo deriving (Eq)` compiles without any warnings even in case where `Foo` is not used or exported from the module. |
| 15:12:07 | × | jstolarek quits (~jstolarek@ers4.neoplus.adsl.tpnet.pl) (Ping timeout: 265 seconds) |
| 15:12:31 | → | chexum joins (~quassel@gateway/tor-sasl/chexum) |
| 15:13:56 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 15:17:03 | <geekosaur> | that's because the deriving expression means it is used |
| 15:18:14 | <geekosaur> | and it can't tell for certain that it's not because it would have to check every use of (==) or (/=) — some of which might involve dictionary passing, meaning it doesn't know for certain until runtime |
| 15:18:40 | × | TranquilEcho quits (~grom@user/tranquilecho) (Ping timeout: 240 seconds) |
| 15:19:16 | → | tdammers joins (~tdammers@77.109.72.213.res.static.edpnet.net) |
| 15:19:35 | → | TranquilEcho joins (~grom@user/tranquilecho) |
| 15:20:20 | <timCF> | geekosaur: hmm I'm not sure I understand, because none of Foo type or constructor is exported. Probably GHC consider it's used because instances are always implicitly exported? |
| 15:20:35 | <geekosaur> | yes |
| 15:20:50 | × | mikoto-chan quits (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) (Quit: mikoto-chan) |
| 15:21:40 | <geekosaur> | and there are ways it might handle this better but they'd make compilation even slower than it currently is |
| 15:22:39 | <timCF> | geekosaur: ah, I see, thanks! So there is no any simple way to "fix" this, I guess all sorts of standalone deriving will not help either. Maybe orphan-style deriving in different module might help, but it's not the best practice anyway |
| 15:25:20 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:fcfd:5153:b61b:fe3d) |
| 15:27:33 | × | juhp quits (~juhp@128.106.188.220) (Quit: juhp) |
| 15:27:47 | → | juhp joins (~juhp@128.106.188.220) |
| 15:29:37 | → | vaucouleur_ joins (~vaucouleu@176.124.42.130) |
| 15:33:25 | × | vaucouleur quits (~vaucouleu@176.124.42.130) (Ping timeout: 268 seconds) |
| 15:37:04 | → | Guest6824 joins (~Guest68@117.223.62.136) |
| 15:38:26 | <Guest6824> | I have question about how haskell parses an expression. Function application has precedence 10 while . has precedence 9. Then how is f . g is parsed as a composition rather than applying . to f? |
| 15:38:52 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:fcfd:5153:b61b:fe3d) (Remote host closed the connection) |
| 15:38:55 | <dminuoso> | Guest6824: (.) is applied to f. |
| 15:39:09 | <dminuoso> | the composition is not in the syntax or semantics, but merely in the definition of (.) |
| 15:39:13 | <dminuoso> | @src (.) |
| 15:39:13 | <lambdabot> | (f . g) x = f (g x) |
| 15:39:38 | <dminuoso> | Somewhere in base you can find that definition. So it's merely the semantics of that definition that let us call (.) compositoin |
| 15:40:05 | × | tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 15:40:38 | <Guest6824> | yes, but (.) has less precedence than applying . to f (which has precedence 10 |
| 15:41:07 | <dminuoso> | Ah, but this is an infix operator |
| 15:41:19 | × | timCF quits (~timCF@m91-129-108-244.cust.tele2.ee) (Quit: leaving) |
| 15:41:29 | <Guest6824> | yes |
| 15:41:36 | <dminuoso> | So there's no "whitespace function application" anymore |
| 15:41:44 | <dminuoso> | And indeed, if there was it would take precedence |
| 15:41:46 | <dminuoso> | consider: |
| 15:41:48 | <dminuoso> | f . g x |
| 15:41:56 | <dminuoso> | This parses as: f . (g x) |
| 15:42:54 | → | _ht joins (~quassel@82-169-194-8.biz.kpn.net) |
| 15:43:00 | <Guest6824> | yes |
| 15:43:00 | <dminuoso> | So it's in the grammar to consider `f . g` as an infix operator rather than `f` applied to (.) |
| 15:44:03 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 15:44:13 | <Guest6824> | So if there is an infix operation it takes precedence over function application? |
| 15:44:13 | <geekosaur> | this is not specific to (.), any group of symbols (with some exceptions like |) is an infix operator |
| 15:44:17 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 15:44:40 | <monochrom> | Ugh, there is no function application in "f . g", is what dminuoso is saying. |
| 15:44:56 | <monochrom> | At least not the syntactic kind of function application. |
| 15:45:20 | <monochrom> | And yeah I was wondering why you didn't frame the question with "x + y". |
| 15:45:20 | × | vaucouleur_ quits (~vaucouleu@176.124.42.130) (Read error: Connection reset by peer) |
| 15:46:10 | <tdammers> | it's simply a syntactic rule that says "a token composed out of operator characters is an operator", so it is parsed at expression, operator, expression, rather than expression, function application, expression, function application, expression |
| 15:46:10 | <Guest6824> | I was confused. There is an error when we do inc -1 |
| 15:46:26 | <tdammers> | that's because "-" is ambiguous |
| 15:46:43 | → | vaucouleur joins (~vaucouleu@176.124.42.130) |
| 15:46:59 | × | vaucouleur quits (~vaucouleu@176.124.42.130) (Remote host closed the connection) |
| 15:47:00 | <monochrom> | Once again the lesson is: ask the real question. |
| 15:47:05 | <tdammers> | there's both a binary subtraction operator "-", and a unary negation quasi-operator "-" |
| 15:47:17 | → | vaucouleur joins (~vaucouleu@176.124.42.130) |
| 15:48:07 | <tdammers> | https://wiki.haskell.org/Unary_operator |
| 15:48:36 | <geekosaur> | the error you got is that "inc -1" is parsed as "inc - 1" which is a type error |
| 15:48:50 | <geekosaur> | so you have to say "inc (-1)" |
| 15:49:08 | <geekosaur> | this is something of a wart in Haskell syntax |
| 15:49:25 | <geekosaur> | the price we pay for what is otherwise a simple and straightforward system |
| 15:49:47 | <c_wraith> | I'd be happy to get rid of unary negation, but that would upset people even more |
| 15:50:28 | <tdammers> | I'd be happy to have the - be part of the number literal, with no space allowed after it, and whitespace after binary operators mandatory, but that would probably upset quite a few people too |
| 15:50:38 | <monochrom> | Unpopular opinion: It is already a simple and straightforward system. The complication is from human desire for DWIM telepathy. |
| 15:50:43 | <geekosaur> | isn't there an extension for that? |
| 15:50:54 | <c_wraith> | the extension doesn't force whitespace around operators |
| 15:50:58 | <geekosaur> | (not DWIM telepathy…) |
| 15:51:00 | <c_wraith> | and it only works for literals |
| 15:51:01 | <tdammers> | it is a simple and straightforward system, it's just not intuitive |
| 15:51:30 | <tdammers> | I'd be fine with having to use negate instead of unary - for anything that's not a literal |
| 15:51:45 | × | justache quits (~justache@user/justache) (Read error: Connection reset by peer) |
| 15:52:49 | <Guest6824> | so if there is an expression f x + g x (+) is it the case that the section will be considered as an argument and + will be considered as a operator and parsed accordingl |
| 15:52:49 | → | justache joins (~justache@user/justache) |
| 15:52:55 | <c_wraith> | the biggest problem with the extension is that it creates two different syntaxes without enabling any new ideas. |
| 15:53:28 | <c_wraith> | different *incompatible* syntaxes |
| 15:53:36 | <monochrom> | I don't think that's called a section, but yes. |
| 15:54:23 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 15:54:36 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 15:54:37 | <tdammers> | in general: you can convert an operator into a plain function by putting it between parentheses, and you can use a plain function as an operator by putting it between backquotes (though the precedence may not be what you expect) |
| 15:54:56 | <tdammers> | > (+) 1 2 |
| 15:54:57 | <lambdabot> | 3 |
| 15:55:07 | <tdammers> | > inc `map` [1,2,3] |
| 15:55:09 | <lambdabot> | error: |
| 15:55:09 | <lambdabot> | • Variable not in scope: inc :: a0 -> b |
| 15:55:09 | <lambdabot> | • Perhaps you meant ‘int’ (imported from Text.PrettyPrint.HughesPJ) |
| 15:55:15 | <tdammers> | > succ `map` [1,2,3] |
| 15:55:17 | <lambdabot> | [2,3,4] |
| 15:55:27 | <c_wraith> | Eh. Precedence is the same as any other infix operator - defaults to infixl 9 but can be changed with an explicit fixity declaration |
| 15:55:31 | × | MQ-17J quits (~MQ-17J@2607:fb90:4c:3555:c992:1c4a:cf9e:7fd6) (Read error: Connection reset by peer) |
| 15:55:48 | → | MQ-17J joins (~MQ-17J@8.21.10.6) |
| 15:56:00 | <tdammers> | c_wraith: well yes, it's just that for most functions out there, there is no fixity declaration, so they'll be infixl 9, which may or may not lead to unexpected results |
| 15:56:29 | <monochrom> | Given that humans expect telepathy... |
| 15:56:57 | <monochrom> | infixl 9 has like Bayesian probability of 1/27 for doing what the human expects. |
| 15:57:23 | <c_wraith> | eh. very few people really expect infix behavior over infixl or infixr |
| 15:58:26 | <tdammers> | > 3 * 5 `subtract` 1 |
| 15:58:27 | <lambdabot> | -12 |
| 15:58:32 | <tdammers> | I rest my case |
| 15:58:41 | → | proofofkeags_ joins (~proofofke@205.209.28.54) |
| 15:59:01 | <monochrom> | Yeah 1/27 is just my very crude prior :) |
| 15:59:22 | × | jokleinn quits (~jokleinn@user/jokleinn) (Ping timeout: 260 seconds) |
| 15:59:23 | <Guest6824> | So with inc - 2 the type error happens not because - is taken as an argument to inc, but because the arguments to - has unmatched types |
| 15:59:53 | <c_wraith> | I'm not sure I've ever seen a case where infix was the best choice. When I thought I did, I quickly discovered I was wrong when I tried to use it. |
| 15:59:58 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 265 seconds) |
| 16:00:09 | <tdammers> | I guess what I'm trying to say is that "be more specific, human!" would be the appropriate response, rather than making a wild guess at the intended precedence and guessing wrong |
| 16:00:44 | <c_wraith> | Guest6824: correct. Though it's reported a bit weirdly because numeric literals are polymorphic, and GHC tries really hard to make what you provided correct by searching for a Num instance for functions |
| 16:01:02 | <monochrom> | (==) is one of those cases you really want to force people to write explicitly "(x == y) == z" or "x == (y == z)". |
| 16:01:26 | <Franciman> | haskell masterrace |
| 16:01:49 | <monochrom> | Then again it is the minority. |
| 16:08:51 | <Guest6824> | So in the expression f x y z ... + g i j k ... compiler understands that + is not part of the application and parses it as (f x y z ...) + (g i j k ...) |
| 16:08:52 | → | tromp joins (~textual@dhcp-077-249-230-040.chello.nl) |
| 16:09:32 | <c_wraith> | yes. infix operators always have lower precedence during parsing than function application |
| 16:09:41 | <c_wraith> | and that's detected purely syntactically |
| 16:09:54 | <c_wraith> | operator characters vs... anything else, really |
| 16:10:54 | <Guest6824> | ok, thanks it was the error on inc -1 that confused me |
| 16:11:12 | → | abhixec joins (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) |
| 16:12:06 | → | sneedsfeed joins (~sneedsfee@rrcs-173-95-122-169.midsouth.biz.rr.com) |
| 16:13:53 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:fcfd:5153:b61b:fe3d) |
| 16:16:18 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 16:16:19 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
| 16:16:19 | → | wroathe joins (~wroathe@user/wroathe) |
| 16:20:17 | × | azeem quits (~azeem@emp-91-123.eduroam.uu.se) (Ping timeout: 268 seconds) |
| 16:22:07 | × | favonia quits (~favonia@user/favonia) (Ping timeout: 252 seconds) |
| 16:24:28 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 252 seconds) |
| 16:25:51 | → | azeem joins (~azeem@2a00:801:23a:d5ca:5e0:54f5:67cf:d7dc) |
| 16:31:43 | × | jumper149 quits (~jumper149@80.240.31.34) (Quit: WeeChat 3.2) |
| 16:31:54 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection) |
| 16:32:14 | → | geekosaur joins (~geekosaur@xmonad/geekosaur) |
| 16:33:41 | → | ub joins (~Thunderbi@178.165.161.81.wireless.dyn.drei.com) |
| 16:33:59 | × | azeem quits (~azeem@2a00:801:23a:d5ca:5e0:54f5:67cf:d7dc) (Read error: Connection reset by peer) |
| 16:34:29 | × | sneedsfeed quits (~sneedsfee@rrcs-173-95-122-169.midsouth.biz.rr.com) (Ping timeout: 256 seconds) |
| 16:36:11 | × | chele quits (~chele@user/chele) (Remote host closed the connection) |
| 16:36:25 | × | ub quits (~Thunderbi@178.165.161.81.wireless.dyn.drei.com) (Client Quit) |
| 16:36:43 | → | ub joins (~Thunderbi@178.165.161.81.wireless.dyn.drei.com) |
| 16:37:40 | → | azeem joins (~azeem@2a00:801:23a:d5ca:5e0:54f5:67cf:d7dc) |
| 16:37:51 | × | Guest6824 quits (~Guest68@117.223.62.136) (Quit: Client closed) |
| 16:39:06 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:fcfd:5153:b61b:fe3d) (Remote host closed the connection) |
| 16:39:43 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 16:39:56 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 16:40:05 | <cdsmith> | When using `ghc -pgmF`, is there a command line option to change the PATH used to find the program? I didn't see one in the GHC user guide. |
| 16:41:18 | × | vaucouleur quits (~vaucouleu@176.124.42.130) (Read error: Connection reset by peer) |
| 16:43:47 | → | jokleinn joins (~jokleinn@user/jokleinn) |
| 16:43:53 | <geekosaur> | no, you have to specify a full path in that case |
| 16:44:03 | <geekosaur> | or change $PATH before running ghc |
| 16:44:41 | <cdsmith> | Hmm. Yeah, unfortunately, hie-bios doesn't provide a way change the ghc PATH, only the command line options. :( |
| 16:45:09 | <cdsmith> | So without patching either GHC or hie-bios, it seems I am stuck. |
| 16:46:07 | → | pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
| 16:46:10 | <c_wraith> | that seems like the sort of feature request that would make sense for hie-bios to handle. But they probably won't get to it today. |
| 16:47:25 | <cdsmith> | Yes, it does seem like a good change, and I'd be happy to make the change. But it does mean some delay even if I do it. Either that, or changes to my setup to run a patched HLS, I guess. |
| 16:47:52 | <cdsmith> | In any case, I'll file an issue describing the need, and hopefully can get to it soon. |
| 16:48:06 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:fcfd:5153:b61b:fe3d) |
| 16:48:49 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 16:49:32 | × | gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving) |
| 16:51:07 | × | ub quits (~Thunderbi@178.165.161.81.wireless.dyn.drei.com) (Ping timeout: 268 seconds) |
| 16:53:24 | <ldlework> | Is there a good haskell->js thing? |
| 16:53:33 | × | azeem quits (~azeem@2a00:801:23a:d5ca:5e0:54f5:67cf:d7dc) (Read error: Connection reset by peer) |
| 16:53:52 | <geekosaur> | ghcjs? |
| 16:54:17 | <geekosaur> | most others only speak a subset of Haskell and often take it in different directions (e.g. Elm) |
| 16:54:32 | <dsal> | PureScript isn't too bad. |
| 16:54:44 | → | azeem joins (~azeem@emp-91-123.eduroam.uu.se) |
| 16:55:02 | <geekosaur> | that said, ghcjs's runtime is pretty heavyweight because there are large differences between the way ghc does things and the way JS does |
| 16:55:08 | <dsal> | It's got a couple of the warts removed, but there are a few things which aren't quite good enough. e.g., the QuickCheck library is kind of unfortunate. |
| 16:55:15 | × | kilolympus quits (~kilolympu@31.205.200.235) (Quit: Quitting IRC :() |
| 16:55:50 | <ldlework> | thanks |
| 16:56:21 | <sm> | there's some way to generate wasm too eh |
| 16:56:46 | <ldlework> | i mostly just wanna make canvas games |
| 16:58:06 | <geekosaur> | I thought the wasm backend was stalled? |
| 16:59:21 | × | azeem quits (~azeem@emp-91-123.eduroam.uu.se) (Read error: Connection reset by peer) |
| 16:59:49 | → | azeem joins (~azeem@2a00:801:23a:d5ca:5e0:54f5:67cf:d7dc) |
| 17:00:46 | <sm> | oh well yes I'm sure it's stalled.. but exists somehow :) |
| 17:01:23 | <sm> | ldlework: canvas games eh |
| 17:01:57 | <sm> | maybe threepenny-gui or the some other one like it can help |
| 17:03:03 | <sm> | https://hackage.haskell.org/package/threepenny-gui |
| 17:03:22 | → | slack1256 joins (~slack1256@adsl-99-88-236-73.dsl.hstntx.sbcglobal.net) |
| 17:03:26 | → | tzh joins (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) |
| 17:05:39 | → | econo joins (uid147250@user/econo) |
| 17:06:54 | → | Lycurgus joins (~juan@98.4.112.204) |
| 17:07:57 | <cdsmith> | <c_wraith> "that seems like the sort of..." <- Actually, turns out there was already an hie-bios issue for it: https://github.com/haskell/hie-bios/issues/160 |
| 17:08:32 | → | favonia joins (~favonia@user/favonia) |
| 17:13:36 | → | kenran joins (~kenran@200116b82b607e001ad403c97222d218.dip.versatel-1u1.de) |
| 17:13:44 | <ldlework> | sm: ah well the aim of targetting the web would be being able to share things with people via link |
| 17:14:01 | × | kimjetwav quits (~user@2607:fea8:235f:9730:8357:c73b:f3ec:cc1b) (Remote host closed the connection) |
| 17:14:03 | <ldlework> | "check out this thing I made in haskell! http://...." |
| 17:14:19 | → | kimjetwav joins (~user@2607:fea8:235f:9730:7652:9a19:d3a:6562) |
| 17:16:16 | × | Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 17:16:27 | <cdsmith> | ldlework: You can use http://code.world/haskell for that! |
| 17:17:04 | → | Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
| 17:19:32 | <monochrom> | I thought people were more thrilled about https than http. |
| 17:21:03 | <cdsmith> | ldlework: For example: "check out this thing I made in haskell! https://code.world/haskell#P5j0qnxAaF90qX7d4TFhe2w" |
| 17:21:13 | → | zebrag joins (~chris@user/zebrag) |
| 17:21:31 | <monochrom> | Hey that's really cool. |
| 17:22:38 | <monochrom> | Speaking of which, this looks like very suitable to re-do what's in https://www.youtube.com/watch?v=vU-g6mC1F0g |
| 17:23:06 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds) |
| 17:23:27 | <vaibhavsagar[m]> | ldlework: I want something like this too! client-side GHC running in a browser is my dream |
| 17:23:39 | <yushyin> | cdsmith: i'm getting dizzy |
| 17:23:39 | × | lbseale quits (~lbseale@user/ep1ctetus) (Remote host closed the connection) |
| 17:24:22 | <vaibhavsagar[m]> | my uninformed opinion is that all of the pieces are there (ghcjs, asterius, etc.) but it would be a lot of work to pull everything together into a coherent whole |
| 17:24:41 | <cdsmith> | Client side GHC in a browser sounds like... well, you have to do some dreaming between the time you start the compile and when it finishes! |
| 17:25:02 | <vaibhavsagar[m]> | client side GHCi then |
| 17:25:07 | <geekosaur> | clinet side hugs might be more doable |
| 17:25:13 | <vaibhavsagar[m]> | it has to be possible |
| 17:25:15 | <vaibhavsagar[m]> | that already exists |
| 17:25:28 | <vaibhavsagar[m]> | https://tryhaskell.org/ |
| 17:25:57 | <cdsmith> | Oh, tryhaskell is based on hugs? Cool, I never knew that |
| 17:26:51 | <cdsmith> | CodeWorld is an editor on the client, GHCJS running on the server, and then the resulting program running on the client again. It works pretty well. |
| 17:27:06 | × | arahael quits (~arahael@203.221.121.242) (Ping timeout: 268 seconds) |
| 17:27:52 | × | tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 17:28:01 | <sm> | Chris Smith++! codeworld is awesome. is there a url that shows the app in full-window ? |
| 17:28:01 | <vaibhavsagar[m]> | Chris Smith: CodeWorld is a triumph |
| 17:28:55 | <cdsmith> | sm: Yes. Run the program, click "Share", then "Share Without Code", and copy that URL. It will be full screen |
| 17:28:57 | <vaibhavsagar[m]> | but the reason I want full GHC in the browser is so that we can get https://jupyterlite.readthedocs.io/en/latest/ but with IHaskell as the backend, without any servers |
| 17:29:00 | → | mixfix41 joins (~homefame@user/mixfix41) |
| 17:29:41 | <vaibhavsagar[m]> | managing servers is a bunch of effort |
| 17:30:22 | → | mousey joins (~sky@gateway/tor-sasl/mousey) |
| 17:30:32 | <vaibhavsagar[m]> | is it less effort than cross-compiling GHC to JS/WASM somehow? yes, which is why the status quo is what it is |
| 17:32:27 | → | lbseale joins (~lbseale@user/ep1ctetus) |
| 17:33:55 | <cdsmith> | It's not just cross-compiling GHC. It's that GHC relies on having a filesystem set up with package databases and such. |
| 17:34:42 | <vaibhavsagar[m]> | alright, that doesn't seem insurmountable |
| 17:35:11 | → | Guest3294 joins (~Guest32@165.91.13.162) |
| 17:35:12 | <geekosaur> | no, but add more complications and it rapidly becomes more effort than it's worth |
| 17:35:17 | × | Guest3294 quits (~Guest32@165.91.13.162) (Client Quit) |
| 17:35:47 | <sm> | just a simple matter of programming ! |
| 17:36:07 | → | bitmapper joins (uid464869@id-464869.lymington.irccloud.com) |
| 17:36:23 | <vaibhavsagar[m]> | I saw this earlier today: https://ra-wasm.netlify.app/ |
| 17:36:44 | <vaibhavsagar[m]> | I'd like to have cool things like that too |
| 17:39:46 | → | arahael joins (~arahael@118.211.178.62) |
| 17:44:05 | <slack1256> | I understand that type classes instances are selected via matching the "instance head". Is this motivated for a theorical reason or is just something that was easy to implement in early GHC development? Are there known alternatives to this? |
| 17:47:07 | → | chisui joins (~chisui@200116b8640ff5001ded5de399d498df.dip.versatel-1u1.de) |
| 17:53:25 | → | ec_ joins (~ec@gateway/tor-sasl/ec) |
| 17:53:28 | × | sim590 quits (~simon@modemcable090.207-203-24.mc.videotron.ca) (Ping timeout: 252 seconds) |
| 17:54:21 | <sclv> | slack1256: there's been a lot of research into different type class matching possibilities, and there are flags to change them |
| 17:54:38 | <sclv> | but basically what you need is something that is able to be confluent, and terminate |
| 17:54:48 | <sclv> | and structural induction is the straightforward way to do that |
| 17:55:17 | × | Lycurgus quits (~juan@98.4.112.204) (Quit: Exeunt) |
| 17:56:12 | <sclv> | you might want to look at the closed type families paper for some relatively more recent stuff plus the references (https://repository.brynmawr.edu/cgi/viewcontent.cgi?article=1006&context=compsci_pubs) |
| 17:56:29 | <slack1256> | Oh so they were thinking on those properties since the beginning. |
| 17:59:35 | <sclv> | there's an immense amount of literature on all this stuff, not sure where to direct you |
| 18:00:10 | <sclv> | this 2004 paper on functional dependencies probably has both good cites of prior work and also following the things that cite it (via google scholar) could lead to a fair amount https://www.microsoft.com/en-us/research/wp-content/uploads/2004/01/esop04.pdf |
| 18:00:21 | <sclv> | but a whole bunch of questions arise for MPTCs even without fundeps, etc |
| 18:02:25 | <slack1256> | You already answered my question :-) . The original motivation is clear now. |
| 18:03:06 | <sclv> | ok, just for the record i think even the original type class paper (1988) had some discussion of these issues :-) (search "overlap") http://users.csc.calpoly.edu/~akeen/courses/csc530/references/wadler.pdf |
| 18:03:13 | <slack1256> | Yeah I am already "going down the rabbit hole" reading how `Data types a la carte` uses type classes for injecting values. Those classes don't match any heads. |
| 18:05:40 | <monochrom> | I haven't done research in this, but here is my understanding of one of the most-wished-for features that is perpetually denied: |
| 18:06:33 | → | nighteyes joins (~user@ip-185-104-136-52.ptr.icomera.net) |
| 18:06:37 | × | tubogram quits (~tubogram@user/tubogram) (Quit: See ya later!) |
| 18:09:46 | → | awpr joins (uid446117@id-446117.lymington.irccloud.com) |
| 18:10:57 | <monochrom> | For example "instance Eq a => Eq [a]", and suppose my type X is not an instance of Eq. Haskell says "therefore I commit to Eq [X] and then call it an error when I can't find Eq X". People sometimes wish for "so don't commit to Eq [X]", in fact sometimes they further wish for "is there a way to express: if X is not an instance of Eq, then Eq [X] can still be done by a different route?" |
| 18:11:45 | <monochrom> | Now, Prolog totally does that, so it can be done. |
| 18:12:48 | <monochrom> | But Prolog is happy with that because of a closed-world assumption. Haskell has to support separate compilation, it's an open world. |
| 18:12:53 | → | tubogram joins (~tubogram@user/tubogram) |
| 18:13:17 | <geekosaur> | and typeclasses are always global |
| 18:13:21 | <monochrom> | "if X is/isn't an instance of Eq" cannot be answered until link time. |
| 18:14:43 | → | proofofkeags__ joins (~proofofke@205.209.24.233) |
| 18:15:01 | → | lavaman joins (~lavaman@98.38.249.169) |
| 18:15:03 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 18:15:21 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 18:15:36 | × | ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
| 18:17:40 | × | proofofkeags_ quits (~proofofke@205.209.28.54) (Ping timeout: 268 seconds) |
| 18:17:46 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 18:17:46 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
| 18:17:46 | → | wroathe joins (~wroathe@user/wroathe) |
| 18:18:01 | × | lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection) |
| 18:22:20 | → | ec_ joins (~ec@gateway/tor-sasl/ec) |
| 18:30:26 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 18:30:39 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 18:34:25 | → | tromp joins (~textual@dhcp-077-249-230-040.chello.nl) |
| 18:35:14 | × | jokleinn quits (~jokleinn@user/jokleinn) (Ping timeout: 260 seconds) |
| 18:36:25 | × | max22- quits (~maxime@2a01cb0883359800e3a3878268dcbc1e.ipv6.abo.wanadoo.fr) (Ping timeout: 260 seconds) |
| 18:43:51 | → | mikoto-chan joins (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) |
| 18:45:46 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 18:46:01 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 18:46:42 | × | nighteyes quits (~user@ip-185-104-136-52.ptr.icomera.net) (Quit: leaving) |
| 18:48:33 | → | lavaman joins (~lavaman@98.38.249.169) |
| 18:51:21 | × | mousey quits (~sky@gateway/tor-sasl/mousey) (Ping timeout: 276 seconds) |
| 18:53:26 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 268 seconds) |
| 18:58:00 | × | tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 19:00:27 | × | ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
| 19:01:19 | → | nattiestnate joins (~nate@2001:448a:20a0:4134:25e:715f:d637:5263) |
| 19:03:14 | × | MQ-17J quits (~MQ-17J@8.21.10.6) (Ping timeout: 260 seconds) |
| 19:04:09 | → | max22- joins (~maxime@2a01cb08833598007ebd7c63f02c86ef.ipv6.abo.wanadoo.fr) |
| 19:06:46 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:fcfd:5153:b61b:fe3d) (Remote host closed the connection) |
| 19:07:15 | dsf_ | is now known as dsf |
| 19:07:30 | → | ec_ joins (~ec@gateway/tor-sasl/ec) |
| 19:09:25 | → | asivitz joins (uid178348@id-178348.tinside.irccloud.com) |
| 19:09:38 | × | nattiestnate quits (~nate@2001:448a:20a0:4134:25e:715f:d637:5263) (Quit: WeeChat 3.2) |
| 19:09:51 | → | nattiestnate joins (~nate@2001:448a:20a0:4134:25e:715f:d637:5263) |
| 19:11:07 | × | qbt quits (~edun@user/edun) (Ping timeout: 252 seconds) |
| 19:11:24 | → | vaucouleur joins (~vaucouleu@78.194.70.105) |
| 19:12:27 | → | tromp joins (~textual@dhcp-077-249-230-040.chello.nl) |
| 19:13:00 | <dolio> | How does it work in Teyjus? |
| 19:13:15 | → | Pickchea joins (~private@user/pickchea) |
| 19:14:44 | <dolio> | I guess another part of the answer is that in prolog it's happening at runtime. |
| 19:15:04 | <dolio> | That's why you're a closed world. |
| 19:20:05 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 19:20:31 | <monochrom> | I don't know Teyjus. But yeah, Prolog gets to do its job at run time. |
| 19:20:56 | <dolio> | Teyjus is a lambda prolog compiler that (if I recall correctly) supports separate compilation. |
| 19:21:15 | <monochrom> | Wait, that should not make a difference. We are talking about the run time of a type checker! |
| 19:21:25 | <dolio> | But obviously the separate compilation is going on way before the backtracking stuff. |
| 19:22:27 | <dolio> | In Haskell, the separate compilation means you need to do runtime separately. |
| 19:22:31 | <monochrom> | OK, so I think a good way to describe the correspondence is: imagine Prolog but you're told you aren't given the complete database. |
| 19:22:48 | <geekosaur> | I think you can still do it if every call has a dictionary (no optimizing them out) but you again end u[p deferring it to runtime? |
| 19:23:06 | <davean> | Does anyone have any snippets of Haskell code like 5-15 lines thats particularly revolutionary or cool or something? |
| 19:23:15 | <maerwald> | uhm |
| 19:23:19 | <awpr> | > fix error |
| 19:23:20 | <lambdabot> | "*Exception: *Exception: *Exception: *Exception: *Exception: *Exception: *Ex... |
| 19:23:40 | <maerwald> | davean: I'd clone an arbitrary edward repo :) |
| 19:24:13 | <davean> | maerwald: He's verbose, he won't stop carring about performance, no matter how much I encurage him to have more performance. |
| 19:24:19 | <davean> | wait, I might be part of the problem here ... |
| 19:24:25 | <davean> | :) |
| 19:24:49 | → | lavaman joins (~lavaman@98.38.249.169) |
| 19:24:50 | <dolio> | You must be encouraging him the wrong way. |
| 19:25:06 | <monochrom> | I asked my students to implement iterative deepening. A student found a way 10x faster than mine. |
| 19:25:09 | <dolio> | He should achieve performance by making GHC emit code that is as good as well-programmed C++. |
| 19:25:15 | <dolio> | From naive Haskell. |
| 19:25:24 | <davean> | dolio: well programmed C++ is slow though! |
| 19:25:27 | <davean> | dolio: have some standards |
| 19:25:33 | <monochrom> | Hrm, now it will take forever to find it... |
| 19:25:56 | <dolio> | Oh, because all the fast stuff is evil hackery? |
| 19:26:22 | <maerwald> | fast in haskell is verbose or evil |
| 19:26:35 | <dolio> | I mean C++. |
| 19:26:52 | <davean> | Yah, the overhead of standard C++ stuff is unreasonable, if you aren't jumping into the middle of a function to shave a few instructions you're really phoning it in |
| 19:26:53 | <monochrom> | I think "Turbo Haskell" is stil on his to-do list. |
| 19:28:45 | <ldlework> | Is there a generic way (besides destructuring) to convert a list of a known size to a tuple (so that the tuple can be applied to an uncurried function taking the same number of args)? |
| 19:29:11 | <ldlework> | (besides just writing a function that does it via destructuring) |
| 19:29:26 | <ldlework> | tuplify4 something like that |
| 19:29:36 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 268 seconds) |
| 19:30:26 | <monochrom> | Go with destructuring. |
| 19:30:44 | <davean> | monochrom: well I'd be very interested in if you find that code - just really looking for an inset to show off Haskell code or something in a doc |
| 19:30:46 | <monochrom> | And I lost track of what "generic" means. It's such a generic word. |
| 19:32:39 | → | chisui97 joins (~chisui@200116b8640ff5008528468472c032d2.dip.versatel-1u1.de) |
| 19:32:48 | × | chisui quits (~chisui@200116b8640ff5001ded5de399d498df.dip.versatel-1u1.de) (Quit: Client closed) |
| 19:33:12 | → | pavonia joins (~user@user/siracusa) |
| 19:41:47 | <ldlework> | monochrom: hehe |
| 19:42:24 | → | Tuplanolla joins (~Tuplanoll@91-159-69-50.elisa-laajakaista.fi) |
| 19:46:07 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 19:46:23 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 19:46:36 | × | ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
| 19:47:46 | × | stites quits (~stitescoc@130.44.141.131) (Ping timeout: 256 seconds) |
| 19:48:01 | × | tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 19:49:12 | × | mc47 quits (~mc47@xmonad/TheMC47) (Quit: Leaving) |
| 19:50:52 | → | stites joins (~stitescoc@130.44.141.131) |
| 19:53:02 | × | dhouthoo quits (~dhouthoo@178-117-36-167.access.telenet.be) (Quit: WeeChat 3.2) |
| 19:53:15 | × | mikoto-chan quits (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) (Ping timeout: 268 seconds) |
| 19:53:30 | → | ec_ joins (~ec@gateway/tor-sasl/ec) |
| 19:54:16 | × | kenran quits (~kenran@200116b82b607e001ad403c97222d218.dip.versatel-1u1.de) (Ping timeout: 268 seconds) |
| 19:54:23 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds) |
| 19:54:49 | → | kenran joins (~kenran@200116b82b607e00d5bfa4634406875a.dip.versatel-1u1.de) |
| 19:56:26 | × | vaucouleur quits (~vaucouleu@78.194.70.105) (Ping timeout: 260 seconds) |
| 19:59:19 | × | acowley quits (~acowley@c-68-83-22-43.hsd1.nj.comcast.net) (Read error: Connection reset by peer) |
| 20:01:27 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:fcfd:5153:b61b:fe3d) |
| 20:05:30 | × | juhp quits (~juhp@128.106.188.220) (Ping timeout: 265 seconds) |
| 20:06:30 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 20:06:54 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 20:07:17 | → | juhp joins (~juhp@128.106.188.220) |
| 20:08:24 | × | slack1256 quits (~slack1256@adsl-99-88-236-73.dsl.hstntx.sbcglobal.net) (Ping timeout: 265 seconds) |
| 20:16:57 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 20:17:20 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 20:22:24 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 20:22:37 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 20:22:37 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Client Quit) |
| 20:22:42 | → | tromp joins (~textual@dhcp-077-249-230-040.chello.nl) |
| 20:22:45 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 20:24:13 | <dsal> | This idea of applying a list to a function of wanting list-many arguments sounds kind of like a fold if I didn't have to tell you what the type was. |
| 20:26:52 | → | dizney joins (~dizney@80-100-91-169.ip.xs4all.nl) |
| 20:27:48 | → | mikoto-chan joins (~mikoto-ch@83.137.2.248) |
| 20:27:51 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 20:28:04 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 20:28:04 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Client Quit) |
| 20:28:11 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 20:32:45 | × | ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
| 20:34:02 | × | lbseale quits (~lbseale@user/ep1ctetus) (Remote host closed the connection) |
| 20:34:27 | → | lbseale joins (~lbseale@user/ep1ctetus) |
| 20:39:42 | → | ec_ joins (~ec@gateway/tor-sasl/ec) |
| 20:41:16 | × | tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 20:43:19 | <zzz> | what isn't a fold anyway? |
| 20:44:13 | × | abhixec quits (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Ping timeout: 268 seconds) |
| 20:45:47 | × | kenran quits (~kenran@200116b82b607e00d5bfa4634406875a.dip.versatel-1u1.de) (Quit: WeeChat info:version) |
| 20:46:08 | → | justsomeguy joins (~justsomeg@user/justsomeguy) |
| 20:47:04 | → | tromp joins (~textual@dhcp-077-249-230-040.chello.nl) |
| 20:52:00 | × | dizney quits (~dizney@80-100-91-169.ip.xs4all.nl) (Quit: Ping timeout (120 seconds)) |
| 20:53:16 | × | _ht quits (~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection) |
| 20:53:22 | → | dizney joins (~dizney@80-100-91-169.ip.xs4all.nl) |
| 20:53:39 | × | dizney quits (~dizney@80-100-91-169.ip.xs4all.nl) (Client Quit) |
| 20:54:51 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Read error: Connection reset by peer) |
| 20:58:11 | × | vysn quits (~vysn@user/vysn) (Quit: WeeChat 3.2) |
| 21:02:20 | → | aegon joins (~mike@174.127.249.180) |
| 21:04:36 | × | ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
| 21:05:09 | × | proofofkeags__ quits (~proofofke@205.209.24.233) (Remote host closed the connection) |
| 21:05:23 | → | proofofkeags__ joins (~proofofke@205.209.24.233) |
| 21:05:49 | <ldlework> | I'm trying to write a fundamental cellular automata thing with Gloss, but when I run it, it locks up |
| 21:05:51 | <ldlework> | https://gist.github.com/dustinlacewell/1411fc6feefde9b73a8ad2a0d9db7c55 |
| 21:05:56 | <ldlework> | Anyone have any hunches? |
| 21:06:27 | → | vysn joins (~vysn@user/vysn) |
| 21:06:56 | <ldlework> | pretty sure it has to do with the update path, rather than the draw path |
| 21:07:20 | <ldlework> | oh |
| 21:07:23 | <ldlework> | no base case :D |
| 21:11:22 | → | ec_ joins (~ec@gateway/tor-sasl/ec) |
| 21:11:43 | <monochrom> | davean: https://paste.tomsmeding.com/VlIdTCsp |
| 21:14:27 | <akronymus[m]> | Which channel is this? Seems like the matrix integration broke for this one |
| 21:14:39 | <monochrom> | #haskell |
| 21:14:42 | akronymus[m] | uploaded an image: (3KiB) < https://libera.ems.host/_matrix/media/r0/download/arkmuse.org/xKznrnbTydXRVsdiuVooCCJd/image.png > |
| 21:14:43 | <akronymus[m]> | Only shows me this |
| 21:14:49 | <akronymus[m]> | Thanks. |
| 21:16:25 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
| 21:18:09 | → | Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915) |
| 21:19:57 | → | roboguy_ joins (~roboguy_@2605:a601:afe7:9f00:5c06:451f:7b74:b079) |
| 21:22:57 | <tomsmeding> | akronymus[m]: https://github.com/vector-im/element-web/issues/8246 ? |
| 21:23:25 | <akronymus[m]> | thanks |
| 21:23:35 | → | sim590 joins (~simon@modemcable090.207-203-24.mc.videotron.ca) |
| 21:23:39 | <akronymus[m]> | Clearing cache is never a wrong move |
| 21:26:02 | × | ubert quits (~Thunderbi@178.165.161.81.wireless.dyn.drei.com) (Ping timeout: 260 seconds) |
| 21:28:28 | × | tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 21:31:53 | × | fendor quits (~fendor@91.141.60.54.wireless.dyn.drei.com) (Remote host closed the connection) |
| 21:33:12 | × | ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
| 21:33:46 | × | thyriaen quits (~thyriaen@dynamic-078-054-146-050.78.54.pool.telefonica.de) (Quit: Leaving) |
| 21:33:58 | → | thyriaen joins (~thyriaen@dynamic-078-054-146-050.78.54.pool.telefonica.de) |
| 21:34:54 | × | sim590 quits (~simon@modemcable090.207-203-24.mc.videotron.ca) (Ping timeout: 260 seconds) |
| 21:37:14 | <monochrom> | @tell |
| 21:37:14 | <lambdabot> | Who should I tell? |
| 21:37:15 | × | max22- quits (~maxime@2a01cb08833598007ebd7c63f02c86ef.ipv6.abo.wanadoo.fr) (Quit: Leaving) |
| 21:38:11 | <monochrom> | @tell davean The 5-line very cool snippet from my student's iterative deepening: https://paste.tomsmeding.com/VlIdTCsp |
| 21:38:12 | <lambdabot> | Consider it noted. |
| 21:40:11 | → | ec_ joins (~ec@gateway/tor-sasl/ec) |
| 21:40:59 | → | tromp joins (~textual@dhcp-077-249-230-040.chello.nl) |
| 21:42:58 | × | michalz quits (~michalz@185.246.204.57) (Remote host closed the connection) |
| 21:43:56 | → | proofofkeags_ joins (~proofofke@205.209.28.54) |
| 21:45:50 | → | burnsidesLlama joins (~burnsides@dhcp168-024.wadham.ox.ac.uk) |
| 21:46:43 | × | proofofkeags__ quits (~proofofke@205.209.24.233) (Ping timeout: 268 seconds) |
| 21:47:46 | → | sim590 joins (~simon@modemcable090.207-203-24.mc.videotron.ca) |
| 21:49:22 | × | roboguy_ quits (~roboguy_@2605:a601:afe7:9f00:5c06:451f:7b74:b079) () |
| 21:49:55 | → | son0p joins (~ff@181.136.122.143) |
| 21:50:24 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 21:51:26 | × | burnsidesLlama quits (~burnsides@dhcp168-024.wadham.ox.ac.uk) (Ping timeout: 268 seconds) |
| 21:51:42 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 260 seconds) |
| 21:52:15 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 21:52:15 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
| 21:52:15 | → | wroathe joins (~wroathe@user/wroathe) |
| 21:53:18 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 21:53:30 | × | mikoto-chan quits (~mikoto-ch@83.137.2.248) (Ping timeout: 268 seconds) |
| 21:53:32 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 22:02:08 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 268 seconds) |
| 22:03:38 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 22:03:51 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 22:04:51 | × | chisui97 quits (~chisui@200116b8640ff5008528468472c032d2.dip.versatel-1u1.de) (Ping timeout: 256 seconds) |
| 22:09:32 | × | Pickchea quits (~private@user/pickchea) (Quit: Leaving) |
| 22:11:10 | × | favonia quits (~favonia@user/favonia) (Ping timeout: 240 seconds) |
| 22:11:46 | × | xff0x quits (~xff0x@2001:1a81:522c:4300:7515:65a1:dfa5:eb8b) (Ping timeout: 260 seconds) |
| 22:12:36 | → | xff0x joins (~xff0x@2001:1a81:522c:4300:5ee7:ef88:cf65:a085) |
| 22:13:27 | → | slack1256 joins (~slack1256@2607:fb90:c6c:174c:8ae6:d206:f808:323d) |
| 22:16:58 | × | tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 22:17:55 | <ldlework> | Anyway to get vsync in Gloss? |
| 22:18:58 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 22:19:10 | <mrianbloom> | I'm trying to write a program with accelerate and I'd like to be able to easily switch between GPU (llvm-ptx) and CPU (llvm-native) implementations. What is the best way to approach this? Should I use the c-preprocessor? |
| 22:19:11 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 22:19:38 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Client Quit) |
| 22:19:50 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 22:20:37 | × | slack1256 quits (~slack1256@2607:fb90:c6c:174c:8ae6:d206:f808:323d) (Remote host closed the connection) |
| 22:21:30 | → | wroathe joins (~wroathe@96-88-30-181-static.hfc.comcastbusiness.net) |
| 22:21:31 | × | wroathe quits (~wroathe@96-88-30-181-static.hfc.comcastbusiness.net) (Changing host) |
| 22:21:31 | → | wroathe joins (~wroathe@user/wroathe) |
| 22:21:53 | → | benin036932301 joins (~benin@183.82.24.197) |
| 22:23:42 | × | __monty__ quits (~toonn@user/toonn) (Quit: leaving) |
| 22:24:57 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds) |
| 22:25:35 | × | benin036932301 quits (~benin@183.82.24.197) (Client Quit) |
| 22:25:59 | → | benin036932301 joins (~benin@183.82.24.197) |
| 22:27:24 | × | benin036932301 quits (~benin@183.82.24.197) (Client Quit) |
| 22:28:29 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 22:31:59 | <awpr> | monochrom: ooh that's clever. I de-Intified it since the Int only ever reaches 1 or 0, and ended up with a one-liner: https://paste.tomsmeding.com/DIDOXwwJ |
| 22:32:21 | × | ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
| 22:33:21 | <awpr> | although the Int probably blocks sharing and makes the original not leak space |
| 22:36:41 | <awpr> | I guess it's straightforward to untie the knot in my one-liner to make it recompute, just recurse via the top-level name instead of via `it` |
| 22:38:24 | <monochrom> | Yeah you should measure space too, a purpose of iterative deepening is to prefer re-computation and avoid taking up space. |
| 22:39:18 | <awpr> | yeah, it should be `iterDeep next x = x : concatMap next (iterDeep next x)` then |
| 22:39:34 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 252 seconds) |
| 22:39:49 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 22:40:03 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 22:40:19 | × | nattiestnate quits (~nate@2001:448a:20a0:4134:25e:715f:d637:5263) (Quit: WeeChat 3.2) |
| 22:41:34 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 22:43:11 | → | ec_ joins (~ec@gateway/tor-sasl/ec) |
| 22:47:43 | × | amahl quits (~amahl@dsl-jklbng12-54fbca-64.dhcp.inet.fi) (Ping timeout: 252 seconds) |
| 22:49:18 | → | theang joins (~theang@fef109.internetdsl.tpnet.pl) |
| 22:50:30 | → | nattiestnate joins (~nate@2001:448a:20a0:4134:25e:715f:d637:5263) |
| 22:51:17 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 265 seconds) |
| 22:54:51 | × | Cajun quits (~Cajun@user/cajun) (Quit: Client closed) |
| 22:55:09 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 22:55:24 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 22:55:30 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Client Quit) |
| 22:55:45 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 22:57:05 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 22:58:25 | × | TranquilEcho quits (~grom@user/tranquilecho) (Quit: WeeChat 2.8) |
| 23:00:18 | × | ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
| 23:03:10 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 240 seconds) |
| 23:04:20 | × | acarrico quits (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Ping timeout: 265 seconds) |
| 23:05:00 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 23:06:03 | <awpr> | indeed ghci can do 100M elements of that in constant memory, but increases memory usage with the knot-tying version. I briefly defeated myself trying to test it because ghci holds onto past results as `it` even if they don't themselves leak space, but `length` fixed that |
| 23:07:08 | → | ec_ joins (~ec@gateway/tor-sasl/ec) |
| 23:09:24 | × | thyriaen quits (~thyriaen@dynamic-078-054-146-050.78.54.pool.telefonica.de) (Quit: Leaving) |
| 23:10:49 | → | gioyik joins (~gioyik@gateway/tor-sasl/gioyik) |
| 23:13:52 | × | Tuplanolla quits (~Tuplanoll@91-159-69-50.elisa-laajakaista.fi) (Quit: Leaving.) |
| 23:19:01 | × | Gurkenglas quits (~Gurkengla@dslb-002-207-014-195.002.207.pools.vodafone-ip.de) (Ping timeout: 252 seconds) |
| 23:20:04 | × | kimjetwav quits (~user@2607:fea8:235f:9730:7652:9a19:d3a:6562) (Remote host closed the connection) |
| 23:23:05 | × | xsperry quits (~as@user/xsperry) (Remote host closed the connection) |
| 23:24:06 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Ping timeout: 260 seconds) |
| 23:25:19 | → | Cajun joins (~Cajun@user/cajun) |
| 23:28:54 | × | ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
| 23:33:57 | <monochrom> | :) |
| 23:34:18 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 265 seconds) |
| 23:34:40 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 240 seconds) |
| 23:35:42 | → | ec_ joins (~ec@gateway/tor-sasl/ec) |
| 23:35:51 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 23:36:04 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 23:39:57 | × | gioyik quits (~gioyik@gateway/tor-sasl/gioyik) (Ping timeout: 276 seconds) |
| 23:43:02 | → | O0c joins (~O0c@69-226-234-181.lightspeed.nsvltn.sbcglobal.net) |
| 23:44:56 | ← | O0c parts (~O0c@69-226-234-181.lightspeed.nsvltn.sbcglobal.net) () |
| 23:45:35 | → | kimjetwav joins (~user@2607:fea8:235f:9730:7652:9a19:d3a:6562) |
| 23:46:11 | × | amitnjha quits (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
| 23:46:25 | → | amitnjha joins (~amit@024-216-124-116.res.spectrum.com) |
| 23:50:02 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 23:50:03 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
| 23:50:03 | → | wroathe joins (~wroathe@user/wroathe) |
| 23:58:48 | × | ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
All times are in UTC on 2021-09-15.