Re: [Haskell] Унификация для rank-N types
От: nikov США http://www.linkedin.com/in/nikov
Дата: 09.06.09 11:46
Оценка:
Вот еще интересный эффект:

1) Такой код не проходит проверку типов:
{-# LANGUAGE RankNTypes #-}

f :: [forall a. t a -> t a] -> t b -> t b
f = foldr (.) id


    Couldn't match expected type `forall a. f a -> f a'
           against inferred type `b -> c'
    In the first argument of `foldr', namely `(.)'


2) А вот такой, практически эквивалентный, проходит:

{-# LANGUAGE RankNTypes #-}

f :: [forall a. t a -> t a] -> t b -> t b
f = foldr (\g -> (.) g) id


Кто это может объяснить?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.