Описание тега comonad

Инверсия монады. Монада - это способ структурировать вычисления в терминах значений и последовательностей вычислений с использованием этих значений. Монады позволяют программисту строить вычисления, используя последовательные строительные блоки, которые сами могут быть последовательностями вычислений.
1 ответ

Тип Переменная Расположение в Трансформаторах

Рассмотрим State тип - или хотя бы упрощенная версия: newtype State s a = State { runState :: s -> (a, s) } Теперь, скажем, мы хотим получить StateT монадный трансформатор. transformers определяет это следующим образом: newtype StateT s m a = Sta…
31 мар '18 в 11:17
3 ответа

Является ли концепция "чередованного гомоморфизма" реальной вещью?

Мне нужен следующий класс функций: class InterleavedHomomorphic x where interleaveHomomorphism :: (forall a . f a -> g a) -> x f -> x g Очевидно, что имя, которое я придумал для него, ни в коем случае не является официальным термином для че…
2 ответа

Разумные реализации Comonad

Мы можем описать монаду как вычислительный контекст, и реализация монады точно сохраняет значение этого контекста. Например, Option - контекст означает, что значение может существовать. Учитывая тип данных Option, единственная реализация, которая им…
04 мар '16 в 09:30
2 ответа

Пример Comonad в Scala

Что такое Comonad, если это возможно, опишите в синтаксисе Scala. Я нашел реализацию библиотеки скалаза, но не ясно, где это может быть полезно.
19 июн '12 в 20:58
1 ответ

Comonad непустого списка

Я медитировал над комонадами, и у меня есть интуиция, что непустой список ("полный список")- это комонада. Я построил правдоподобную реализацию в Идрисе и работал над доказательством законов комонада, но не смог доказать рекурсивную ветвь одного из …
03 окт '17 в 22:00
2 ответа

Почему IO - это монада, а не комонада?

Выход является эффективным вычислением. Таким образом, имеет смысл заключить его в монаду. Но вход является контекстно-зависимым вычислением. Таким образом, было бы больше смысла заключать его в комонаду. Однако в Haskell оба входа и выхода инкапсул…
1 ответ

Есть ли общий способ разложить свободную комонаду по монаде сбоя в "поток значений и окончательную ошибку"?

Cofree comonad полезен для итерации частичных функций способом, который полиморфен для типа ошибки. это coiter походит forM -переключение в монаде ошибок, но она собирает полученные значения в чистом / ленивом виде, и вы видите только ошибку в конце…
22 дек '16 в 12:03
1 ответ

Содержательное резюме для comonad. (Где монада является "типом для нечистых вычислений")

С точки зрения содержательных резюме - это описание Монад, кажется, выигрывает - описывая их как "тип для нечистых вычислений". Что такое эквивалентное содержательное (одно предложение) описание comonad?
11 июл '13 в 10:19
1 ответ

Tree Functor и Foldable, но с узлами. Есть ли какие-либо обобщения по этому поводу?

data Tree t = Empty | Node t (Tree t) (Tree t) Мы можем создать экземпляр Functor и использовать fmap :: (t -> a) -> Tree t -> Tree a Но что, если вместо (t -> a) я хочу (Tree t -> a), чтобы я мог иметь доступ ко всему (Node t), а не только…
30 авг '15 в 10:10
3 ответа

Comonads на молнии, как правило

Для любого типа контейнера мы можем сформировать (элементно-ориентированную) молнию и знать, что эта структура является Comonad. Это было недавно подробно изучено в другом вопросе переполнения стека для следующего типа: data Bin a = Branch (Bin a) a…
28 авг '14 в 16:51
1 ответ

Писатель Монада и Непоследовательность

Я использую Writer Монада для отслеживания флага ошибки ("столкновения") на произвольных значениях (таких как Int). Как только флаг установлен, он становится "липким" и присоединяется ко всем значениям, полученным в результате любой операции с отмеч…
07 мар '17 в 23:32
2 ответа

Не удается найти экземпляр функтора для Tuple2K

У меня есть игрушка DSL case class Logging[A](msg: String, action: A) case class Persist[A](msg: String, action: A) type Effect[A] = EitherK[Logging, Persist, A] что я хочу в паре с таким же игрушечным переводчиком case class CoLogging[A](run: Strin…
17 май '18 в 07:05
2 ответа

Сочетание государственной монады с косатской комонадой

Как совместить государственную монаду S -> (A, S) с косатой (E->A, E)? Я пробовал обе очевидные комбинации S -> ((E->A, E), S) а также (E->S->(A, S), E) но тогда в любом случае я не знаю, как определить операции (return, extract...…
2 ответа

Что такое класс типов Comonad в Haskell?

Что такое класс типов Comonad в Haskell? Как и в Comonad из Control.Comonad в пакете comonad (объяснения любых других пакетов, которые предоставляют класс типов Comonad, также приветствуются). Я смутно слышал о Comonad, но все, что я действительно з…
08 дек '11 в 09:08
2 ответа

Что такое магазин Comonad?

Имея некоторое представление о том, что такое класс типов Comonad в Haskell, я слышал о Comonad Store. Но, глядя на Control.Comonad.Store.Lazy, я не совсем понимаю. Что это значит? Для чего это? Я слышал, что Store = CoState, двойник Государственной…
07 янв '12 в 00:29
0 ответов

Как изменить фокус в Haskell Store Comonad в двухмерном списке

Я борюсь со следующей проблемой. Я пытаюсь сделать Game of Life, используя магазинные комонады в Haskell. У меня есть следующий соответствующий код: type Cel = ((Float, Float), Bool) type Field2D = [[Cel]] Затем я создал начальное поле: initialField…
18 апр '18 в 17:51
1 ответ

Какие преимущества я получу от создания экземпляра Comonad

В моем приложении я пытаюсь реализовать систему анимации. В этой системе анимации представлены в виде циклического списка кадров: data CyclicList a = CL a [a] Мы можем (неэффективно) продвигать анимацию следующим образом: advance :: CyclicList a -&g…
04 сен '14 в 23:34
1 ответ

Краткая сводка по кодатам (где комонада является "типом для входной примеси")

С точки зрения содержательных резюме - это описание Comonads, кажется, выигрывает - описывая их как "тип для входной примеси". Что такое эквивалентное содержательное (одно предложение) описание для кодаты?
11 июл '13 в 22:48
3 ответа

Comonadical найти все способы сосредоточиться на сетке

{-# LANGUAGE DeriveFoldable #-} {-# LANGUAGE DeriveFunctor #-} {-# LANGUAGE DeriveTraversable #-} import Control.Comonad import Data.Functor.Reverse import Data.List (unfoldr) Сначала немного контекста (ха-ха). У меня есть молния над непустыми списк…
06 мар '16 в 13:29
1 ответ

Понимание Comonad's <$$>

Учитывая следующее из фп-курса: class Functor f where (&lt;$&gt;) :: (a -&gt; b) -&gt; f a -&gt; f b class Functor f =&gt; Extend f where (&lt;&lt;=) :: (f a -&gt; b) -&gt; f a -&gt; f b Я определил &lt;$$&gt; как так: (&lt;$$&gt;) :: Comonad f =&gt…
23 янв '19 в 03:17