Групи новин: comp.lang.haskell
Від: Simon Richard Clarkstone <s.r.clarkst...@dunelm.org.uk>
Дата: Sat, 13 Sep 2008 01:22:57 +0100
Локально: Сб 13 Вер 2008 03:22
Тема: Difficulty deriving a general type for combinator
Suppose I have a set of functions like these:
2app_id_maybe :: (forall a. a -> Maybe a) -> (b,c) -> (Maybe b,Maybe c) 2app_maybe_id :: (forall a. Maybe a -> a) -> (Maybe b,Maybe c) -> (b,c) 2app_id_list :: (forall a. a -> [a]) -> (b, c) -> ([b], [c]) 2app_id_listlist :: (forall a. a -> [[a]]) -> (b, c) -> ([[b]], [[c]]) 2app_list_id :: (forall a. [a] -> a) -> ([b], [c]) -> (b, c) Well, since their code are textually identical one should obviously 2app f (x, y) = (f x, f y) But what type does it have? The inferred type is: 2app :: (a -> b) -> (a, a) -> (b, b) But that isn't general enough, so I want to annotate the type. I can't app2 :: (tf1 :: * -> *, tf2 :: * -> *) => (forall a. tf1 a -> tf2 a) -> tf1 and tf2 are "type functions" of kind * -> *, more general than just --- The worst bit is that this function is trivial to write in (define (app2 f x) (cons (f (car x) (cdr x)))) def app2(f, x): -- Ви мусите увійти перед публікацією повідомлень.
Аби надіслати допис, будь ласка, спочатку приєднайтеся до цієї групи.
Будь ласка, поновіть своє прізвисько на сторінці налаштування передплати перед тим, як надіслати свій допис.
У вас немає права надсилання дописів до цієї групи.
| ||||||||||||||