2012-01-01から1年間の記事一覧
Control.MonadPlus.Freeはいなくなりました えにっきをみてください freeの新バージョンにControl.MonadPlus.Freeなるものがあったのでさっそく使ってみた。MonadPlus版Freeのコンストラクタは、Pure、Freeに加えて新たにPlusが加わっており、任意のFunctor…
何だと思う?…これね、減算式FMシンセ。ダークで重厚な音が出せるシンセを探していたところ、Image-LineのToxic Biohazardに出会った。名前も見た目も、一見するとシンセサイザーではないように思えるが、これはれっきとした生物兵器<トキシックシンセサイ…
久等了!記事を投稿しようとしたのだが、膝にunsafeInterleaveIOを受けてしまってな…今回は、HaskellによってVSTを作る方法を紹介したいと思います。 VSTとは VST(Virtual Studio Technology)は、Steinbergによって定められた、ホストアプリケーション(DAW)…
制約の緩いConveyorT、GeneratorTのおまけつき。どちらも元はごく単純で、「続きの計算を得るのに値が必要」「続きの計算に値がくっついている」を表している。 import Data.Monoid import Control.Monad.Trans.Free type ConveyorT a = FreeT ((->) a) type…
前回の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,…
かなりシンプルに実装できた。よい子は絶対にマネしないでね! 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(T)に「続きがない」ということを表すFunctorをはめるだけ。 ex1はある文字列を入力すると終了するプログラム。 import Prelude hiding (break) import Control.Monad.Trans.Free import Control.Monad.Trans import Control.Monad data Zer…
Freeモナドはすごい。Haskellを書いていて、「特殊化された処理を記述するモナドが簡単に作れたら便利だろうなー」と思ったことはないだろうか?簡単に作れるのである、そう、Haskellならね。これが、純粋なFreeモナドの定義である。 data Free f a = Pure a…
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は、あのHaskellと同じ純粋(Pure)関数型(Functional)言語である。`fxで、xにfを適用する。 関数はi、k、sの3つ。 `ix=x ``kxy=x ```sxyz=``xz`yz 入出力は、0~255までのチャーチ数のリストで表…