Опять про Monadability
Jul. 12th, 2007 12:51 pmДопустим у нас есть тип (X a), где X ::= T x y z ... Тут важно, что "a" последнее.
Тогда если "a" хотя бы в одном конструкторе данных стоит слева от стрелки, то этот тип нельзя сделать функтором (instance Functor) так, чтобы соблюдались законы над функторами, нес па?
Тогда если "a" хотя бы в одном конструкторе данных стоит слева от стрелки, то этот тип нельзя сделать функтором (instance Functor) так, чтобы соблюдались законы над функторами, нес па?
no subject
Date: 2007-07-12 09:07 am (UTC)no subject
Date: 2007-07-12 09:31 am (UTC)data T x y z a = ... | C (a -> x)
instance Functor (T x y z)
В (data T x y z a) как ты видишь "а" последнее
no subject
Date: 2007-07-12 09:43 am (UTC)no subject
Date: 2007-07-12 10:15 am (UTC)no subject
Date: 2007-07-12 10:22 am (UTC)В принципе, мне этот тип как монада и не нужен, просто стало интересно почему так.
no subject
Date: 2007-07-12 01:01 pm (UTC)no subject
Date: 2007-07-12 01:33 pm (UTC)Пусть F - функтор (например, список). Тогда "a", о которой я говорил - это объект категории, над которой определён этот функтор.
Теперь рассмотрим закон об identity функторов:
F(ida) = F(a)
По какой то причине, если в F "a" учавствует в контрвариантой позиции (что это, кстати, значит - учавствует?), то этот закон не соблюдается. Почему? Это основной вопрос.
Насчёт контрвариантного функтора никогда не слышал. Это что то вроде cmap :: (b -> a) -> (f a -> f b) ?
Тогда для комонад должно соблюдаться (по аналогии join <-> dup; return <-> eval)
return . f = fmap f . return => eval . cmap f = f . eval
join . fmap join = join . join => cmap dup . dup = dup . dup => cmap dup = dup
Это так, измышления, надо побаловаться.
Ещё надо посмотреть есть ли и такой и такой для типов a->a :)
no subject
Date: 2007-07-12 03:16 pm (UTC)idF a = F ida -- такой закон есть, но такой закон есть и для контравариантных функторов. почему вы думаете, что его нет?
приставка «ко» возникает, когда переворачиваются стрелки. функтор, говоря языком программирования хаскель, переводит типы в типы, а функции в функции. кофунктор (то есть контравариантный функтор, так короче) делает то же самое, но стрелки функций направлены в обратную сторону.
если у нас есть индексируемый контейнер, то его можно сделать функтором по типу элементов или кофунктором по типу индексов. аналогично, тип (->) -- функтор по типу результата и кофунктор по типу аргумента.
no subject
Date: 2007-07-12 03:33 pm (UTC)Я не говорил, что такого закона нет для контравариантных функторов, я сказал, что нельзя построить "правильный" (ко-)функтор для типа (a->), чтобы этот закон соблюдался. И хотел разобраться почему.
Я забыл, что типы функции - это тоже типы, и, следовательно, являются объектами в рассматриваемой категории. Спасибо за напоминание и следующее из него объяснение :) Ещё не до конца понял (я про аналогию тип=объект и функтор (a->b) -> (f a-> f b)), но додумаю пока сам. Если что спрошу :)
Остальное вроде как понятно.
no subject
Date: 2007-07-13 05:53 am (UTC)no subject
Date: 2007-07-13 07:04 am (UTC)А как вообще тогда определить? Ты можешь мне объяснить как на ТК ложатся типы? В смысле не просто тип X, а его расшифровка - (a -> Int) -> Int - это что в ТК?
Re: Reply to your comment...
Date: 2007-07-13 07:16 am (UTC)Дык вот, в декартово замкнутой категории написать такой функтор (в смысле, (a -> X) -> X, где X - какой-то фиксированный объект) - нет проблем. Более того, это опять будет монада.
Re: Reply to your comment...
Date: 2007-07-13 07:38 am (UTC)Может где то можно почитать про отображение типов Хаскеля на ТК?
Re[2]: Reply to your comment...
Date: 2007-07-13 07:48 am (UTC)Почитать - не знаю, я в своё время задавал аналогичный вопрос в
Re: Re[2]: Reply to your comment...
Date: 2007-07-13 07:56 am (UTC)А как ты разбирался? Вот, например, как ты догадался / где узнал то, что объяснил мне?
Re[4]: Reply to your comment...
Date: 2007-07-13 08:05 am (UTC)Я уже знал ТК на неплохом уровне, когда обнаружил Хаскель. А когда что-то хорошо знаешь, начинаешь видеть аналогии и прямые совпадения. Ну и, плюс, терминология помогает - не зря же монаду монадой назвали, как раз из ТК название и пришло.
Re: Re[4]: Reply to your comment...
Date: 2007-07-13 08:20 am (UTC)