YonedaとCoYoneda、そしてFunctor

本当は、Freeモナドを超えた!?operationalモナドを使ってみよう http://fumieval.hatenablog.com/entry/2013/05/09/223604に影響されて、Operationalモナドの話をまとめようと思ったのですが、ちょっと時間なさそうだったので、今日はちょっとCoYonedaの話…

こもなど!コモナド!Comonad!!

どうも。 清く正しいHaskell戦士ちゅーんさんです。今日はアレです。Comonadやってきます。 えー・・・ 「こ」 「コ」 「Co」 Coってなんすか。カレーハウスっすか。丸い響きの音を付けて可愛く見せれば良いと思ってるんですか。 いやいや、騙されませんよ、…

Profunctorを咀嚼する

先週のekmett勉強会でliyanghuさんが紹介して下さったprofunctorがちょっと興味深いので、まだ完全に飲み込めては居ないのですが、簡単に纏めてしまおうと思います。さて、我々にとってFunctorと言えば「fmap :: (a -> b) -> f a -> f b」というメソッドを持…

Ekmett勉強会at渋谷 #ekmett_conf

数多くのHaskellライブラリのを手がけるEdward Kmettさんのライブラリを勉強しよう! という趣向で開催されたekmett勉強会に参加して来ました。本当はその日の内容を一つ一つご紹介できれば良いのですが、うっかりメモのファイルを削除するというドジっ子っ…

LensちゃんマジLens

なんとゆーか、もともと手元にあるものを使ってちくちく何かをするのが好きなので、有名なライブラリとか大きいパッケージとか見ても尻込みしてしまってなかなか手を付けられないタイプなのですが、ここへ来て色々後回しにしてたツケが回ってきた感あります…

たなかさんのおにくをたべよう

Haskell界の有名なエンジニアで、「すごいH本」ことすごいHaskellたのしく学ぼうの翻訳もされている田中英行さんのご自宅にて、少人数のハッカソン「たなかにくまつり」が開催されたので参加して来ました。開催されるまでの経緯とか色々あるのですが、とにか…

いつだってInfinity

Infinityの頭文字はIです。即ち、無限大の愛です。 なんでも無いです忘れてください。今回もちょいと軽めの話をしましょう。Haskellの特徴として、遅延評価に加えて、正規形と見なされる制約に「弱頭部正規形」を採用しているという特徴があります。 これは…

Haddockでお手軽ドキュメント作成(仮)

静的型付けの関数型言語で「設計」と言えば、「型設計」の事になりまして、変に頑張ってOfficeツール*1で文章書いたりとかするより、スタブコードべろべろ書いてコンパイルが通った時点でそれを元にドキュメントを書き起こしたほうが圧倒的に正確だし効率が…

ヽ(〃l _ l)ノ

http://c4se.hatenablog.com/entry/2012/12/01/180025 monga = mod mOm0n ngA momoNga = momo ngA momoNga : mOm0n ngA (mom0 ngA momoNga) mom0 = drop m0m _ [] = [] m0m on ((ga, mon):m0) = (momo ga (mom0 mon on)) ++ m0m on m0 mom = [4,5,3,4,5,5,4,…

A HASKELL ADVENTURE IN WINDOWS(超訳)

Haskellでゲームを作るのは良いんだけど、Windowsでも動作するようにはしたいよなぁとは思っているので、その方法についてあちこち調べ回っていて、hackageのSDLのページからリンクをたどってたどり着いたANIMAL-MACHINE.COMというサイトのA HASKELL ADVENTU…

Haskellでチャーチ数

色々と記事にしたいネタはあるのですが、どれもちゃっちゃと書ける感じでは無いので、今日はちょっと小ネタ更新します。前々から、「チャーチ数とかHaskellなら簡単に表現できんじゃね?」とか思ってたのですが、どうやってshowするか思いつかないし考えるの…

Freeモナドって何なのさっ!?

最近Haskellerの間でFreeモナドが熱いです。 Haskellで悟りを開いた人がFreeモナドで再び悟りを開いたりして、なんかよく解らないけど凄いことになっている今日このごろですが、すっかり乗り遅れていました。どうも、貴女のちゅーんです。 で、皆こぞって「…

関数型プログラミングの実用性だとか将来性だとか

に、ついて語ろうとすると、どうしても漠然とした話になってしまって、なかなか切り出せないのですが・・・ちょっと今日、こんな記事を見つけまして。【開発閑話】文系プログラマが関数型言語(とラムダ計算)を理解してみる【初心者向け解説】「ご指摘やご…

Haskellでゲーム開発 - SDL-Imageで画像を表示

とりあえず、ゲームを作るなら画像が描画できなくては話になりませんね。 というワケで、どうやってSDLで表示した画面に画像を表示するかという話を書きます。 もともとSDLにはBMPを操作するための関数が用意されていたりしますが、対応してるフォーマットが…

Haskellでゲーム開発 - メインループとイベント操作

そろそろHaskellでゲーム開発なんか真面目にやっていこうかなぁとか思いつつ、SDLの勉強しています。 並行してやってる色んな事を総スルーしながら、やっていきます。気分屋なのでやることがコロコロ変わるのは悪いくせですね、はい。 というわけで、Haskell…

おめが言語

昨日の話ですが。 なんというかこう、あんまり言及したくないような残念な感じのハッカソンに参加してきました。作った物はコレです。*1 ΩΩωΩΩΩΩΩΩΩωωΩΩωωωωωωωωωωωΩΩΩΩΩωΩΩωωΩΩωωωωωωΩΩΩωΩΩωωωωωωωωΩωΩΩωωΩΩωωωΩωωΩΩΩΩΩΩΩΩωΩωωωΩωωΩΩΩΩΩΩΩΩωΩええと、このフ…

駆け足MongoDB with Ubuntu

ええ、プログラマのクセに自宅のPCに何もDB環境が入っていない状態は非常に宜しく無いので、大急ぎで入れます。 なんでMongoDBかは気にしないで下さい、最近仕事でOracleのSQLばっかり書いているのでRDBSは使いたく無かったのです。 インストール 鍵をどーに…

CUI超お手軽英語辞書

巷で「すごいH本」と話題の「すごいHaskell楽しく学ぼう」をAmazonで購入しようと思ったのですが、思いの外人気らしくて、入手に時間がかかりそうでした。すごいHaskellたのしく学ぼう!作者: Miran Lipovača,田中英行,村主崇行出版社/メーカー: オーム社発売…

何故、関数型言語Haskellを学んでいるのか #fpstudy

大阪で開催された「第一回関数型言語勉強会」に発表者として参加してきました。 その準備等の関係で、しばらくダイアリーが付けられていませんでしたが、ちまちま再開していこうと思います。会場のGoogleマップが別の場所を指していたり、そもそも降車駅を間…

Haskellコードゴルフ:サイコロ問題

リスト内包表記を使えば、「サイコロを3回振った時の組み合わせ」のような、組み合わせのリストを作ることができます。 Prelude> [[x,y,z]|x<-[1..6],y<-[1..6],z<-[1..6]] [[1,1,1],[1,1,2],[1,1,3],[1,1,4],[1,1,5], 〜略〜 ,[6,6,5],[6,6,6]]数の組み合…

プログラミングと才能のはなし

どうも最近更新できてないので、今日はコード無し、ちょっと駄文を書かせてもらいましょう。すこし古い記事ですが・・・プログラミングできる人とできない人との間の深い溝 http://d.hatena.ne.jp/masatoi/20090707/1246965336昨日、たまたまTwitterで見かけ…

ちょび〜っとだけvimをカスタマイズ

vim

ほんとに、ちょびっとだけ。カスタマイズと呼ぶのが恥ずかしいほどです。とにかくscalaのコンパイル/実行手順が面倒で、小さなテストに一々MakeFileを作るのもアホらしい話なので、軽くVimScriptの書き方を調べて、次のような.vimrcファイルを仕立ててみま…

Scalaに挑戦してみた

関西で開かれる関数型勉強会で、発表する機会を得たので、Haskell以外の関数型言語にも触れておく必要があると考えて、Scalaの使い方を覚える事にしました。 Scalaは今も後需要が高まっていきそうな言語なので、使えるようにしておくのは良いかもしれません…

ポイントフリースタイルの歪んだ美

例えば、xを2倍してshowする関数fを考えます。 素直に書けば次のようになるでしょう。 Prelude> let f x = show (x * 2) Prelude> f 5 "10"こういったシンプルな処理は、ポイントフリースタイルにするのがHaskellらしいプログラミングですね。 Prelude> let…

Haskellでチューリングマシン(4) 命令の実行処理を作成

前回、テープの走査をモナドに包む時に、テープの値と一緒に、「ヘッドのステータス」を状態として保持できるようにしました。 この値は単なるInt型として実装したのですが、明確なアイデンティティを与えるため、HeadStateという別名を付けました。 --ヘッ…

Arrowの基本(3) |||演算子で条件分岐

Arrowの基本、三本目の記事は、Arrowが関数を繋いでいく流れの中で条件分岐を作り出す ||| 演算子の再実装をしていきます。 Prelude Control.Arrow> :i (|||) class (Arrow a) => ArrowChoice a where ... (|||) :: a b d -> a c d -> a (Either b c) d -- D…

Haskellでチューリングマシン(3) モナドを使ってどうするか

チューリングマシンを作るに当たって、テープを操作する処理をモナドにするというのを試みたわけですが、もとよりモナドの使い方がよく解っていないため改めて見返すとなかなか酷い出来です。結局、自分でもしっくり収まっていなかったのでしばらく停滞して…

状態系モナドの作り方

よく言われている事ですが、モナドには副作用を再現する「状態系モナド」(IO、State等)と、値が無い状態や計算の失敗を扱う事ができる「失敗系モナド」(Maybe、List等)の二種類に大別できます。今回の題材は、「状態系モナド」を扱います。 状態系モナド…

Arrowの基本(2) 関数を並列に繋ぐ ***、&&& 演算子

前回からの変更点: 実際の実装に合わせて、各MyArrowクラスから関数を取り出す関数は MyArrow型クラスに定義したrunArrでは無く、各型定義のアクセサ関数を使うようにします。 module Main where --Arrow型クラス class MyArrow a where myarr :: (b -> c) …

Arrowの基本(1) >>>演算子で関数を繋ぐ

前々から気になっていたArrowを覚えるべく、あちこち資料を探してみたものの、そもそも日本語の資料が少ないので。自分で色々いじって試してみる事にしました。 一つの日本語資料として活用できるように、手順を追って何回かに別けてなるべく詳細に書いてい…