タグ

HaskellとIOに関するnsyeeのブックマーク (14)

  • IMVU Engineering Blog – Software engineering best practices at IMVU

    While writing the source code of a 3D engine, we can have many types of problems. These may range from simple problems of code that will not compile, to harder problems like memory leaks. At IMVU, we have automated solutions in place to help find these kinds of problems. For example, unit testing combined with Valgrind has helped us track down a lot of memory leak problems. But what about performa

  • 副作用の話 - モナドとわたしとコモナド

    最近、副作用や関数型言語についてもめているのをよく目にする。副作用と関数型言語に関する私の見解をここに示す。 処理系はソースコードを解釈し、コンピュータの入出力、つまり副作用に変換する。ほとんどのプログラミング言語は、副作用を表現するプリミティブとその組み合わせによってプログラムを記述する。副作用は実行時に生まれるものだから、「Cの関数は副作用がある」「Haskellのコードに副作用はない」といった議論は、残念ながら意味をなしていない。実行していないのに副作用が出てきたら、超自然的な力を信じざるを得ない。 副作用の扱いについてよく議論の的になる言語としてHaskellがある。Haskellが多くの手続き型言語と異なるのは、副作用を含む計算に対して、専用の型(IO)が定義されているというだけであり、「そのコードが副作用を記述できるかどうか」を区別しやすくするためのちょっとした助けに過ぎない。

    副作用の話 - モナドとわたしとコモナド
  • Haskell アクション 超入門 - Qiita

    Haskellではアクションと呼ばれる機能により副作用が扱えます。アクションの使い方の初歩を説明します。ライブラリで用意されたアクションを手っ取り早く使うことを目的としているため、モナドや圏論には言及しません。 シリーズの記事です。 Haskell 超入門 Haskell 代数的データ型 超入門 Haskell アクション 超入門 ← この記事 Haskell ラムダ 超入門 Haskell アクションとラムダ 超入門 Haskell IOモナド 超入門 Haskell リストモナド 超入門 Haskell Maybeモナド 超入門 Haskell 状態系モナド 超入門 Haskell モナド変換子 超入門 Haskell 例外処理 超入門 Haskell 構文解析 超入門 【予定】Haskell 継続モナド 超入門 【予定】Haskell 型クラス 超入門 【予定】Haskell モナド

    Haskell アクション 超入門 - Qiita
  • io-choice

  • Testing IO actions with Monadic QuickCheck

    The Test.QuickCheck.Monadic module lets you test monadic code, even things that run in IO. A monadic property test is of type PropertyM m a, where m is the monad the test runs in and a is ultimately ignored. In the case of PropertyM IO a, you convert the monadic test to a Property by using monadicIO; for all other monads, you use monadic instead (which takes a function to run the monad, something

    Testing IO actions with Monadic QuickCheck
  • Haskellで競技プログラミング IO編 - Qiita

    _この記事は2013年の情報オリンピック夏季セミナーの発表のために 動機 Haskellには競技プログラミングに使えるCoolな機能が沢山あります。 パターンマッチやプレースホルダ、パターンガード、柔軟な関数合成などです。 下はAtCoder Regular Contest #14のB問題に対する回答です。 再帰や場合分けがかなりシンプルに書けます。 import Control.Monad import Control.Applicative import Data.List main :: IO () main = do n <- readLn (w:ws) <- replicateM n getLine putStrLn $ case check [w] ws True of Nothing -> "DRAW" Just True -> "WIN" Just False -> "LO

    Haskellで競技プログラミング IO編 - Qiita
  • test-framework-golden

  • stm-io-hooks

  • agda で "Hello, world!" - x76789の研究メモ

    Agda で入出力を扱う場合,Agda の FFI(Foreign Function Interface)を通し,Haskellの入出力関数を用いておこなう. 実際に,「Hello, World」プログラムをAgdaで作成してみた.ちなみに,入出力をおこなうには,コンパイルしておこなう必要がある.詳細は以下の通り. hello.agda module hello where data Unit : Set where unit : Unit {-# COMPILED_DATA Unit () () #-} data List (A : Set) : Set where [] : List A _::_ : A -> List A -> List A {-# BUILTIN LIST List #-} {-# BUILTIN NIL [] #-} {-# BUILTIN CONS _::_

    agda で "Hello, world!" - x76789の研究メモ
  • ゆるふわHaskell (Light & Airy Haskell) — laskell 0.0.1 documentation

    はじめに¶ 巷に溢れているHaskellはいきなりのIOを避けているものが多いですよね。こ れらのを読んでわかった気になっても、実際に日々のタスクに使おうとした 場合に結構ハマることが多いんですよね。 「習うより慣れろ」みたいなスタイルでHaskellの学習をするとどういう学習曲 線をたどることになるんだろうか? phpのように動けばいいや(偏見?)というス タンスでHaskellのコードを書くことは可能なんだろうか? と疑問に思ったので、よくあるスクリプト言語の入門書(IOから入る系)のよう な話題を取り扱ってみようかなと。 Sphinxという良い感じに文章をかけるツー ルと、書いた文章をGitHub Pagesで手軽に公開できるような環境の存在も、こ の試みを後押ししました。というか書いていて楽しいので、みなさんもSphinx つかうとハッピーになれると思います。 フィードバックな

  • HaskellとSCons @ val it: α → α = fun

    またぞろHaskellのIOの話が一部で盛り上がっているようです。はじめに結論を述べておくと、けっきょくのところ、これは「どう理解したらいいか」(どういう脳内モデルを構築するか)という話であって、正解も何もありません。プログラムを書けるのであれば、おそらくその理解は正しいのです。 それでも何かを書こうと思ったのは、こういう比喩をあまり見かけないな、と思ったからです。 HaskellにおけるIOは非常に謎めいています。たとえば、putStrという関数があります。型はString -> IO ()で、引数として文字列を与えるとそれを出力(画面に表示)します……当でしょうか。いいえ、それがちょっとちがうんですよね、という話です。 IO ()というのは、「IO動作」という「値」です。Haskellという言語のなかで、この値は何もしません。putStrは文字列を受け取り、IO ()という値を返す関

  • Haskellと副作用 - あどけない話

    よく、Haskellには副作用がないと言われるが、それは間違いだ。確かに、Haskell には状態の変化(あるいは再代入)という副作用はない。しかし、入出力という副作用はある。この記事では、Haskell の副作用に対して、命令型プログラマーにすっきりと理解できる説明を試みたいと思う。 間違った方向への第一歩 Haskell の副作用に関する典型的な説明は、こんな感じだ。 Haskell にはあらゆるレベルで副作用がない。そのため、遅延評価が可能になる。遅延評価では、コードが記述順に実行/評価されるとは限らないので、入出力と相性が悪い。そこで、IO モナドが導入されている。IO モナドのおかげで、入出力に関するコードは記述順に実行され、外界に作用できる。 この説明を聞いて理解しろという方が無理である。説明が苦しい最大の理由は、Haskell にはあらゆるレベルで副作用がないと、間違った一歩

    Haskellと副作用 - あどけない話
  • 遅延I/Oとメモリリークのつづき - maoeのブログ

    id:maoe:20091108:1257701870の件をhaskell-ja(chaton)で相談してみたところ、nwnさんとnobsunさんに教えていただきました。ありがとうございました。 せっかくなので、こちらにもまとめを書いておきます。 先のエントリで意図していた例 元々意図していたことは、putStrを2回するなんて恣意的なものではなく、 ログファイルの解析をするとき、1ファイル(あるいは生のログストリーム)から複数種類の解析を行いたい場合 頻出IPアドレスの提示とページビューの計算とユニークユーザ数の計算などを同時にしたい 遅延I/Oとメモリリーク - maoeのブログ というシチュエーションを想定していた。これに対して、スレッドを使うとか姑息な手段ではなく、かつ関数プログラミング的に美しい方法を教えてもらった。 解決策: 関数を融合してfoldl 上記の例では 頻出IPアド

    遅延I/Oとメモリリークのつづき - maoeのブログ
  • 遅延I/Oとメモリリーク - maoeのブログ

    先週の土曜日にReal World Haskell読書会に行ってきた。とても有意義な読書会だったのだけど、遅延I/Oとメモリリークに関して腑に落ちない点があったので書いてみる。 遅延I/Oの例 Real World Haskell 7.4.1節の注意マークのところ、邦訳版から引用すると、 上の例で、inpStrを使った一箇所(つまりprocessDataを呼んだところ)を過ぎてから、inpStrを捕まえようとすると、プログラムのメモリ効率が失われてしまいます。 という部分が気になっている。 を持っていない方のために、わかりやすいサンプルプログラムを例に挙げる。Haskellではテキストファイルを読んでそのまま出力するプログラムをこう書くことができる。 ここで注目すべき点は、BS.readFileは遅延I/Oとなっているので、実際に読むファイルがメモリに載らない大きなものであったとしても、

    遅延I/Oとメモリリーク - maoeのブログ
  • 1