2008-12-01から1ヶ月間の記事一覧

FOAS, HOAS, PHOAS - もうちょっとわかりやすく

絶賛現実逃避中。先のエントリ PHOAS - Parametric Higher Order Abstract Syntax - を Haskellで - keigoiの日記 は phantom typeやら GADTやらを含んでいてわかりにくかったので もっと簡単にした FOAS {-# LANGUAGE FlexibleInstances #-} import Control…

Haskell GADTで存在型から型を復元

GADTは証拠みたいなもの(というか証明)なので この証拠さえあれば 型を存在限量で隠蔽しても パターンマッチングで復元できてしまうのであった。 コード {-# LANGUAGE GADTs #-} {-# LANGUAGE ExistentialQuantification #-} {-# LANGUAGE KindSignatures #-…

PHOAS - Parametric Higher Order Abstract Syntax - を Haskellで

当該タイトルの論文は http://dx.doi.org/10.1145/1411203.1411226 論文では Coqで書いてあるが、同じことが Haskell (+GADT) でもできるようで、Haskell-cafe に投稿されていた: http://www.mail-archive.com/haskell-cafe@haskell.org/msg48913.html HOAS…

継続渡しチックな 存在型 を Haskellで

と、自分でも何を言ってるのか分からねーですが、タイトルに継続と書けばとアクセス数とブクマが増えるのでそう書く(←最低)。あながち遠くはないはずだけどOCamlでHaskellのforall を使うような存在型を直接書く事はできないらしい。 そこで #002 存在型 - K…

PHP strtotime('now + seconds') の思い出

PHP

2008-12-23 で思い出したのですが、 strtotime('now + seconds') という式でハマったことがあります。 コード

Haskell 型クラスで型推論を制御 (zipWith編)

型レベル計算で、zipWith をやりたい。 ちなみに zipWith :: (a -> b -> c) -> [a] -> [b] -> [c] で、まあそういう関数だ。しかし まともに使える関数を作るには、陽に型を指定せずとも型が推論されてくれないと困る。そこで zipWithに渡す関数の種類を、引…

Haskell 型クラスと定理証明

型レベルの数値と、引き算Sub, 型レベルのconsリスト、リストの長さを求める型クラスLengthと関数length_tを定義する。 data S n data Z class Sub n n' n'' | n n' -> n'' instance Sub n Z n instance Sub n n' n'' => Sub (S n) (S n') n'' class Length …

Haskell 型レベル計算で継続渡し

やってみた 訂正: id:athos くんの指摘により。 やりたいこと 木を深さ幅優先探索して n 番目の要素を取得する。 関数型言語でならこんな風に継続渡し形式(CPS)で書けばよい: data Tree a = Tree a :*: Tree a | Leaf a nth :: Int -> Tree a -> a nth n t …

htree + rexml で フル XPathを使う

htree は柔軟というかpermissiveだと謳われているのでスクレイピングにはちょうどよさげ。 hpricotは全然xpathをサポートしていなかったのでこのhtree+rexmlを使う。 require "rexml/document" require 'htree' doc = HTree('<div><p>abc</p><div><p>def</p><p>ghi</p></div><p>jkl</p></div>').to_rexml names …

htree を OSX にインストールするときにこけた

htreeはxmlやhtmlをparseするための rubyのライブラリらしい。 ruby install.rb とやったらば、 install.rb:19:in `target_directory': could not find target install directory (RuntimeError) となってこけた。ruby初心者なのでよくわからないけど、 def …

Ruby REXML XPath バグ

REXMLのXPathを使ってみたが、今のところあまり使えない。作者いわく: Some of the XPath functions are untested8. Any XPath functions that don't work are also bugs... please report them. If you send a unit test that illustrates the problem, I'…