タグ

Haskellとcontinuationに関するnsyeeのブックマーク (7)

  • 継続モナドによるリソース管理 - Qiita

    継続モナドって何に使うんだ問題に対する一つの例。 リソース管理の問題 プログラミングをやっていると必ずまとわり付いてくるのがリソース管理の問題です。ここで指すリソースというのは、ファイルのハンドルだとか、ソケットだとか、排他処理のためのロックだとか、グラフィックのハンドルだとかそういう話で、GCのない言語だとメモリの管理もこれに含まれるでしょうか。 言うまでもなく、リソースを確保した後はしかるべきタイミングで確実に解放してやる必要があります。しかし往々にして、現実のプログラムではリソースの解放漏れが発生してしまいます。単に解放するコードを書き忘れると言うのが一番単純でしょうもない理由ですが、それでも、C言語のようにリソース解放のための特別な仕組みを持たない言語では、これを徹底するのも結構骨の折れることだったりします。それはともかく、もう少し高尚な悩みとしては、例外との組み合わせで発生する解

    継続モナドによるリソース管理 - Qiita
  • logict

    logict Provides support for logic-based evaluation. Logic-based programming uses a technique known as backtracking to consider alternative values as solutions to logic statements, and is exemplified by languages such as Prolog and Datalog. Logic-based programming replaces explicit iteration and sequencing code with implicit functionality that internally "iterates" (via backtracking) over a set of

  • モナドをつくろう

    函数プログラミングの集い 2012 in Tokyo 発表スライド 継続については『簡約!? λカ娘(算)』 http://www.paraiso-lang.org/ikmsm/books/c82.html の「オール・アバウト・ケイゾク・イン・スキーム」を読むといいんじゃなイカ?Read less

    モナドをつくろう
  • CPSで実装したモナドは何故速いのか - Mizon Dev Diary

    2014-01-20 CPSで実装したモナドは何故速いのかモナド変換子の速さを測ってみる - モナドとわたしとコモナドCPSでモナドを実装すると速くなるらしい。以前、その理由について考えてみたのだが、結論に達しなかった。そこで、続きを書く。まず、Twitterである方に教えていただいたのだが、CPSで実装したモナドは、非CPSで実装したモナドに比べて次の2点の理由により高速であるという。データの生成/分解が抑えられるから合成時に継続を破棄できるからどういうことなのだろうか。Maybeモナドを例として以上の2点を確認したい——。と、確認したかったのだが、検証したところ、1点目については結論を得たものの、2点目については「速くならない」という矛盾した結論が出てしまった。そこで、以上の1点目についてのみ検証した記録をつける。非CPS版Maybeモナドまず、非CPS版のMaybeモナドの定義は以下

  • GHCで動くcall/ccの実装 - www.kotha.netの裏

    IOモナド上で動作するcall/ccを実装できることが分かったので書いておく。ただし実用に耐えるものではない。 これを使うとたとえばこういうコードを書くことができる。 import Control.Applicative import Control.Monad import Data.IORef import System.IO.Unsafe import Continuation (callCC, withContinuationsDo) test :: IO () test = do r <- callCC $ \cc -> return $ Right $ cc . Left case r of Left val -> do putStrLn $ "left: " ++ show val return () Right cc -> do putStrLn "right" cc "f

    GHCで動くcall/ccの実装 - www.kotha.netの裏
  • Workflow: an Haskell package for transparent support of interruptible computations

  • slide

    合成モナドのための call/ccに対する改善の提案 筑波大学 よねざわ たくお 米澤 拓央 この辺は何書いても後ろの人から見えない 。 Haskellのcall/cc 重大な の 対 応 設計ミス get/cc 意外 正体 な callCC 。 装 、 作 仕 事 分 析 分 。 問 題 問 題 考 、 。 性 崩 型 、 。 問 題 発 生 。 与 、 業 実 装 個 別 手 合 全 対 続 呼 出 継 、 既 知 組 現 問 題 実 対 在 問 題 質 的 使 実 装 一行 典 型 例 変 換 。 発 Haskell er騒然 か!? 問 生 題 合 変 換 子 場 表 記 使 言 継 続 扱 語 (Haskell 新オペ レータ ②分 部 分 型 制 約 演 算 子 、 継 続 変 換 与 。 。 二 。 とは 関 数 合 成 動 作 !? 、 演 算

  • 1