tag:blogger.com,1999:blog-5336273.comments2023-08-23T21:56:42.999+09:00A++ [Eric Torreborre's Blog]Unknownnoreply@blogger.comBlogger203125tag:blogger.com,1999:blog-5336273.post-50065166829904259392022-04-25T17:11:29.371+09:002022-04-25T17:11:29.371+09:00Bubble Shooter Games 2 has lots of bubbles, pro co...Bubble Shooter Games 2 has lots of bubbles, pro color and ball shooting games in 2022. <a href="https://play.google.com/store/apps/details?id=com.malikgames.bubbleshooter" rel="nofollow">Bubble Shooter Classic</a> is best played with pro friends. Match 3 to pop origin bubbles. This new game is first launched in 2022 game.<br />LyricsKubehttps://www.blogger.com/profile/01094761795230597031noreply@blogger.comtag:blogger.com,1999:blog-5336273.post-5422525591097212862022-03-10T13:09:45.475+09:002022-03-10T13:09:45.475+09:00Thank you so much for this informative post. I fou...Thank you so much for this informative post. I found some interesting points and lots of information from your blog.<br /><a href="https://www.sportstototop.com" title="스포츠토토" rel="nofollow">스포츠토토</a><br />roulettesitetophttps://www.blogger.com/profile/14883109402717899631noreply@blogger.comtag:blogger.com,1999:blog-5336273.post-66645724389673244932022-03-05T01:39:12.641+09:002022-03-05T01:39:12.641+09:00The Best Casino Sites For Playing Craps and Blackj...The Best Casino Sites For Playing Craps and Blackjack in<br />The Top <a href="https://drmcd.com/" rel="nofollow">도레미시디 출장샵</a> 5 Casino <a href="https://drmcd.com/%eb%82%a8%ec%9b%90%ec%b5%9c%ea%b3%a0%ec%9d%98%ec%b6%9c%ec%9e%a5%ec%95%88%eb%a7%88%eb%b0%9b%ec%95%84%eb%b3%b4%ec%84%b8%ec%9a%94.html" rel="nofollow">남원 출장샵</a> Sites for Playing Craps and Blackjack. We have chosen several <a href="https://www.jtmhub.com/%eb%82%98%ec%a3%bc%ec%b5%9c%ea%b3%a0%ec%8b%9c%ec%84%a4%ec%b6%9c%ec%9e%a5%ec%83%b5.html" rel="nofollow">나주 출장샵</a> gambling sites that cater to online <a href="https://drmcd.com/%ec%a0%95%ec%9d%8d%ec%b5%9c%eb%8c%80%ea%b7%9c%eb%aa%a8%ec%b6%9c%ec%9e%a5%ec%83%b5.html" rel="nofollow">정읍 출장안마</a> players from all over <a href="https://www.jtmhub.com/%ec%a0%9c%ec%a3%bc%ec%a3%bc%eb%b3%80-%ea%b0%80%ea%b9%8c%ec%9a%b4%ec%b6%9c%ec%9e%a5%ec%95%88%eb%a7%88.html" rel="nofollow">제주 출장샵</a> the world.gaberialfabianihttps://www.blogger.com/profile/01284458296347653212noreply@blogger.comtag:blogger.com,1999:blog-5336273.post-38819649477169064532022-02-26T20:05:25.012+09:002022-02-26T20:05:25.012+09:00Howdy! I could have sworn I've visited your bl...Howdy! I could have sworn I've visited your blog before but after looking at some of the articles I realized it's new to me. Anyways, I'm certainly happy I found it and I'll be book-marking it and checking back often! Check out our <a href="https://trickscage.net/" rel="nofollow">Hosting Coupons</a><br />Andrew Brewhttps://www.blogger.com/profile/15996216128041208008noreply@blogger.comtag:blogger.com,1999:blog-5336273.post-52995981539736511522019-09-14T04:13:46.624+09:002019-09-14T04:13:46.624+09:00Hi Eric,
Thanks for this helpful and interesting ...Hi Eric,<br /><br />Thanks for this helpful and interesting post.<br /><br />I have some suggestions and questions:<br /><br />1. It's a really bad idea to use <b>Double</b> for currency amounts. Much better to use <b>Centi</b> from <b>Data.Fixed</b> instead.<br /><br />2. You have a lot of instances of <b>$$</b> where I think <b>$</b> is meant. This is very confusing for less experienced Haskellers.<br /><br />3. In <b>parseCommerzBank</b> I think it would be better to produce a parse failure for bad dates rather than letting them go to <b>Nothing</b>.<br /><br />4. I'm wondering why you have the ADT in <b>InputLedgerLine</b> instead of having the parse alternatives all produce <b>LedgerLine</b>. Do you need to know after the fact which type of bank line produced the ledger line?<br /><br />I'm a YNAB user, too, so I found this post particularly interesting. However, all my accounts can be connected to YNAB with automatic feeds so I rarely have to download CSV directly. I've needed to process CSV for other financial applications, though, especially when importing legacy data from spreadsheets, and maybe that's your use case here.<br /><br />Thanks again,<br /><br />—NeilNeil Mayhewhttps://www.blogger.com/profile/09922675800100799542noreply@blogger.comtag:blogger.com,1999:blog-5336273.post-28156384113711034432019-09-03T21:54:59.972+09:002019-09-03T21:54:59.972+09:00Thanks for the feedback, I added a "(call by ...Thanks for the feedback, I added a "(call by name)" comment in the Pointed description. It also interesting to see how this has all changed now with the majority of the community feeling that `Pointed` was not a good idea for a typeclass (because it is lawless).Erichttps://www.blogger.com/profile/16484514586929815703noreply@blogger.comtag:blogger.com,1999:blog-5336273.post-63163443828043161462019-09-03T17:36:50.127+09:002019-09-03T17:36:50.127+09:00Ah, I saw the earlier question. Call-by-value. Gos...<br />Ah, I saw the earlier question. Call-by-value. Gosh, it's really a tripping point.<br /><br />Please write it a lot more clearly, because before asking here I wasted half an hour browsing all sort of pages about Scale typing, without finding it mentioned.<br /><br />Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-5336273.post-68150646459285482512019-09-03T17:31:45.513+09:002019-09-03T17:31:45.513+09:00Two questions, after the initial start of reading:...Two questions, after the initial start of reading:<br />- inside the definition of trait Pointed what does it mean that point accepts a parameter of type "=> A"?<br />- why is it that every implementation of point goes down to List(a), which looks to me accepting a param of type A, not "=> A"?<br /><br />I understand that "=> A" could be kind of a function returning an A, but you yourself write "there is a point function taking a value of type A and returning a F[A]". So I don't see the point of this "=> A".<br /><br />Thank you for your attention.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-5336273.post-46156556057005701702014-03-31T22:41:21.084+09:002014-03-31T22:41:21.084+09:00Hello,
you say "what we generally want with s...Hello,<br />you say "what we generally want with streams is combinators which you can pipe onto a given Process", why is that? Is it because zip would load the whole stream in memory?Mortimerhttps://www.blogger.com/profile/02613761739357754843noreply@blogger.comtag:blogger.com,1999:blog-5336273.post-37337875552472238442013-12-10T10:03:02.396+09:002013-12-10T10:03:02.396+09:00I've been meaning to look into scalaz-stream f...I've been meaning to look into scalaz-stream for a while now. It looks a bit verbose at the moment but promising, I'm looking forward to seeing it evolve. Awesome posts, keep 'em coming!David Barrihttps://www.blogger.com/profile/05426582122438954031noreply@blogger.comtag:blogger.com,1999:blog-5336273.post-86635197876999099232013-07-30T06:32:31.361+09:002013-07-30T06:32:31.361+09:00Eric,
Got it. You mean, at a minimum, Java 1.6 an...Eric,<br /><br />Got it. You mean, at a minimum, Java 1.6 and no lower. :)<br /><br />I can totally agree with that. :)<br /><br /><br /><br />Jim O'Flahertyhttps://www.blogger.com/profile/06677570063739990322noreply@blogger.comtag:blogger.com,1999:blog-5336273.post-81229433059553613002013-07-27T13:22:11.062+09:002013-07-27T13:22:11.062+09:00Why not but at least, that's a first step.Why not but at least, that's a first step.Erichttps://www.blogger.com/profile/16484514586929815703noreply@blogger.comtag:blogger.com,1999:blog-5336273.post-39152338801263182632013-07-27T13:04:18.942+09:002013-07-27T13:04:18.942+09:00Huh? I don't get it. Why not push to move to J...Huh? I don't get it. Why not push to move to Java 1.7?Jim O'Flahertyhttps://www.blogger.com/profile/06677570063739990322noreply@blogger.comtag:blogger.com,1999:blog-5336273.post-47745072864971369902013-06-21T14:02:05.217+09:002013-06-21T14:02:05.217+09:00@cedric yes, this a bit unusual maybe. We need to ...@cedric yes, this a bit unusual maybe. We need to group elements as soon as two of them have something in common. Actually maybe "transitiveClosures" would be a better name for this function because that's what it does.<br /><br />You are saying "so only neighbor elements are only ever tested for the property". No, I test "all the elements on the left" + "all the elements on the right" with the "focused" element.<br /><br />The only thing which worries me is the last property because it is a bit weak. It doesn't say that we can't have: partition(List(1,2,4,5,8,9))(near) => List(List(1, 2, 4, 5), List(8, 9)). So thanks for your comment!Erichttps://www.blogger.com/profile/16484514586929815703noreply@blogger.comtag:blogger.com,1999:blog-5336273.post-56273437916241680132013-06-21T13:25:55.357+09:002013-06-21T13:25:55.357+09:00Nice post, Éric.
I was a bit confused at first wh...Nice post, Éric.<br /><br />I was a bit confused at first when the result of the partition was (1, 2, 3) when obviously, the relation between 1 and 3 doesn't hold.<br /><br />It makes more sense after reading further and realizing your choice of using a zipper forces you to traverse the elements in sequence (so only neighbor elements are only ever tested for the property).<br />Cedrichttps://www.blogger.com/profile/13274064962794267826noreply@blogger.comtag:blogger.com,1999:blog-5336273.post-86280648542986754062013-06-21T02:23:03.672+09:002013-06-21T02:23:03.672+09:00Great post and good examples using zipper + comona...Great post and good examples using zipper + comonad. Thanks Eric! Now if I only could "see" these opportunities in my own code ;)Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-5336273.post-60622383183446526912013-05-02T20:44:06.279+09:002013-05-02T20:44:06.279+09:00Hi @pagoda_5b,
I'm glad that you like this po...Hi @pagoda_5b,<br /><br />I'm glad that you like this post, even months later! <br /><br />There is no type error on the collect operation, it indeed has only 2 type parameters, one for the applicative (an Int counter using State) and one for the result of "map" operation. The Int type parameter you are tempted to add is in a sense already there because it is in the type of the binary tree that owns the collect operation.<br /><br />Not that I trust myself that much btw, that's just what the compiler tells me :-)Erichttps://www.blogger.com/profile/16484514586929815703noreply@blogger.comtag:blogger.com,1999:blog-5336273.post-12740492586845133112013-05-02T16:55:09.057+09:002013-05-02T16:55:09.057+09:00I know I'm a bit late, but a good reading rem...I know I'm a bit late, but a good reading remains such for years.<br />I think I spotted a small error on the first example for collect. It looks like there's one type parameter missing from the call<br /><br />tree.collect[({type l[A]=State[Int, A]})#l, Int, String](count, map).apply(0) must_== <br /> (2, Bin(Leaf("1"), Leaf("2")))<br /><br />Here I added Int as the second type parameter, missing from your code.<br /><br />Really nicely done article!<br />good luckpagoda_5bhttps://www.blogger.com/profile/16499815949180321471noreply@blogger.comtag:blogger.com,1999:blog-5336273.post-69363208243518085812013-03-11T12:18:21.482+09:002013-03-11T12:18:21.482+09:00I fixed the type signature, thanks!I fixed the type signature, thanks!Erichttps://www.blogger.com/profile/16484514586929815703noreply@blogger.comtag:blogger.com,1999:blog-5336273.post-90191786231645085882013-03-11T11:12:07.856+09:002013-03-11T11:12:07.856+09:00Shouldn't the return type of the disperse func...Shouldn't the return type of the disperse function be T[A] => F[T[C]] instead of F[A] => F[T[C]] ?The Anarchist Rathttps://www.blogger.com/profile/03917399614648339119noreply@blogger.comtag:blogger.com,1999:blog-5336273.post-91234657187315838392012-10-17T07:03:57.671+09:002012-10-17T07:03:57.671+09:00Edwin, somehow your comment ended-up on the wrong ...Edwin, somehow your comment ended-up on the wrong post but that's a good catch, I fixed that line, thanks!Erichttps://www.blogger.com/profile/16484514586929815703noreply@blogger.comtag:blogger.com,1999:blog-5336273.post-56967909886787563512012-10-16T21:19:44.699+09:002012-10-16T21:19:44.699+09:00I enjoyed reading the article. There is a slight m...I enjoyed reading the article. There is a slight mistake in the proof in the section <i>coinductive proofs</i>. The third line of the proof should be:<br /><br />= comap f (x <> iterate f (f x))Edwinhttps://www.blogger.com/profile/08146771497863900167noreply@blogger.comtag:blogger.com,1999:blog-5336273.post-78362522339991428622012-06-27T03:27:06.980+09:002012-06-27T03:27:06.980+09:00Thanks Eric for an interesting post. I'm only ...Thanks Eric for an interesting post. I'm only just starting to explore concepts like total functions, codata etc. One thought I've been pondering is why in purely functional languages like Haskell it's not simply just assumed that all functions are total unless they are marked otherwise by the programmer? That would simplify reasoning and optimization of the majority of the program greatly, and in practice I don't think it would be any more unsafe than assuming all functions are partial. A simple totality checker can then be added to infer obvious cases where totality status is incorrect. Idris is one language which has implemented ideas in this direction.Jesperhttps://www.blogger.com/profile/00147859048425995420noreply@blogger.comtag:blogger.com,1999:blog-5336273.post-87301637102082680962012-06-26T06:26:26.746+09:002012-06-26T06:26:26.746+09:00Eric, you have a rare ability to write clearly on ...Eric, you have a rare ability to write clearly on difficult topics. Bravo.Seth Tisuehttps://www.blogger.com/profile/18193878850743685199noreply@blogger.comtag:blogger.com,1999:blog-5336273.post-52452313056175460332012-06-26T00:29:01.261+09:002012-06-26T00:29:01.261+09:00I am somewhat dubious about your treatment of the ...I am somewhat dubious about your treatment of the issue illustrated by division, here. I am not convinced you are wrong, but ...<br /><br />A general problem seems to be that the implementation models some external process, and the model may diverge from an accurate representation. When this happens, further computation ceases to be useful. And, detecting this issue can be useful for resource management purposes. (I feel that this is a restatement of the halting problem in concrete terms.)<br /><br />If we limit our scope to problems which can be completely resolved at compile time, this of course is a non-issue. And, there's something to be said for restructuring requirements to eliminate such issues.<br /><br />But some ill-bounded problems (for example: least squares fitting) seem interesting and are sometimes useful at runtime, even though we cannot guarantee statically that the results will always be valid.rdmhttps://www.blogger.com/profile/13809495052049903484noreply@blogger.com