タグ

ブックマーク / otter-o.hatenadiary.org (4)

  • 実は関数もモナドとして捉えることができる - 取り急ぎブログです

    関数(a->b)はそのままArrowのインスタンスになっているわけなんですが、実はモナドのインスタンスとしても機能できることに気づきました… ステートモナドとかを見れば何の秘密にもなっていないことなんですが…「関数もモナドのインスタンスとして扱える」という認識が今まではっきりとはなかったのでちょっとインパクトがありました… ということでやってみました: newtype MonadF i o = MonadF {runMF :: i -> o} instance Monad (MonadF i) where return a = MonadF $ const a (MonadF af) >>= b = MonadF $ \i -> (runMF $ b $ af i) i instance Functor (MonadF i) where fmap f (MonadF mf) = Monad

    実は関数もモナドとして捉えることができる - 取り急ぎブログです
  • Arowのこと - 取り急ぎブログです

    Haskellを勉強し始めて、モナドのことを知ってちょっとしたころに名前だけ見かけて、実際どんなものなのかを知りたいと思っていたのがArrowです。こちらhttp://www.haskell.org/arrows/で見つけられるような説明を読んだりしたのですが、もう、半年ぐらいちょっと読んでは挫折の繰り返しで、何を言ってるかわかるようになるまでずいぶんとかかりました...かといって、そんなに高度なことを言ってるわけではなくて、単に僕が時間がかかったというだけなんでしょうけど… まだ、わからないことも色々あるのですが、とりあえず、ここまでの時点でわかったこと、書いておきたいと思います。 Arrowの導入の元になった論文の"Generalizing Monads to Arrows"によると、Arrowの導入のきっかけは構文解析器(パーサ)をデザインするにあったって、最初はモナドとしてデザイン

    Arowのこと - 取り急ぎブログです
  • Programming Windows in Haskell、次の一歩。 - 取り急ぎブログです

    もうかれこれ半年以上前のポストの続きになるんですが、なんというか、HaskellでWin32を直にたたくスタイルでGUIアプリを書いてみたわけなんですが、前回挫折したのは、ウィンドウごとのステートをどうやって保持するかというところだったわけです。IORefを作ってその中にステートを書き込んだり読み出したりする方法をHaskellCafeなどでも見かけたりしたのですが、個人的にはなんともしっくり来ていなかったわけです。 先日久しぶりにこの辺のことをごにょごにょといじくってみる気になったので、コードをさわっていたわけです。HaskellでWin32アプリを書いたとき一番最初に僕が試したのはウィンドウのステートをShowしてSetWindowText/GetWindowText経由で保存するという技でした。これをやったときはまだIORefなんていうものも知らず、とにかく何か動かしたいと思ってやっ

    Programming Windows in Haskell、次の一歩。 - 取り急ぎブログです
  • fixを使うためのヒント - 取り急ぎブログです

    効率化の話はなんだか疲れるので、またデータ再帰の話へ脱線… id:dachs_hippoさんのfixに関する記事をボーっと読み返していてあることに気づきました… 氏のサンプルのひとつは階乗の計算だったわけですが: import Data.Function g :: (Int -> Int) -> Int -> Int g rec 1 = 1 g rec n = n * (rec $ n - 1) main = print $ (fix g) 4 ここに出てくる関数gは無理にfixを使わなくても当然かけるわけです… g :: Int -> Int g 1 = 1 g n = n * (g n - 1) main = print $ g 4 この2つを比較して見えてくることは、fixを使ったほうで出てくるgの第一引数recはほとんど関数g自身の別名のような存在だということです…逆に考えれば、f

    ohyajapan
    ohyajapan 2008/09/14
    fixのお話
  • 1