Re: Этюд Unbox(Box<Box<...Box<T>...>> )
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 28.06.10 08:21
Оценка: 236 (12)
Здравствуйте, WolfHound, Вы писали:

WH>Есть ли языки где можно провернуть такой фокус проверив типы unwrap в месте ее описания, а не в месте вызова.


То, чем ты занимаешься, называется "извращение". Присоединюсь, если ты не против

{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances, IncoherentInstances, TypeFamilies #-}

data Box a = Box a

class Boxed b v where
    unwrap :: b -> v

instance Boxed b v => Boxed (Box b) v where
    unwrap (Box x) = unwrap x

instance (l ~ r) => Boxed l r where
    unwrap x = x

> unwrap (Box(Box(Box(Box(123)))))
123
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.