[Haskell-cafe] Higher order types via the Curry-Howard correspondence

Stefan O'Rear stefanor at cox.net
Tue May 15 22:44:25 EDT 2007


On Tue, May 15, 2007 at 10:28:08PM -0400, Scott Turner wrote:
> On 2007 May 13 Sunday 14:52, Benja Fallenstein wrote:
> > 2007/5/12, Derek Elkins <derek.a.elkins at gmail.com>:
> > > In Haskell codata and data coincide, but if you want consistency, that
> > > cannot be the case.
> >
> > For fun and to see what you have to avoid, here's the proof of Curry's
> > paradox, using weird infinite data types. 
> 
> I've had some fun with it, but need to be led by the nose to know what to 
> avoid. Which line or lines of the below Haskell code go beyond what can be 
> done in a language with just data? And which line or lines violate what can 
> be done with codata?

There is nothing wrong with having both codata and data in a
consistent language.  For instance, in System Fω, you can have both
[]:

λ(el : *). ∀(res : *). (el → res → res) → res → res

and co-[]:

λ(el : *). ∀(res : *). (∀(seed : *). seed → (seed → el) → (seed → seed) → res) �

The trouble comes when they can be freely mixed.

Stefan


More information about the Haskell-Cafe mailing list