タグ

ブックマーク / yu-i9.hatenablog.com (4)

  • Haskellで大域変数が欲しい時はReaderモナドを使いましょう - yu-i9.tmp

    何の知識もなくHaskellでコードを書いていると大域変数を引き回してしまうことが多々あり、非常にイライラします。Haskellで大域変数を実現したいときはReaderモナドを使えば良いようです。微妙にリファレンスが少なくてヤキモキしたので知見を並べていきます。 まずは公式リファレンス。 Control.Monad.Reader - Hackage 続いて定義。 newtype Reader e a = Reader { runReader :: e -> a } instance Monad (Reader r) where return a = Reader $ \_ -> a m >>= f = Reader $ \r -> runReader (f (runReader m r)) r 上を見ればわかるとおり、Readerというのは環境変数(e)を受け取って値を返す関数のことなので

    Haskellで大域変数が欲しい時はReaderモナドを使いましょう - yu-i9.tmp
  • 漸進的型付けの未来を考える - -

    この記事はCAMPHOR- Advent Calendar 2017 11日目の記事です. アブストラクト 漸進的型付けは,ひとつの言語の中で静的型付けと動的型付けをスムーズに組み合わせるための技術です. よく知られた特徴は any 型を使った静的型付けで, TypeScriptPython といったプログラミング言語には既に実装されています. しかし,理論と実際のプログラミング言語の間には大きなギャップが存在します. 特に,漸進的型付けの理論で提案されているキャストを用いた動的型検査が実装されていないために, 静的型付けの恩恵を十分に得られていないという問題があります. この記事では,まず漸進的型付けの理論をコード例を用いて紹介し, 現状の漸進的型付き言語が抱える問題を解説します. そのあとで,漸進的型付き言語が目指すべき目標を理論的視点から論じます. それらの目標は,静的型付けを

    漸進的型付けの未来を考える - -
  • 【Haskell】Debug.Traceとプロファイリングで幸せなデバッグ生活 - yu-i9.tmp

    Haskell Hierarchical Librariesをぼんやりと眺めていたところ、Debug.Traceが目に止まった。効率の良いデバッグとかテストに憧れを持ち始めるお年頃なので、こういうパッケージ名に弱いのかもしれない。まあ実際、Haskellでコードを書いていると、printfデバッグができなくて悶々とする場面は結構あったので悪くはない。 以下で簡単な実行例を示していく。 また、traceStackのところでプロファイリングに関連した話が登場したので、そちらも簡単に調べてみた。 使うライブラリ Debug.Trace デバッグやモニタリング以外では絶対に使うなよ、とアナウンスされている。unsafePerfomIO(IOを外してしまう黒魔術)とかを使っているのがチラッと見えたし、確かに危なそうだなぁという気はする。 下準備 プロファイリングを行うためには、haskell-pla

    【Haskell】Debug.Traceとプロファイリングで幸せなデバッグ生活 - yu-i9.tmp
  • Haskellで簡単な正規表現を実装した【KMCアドベントカレンダー8日目】 - -

    KMCアドベントカレンダー8日目の記事です。 講義で正規表現とかオートマトンをちゃんと学んだので、Haskellの修行も兼ねて簡単な正規表現を実装しました。理論とか実装とかダルいと思うので、おまけだけ読むと楽しいかも知れません。 理論 決定性有限オートマトン(DFA) 有限オートマトンとは、 状態集合(s_0, s_1, .., s_N) 入力記号(a, b, c, など) 受理状態集合 初期状態(s_0) 状態遷移関数 によって定義される数学的モデルです。ある入力記号列が与えられると、それを左から読みながら状態を移動していきます(最初は初期状態にいる)。状態の移動は状態遷移関数に依存します。状態遷移関数は、現在の状態と入力記号を受け取って、遷移先の状態を返すような関数です。例えば「s_0にいる状態で'a'を読んだら、s_1に移動する」というような遷移を定義します。全ての記号を読み終わった

    Haskellで簡単な正規表現を実装した【KMCアドベントカレンダー8日目】 - -
  • 1