Головна сторінка Груп Google
Довідка | Записатися
Допис з розмови Difficulty deriving a general type for combinator
Група, до якої ви додаєте допис, - група Usenet. Відтак, будь-хто в Інтернеті бачитиме вашу електронну адресу.
Вашу відповідь не було надіслано.
Ваш допис було надіслано
 
Від:
Кому:
Копія:
Продолжить:
Додати копію: | Додати продовження: | Редагувати тему
Тема:
Підтвердження:
З метою підтвердження введіть символи, які ви бачите на зображенні нижче або числа, які чуєте, натиснувши значок доступу. Прослухайте і введіть цифри, що чуєте
 
Simon Richard Clarkstone  
Переглянути профіль
 Більше налаштувань 13 Вер 2008, 03:22
Групи новин: 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_id_maybe f (x, y) = (f x, f y)

2app_maybe_id :: (forall a. Maybe a -> a) -> (Maybe b,Maybe c) -> (b,c)
2app_maybe_id f (x, y) = (f x, f y)

2app_id_list :: (forall a. a -> [a]) -> (b, c) -> ([b], [c])
2app_id_list f (x, y) = (f x, f y)

2app_id_listlist :: (forall a. a -> [[a]]) -> (b, c) -> ([[b]], [[c]])
2app_id_listlist f (x, y) = (f x, f y)

2app_list_id :: (forall a. [a] -> a) -> ([b], [c]) -> (b, c)
2app_list_id f (x, y) = (f x, f y)

Well, since their code are textually identical one should obviously
unify them:

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
figure out how to express it.  I tried the following, but it didn't even
parse:

app2 :: (tf1 :: * -> *, tf2 :: * -> *) => (forall a. tf1 a -> tf2 a) ->
(tf1 b, tf1 c) -> (tf2 b, tf2 c)

tf1 and tf2 are "type functions" of kind * -> *, more general than just
type constructors of type * -> *.

---

The worst bit is that this function is trivial to write in
dynamically-typed languages:

(define (app2 f x) (cons (f (car x) (cdr x))))

def app2(f, x):
   y, z = x
   return f(y), f(z)

--
Simon Richard Clarkstone:
s.r.cl?rkst...@dunelm.org.uk / s?m?n_cl?rkst...@yahoo.co.uk
   | My half-daughter went to the GMH riots |
   | But all I got was this stupid ¥-shirt. |


Ви мусите увійти перед публікацією повідомлень.
Аби надіслати допис, будь ласка, спочатку приєднайтеся до цієї групи.
Будь ласка, поновіть своє прізвисько на сторінці налаштування передплати перед тим, як надіслати свій допис.
У вас немає права надсилання дописів до цієї групи.

Створити групу - Групи Google - Домівка Google - Правила користування послугою - Заява про конфіденційність і нерозголошення інформації
©2009 Google