[Haskell-cafe] Re: Chuch encoding of data structures in Haskell
C. McCann
cam at uptoisomorphism.net
Thu May 27 22:07:02 EDT 2010
On Thu, May 27, 2010 at 9:11 PM, Stefan Monnier
<monnier at iro.umontreal.ca> wrote:
> I.e. to make such an encoding really usable, you need "deep
> polymorphism" (which GHC supports just fine, but which is not part of
> the Haskell standard).
Ah, yes, and thank you for pointing that out. My message involved a
great deal of hand-waving that I neglected to clearly identify as
such. The same caveat of course applies to most Church encodings. For
instance, the proper type of a (recursive) encoded list would be:
type ChurchList a = ∀t. t -> (a -> t -> t) -> t
...where "a" is fixed as the type of the list elements. Thus, "cons"
ought to look something like this charming type:
cons :: ∀a. a -> (∀t. t -> (a -> t -> t) -> t) -> (∀t. t -> (a -> t -> t) -> t)
For extra fun, try writing an instance such as:
instance (Show a) => Show (ChurchList a) where [...etc.]
...at which point, perhaps, we remind ourselves that the language is
named "Haskell", not "Alonzo", and drop the whole matter.
- C.
More information about the Haskell-Cafe
mailing list