M

Michael Vanier

mvanier.livejournal.com · Personal blog · on HN since 2008

Michael Vanier writes about programming language theory, covering the Y combinator, monads, and the choice of foundational languages.

What HN saysHN commenters point to his Y combinator explanation and monad tutorial as clear, and cite his critical view of Ruby.
35HN people shared it
12linked it in comments
24stories submitted
395story points
1 year agolast shared
2008people per year2026

Most-shared posts

  1. 1
    The Y Combinator (2008)
    24 people · 331 points · first shared 2008 · 38 comments on HN
  2. 2
    Yet Another Monad Tutorial
    3 people · 2 points · first shared 2011 · discussion on HN
  3. 3
    The Y Combinator
    2 people · 32 points · first shared 2008 · 8 comments on HN
  4. 4
    “Foundational” programming languages (2009)
    2 people · 2 points · first shared 2008 · discussion on HN
  5. 5
    New programming blog from Mike Vanier (of LFM/LFSP fame)
    1 people · 14 points · first shared 2008 · 2 comments on HN
  6. 6
    Why Scala Is Interesting
    1 people · 13 points · first shared 2010 · 2 comments on HN
  7. 7
    The Y Combinator (Slight Return)
    1 people · 1 points · first shared 2014 · discussion on HN
  8. 8
    1351
    1 people · first shared 2008
  9. 9
    3820
    1 people · first shared 2014

What HN people wrote when they linked it

mumblemumble · 2021-06-20
If it helps, I'm rather fond of this explanation: https://mvanier.livejournal.com/2897.html Especially this part, from toward the beginning: > Before I get into the details of what Y actually is, I'd like to address the question of why you, as a programmer, should bother to learn about it. To be honest, there aren't a lot of good nuts-and-bolts practical reasons for learning about Y. Even though it does have a few practical applications, for the most part it's mainly of interest to computer language theorists. The article goes on to explain why you should learn it, anyway, but, still, it's not like monads and Haskell. Despite the concept's intellectual cachet, you don't need to understand it to be an effective lisper. That said, this opinion is mine and mine alone, and stands in direct contradiction to the sentiment expressed in the following paragraph.
adilparvez · 2016-11-11
In Haskell and PureScript, Monad is a typeclass just like any other. They are an abstraction, effectful computation is not inherent to them, they represent computational contexts, e.g. the list monad is used to model non-determinism, the maybe monad represents computations that can fail, both of these are pure. This is an excellent set of posts for building an intuition about monads: http://mvanier.livejournal.com/3917.html
jwecker · 2015-04-13
Fun to try with code (mildly). Here's the geekiest I could do that's worth sharing :-) http://i.imgur.com/IBaLCn4.png - based on the first stanza from the following: Tiger got to hunt, Bird got to fly; Lisper got to sit and wonder, (Y (Y Y))? Tiger got to sleep, Bird got to land; Lisper got to tell himself he understand. — Kurt Vonnegut, modified by Darius Bacon, (as quoted on this blog entry http://mvanier.livejournal.com/2897.html about y-combinators)
gtani · 2008-08-22
Well, they're both foundational languages, pretty much, not in the sense of this blog, i.e. most instructional language http://mvanier.livejournal.com/998.html but in the sense of can you put up a significant web app in 2 or 3 days, do lots of companies use it (along with C, java, C#, javascript). r vs. p can't be reduced to 15 bullet points, but one of the best things i remember is Alex Martelli in 2003, so he was talking about ruby 1.6 and python 2.3, i believe, but still valid http://groups.google.com/group/comp.lang.python/msg/28422d707512283 and here's the last thread from May. http://news.ycombinator.com/item?id=157269 There's the other killer apps: Python: twisted, zope, SQLalchemy, mercurial. Ruby: rake, capistrano, rspec, adhearsion, merb, puppet, metasploit. I'm sure python has a bunch more, but i've been living in rails-land.
mhartl · 2008-07-22
Mike's not a Ruby fan. Short version: he once told me that "The best thing I can say about Ruby is that there's a wonderful smaller language inside it struggling to get out." Long version: http://mvanier.livejournal.com/1351.html
kazinator · 2023-08-11
TXR Lisp: (defun y (f) [(op @1 @1) (op f (op [@@1 @@1]))]) It looks like the Haskell one is calling itself by name: (y f) appears in the right hand side. That's against the spirit of the exercise. The Y combinator is a way of boostrapping the ability to have functions be able to call themselves in a language which doesn't have named functions as a primitive. See here: https://mvanier.livejournal.com/2897.html starting at "Deriving the Y combinator" where it presents a lazy version of Y in Scheme, similar to the Haskell one and argues that it's not valid. Regarding the Scheme version, there is a shorter form: (define (Y f) ((lambda (x) (x x)) (lambda (x) (f (lambda (y) ((x x) y)))))) This is analogous to the TXR Lisp one above which rewrites the lambda terms using op syntax.
quickthrower2 · 2021-04-30
Beautiful! If it’s not clear this is the original meaning of Y combinator in computer science. Here is a link I found about it: https://mvanier.livejournal.com/2897.html
nathell · 2015-02-19
Yes there are. What made monads eventually "click" for me was the incredibly detailed, eight-part Mike Vanier's tutorial on monads in general and in Haskell in particular. First part: http://mvanier.livejournal.com/3917.html
stevenspasbo · 2015-01-06
I really liked this article: http://mvanier.livejournal.com/2897.html I have been working through SICP and I ended up taking a weekend break from it to really understand everything in the article.
loumf · 2014-11-03
A well-typed program is isomorphic to a proof -- google "propositions as types". This is not the same as saying your program is correct. For your specific question, google "dependent types", which are types that depend on a value. In your case, Haskell can type check positive integers: http://mvanier.livejournal.com/3820.html
axod · 2010-11-19
afaik it's pretty academic. The only practical application is to allow recursion in languages that don't do recursion which is pretty much none. This is a good description if you're into that sort of thing: http://mvanier.livejournal.com/2897.html The meat of it is that you can 'do' recursion by building up functions that call other functions :/ meh
visitor4rmindia · 2009-04-28
This link (from the comments on the OP) is actually a very interesting yet simple explaination of the Y-Combinator. http://mvanier.livejournal.com/2897.html

Keyboard shortcuts

/Search
j kNext / previous blog
EnterOpen selected blog
vVisit the blog site
fFollow / unfollow
lSwitch grid / list view
dSwitch dark mode
g hHome
g pTop posts
g tTopics
g fFollowing
g lLiked
g yHistory
g qFAQ
EscBack / close