プログラミングにおけるモナド、コモナド、トランスデューサーの理解
データ処理やエラーマネジメントを改善するための重要なプログラミング概念を学ぼう。
― 1 分で読む
目次
コンピュータサイエンスの分野、特にプログラミング言語や関連するエリアでは、特定の概念を理解することでアルゴリズムの設計や実装が大幅に向上することがある。その中にはモナド、コモナド、トランスデューサーが含まれる。これらの用語は複雑に聞こえるかもしれないけど、プログラミングに実用的な応用があって、複雑な問題を簡単にする手助けをしてくれる。
この記事では、モナド、コモナド、トランスデューサーが何なのか、それぞれの関係やプログラミングでの使い方を説明する。さらに、これらのアイデアを明確にするための例も見ていくよ。
モナドって何?
モナドはプログラムを構造化する方法だ。これを使うと、操作をきれいに管理できる形でチェーンさせることができる。モナドを、状態や入出力(I/O)、エラーなどの副作用を扱うのを手助けする道具だと思ってみて。主なロジックを混乱させずに済むんだ。
モナドの基本コンポーネント
モナドは主に3つのコンポーネントから成り立ってる:
- タイプ: モナドが扱うデータの種類を定義する。
- ユニット関数: 普通の値を受け取ってモナドにラップする。
- バインド関数: モナドと関数を受け取って、その中の値に関数を適用し、新しいモナドを返す。
これらのコンポーネントを使うことで操作をチェーンできる。例えば、失敗する可能性のある値を表すモナドがあれば、ある操作が失敗したら残りの操作は実行されないようにチェーンできる。
コモナドって何?
コモナドはモナドの双対と考えることができる。モナドが値を構築するのに対し、コモナドは値を抽出したり分析したりする手助けをしてくれる。値の周りのコンテキストが重要な時に役立つ。
コモナドの基本コンポーネント
モナドと同様に、コモナドも主に3つのコンポーネントを持ってる:
- タイプ: コモナドが扱うデータを定義する。
- エクストラクト関数: コモナドから値を取り出す。
- エクステンド関数: コモナドに関数を適用して、追加の情報を含む新しいコモナドを返す。
コモナドは、データを処理する際にコンテキストを持ち運ぶ必要がある場合に特に役立つ。
トランスデューサーって何?
トランスデューサーは、データ型間の変換として理解できるもう少し複雑な概念だ。入力を受け取って処理し、出力を生成する。しばしば何らかの構造を保ちながら行う。
トランスデューサーの役割
トランスデューサーは多くのタイプのデータを処理できて、それを別の形に変換する。例えば、数字のリストをその二乗の値に変換したり、テキストデータのフォーマットを変更したりすることができる。
トランスデューサーは、モナドやコモナドを使って構築されることが多く、それらの機能を利用して入出力を効果的に管理してる。
モナド、コモナド、トランスデューサーの関係
モナド、コモナド、トランスデューサーは、シームレスに協力して動くことができる。具体的には、トランスデューサーは値を扱うためにモナドを、コンテキストを抽出するためにコモナドを利用することが多い。この相互作用により、データ変換を堅牢に処理しつつ、明瞭さを保つことができる。
プログラミングでの例
これらの概念がプログラミングでどう使われるかの例をいくつか見てみよう。
モナド: Haskellのような関数型プログラミング言語では、Maybeモナドを使って失敗する可能性のある操作を扱うことができる。例えば、リストから値を取得しようとしてリストが空ならNothingが返るので、クリーンなエラーハンドリングができる。
コモナド: 関数型リアクティブプログラミングのような特定のアプリケーションでは、コモナドを使って状態を持つ計算を管理したりすることができる。これにより、プログラマーはコンテキストに応じた形で値を抽出しやすくなり、インタラクティブなアプリケーションを構築するのが楽になる。
トランスデューサー: 様々なプログラミング言語におけるライブラリは、データ変換を簡単に行えるようにしている。例えば、トランスデューサーはデータのコレクションを受け取り、フィルターをかけ、データを一度に変換することができ、中間ステップなしで行える。
実用的な応用
データ処理
モナドの最も一般的な応用の一つはデータ処理パイプラインだ。プログラマーはデータが一つの段階から次の段階へ流れる様子を表す一連の変換を構築できる。このアプローチは、複雑な操作を小さく管理しやすい部分に分解するのに役立つ。
エラーハンドリング
モナドはエラーを優雅に処理する手段を提供する。計算のすべてのステップでエラーをチェックする代わりに、モナドの構造を使うことで集中管理されたエラーハンドリングが可能になる。例えば、ウェブアプリケーションでは、モナドがレスポンスをカプセル化して、1つの操作でエラーが発生した場合、残りの操作が安全にスキップされるようにできる。
状態を持つ計算
コモナドは、状態を持つ計算を管理する時に特に強力だ。ゲームやシミュレーションのように、時間と共に状態が変わるアプリケーションでは、コモナドを使うことでこの複雑さを管理できる。
結論
モナド、コモナド、トランスデューサーは、プログラミングの作業を簡素化する強力な概念だ。データ変換の管理、状態管理、エラー処理に構造的アプローチを提供する。これらの概念を理解することで、プログラマーはクリーンでメンテナブルなコードを書けるようになり、堅牢なアプリケーションを構築できる。
この記事は、これらのトピックを明確にし、実用的な応用を考えるための基盤を提供することを目指してる。プログラミング初心者でも経験豊富な開発者でも、これらのアイデアを仕事に取り入れることで問題解決のツールキットが強化されるはずだ。
タイトル: Monads, Comonads, and Transducers
概要: This paper proposes a definition of recognizable transducers over monads and comonads, which bridges two important ongoing efforts in the current research on regularity. The first effort is the study of regular transductions, which extends the notion of regularity from languages into word-to-word functions. The other important effort is generalizing the notion of regular languages from words to arbitrary monads, introduced in arXiv:1502.04898. In this paper, we present a number of examples of transducer classes that fit the proposed framework. In particular we show that our class generalizes the classes of Mealy machines and rational transductions. We also present examples of recognizable transducers for infinite words and a specific type of trees called terms. The main result of this paper is a theorem, which states the class of recognizable transductions is closed under composition, subject to some coherence axioms between the structure of a monad and the structure of a comonad. Due to its complexity, we formalize the proof of the theorem in Coq Proof Assistant. In the proof, we introduce the concepts of a context and a generalized wreath product for Eilenberg-Moore algebras, which could be valuable tools for studying these algebras.
著者: Rafał Stefański
最終更新: 2024-07-02 00:00:00
言語: English
ソースURL: https://arxiv.org/abs/2407.02704
ソースPDF: https://arxiv.org/pdf/2407.02704
ライセンス: https://creativecommons.org/licenses/by/4.0/
変更点: この要約はAIの助けを借りて作成されており、不正確な場合があります。正確な情報については、ここにリンクされている元のソース文書を参照してください。
オープンアクセスの相互運用性を利用させていただいた arxiv に感謝します。
参照リンク
- https://orcid.org/0000-0002-8439-4056
- https://creativecommons.org/licenses/by/3.0/
- https://q.uiver.app/#q=WzAsNyxbMCwwLCJNIFxcLCBNIFxcLCBYIl0sWzMsMCwiTSBcXCwgWCJdLFswLDIsIk0gXFwsIFgiXSxbMywyLCJYIl0sWzUsMCwiWCJdLFs3LDAsIk1cXCwgWCJdLFs3LDIsIlgiXSxbMCwyLCJcXG11X1giXSxbMCwxLCJNIFxcLCBcXGFscGhhIiwyXSxbMiwzLCJcXGFscGhhIl0sWzEsMywiXFxhbHBoYSIsMl0sWzQsNiwiXFx0ZXh0cm17aWR9X1giLDFdLFs0LDUsIlxcZXRhX1giXSxbNSw2LCJcXGFscGhhIl1d
- https://q.uiver.app/#q=WzAsMTUsWzAsMiwiTSBcXFNpZ21hIl0sWzIsMCwiTSBTIl0sWzYsMCwiTSBNUyJdLFs2LDQsIk0gUyJdLFs2LDcsIk0gXFxHYW1tYSJdLFsyLDcsIk0gMSJdLFs0LDIsIk0gTSBcXFNpZ21hIl0sWzIsNCwiTSBcXFNpZ21hIl0sWzQsMywiKDUpIl0sWzMsMSwiKDEpIl0sWzIsMywiKDIpIl0sWzEsNCwiKDMpIl0sWzMsNCwiKDQpIl0sWzUsMywiKDYpIl0sWzUsNiwiKDcpIl0sWzQsNSwiTSEiXSxbMyw0LCJNIFxcbGFtYmRhIiwxXSxbMyw1LCJNICEiLDEseyJzdHlsZSI6eyJib2R5Ijp7Im5hbWUiOiJkYXNoZWQifX19XSxbMiwzLCJNIFxcYWxwaGEiLDFdLFsyLDUsIk0hIiwxLHsic3R5bGUiOnsiYm9keSI6eyJuYW1lIjoiZGFzaGVkIn19fV0sWzEsMiwiXFxkZWx0YSIsMV0sWzAsMSwiTSBoIiwxXSxbMCw1LCJNISIsMl0sWzAsNiwiXFxkZWx0YSIsMSx7InN0eWxlIjp7ImJvZHkiOnsibmFtZSI6ImRhc2hlZCJ9fX1dLFs2LDIsIk1NaCIsMSx7InN0eWxlIjp7ImJvZHkiOnsibmFtZSI6ImRhc2hlZCJ9fX1dLFs2LDcsIk0gXFx2YXJlcHNpbG9uIiwxLHsic3R5bGUiOnsiYm9keSI6eyJuYW1lIjoiZGFzaGVkIn19fV0sWzAsNywiaWQiLDEseyJzdHlsZSI6eyJib2R5Ijp7Im5hbWUiOiJkYXNoZWQifX19XSxbNyw1LCJNISIsMSx7InN0eWxlIjp7ImJvZHkiOnsibmFtZSI6ImRhc2hlZCJ9fX1dLFs2LDUsIk0hIiwxLHsic3R5bGUiOnsiYm9keSI6eyJuYW1lIjoiZGFzaGVkIn19fV1d
- https://q.uiver.app/#q=WzAsMTEsWzAsMCwiTVxcLCBNIFxcLCBYIl0sWzIsMCwiTSBcXCwgWCJdLFswLDIsIk0gXFwsIFgiXSxbMiwyLCJYIl0sWzMsMCwiWCJdLFs1LDAsIk0gWCJdLFszLDIsIk0gWCJdLFs1LDIsIk0gTSBYIl0sWzYsMCwiWCJdLFs4LDAsIk0gWCJdLFs4LDIsIlgiXSxbMCwxLCJcXG11X1ggIl0sWzEsMywiXFx2YXJlcHNpbG9uX1ggIl0sWzAsMiwiXFx2YXJlcHNpbG9uX3tNIFh9IiwyXSxbMiwzLCJcXHZhcmVwc2lsb25fWCIsMl0sWzQsNSwiXFxldGFfWCJdLFs0LDYsIlxcZXRhX1giLDJdLFs2LDcsIk0gXFxldGFfWCIsMl0sWzUsNywiXFxkZWx0YV9YIl0sWzgsOSwiXFxldGFfWCJdLFs5LDEwLCJcXHZhcmVwc2lsb25fWCJdLFs4LDEwLCJpZCIsMl1d
- https://q.uiver.app/#q=WzAsNCxbMCwwLCJNXFwsIE0gXFwsIFgiXSxbMiwwLCJNIFxcLCBYIl0sWzAsMiwiTSBcXCwgWCJdLFsyLDIsIlgiXSxbMCwxLCJcXG11X1ggIl0sWzEsMywiXFx2YXJlcHNpbG9uX1ggIl0sWzAsMiwiXFx2YXJlcHNpbG9uX3tNIFh9IiwyXSxbMiwzLCJcXHZhcmVwc2lsb25fWCIsMl1d
- https://q.uiver.app/#q=WzAsMTAsWzAsMCwiTSBcXCwgQSJdLFsyLDAsIk1cXCwgQSBcXHRpbWVzIEEiXSxbMiwyLCJNXFwsIEEiXSxbMywwLCJNIEEgXFx0aW1lcyBBIl0sWzUsMCwiTSBBICJdLFs1LDIsIkEiXSxbNiwwLCIoTSBBIFxcdGltZXMgQSkgXFx0aW1lcyBBICJdLFs4LDAsIk0gQSAgXFx0aW1lcyBBIl0sWzYsMiwiTSBBIFxcdGltZXMgQSAiXSxbOCwyLCJNIEEgIl0sWzAsMiwiaWQiLDFdLFswLDEsIlxcbGFuZ2xlIGlkLFxcLCBcXHZhcmVwc2lsb25fQSBcXHJhbmdsZSAiLDFdLFsxLDIsIlxcdGV4dHR0e3B1dH1fQSIsMV0sWzMsNSwiXFxwaV8yICIsMV0sWzQsNSwiXFx2YXJlcHNpbG9uX0EiLDFdLFszLDQsIlxcbWF0aHR0e3B1dH1fQSAiLDFdLFs3LDksIlxcbWF0aHR0e3B1dH1fQSIsMV0sWzgsOSwiXFxtYXRodHR7cHV0fV9BIiwxXSxbNiw4LCJcXHBpXzIgXFx0aW1lcyBcXG1hdGh0dHtpZH0iLDFdLFs2LDcsIlxcbWF0aHR0e3B1dH1fQSBcXHRpbWVzIGlkIiwxXV0=
- https://q.uiver.app/#q=WzAsMTAsWzAsMCwiTSBNIEEgXFx0aW1lcyBNIEEgXFx0aW1lcyBBIl0sWzIsMCwiTSBNIEEgXFx0aW1lcyBNIEEgIl0sWzMsMCwiTSBNIEEgIl0sWzMsMiwiTSBBICJdLFswLDIsIk0gTSBBIFxcdGltZXMgQSAiXSxbMiwyLCJNIEEgXFx0aW1lcyBBIl0sWzQsMCwiQSBcXHRpbWVzIEEiXSxbNCwyLCJBIl0sWzYsMiwiTSBBIl0sWzYsMCwiTUEgXFx0aW1lcyBBIl0sWzUsMywiXFxtYXRodHR7cHV0fV9BIl0sWzQsNSwiXFxtdV9BIFxcdGltZXMgaWQiXSxbMCw0LCJcXG1hdGh0dHtwdXR9X3tNIEF9IFxcdGltZXMgaWQiLDFdLFswLDEsImlkIFxcdGltZXMgXFxtYXRodHR7cHV0fV9BIl0sWzEsMiwiXFxtYXRodHR7cHV0fV97TSBBfSJdLFsyLDMsIlxcbXVfQSIsMV0sWzYsNywiXFxwaV8yIl0sWzcsOCwiXFxldGFfQSJdLFs2LDksIlxcZXRhX0EgXFx0aW1lcyBpZCAiLDJdLFs5LDgsIlxcbWF0aHR0e3B1dH1fQSIsMl1d
- https://q.uiver.app/#q=WzAsNixbMCwwLCJNIE0gQSBcXHRpbWVzIE0gQSBcXHRpbWVzIEEiXSxbMiwwLCJNIE0gQSBcXHRpbWVzIE0gQSAiXSxbNCwwLCJNIE0gQSAiXSxbNCwyLCJNIEEgIl0sWzAsMiwiTSBNIEEgXFx0aW1lcyBBICJdLFsyLDIsIk0gQSBcXHRpbWVzIEEiXSxbNSwzLCJcXG1hdGh0dHtwdXR9X0EiXSxbNCw1LCJcXG11X0EgXFx0aW1lcyBpZCJdLFswLDQsIlxcbWF0aHR0e3B1dH1fe00gQX0gXFx0aW1lcyBpZCIsMV0sWzAsMSwiaWQgXFx0aW1lcyBcXG1hdGh0dHtwdXR9X0EiXSxbMSwyLCJcXG1hdGh0dHtwdXR9X3tNIEF9Il0sWzIsMywiXFxtdV9BIiwxXV0=
- https://q.uiver.app/#q=WzAsNSxbMCwyLCJNIE0gQSJdLFsyLDMsIk0gQSJdLFs0LDIsIk0gTSBBICJdLFsxLDAsIk0gTSBNIEEiXSxbMywwLCJNIE0gTSBBIl0sWzAsMSwiXFxtdV9BIiwxXSxbMSwyLCJcXGRlbHRhX0EiLDFdLFs0LDIsIlxcbXVfe00gQX0iLDFdLFswLDMsIlxcZGVsdGFfe00gQX0iLDFdLFszLDQsIk0gXFx0ZXh0cm17d29ya30iXV0=
- https://q.uiver.app/#q=WzAsMTIsWzAsMCwiTSBcXFNpZ21hIl0sWzEsMCwiTSBTXzEiXSxbMiwwLCJNIE1TXzEgIl0sWzMsMCwiTSBTXzEiXSxbNCwwLCJNIFxcR2FtbWEiXSxbNCwxLCJNIFNfMiJdLFs0LDIsIk0gTSBTXzIiXSxbNCwzLCJNIFNfMiJdLFs0LDQsIk0gXFxEZWx0YSJdLFsxLDEsIk0gU18zIl0sWzIsMiwiTSBNIFNfMyJdLFszLDMsIk0gU18zIl0sWzAsMSwiTSBoXzEiXSxbMSwyLCJcXGRlbHRhIl0sWzIsMywiTSBcXG1hdGh0dHtwcm9kfV8xIl0sWzMsNCwiTSBcXGxhbWJkYV8xIl0sWzQsNSwiTSBoXzIiXSxbNSw2LCJcXGRlbHRhIl0sWzYsNywiTSBcXG1hdGh0dHtwcm9kXzJ9Il0sWzcsOCwiTSBcXGxhbWJkYV8yIl0sWzAsOSwiTSBoXzMiLDIseyJzdHlsZSI6eyJib2R5Ijp7Im5hbWUiOiJkYXNoZWQifX19XSxbOSwxMCwiXFxkZWx0YSIsMix7InN0eWxlIjp7ImJvZHkiOnsibmFtZSI6ImRhc2hlZCJ9fX1dLFsxMCwxMSwiTSBcXG1hdGh0dHtwcm9kfV8zIiwyLHsic3R5bGUiOnsiYm9keSI6eyJuYW1lIjoiZGFzaGVkIn19fV0sWzExLDgsIk0gXFxsYW1iZGFfMyIsMix7InN0eWxlIjp7ImJvZHkiOnsibmFtZSI6ImRhc2hlZCJ9fX1dXQ==
- https://q.uiver.app/#q=WzAsOCxbMCwwLCJNIFxcLCBNIFxcLCBYIl0sWzMsMCwiTVxcLCBYIl0sWzAsMiwiTSBcXCwgTSBcXCwgWSJdLFszLDIsIk0gXFwsIFkiXSxbNSwwLCJYIl0sWzUsMiwiWSJdLFs4LDAsIk1cXCwgWCJdLFs4LDIsIk0gXFwsIFkiXSxbMCwxLCJcXG11X1giXSxbMCwyLCJNIChNXFwsICBmKSIsMl0sWzEsMywiTSBcXCwgZiJdLFsyLDMsIlxcbXVfWSJdLFs0LDUsImYiXSxbNiw3LCJNXFwsIGYiXSxbNCw2LCJcXGV0YV9YIl0sWzUsNywiXFxldGFfWSJdXQ==
- https://q.uiver.app/#q=WzAsOCxbMCwwLCJNXFwsIE0gXFwsIE0gXFwsIFgiXSxbMywwLCJNXFwsIE1cXCwgWCJdLFszLDIsIk0gXFwsIFgiXSxbMCwyLCJNIFxcLCBNIFxcLCBYIl0sWzUsMCwiTVxcLCBYIl0sWzcsMCwiTSBcXCwgTSBcXCwgWCJdLFs3LDIsIk1cXCwgWCJdLFs1LDIsIk1cXCwgTVxcLCBYIl0sWzAsMSwiXFxtdV97TVh9Il0sWzEsMiwiXFxtdV9YIl0sWzMsMiwiXFxtdV9YIl0sWzAsMywiTSBcXG11X1giLDJdLFs0LDUsIlxcZXRhX3tNIFh9IiwyXSxbNSw2LCJcXG11IF9YIiwyXSxbNCw2LCJcXHRleHRybXtpZH0iLDFdLFs0LDcsIk1cXCwgXFxldGFfWCIsMix7Im9mZnNldCI6LTF9XSxbNyw2LCJcXG11X1giXV0=
- https://q.uiver.app/#q=WzAsOCxbMywwLCJNXFwsIE0gXFwsIFgiXSxbMCwwLCJNXFwsIFgiXSxbMCwyLCJNIFxcLCBZIl0sWzMsMiwiTVxcLCBNXFwsIFkiXSxbNSwwLCJNXFwsIFgiXSxbNSwyLCJNIFxcLCBZIl0sWzgsMCwiWCJdLFs4LDIsIlkiXSxbMSwyLCJNZiJdLFswLDMsIk0gKE0gZikiXSxbMSwwLCJcXGRlbHRhX1giXSxbMiwzLCJcXGRlbHRhX1kiXSxbNCw1LCJNXFwsIGYiXSxbNCw2LCJcXHZhcmVwc2lsb25fWCJdLFs1LDcsIlxcdmFyZXBzaWxvbl9ZIl0sWzYsNywiZiJdXQ==
- https://q.uiver.app/#q=WzAsOCxbMCwwLCJNXFwsIFgiXSxbMiwwLCJNXFwsIE1cXCwgWCJdLFswLDIsIk1cXCwgTVxcLCBYIl0sWzIsMiwiTSBcXCwgTSBcXCwgTVxcLCBYIl0sWzQsMCwiTSBcXCwgWCJdLFs2LDAsIk0gXFwsIE0gXFwsIFgiXSxbNCwyLCJNXFwsIE1cXCwgWCJdLFs2LDIsIk0gXFwsIFgiXSxbMCwyLCJcXGRlbHRhX1giLDJdLFswLDEsIlxcZGVsdGFfWCJdLFsxLDMsIlxcZGVsdGFfe00gWH0iXSxbMiwzLCJNIFxcLCBcXGRlbHRhX1giLDJdLFs0LDUsIlxcZGVsdGFfe1h9Il0sWzQsNiwiXFxkZWx0YV9YIl0sWzYsNywiTVxcLCBcXHZhcmVwc2lsb25fWCJdLFs1LDcsIlxcdmFyZXBzaWxvbl97TVh9Il0sWzQsNywiXFx0ZXh0cm17aWR9IiwxXV0=
- https://q.uiver.app/#q=WzAsNCxbMCwwLCJNIFggXFx0aW1lcyBYIl0sWzIsMCwiTSBYIl0sWzAsMiwiTSBZIFxcdGltZXMgWSAiXSxbMiwyLCJNIFkgIl0sWzAsMSwiXFxtYXRodHR7cHV0fSIsMV0sWzAsMiwiKE0gZikgXFx0aW1lcyBmIiwxXSxbMiwzLCJcXG1hdGh0dHtwdXR9IiwxXSxbMSwzLCJNIGYiLDFdXQ==
- https://q.uiver.app/#q=WzAsNyxbMCwwLCJTIl0sWzIsMCwiV1cgUyJdLFswLDIsIldTIl0sWzIsMiwiV1cgUyJdLFszLDAsIlMiXSxbNSwwLCJXIFMgIl0sWzUsMiwiUyAiXSxbMCwxLCJcXGJldGEiLDFdLFswLDIsIlxcYmV0YSIsMV0sWzEsMywiVyBcXGJldGEiLDFdLFsyLDMsIlxcZGVsdGEiLDFdLFs0LDUsIlxcYmV0YSIsMV0sWzUsNiwiXFx2YXJlcHNpbG9uIiwxXSxbNCw2LCJpZCIsMV1d
- https://q.uiver.app/#q=WzAsNSxbMCwxLCJNIFMiXSxbMiwyLCJTIl0sWzQsMSwiVyBTIl0sWzEsMCwiTSBXIFMiXSxbMywwLCJXIE0gUyJdLFswLDEsIlxcYWxwaGEiLDFdLFsxLDIsIlxcYmV0YSIsMV0sWzAsMywiTSBcXGJldGEiLDFdLFs0LDIsIk0gXFxhbHBoYSIsMV0sWzMsNCwiXFxnYW1tYSIsMV1d
- https://q.uiver.app/#q=WzAsNSxbMCwxLCJNIE0gWCJdLFsyLDIsIk0gWCJdLFs0LDEsIk0gTSBYIl0sWzEsMCwiTSBNIE0gWCJdLFszLDAsIk0gTSBNIFgiXSxbMCwxLCJcXG11IiwxXSxbMSwyLCJcXGRlbHRhIiwxXSxbMCwzLCJNIFxcZGVsdGEiLDFdLFs0LDIsIk0gXFxtdSIsMV0sWzMsNCwiXFxnYW1tYSIsMV1d
- https://q.uiver.app/#q=WzAsNCxbMCwwLCJNIFgiXSxbMiwwLCIoWFxcUmlnaHRhcnJvdyBYKSBcXHRpbWVzIE0gWCJdLFs0LDAsIk0gKCAoWCBcXFJpZ2h0YXJyb3cgWCkgXFx0aW1lcyBYKSAiXSxbNCwyLCJNIFgiXSxbMCwzLCJpZCIsMV0sWzAsMSwiXFxsYW5nbGUgXFxtYXRodHR7Y29uc3Rfe2lkfX0sIGlkXFxyYW5nbGUiXSxbMSwyLCJcXG1hdGh0dHtzdHJlbmd0aH0iXSxbMiwzLCJNICgoZix4KSBcXG1hcHN0byBmIHgpIiwxXV0=
- https://github.com/ravst/MonadsComonadsTransducersCoq
- https://q.uiver.app/#q=WzAsOCxbMCwwLCJNXFwsIFgiXSxbMywwLCJNXFwsIE1cXCwgWCJdLFswLDIsIk1cXCwgTVxcLCBYIl0sWzMsMiwiTSBcXCwgTSBcXCwgTVxcLCBYIl0sWzUsMCwiTSBcXCwgWCJdLFs3LDAsIk0gXFwsIE0gXFwsIFgiXSxbNSwyLCJNXFwsIE1cXCwgWCJdLFs3LDIsIk0gXFwsIFgiXSxbMCwyLCJcXGRlbHRhX1giLDJdLFswLDEsIlxcZGVsdGFfWCJdLFsxLDMsIlxcZGVsdGFfe00gWH0iXSxbMiwzLCJNIFxcLCBcXGRlbHRhX1giLDJdLFs0LDUsIlxcZGVsdGFfe1h9Il0sWzQsNiwiXFxkZWx0YV9YIl0sWzYsNywiTVxcLCBcXHZhcmVwc2lsb25fWCJdLFs1LDcsIlxcdmFyZXBzaWxvbl97TVh9Il0sWzQsNywiXFx0ZXh0cm17aWR9IiwxXV0=