2013-01-01から1年間の記事一覧

GHCで動くcall/ccの実装

IOモナド上で動作するcall/ccを実装できることが分かったので書いておく。ただし実用に耐えるものではない。これを使うとたとえばこういうコードを書くことができる。 import Control.Applicative import Control.Monad import Data.IORef import System.IO.…

RULESによるコンパイル時プログラミング

これはHaskell Advent Calendar 2013の(3+π)日目の記事です。(3 + pi)や(quot 7 8)のような単純な定数式は、ghc -Oが行なう定数畳み込みによってコンパイル時に計算される。uncurry (*) (3, max 5 2)のようなやや複雑な式も、インライン展開してから定数畳み…

圏論と数式の練習

変な議論してたら教えてください! 命題0 を集合、を圏、を忘却関手、を自由関手とすると、以下が成り立つ。 証明 米田の補題からなので、を示せば良い。はの左随伴だから、単位と余単位が存在して以下が成り立つ。 以下で具体的に同型射を構成する。写像と…

doの乱用

メモ。Haskell Reportによれば、(do a)という式の意味は(a)と同じなので、aがモナドな型を持っている必要はない。これを利用して、括弧を減らすためだけにdoを使うことができる。 import Data.Complex import Data.Monoid import Data.Text.Lazy.Builder imp…