2009-07-01から1ヶ月間の記事一覧

Haskell+GADTで定理証明 その1: 型レベル自然数の等価性

実は、私のfull-sessionsというセッション型のライブラリは中で unsafeCoerce#を使っているので型安全でない。使ってくれる人にとってそれは心もとないだろうし、そもそもunsafeなんとかは、いけがみさんによればSPJとSimon Marlowしか使ってはいけないこと…

型変数の比較3 - 非等価性は矛盾する

TypeEq による型の非等価性判定は結果として矛盾することがある,というお話.型変数の比較で,引数の型が異なることを表現する関数を作ろうとして次のようなコードを書いたとする: typeEq' x y = type'eq x y :: HFalse ここでGHCのeagerなcontext reducti…

型変数の比較2

http://d.hatena.ne.jp/keigoi/20090709/1247155626 の続き.この話は無駄にUpdateとかの型レを使っていてややこしかったです.ここで紹介したコードを ghciでロードして,次を入力すればわかります: ghci> :t type'eq undefined undefined type'eq undefin…

Text.Printf, もっと安全なprintf

可変長引数のテクニックは普通に Text.Printfで使われてるんですね。 型レ以外ではHaskellをヘビーに触るわけではないので知りませんでした…型安全な printf (引数の過不足や型ミスマッチをチェックできる)については Olegさんの最近のポスト http://okmij.o…

型変数の比較

もっと簡単な例で追記しましたHaskellの型レでは型変数同士の比較ができないぜーというお話をしたんですが、OlegさんのReversing Haskell typechecker: converting from undefined to defined のTypeEqを試したらば、できちゃいました。Haskell型レのバイブ…

Haskell98可変長引数ハックにみる,各処理系のcontext reductionの違い

Olegさんの Generic polyvariadic printf in Haskell98 は、プレーンなHaskell98で可変長引数関数をつくり,printfを実現しています. 関数の型(a->r)は型構築子(->)と型引数a rからなる型 (->) a r なわけで,型クラスのインスタンスでうまいこと回せば、こ…