Pedro Vasconcelos wrote:
>Jim Apple <[EMAIL PROTECTED]> wrote:
>>Is there a type we can give to
>>
>>y f = f . f
>>
>>y id
>>y head
>>y fst
>>
>>are all typeable?
>
>Using ghci:
>
>Prelude> let y f = f.f
>Prelude> :t y
>y :: forall c. (c -> c) -> c -> c
>
>So it admits principal type (a->a) -> a->a. From this you can see that
>(y head) and (y fst) cannot be typed, whereas (y id) can.

I think the OP's point is that all three of his examples make sense, and the resulting functions would have Haskell types, yet there doesn't seem to be a Haskell type which permits all three uses of y. I can come up with types which permit any one of the three:

  y :: forall a. (a -> a) -> a -> a
  y :: forall a f. (forall x. f x -> x) -> f (f a) -> a
  y :: forall a b c f. (forall x y. f x y -> x) -> f (f a b) c -> a

but I can't find a type which permits more than one. It can probably be done with type classes.

-- Ben

_______________________________________________
Haskell mailing list
Haskell@haskell.org
http://www.haskell.org/mailman/listinfo/haskell

Reply via email to