[Haskell-cafe] Fwd: Questions about lambda calculus

wren ng thornton wren at freegeek.org
Wed Nov 10 19:01:16 EST 2010

On 11/10/10 9:18 AM, Max Bolingbroke wrote:
> On 10 November 2010 12:49, Patrick LeBoutillier wrote:
>> I'm a total newbie with respect to the lambda calculus. I tried
>> (naively) to port these examples to Haskell to play a bit with them:
> You can give type signatures to your first definitions like this:
> {-# LANGUAGE RankNTypes #-}

The secret is that Church encodings of data types only work 
straightforwardly in the untyped lambda calculus, where every term 
*does* have the infinite type a ~ (a->a). Once you move to a typed 
lambda calculus like Haskell, those types are rejected. You can get 
pretty far with Church Booleans before things break, but Church natural 
numbers break very quickly.

The sneaky bit is that Church encodings (though intended for the untyped 
lambda calculus) can be given valid types in System F, aka -XRankNTypes. 
Unfortunately the types of System F cannot, in general, be inferred 
automatically. So to preserve type inference, most functional languages 
will limit the kinds of polymorphism allowed to the Hindley--Milner 
subset of System F, which excludes most Church encodings.

The moral of the story is, you need to enable -XRankNTypes and you need 
to provide explicit type signatures (or else use newtypes to the same 

Live well,

More information about the Haskell-Cafe mailing list