Haskell
『関数プログラミング入門 Haskellで学ぶ原理と技法』印刷所に入稿done!2012-10-03 15:21:58 via web2012年10月新刊予定:関数プログラミング入門 Haskellで学ぶ原理と技法 ついに来ました!Bird先生のHaskell本です!翻訳してくださったnobsunありがとうご…
FRP - Slides from the tutorial session in Halle Functional Reactive Programmingの勉強中。reactive bananaの資料がわかりやすかったので訳してみました。 frp_tutorial.pdf frp_tutorial.pptx
zipWithよくわかってなかったのですが、やっとわかりました。 main = print $ zipWith (+) [1, 2, 3] [4, 5, 6] [5,7,9]zipは[1, 2, 3]と[4, 5, 6]を渡すと[(1, 4), (2, 5), (3, 6)]のようにそれぞれの要素を綴じ合わせてタプルにしますが、zipWithは綴じ合…
ちょっとしたログ解析にHaskellのParsecを使ってました。 「行に特定の文字列が含まれていたら無視する」というよくある簡単なフィルタ処理です。C++のBoost.Spirit.Qiであれば *(qi::char_ - "[condition]") のように書く処理。これをParsecでやるには、man…
これくらいしかできませんでしたが・・・。 data.txt ls = [1, 2, 3]main.hs {-# LANGUAGE CPP #-} #define MY_CONSTANT 2 #include "data.txt" main = do print MY_CONSTANT print ls 2 [1,2,3]まず、単純なdefineは問題なくできました。 data.txtは、最初…
"Best" FRP package for newbie - Haskell Cafe Haskell Cafeで、「初心者向けのFRP(Functional Reactive Programming)のライブラリはどれ?」という話題で盛り上がってました。 今のところ、reactive-bananaが人気のようですが、ほかにNetwire、Yampa、Anim…
Haskellでswap。 swap :: (a, b) -> (b, a) swap (a, b) = (b, a) main = print $ swap (1, 2) (2,1)swapは、Data.Tupleに用意されています。 import Data.Tuple main = print $ swap (1, 2) C++でもtupleで似たようなことを前にやってたりしました。 2つの…
型の最大値を取得するには、PreludeのmaxBound関数を使用する。::で型を指定する。 (C++で言うところのnumeric_limits::max()) main = do print $ (maxBound :: Int) print $ (maxBound :: Char) 2147483647 '\1114111'maxBound関数を使用する型は、値が有限…
調べ物をしてたらたまたま見つけたのでメモ。 minimumとmaximumを使用する。 main = do print $ maximum [3, 1, 4] print $ minimum [3, 1, 4] 4 1こういう関数は型から探しにくいのでHoogleがあまり役に立たない。 Prelude.minimum Prelude.maximum
Haskellで簡単なサーバーを書いて嵌ったこと。 クライアントでデータを送る際、hFlushしないと送り終わる前に接続が切れてしまう。 import Network import System.IO main :: IO () main = withSocketsDo $ do hSetBuffering stdout NoBuffering server `cat…
sleepにはControl.ConcurrentモジュールのthreadDelayを使うらしい。引数はミリ秒マイクロ秒。 import Control.Concurrent main = do threadDelay (2 * 1000 * 1000) print "hello" これを実行すると2秒後に"hello"が表示されます。
Type-safe events このエントリを読んでわかったことのメモ。 以下のような感じで、異なる型のイベントを同じように扱いたい。 data Ping = Ping Int | Pong Int data Log = Warn String | Info String main = do fire $ Warn "Starting the engines!" fire …
HaskellのGHC拡張でType Families(型族)というのがあります。これはC++テンプレートメタプログラミングをやったことがある人にはなじみ深い、型を受け取って型を返す型関数(メタ関数)を実現する機能です。 たとえば、以下は型aを受け取って型aを返す型関数Id…
Haskell でソケット通信をやってみる - yasuabe blog このエントリを見て、簡単そうだったので遊んでみました。 httpでGETをするだけですが、こんな感じで書けました。 import Network import System.IO getCommand :: String -> IO String getCommand hostN…
Applicativeを使うとParsecが書きやすくなると聞いたのでやってみました。 "(123)"という文字列から、カッコに囲まれた123という値を取り出す処理です。 Applicativeを使わない場合: import Text.Parsec import Text.Parsec.String parseText :: Parser Int…
このエントリは、Haskell Advent Calendar 2011の参加記事です。 今回は、HaskellのGHC拡張であるGADTs(Generalized Algebraic Data Types : 一般化代数データ型)を調べて使ってみたという内容を書いてみました。 最初に、GADTsはGHC拡張なので、使用するに…
カンマ区切りで書かれた整数のリストをパースします。 sepBy, sepBy1関数がちょうど「x区切りでyパーサーを実行する」ということができるので使えそうです。 C++のBoost.Spirit.Qiでいうところの、operator%()です。 import Text.Parsec import Text.Parsec.…
"(abc)"の"abc"を取り出します。 import Text.Parsec import Text.Parsec.String parens :: Parser a -> Parser a parens = between (char '(') (char ')') parseText :: Parser String parseText = parens $ many $ noneOf ")" run :: Show a => Parser a -…
以前から使おうと思って手を出してなかったParsecを使い始めました。 Parsecは、最近いろんな言語で移植が行われている構文解析のライブラリです。 パーサーの検証でいつも最初にやっている、"(123)"という文字列から123という整数を取り出す処理をParsecで…
Haskell Advent Calendar 2011 誰も立ててなかったので立てました。 私はGADTsを調べて使ってみた的なエントリを書くつもりです。
リストの先頭要素を取得するPreludeのhead関数は、空リストを与えると失敗します。 「1要素以上なら必ず成功する」という大半の状況でうまくいく処理のためにエラーハンドリングをするのはめんどくさいですし、エラーの可能性を残すというのは不安です。現状…
foldrでallを書くと、全てのリストが評価されるから while (it != end) { if (!pred(*it)) return false; ++it; } みたいな途中で停止する動作にすることはできないんじゃないかと思い込んでいたのですが、どうやらちゃんと停止するようです。 allの定義を見…
ちょっと前に id:uskz 先生に「PStade.OvenはtakenWhileからtakenを定義してるから、Haskellでもできるんじゃないですか」とネタ振りしてたので、書いてみました。 インデックスのリストと一緒にループして、インデックスと比較する述語をxxxWhileに渡します…
Unicode Text I/Oというのが入ったらしい。 http://www.sampou.org/cgi-bin/w3ml.cgi/haskell-jp/msg/480 以下、Windowsで試しました。 stdoutにはうまく出力できないのでファイルに出力。 main.hs(UTF-8で保存) import System.IO main = do h <- openFile f…
※「C++(compile time)は純粋関数型言語だよ(by id:DigitalGhost)」というのは全く関係ないです。 C++の人がHaskellを学ぶと、const付けないと気が済まなくなり、 if文よりも条件演算子を多用するようになります。(きっと) Haskellを学ぶ動機としては、モナド…
Announcing the new Haskell Prime process, and Haskell 2010 いけがみさん情報。 Haskellの次のバージョンはHaskell'(プライム)と呼ばれていて 早ければ2010年には決まるかも、という状況らしいです。 ConcurrencyとかAssociated TypesとかFunctional Depe…
じょにーさんのにっき - Haskellでreverse関数を作ってみた fold使えば1行で書けますよ、と。 reverse = foldl (flip (:)) []
『Programming in Haskell』のスライドを10章まで翻訳しました。 以下のエントリ経由でダウンロードしてください。 『Programming in Haskell』のスライドを翻訳(※随時更新)
『Programming in Haskell』のスライドを9章まで翻訳しました。 以下のエントリ経由でダウンロードしてください。 『Programming in Haskell』のスライドを翻訳(※随時更新) 残り2章です。
『Programming in Haskell』のスライドを8章まで翻訳しました。 以下のエントリ経由でダウンロードしてください。 『Programming in Haskell』のスライドを翻訳(※随時更新)