タグ

2008年3月18日のブックマーク (7件)

  • Hat - HaskellWiki

    This article is a stub. You can help by expanding it. Hat is the Haskell debugger, see http://projects.haskell.org/hat/ for more details. It can be downloaded from Hackage. Libraries not supported Data.Map [Hoogle] Functions not supported System.Directory.findExecutable [HatMake] System.IO.openBinaryFile [YAM] Pretty.style [Hacle]

  • グローバル変数のモジュール性 - まめめも

    StateT が使えるようになったらグローバル変数みたいなものが簡潔に書けるのかなーと考えました。グローバル変数たちを集めた data 型を定義して、トップレベルは基的に StateT GlobalVars IO () 型にする感じ。 module Main(main) where import Control.Monad.State -- グローバル変数たち data GlobalVars = GlobalVars { fooField :: Int , barField :: Int } deriving Show -- トップレベルの型 type GlobalM = StateT GlobalVars IO -- トップレベル myMain :: GlobalM () myMain = do foo <- gets fooField -- foo を読み出す modify $ \g

    グローバル変数のモジュール性 - まめめも
  • Haskellの継続モナド(Continuation Monad)を理解するポイント - よくわかりません

    モナドのすべての継続モナドのところが簡潔で、概念とかもあまり明示的に説明してなくて理解に苦労したので、ポイントをメモ。誤りなど、乞うご指摘。 newtype Cont r a = Cont { runCont :: ((a -> r) -> r) } instance Monad (Cont r) where return a = Cont $ \k -> k a (Cont c) >>= f = Cont $ \k -> c (\a -> runCont (f a) k) 概要的なこと 継続といいつつ、Contが表すのは継続というより、CPSな関数。*1 CPSな関数は、引数に関数をとり、自分の仕事の最後でその関数(継続)を呼ぶ。 CPSな関数に、継続として別のCPSな関数を渡す、その別のCPSな関数に継続としてさらに別のCPSな関数を渡す、…の連鎖(CPSな関数のネスト)が、全体として

    Haskellの継続モナド(Continuation Monad)を理解するポイント - よくわかりません
  • Haskell で brainfuck - 言語ゲーム

    ふと思い立って Haskell で brainfuck を書いてみた。そんな事やってる人は沢山いると思うので、一つ制限をつけた。モナドは main 関数の中だけしか使わない。つまり、後は全部副作用なしでやる。 それから、大体の方針を立てた。brainfuck の文法はとても単純なので、もしかしてパーサすらいらないんじゃ無いかと思ったのだけど、ループがある関係上やっぱり最初に構文木を作ったほうがやりやすい。という事でオーソドックスに、ソースコード -> 構文木 -> 実行、と言う順序で進める事にした。 -- Parser data Command = Inc | Dec | Next | Prev | Put | Get | While [Command] deriving (Show, Eq) type Program = [Command] parse :: String -> Prog

    Haskell で brainfuck - 言語ゲーム
  • Haskell の "printf" デバグ - Inemuri nezumi diary(2007-05-11)

    _ Haskell の "printf" デバグ StateモナドとかIORefとか使うプログラムだと、実行時中に中身を覗きたくなる。ある人が unsafePerformIO で print するとか言うので、それはちょっと待てと。Haskell がその手のデバグがしにくいので、他の言語に移るというのは、ちょっとだけ待ってほしい。 Haskell には Debug.Trace というモジュールがあって、その中の trace :: String -> a -> a は、IO を気にせずに文字列を標準エラー出力に出せるのですよ。 import "Debug.Trace" main = trace "Good morning" $ print "Hello, world" zsh% runghc TracingHello.hs 1> out.txt 2> err.txt zsh% cat out

  • Inemuri nezumi diary(2007-07-13)

    _ Open Source Conference 2007 Hokkaido 発表資料 少し遅くなりましたが、発表資料を公開します。slideshareは masuidrive さんのページから教わりました。これは便利ですね。 スライドにはありませんが、当日の質疑応答で「モナドがわかんね」という質問が出ました。これに対して、「do notation でプログラムを書くことに慣れればいいです」と答えました。いや、当は (>>=) と (>>) と return と fail がそれぞれ何を意味するものかをわかるほうがいいんですが、10分程度でそれをわかってもらうのは無理というものです。Hutton 流にいくなら、まず「State monad とは何か」から入るのがいいんじゃないのかなあ。あと、懇親会では、「Haskell のプログラムがどう動いているのか見えないのがキショイ」と言われました

    ohyajapan
    ohyajapan 2008/03/18
    Open Source Conference 2007 Hokkaido 発表資料
  • http://ha6.seikyou.ne.jp/home/yamanose/haskell/home.html

    目次 THE HITCHHIKER'S GUIDE TO THE HASKELL 「HASKELL の歩き方」 はじめに 式、評価、評価器。 数の型。 -> 整数の演算子 一覧 RUNHUGS インタープリター 関数の型 文字、文字列 関数とは ユーザー定義型 モジュール 型でつくるデータ構造 再帰 リスト -> リスト内 包表記 ファイルシステムのシミュレーション 高階関数 -> カ リー化、部分適用、セクション、関数合成 -> ラムダ式 ガード節 スコープ(名前空間) ファイルを読む 標準モジュール タプル 大小の比較 クラス、インスタンス モジュール2 -> ADT 遅延評価 システムとのやりとり do記法、>>, >>= ジェネレーター、ガード Maybe ファイルハンドラー 演算子の独自定義 -> 結合性 例 : モー