タグ

syntaxとghcに関するkirakkingのブックマーク (2)

  • Haskellのforallについて理解したことを書いておく(ランクN多相限定)。 - uehaj's blog

    Haskellのforallについて理解したことを書いておくyo!(ランクN多相限定*1 )。 前提知識のおさらい: 型・多相型・型検査・型推論… 最初に基概念を整理しておきます。 IntやInt->Intは単相型、aやa->aは多相型である。ここでaを型変数と呼ぶ。型変数を含む型が多相型ってわけです。 言語処理系の実装上、型という概念は型変数や型コンストラクタのツリー構造として表現される。Int,Char,[],->,(,),(,,,),IO aなどが型コンストラクタ。 a,bが型変数。組合せて(a->[Int])->[b]->(a,b)とか。::の右に書くやつです。 型は、プログラムの字面上に直接的実体がある関数や変数だけではなく、値を生じさせる部分式すべてに付随し、コンパイル時に決定されるべき情報である(値あるところに型がある。*2 )。それを決定しようというのが(静的)型検査であ

    Haskellのforallについて理解したことを書いておく(ランクN多相限定)。 - uehaj's blog
    kirakking
    kirakking 2014/01/28
    そうだったのか。明示しないといけないのか。
  • 7.3. 構文的拡張

    -XMagicHashという言語拡張は、識別子に対する後置修飾子として「#」を認めるものである。つまり、「x#」が変数として有効に、「T#」が型構築子やデータ構築子として有効になる。 この井桁記号はまったく意味論に影響を与えない。非ボックス化された値や型に「#」で終わる名前を付ける(たとえばInt#)傾向があるが、必須ではない。これらはただの通常の変数に過ぎないのである。また、拡張-XMagicHashが何かをスコープに導入することもない。例えば、Int#をスコープに導入するためにはGHC.Prim(7.2. 非ボックス化型とプリミティブ演算を見よ)をインポートしなければならない。その後で、スコープに導入されたInt#に言及することを可能にするのが-XMagicHashオプションである。このオプションが有効だと、x#y = 0の意味が変わることに注意。yという引数を一つ取る関数x#を定義す

    kirakking
    kirakking 2013/11/11
    Pattern guard:これさえあれば、長ったらしいifの入れ子なんかいらないのさ。あとは後で見る。
  • 1