タグ

GADTsに関するt10471のブックマーク (4)

  • 型安全なリストに対する補足とGADTsの話ですー>ω<

    お久しぶりですー>ω< 気がついたら一ヶ月も経っていてしまいました(´・ω・`) 前回の記事で実際に動かすことの出来ないtailを公開してしまったので、この記事はその謝罪と説明と補足になります(`・ω・´) 前回の記事で問題だったところ(・ω・? 問題だったのは、具体的にはここですm9(・∀・)ビシッ!! このtailは残念なことに型エラーが出て動かないのです(´・ω・`) なぜなのでしょうか?? 出てきたエラーメッセージを見てみます>< SafeList_by_PhantomType.hs: Couldn't match type `y' with `x' `y' is a rigid type variable bound by a pattern with constructor Cons :: forall x a y. a -> SafeList y a -> SafeList

  • tim philip williams :: Fixing GADTs

    This post was originally titled “Generic recursion schemes for GADTs using fixed points of higher-order functors” – but that doesn’t really explain why one would go to all the trouble of writing code this way. The answer, of course, is that we obtain various proofs of correctness embedded within our static types. For example, we have a proof that our traversals are correct and that our syntax AST

  • Haskellの一般化代数データ型(GADT)

    GADTs使ってみたを読んだらわかりやすかったので、適当なサンプルを見つけてみた。 プログラミングHaskell10.5の仮想マシンを例に取る data Expr = Val Int | Add Expr Expr value :: Expr -> Int value (Val n) = n value (Add x y) = value x + value y

    Haskellの一般化代数データ型(GADT)
  • GADTs使ってみた - Faith and Brave - C++で遊ぼう

    このエントリは、Haskell Advent Calendar 2011の参加記事です。 今回は、HaskellのGHC拡張であるGADTs(Generalized Algebraic Data Types : 一般化代数データ型)を調べて使ってみたという内容を書いてみました。 最初に、GADTsはGHC拡張なので、使用するには以下のようにして拡張を有効にする必要があります: {-#LANGUAGE GADTs #-} まずは構文的な違いを、Maybeを例にして見てみましょう。 通常の代数データ型では、Maybeは以下のように書きます: data Maybe a = Nothing | Just a GADTsでは以下のように書きます: data Maybe a where Nothing :: Maybe a Just :: a -> Maybe a 通常の代数データ型では、データコンス

    GADTs使ってみた - Faith and Brave - C++で遊ぼう
  • 1