Haskell

Haskell で RAII 的な処理を行うモナドを作ってみた

ふと Haskell で RAII が行いたくなったので,モナドで実装してみました: module RAII ( RAII(), unsafeExtractRAII, unextractRAII, runRAII, scoped, unsafeReleaseRAII', unsafeReleaseRAII, wrapRAII, liftIO, onDisposed, disposedWith, disposedWith_…

do 式中の無名再帰でループを回す

do 式の中でループを書く場合,イチイチ let を使うのは面倒だなぁ, と常々考えていたのですが,よく考えたら これ, fix を使えば済む話ですね: import Data.IORef import Data.Function main = do -- 無引数無名再帰 a_ref <- newIORef ( 0 :: Int ) fix…

Twitter で竹内関数が話題に登っていたので Haskell で関数適用回数を数えてみた

内容はタイトル通り. 折角なので正格評価と遅延評価の両方でカウント. import Data.IORef import System.IO.Unsafe -- グローバル変数 -- 本題ではないので詳細は省略 resetCount :: IO () incCount :: IO () readCount :: IO Int ( resetCount, incCount,…

otherwise パターン(?)

FizzBuzz とか FibBuzz で, let n = case args of [] -> 30 [x] -> read x otherwise -> error "Invalid Program Option" って何気なく書いてたけど,これ,よく考えるとおかしいです. 僕としては,ガードを使って let x = case n of n | n < 0 = "negativ…

Haskell で FibBuzz

元ネタ: C++ で FibBuzz 元凶: 钱柜娱乐_钱柜娱乐平台_钱柜娱乐777(唯一)官方网站 関連: Haskell で FizzBuzz 追記( 23:50 ): otherwise を間違って使っていたのを _ に修正 http://d.hatena.ne.jp/gintenlabo/20111015/1318689620 この程度,とても簡…

FizzBuzz 問題が Twitter で話題になっていたので Haskell で書いてみた

震源地: http://d.hatena.ne.jp/JunichiIto/20111007/1317976730 なんか Twitter で FizzBuzz が話題になってたんですが,ふと 「そういや Haskell の使いはじめの頃,練習がてら FizzBuzz を書こうとして苦戦してたなぁ」 と思い出したので,今なら楽に書…

Haskell の undefined や error が羨ましかったので, C++0x で作ってみた

http://ideone.com/nh39a #include <stdexcept> #include <utility> namespace proto_etude // prototype etude { // あらゆる型として評価できるが,実際に評価されると例外を投げる型 struct undefined_t { // 任意の型への変換 template< class T > operator T&&() const { th</utility></stdexcept>…

C++ で Maybe モナド

動機: C++ で Haskell の Either っぽい何かを作ってみた。 - 野良C++erの雑記帳 せっかく Either 作ったんだから Maybe モナドも作ろうぜ、という話。 まず Boost には、既に Maybe に相当する Boost.Optional が存在するので、 そいつをモナドの >>= に対…

C++ で Haskell の Either っぽい何かを作ってみた。

動機: boost::optionalだけじゃなくboost::eitherがほしい - Faith and Brave - C++で遊ぼう Boost.Optional は C++ でも屈指の便利ライブラリですが、 「戻り値として使う」場合には、時々「失敗した」という状況の他に、失敗した状況を示すような値が返せ…