Freeモナドでゲームを作ろう!第1回: Gameモナドの基本

連載目次 第0回: 概要 第1回: Gameモナドの基本 (この記事) free-gameを使う さて、みなさん、free-gameはインストールしましたか?まだの型方も、もうインストールした方も、本日free-gameを更新したのでcabal update && cabal install free-gameしましょう…

Freeモナドでゲームを作ろう!第0回: 概要

連載目次 第0回: 概要 (この記事) 第1回: Gameモナドの基本 先ほど、free-gameというライブラリをアップロードしました。free-gameは、世界で一番柔軟かつ簡単にゲームなどのGUIを作れるライブラリを目指しています。 Freeモナドとは Freeモナドは、Functor…

究極のモナド「Idealモナド」を垣間見る(続/その0)

前回の記事究極のモナド「Idealモナド」を垣間見るではFreeモナドを構成して興奮して終わってしまったが、今回はイデアルモナドの仕組みについてもう少し考えてみる。 data Ideal f a = Pure a | Ideal (f a) Idealモナドは、純粋な値Pure aか、fというなに…

究極のモナド「Idealモナド」を垣間見る

新年おめでとうございます。 突然だが、中身への関数適用(fmap)、シングルトンの生成(return)、ネストの結合(join)ができるコンテナを一般化するとモナドになる。 昨年話題になったのでご存知の方も多いと思うが、モナドをシングルトンの生成とネストの結合…

Freeモナド実用の旅(5): MonadPlus for Free

Control.MonadPlus.Freeはいなくなりました えにっきをみてください freeの新バージョンにControl.MonadPlus.Freeなるものがあったのでさっそく使ってみた。MonadPlus版Freeのコンストラクタは、Pure、Freeに加えて新たにPlusが加わっており、任意のFunctor…

Toxic Biohazardを買った

何だと思う?…これね、減算式FMシンセ。ダークで重厚な音が出せるシンセを探していたところ、Image-LineのToxic Biohazardに出会った。名前も見た目も、一見するとシンセサイザーではないように思えるが、これはれっきとした生物兵器<トキシックシンセサイ…

HaskellのFFIでVSTを作る [Haskell Advent Calendar 2012 14日目]

久等了!記事を投稿しようとしたのだが、膝にunsafeInterleaveIOを受けてしまってな…今回は、HaskellによってVSTを作る方法を紹介したいと思います。 VSTとは VST(Virtual Studio Technology)は、Steinbergによって定められた、ホストアプリケーション(DAW)…

Freeモナド実用の旅(4): FreeなReader、Writerモナド

制約の緩いConveyorT、GeneratorTのおまけつき。どちらも元はごく単純で、「続きの計算を得るのに値が必要」「続きの計算に値がくっついている」を表している。 import Data.Monoid import Control.Monad.Trans.Free type ConveyorT a = FreeT ((->) a) type…

Freeモナド実用の旅(3): TimeMachineモナド

前回のGotoモナドをさらに強化し、未来にも行けるようにしてみた。 import qualified Data.IntMap as Map import Control.Monad.Trans.Free import Control.Monad.Trans import Control.Monad newtype Ticket = TicketId {getTicketId :: Int} deriving (Eq,…

Freeモナド実用の旅(2): Gotoモナド

かなりシンプルに実装できた。よい子は絶対にマネしないでね! import qualified Data.IntMap as M import Control.Monad.Trans.Free import Control.Monad.Trans newtype Label = LabelId Int deriving (Eq, Ord) data Labeling a = Label (Label -> a) | G…

Freeモナド実用の旅(1): ループからのBreak

とても簡単。Free(T)に「続きがない」ということを表すFunctorをはめるだけ。 ex1はある文字列を入力すると終了するプログラム。 import Prelude hiding (break) import Control.Monad.Trans.Free import Control.Monad.Trans import Control.Monad data Zer…

そろそろFreeモナドに関して一言いっとくか

Freeモナドはすごい。Haskellを書いていて、「特殊化された処理を記述するモナドが簡単に作れたら便利だろうなー」と思ったことはないだろうか?簡単に作れるのである、そう、Haskellならね。これが、純粋なFreeモナドの定義である。 data Free f a = Pure a…

Lazy Kのクワインを約半分に短縮

http://d.hatena.ne.jp/fumiexcel/20120402 のクワインを46085bytesから25677bytesに短縮した。こっちが古いコード。 (lazy-def '(++ self xs ys) '(s (null? xs) (o (cons (car xs)) (self (cdr xs))) ys)) (lazy-def 'syms '(cons 115 (cons 96 (cons 107 …

文字列リテラルが無いLazy Kで黒魔術も力技も使わずにクワイン

Lazy Kで素直にクワインを作ったときのメモ。 Lazy Kとは Lazy Kは、あのHaskellと同じ純粋(Pure)関数型(Functional)言語である。`fxで、xにfを適用する。 関数はi、k、sの3つ。 `ix=x ``kxy=x ```sxyz=``xz`yz 入出力は、0~255までのチャーチ数のリストで表…

Haskell Advent Calendar 2011 20日目

Haskell Advent Calendar 2011 20日目は、Haskoreというライブラリの紹介です。Haskoreとは?Haskellによって書かれた音楽を扱うためのライブラリです。CSound、MIDI、SuperColliderに対応しています。 MIDIを使用するものとして話を進めていきます(他の二つ…

Pythonで「お題:ある金額になるコインの組み合わせ」をやってみた

お題:ある金額になるコインの組み合わせをPythonでやってみた。 バックトラックが一番簡単か。 「順序が違うだけのものは一つの組み合わせとする」は「各列をソートしたときに重複しない」と同じ。探索する候補が列の最後の値を下回らない([x for x in coin…

「お題:文字列を先頭から見て同じところまで除去」をPythonで作ってみた

「お題:文字列を先頭から見て同じところまで除去」http://d.hatena.ne.jp/fumokmm/20110812/1313138407 をPythonでやってみた。itertoolsにほぼ同じことを行う関数(itertools.dropwhile)があったので数分でできた(ドヤ顔) #!/usr/bin/env python # coding: …