タグ

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

  • ぼくのかんがえた最強の拡張可能レコード - モナドとわたしとコモナド

    注意(2018/04) かなり古い記事なので、extensibleの最新のバージョンとはまったく互換性がない __ 動機 GHCに、OverloadedRecordFields(ORF)という拡張の導入が提案されている。 (Records/OverloadedRecordFields/Design – GHCより) Haskellのレコードの深刻な欠点は、フィールドをオーバーロードできないことだ。例えば、 data Person = Person { personId :: Int, name :: String } data Address = Address { personId :: Int, address :: String } と定義したとき、personIdはどちらを参照すべきかわからない。よくある対策としてデータ型に接頭辞をつけるという方法があるが、コードやフィールド間の関

    ぼくのかんがえた最強の拡張可能レコード - モナドとわたしとコモナド
    c255
    c255 2015/01/21
  • 状態、手続き、OOP - モナドとわたしとコモナド

    これはオブジェクト指向 Advent Calendar 2014の7日目の記事です。 入力によって変化する状態をうまく扱うことはプログラミングにおいて重要である。この記事では、状態や手続きを扱うさまざまなアプローチを紹介、比較する。 手続き型プログラミング 命令の列である手続きを「定義」「呼び出し」する記述力を提供する。命令の結果として得られた値に依存して、次に行う手続きを決定するという性質が肝である。 コルーチン 手続きに区切りを設けることで、「途中まで実行された手続き」を値として扱う。手続きが持つ潜在的な状態を閉じ込めることができるため、柔軟性が高い。 第一級手続き型プログラミング 手続きをデータ構造の一つとして表現し、呼び出すだけではなく、手続きそのものに対する操作も可能にする。「手続きの結果として得られた値に依存して、次に行う手続きを決定する」性質に対応するものとしてモナドがある。

    状態、手続き、OOP - モナドとわたしとコモナド
  • Operationalモナドをゲームに応用した話 - モナドとわたしとコモナド

    データを処理することは、プログラミングのもっとも質的な部分である。数値、文字列、あるいはデータの集まりなどを扱うために、数々の構造が考えられてきた。Haskellにおいては、「手順」もデータとして扱うことができる。これは、DSLを作るうえで非常に有用であり、ゲーム開発やデータベース操作……手続きがかかわるあらゆるものに応用できるだろう。 手順をデータとして扱う方法として、FreeモナドとOperationalモナドがある。ここでは、Operationalモナドをゲームのキャラクターの制御に用いた例を紹介する。Freeモナドの導入については、Andres Löh氏のHaskell eXchange 2013の講演がわかりやすく、おすすめである。 データを作る アクションゲームの敵の動きとして、この二つを考えよう: 待機 接近(攻撃) 索敵(プレイヤーの位置を調べる) EnemyMというモナ

    Operationalモナドをゲームに応用した話 - モナドとわたしとコモナド
  • 1