タグ

関連タグで絞り込む (2)

タグの絞り込みを解除

Haskellとgadtに関するruiccのブックマーク (2)

  • GADT.ppt

    Generalised Algebraic Data Types Simon Peyton Jones Microsoft Research Geoffrey Washburn University of Pennsylvania Stephanie Weirich University of Pennsylvania A typical evaluator data Term = Lit Int | Succ Term | IsZero Term | If Term Term Term data Value = VInt Int | VBool Bool eval :: Term -> Value eval (Lit i) = VInt i eval (Succ t) = case eval t of { VInt i -> VInt (i+1) } eval (IsZero t) =

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

    実は、私のfull-sessionsというセッション型のライブラリは中で unsafeCoerce#を使っているので型安全でない。使ってくれる人にとってそれは心もとないだろうし、そもそもunsafeなんとかは、いけがみさんによればSPJとSimon Marlowしか使ってはいけないことになっているらしい。やっぱりHaskellを使うものとして型安全性くらいは保証したい。でも、かといって普通のHaskellではうまく型を付けられない。(Typeableクラスのキャストを使っても解決にはならない。) そこで、魔法のGADT。 この型とこの型はぜったい等しいのにーというのが文脈から明らかなとき、それを表現できるのがGADTだ…というのが私の理解。まさしく私のケースにぴったりだ。これを使えばunsafeCoerceなんか要らんかもしれない。 いいかえれば、いわゆる定理証明をGADTつきのHaske

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