タグ コモナド
人気順 10 users 50 users 100 users 500 users 1000 users単純で頑強なメッセージングシステム、franz - モナドとわたしとコモナド
Haskell製の新しいメッセージングシステムfranzの紹介。 github.com 背景 取引所にあるマシンで取引プログラムを実行するのが我々の仕事だが、朝8時に起動したらあとは昼寝したり酒を飲んだりというわけにはいかない。モニタリングしたり、分析のためにデータを残しておく必要がある。そのため、プログラムによって解析... 続きを読む
トーラス上のライフゲームを、List Zipperを使用して実装してみた - Qiita
はじめに この記事は、「コモナドを使った抽象化の威力をライフゲームで試してみた」で言及されている「トーラス上のList Zipper」を実装してみました、という記事です。Comonadとして実装したList Zipperを使用してライフゲームを実装し、メモリ使用量が増加しないことを確認しました。 トーラスとは 長方形の左辺と右... 続きを読む
「名前の束縛」という名の束縛 - モナドとわたしとコモナド
実用的なプログラミングにおいて、名前と概念を結びつける「束縛」はほぼ必須の概念である。しかし、その言葉には大きな誤解と混乱が根付いていた。 事の発端となったのは「Haskellにおいては、変数は値を代入するものではなく、値に束縛するものである」という議論である*1 *2。しかし、これは大きな誤解を孕んでいる。... 続きを読む
日持ちする直列化のためのライブラリ「winery」 - モナドとわたしとコモナド
2018 - 06 - 03 日持ちする直列化のためのライブラリ「winery」 人類は、酒と共に発展してきたと言っても過言ではない。 穀物 や果実などを酒に変換することにより、糖を除く栄養を保ったまま、高い保存性を持たせることができる。酒は人々の喉を潤し、時に薬として使われた。 プログラミングにおいても、終了したら消えてしまうデータを、保存性の高いバイト列に変えたい場面がよくある。そのような操作... 続きを読む
コモナドを使った抽象化の威力をライフゲームで試してみた - Qiita
class Functor m => Monad m where return :: a -> m a ( >>= ) :: ( a -> m b ) -> m a -> m b join :: m ( m a ) -> m a join = ( >>= id ) k >>= m = join $ fmap k m extract は return と、 extend は >>= と、 dupli... 続きを読む
HaskellでDiscordのBotを作る - モナドとわたしとコモナド
2018 - 02 - 11 HaskellでDiscordのBotを作る Discord はゲーミング向けのテキストチャットと音声通話を兼ねるプラットフォームであり、「テキストチャンネル」と「ボイスチャンネル」の二種を好きなだけ作ることができる。もちろん音声を全チャンネルに常時垂れ流すわけには行かないので、通話するにはボイスチャンネルに参加するという手順を踏む必要がある。しかし、例えば誰かがやっ... 続きを読む
FRPクライシス - モナドとわたしとコモナド
2017 - 08 - 06 FRPクライシス FRP (Functional Reactive Programming)は、リアクティブプログラミングと 関数型プログラミング の性質を持つプログラミング パラダイム である。 FRP は古典的 FRP と矢矧の FRP に大別される。 古典的 FRP 古典的(Classical) FRP は、非連続的な値の列Eventと、常に何らかの値を取るBe... 続きを読む
快速のExtensible effects - モナドとわたしとコモナド
2017 - 08 - 02 快速のExtensible effects extensible は拡張可能レコードだけでなく拡張可能作用(extensible effects)も用意している。拡張可能作用は一時期 Haskell 界隈で話題になったものの、今では人気も下火になってしまった。新しいバージョンをリリースした今、拡張可能作用の動機と使い方について改めて紹介しよう。 難行の一次関数 Has... 続きを読む
就職しました - モナドとわたしとコモナド
2015-10-08 就職しました 本日、Tsuru Capitalのポジションを得ました。 Tsuru Capitalはデリバティブの取引を行っている企業で、自動株取引の会社ではありません。取引に関わっている10人のメンバーのうち、創始者であるSimonを除く全員がHaskellerで、取引状況の分析や一部の取引の自動化など、あらゆるところにHaskellを使っているのが大きな特徴です。日本では... 続きを読む
出、出~~wwwww銀行員待行列解説奴~wwwwwww - モナドとわたしとコモナド
2015-02-05 出、出~~wwwww銀行員待行列解説奴~wwwwwww 銀行員待行列(Banker's deque)、二つのリストで構成奴~~wwwww 入奴と出奴~wwwwwwwww ↓入奴 三(^o^)ノ [(^o^)ノ, (^o^)ノ, (^o^)ノ] ヽ(^o^)三 [ヽ(^o^), ヽ(^o^), ヽ(^o^)] ↑出奴 追加は入奴にcons、取り出しは出奴にuncons奴~www... 続きを読む
関数型プログラミングとオブジェクト指向の抜き差し可能な関係について整理して考える - モナドとわたしとコモナド
2014-09-22 関数型プログラミングとオブジェクト指向の抜き差し可能な関係について整理して考える Googleで適当に検索すると とズラリと出てくる。 オブジェクト指向 v.s. 関数型プログラミング 関数型とオブジェクト指向という一見相反するプログラミングパラダイムの併用について理解した プログラマが知るべき97のこと/関数型プログラミングを学ぶことの重要性 新人プログラマに知っておいても... 続きを読む
Haskellでオブジェクト指向を再発明する - モナドとわたしとコモナド
2014-07-26 Haskellでオブジェクト指向を再発明する 状態管理のモデル案: spawn/killモデルの実装を作ってみた。 worldsパッケージがそれだ(露骨な名前だが赦してほしい)。前の記事と違う点は、Worldがモナド変換子として実装されている点だけである。 worlds-exampleは画面内のキャラクターを方向キーで操作する例。メインのプログラムは以下のようになっている: ... 続きを読む
モナドとはモナドである - モナドとわたしとコモナド
2013-06-28 モナドとはモナドである この記事を読む前に、絶対に理解出来ないモナドチュートリアルに一度目を通してみてほしい。モナドを理解していく上で、とても重要なことが書かれている。 改めて言おう、モナドはモナドだ。コンテナだとかプログラマブルセミコロンだという説明では、モナドのすべてを正確に表せるとは言い難い。では、モナドを過不足なく説明できる、モナド以外の言葉はあるのか? 実は、モナド... 続きを読む
モナドの六つの系統 - モナドとわたしとコモナド
2013-06-05 モナドの六つの系統 モナドは「アクション」を表す抽象的な構造である。モナドは、Haskellにさまざまな概念に対する記述能力をもたらす。 モナドの基礎 return :: a -> m a: 純粋な値をモナドで包む。 m >>= f :: m a -> (a -> m b) -> m b: モナドmに包まれた値をfに渡し、その結果として現れたモナドを結合する。 固有アクション... 続きを読む
Freeモナドを超えた!?operationalモナドを使ってみよう - モナドとわたしとコモナド
2013-05-09 Freeモナドを超えた!?operationalモナドを使ってみよう 限定版IOみたいなモナドを簡単に作れたら、コードが分離できるしテストもしやすくなるのになあ… 数か月前なら、 それ、Freeモナド*1でできるよ! と返されるだろう。だが今は違う。Freeモナドよりも簡単にモナドを作れるモナド、Operationalモナドがあるのだ。 Freeモナドについて復習しよう。Fr... 続きを読む
Indexed Monadの世界 - モナドとわたしとコモナド
2013-05-04 Indexed Monadの世界 もっと、モナドの力を引き出したくはないか? え?アクションの前後で型を変えたい?いやいやいや、モナドは自己関手の圏上の単なるモノイドだよ、そんなことができ…る…!?えっ、できるの…マジで…? できる。そう、Haskellならね。 {-# LANGUAGE QuasiQuotes #-} import Control.Monad.Indexed... 続きを読む