タグ

ブックマーク / fujiy.hatenablog.com (3)

  • HaskellのSTG言語 - 純粋関数型技術メモ

    この記事では GHC 8.0.1 を用いています. STG言語 STG(Spinless Tagless G-machine)とは,遅延評価で高階関数をサポートする関数型言語のための抽象機械である. STG(Shared Term Graph*1)言語はSTG機械のための言語で,GHCでは Haskellソース → Core言語 → STG言語 → C-- → アセンブラ,LLVM というコンパイル過程で中間言語として現れる. STG言語は,ghcで --ddump-stg オプションをつけてコンパイルすると出力される. Core言語 Core言語は概ねHaskellのサブセットであり,脱糖したHaskellとみることができる.Haskellと異なる点は, 多相関数が引数に明示的に型パラメータをとる(@ a) パターンマッチはcase式でのみ可能で,ネストしたパターンは使えない. 変数はリ

    HaskellのSTG言語 - 純粋関数型技術メモ
  • Haskellの型システムを書く(1) - 純粋関数型技術メモ

    Haskell Advent Calendar 2017 3日目の記事です. Haskellの型推論器を実装し,型システムへの理解を深める. GHC拡張には型に関するものも多いが,今回は触れず標準のHaskellに従う. Hindley-Milner 型推論 シンプルなλ式に対する多相型推論器を考える. 構文 data Expr = Var String | App Expr Expr | Lam String Expr | Let String Expr Expr | Num Int data Type = TVar TVar | TCon String | TArr Type Type type TVar = Int data Scheme = Scheme [TVar] Type 式は変数・関数適用・λ式・Let束縛・リテラル,型は型変数・型コンストラクタ・関数型から成り立つ. 型ス

    Haskellの型システムを書く(1) - 純粋関数型技術メモ
  • Functional Reactive Programming でテトリスを書いてみる(1) [Haskell] - 純粋関数型技術メモ

    FRP(Functional Reactive Programming)というスタイルがある.入力から出力を得る(あらゆる)プログラムを関数風に表現する手法らしい.遅延ストリームは純粋関数型言語にぴったりだと感じるが,あまり流行っていないような気がする. HaskellではFRPのライブラリが複数あるそうだが,よく分からないのでボトムアップに自作してみよう.ゲームといえば入出力と内部状態の塊,楽しそうなのでCUIで動くテトリスを題材とする. 基 FRPにはEventとBehaviorという概念がある. Eventは,時間と値の組のリストで,離散的なイベントを表す.例えば,キーが押されたというイベント,画面が更新されたというイベントなど. Behaviorは時間の関数で,連続的な値を表す.例えば,経過時間や現在のスコアなど. type Time = Double newtype Event

    Functional Reactive Programming でテトリスを書いてみる(1) [Haskell] - 純粋関数型技術メモ
  • 1