LT駆動開発14の発表資料です。 https://github.com/LTDD/Sessions/wiki/LT%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA14 解説 http://blog.eiel.info/blog/2015/05/02/want-stari…
この記事は、Haskellを勉強してある程度分かったけど、Monadで挫折した人のための記事です。10分間で、Monadに対する納得感を得ることを目的としています。他の言語でいう「モナド」にも通用する内容ですが、Haskell の文法や用語を用いますので、他の言語の利用者に分かるかは不明です。 Haskellを勉強したのですから、 代数データ型 型クラス は分かっていることにします。Monad は、単なる型クラスの一つで、それ以上でもそれ以下でもありませんから、この二つが分かってないと話になりません。 また、言語内DSL(以下、DSLと略記)という考え方を知っていることも仮定します。Monad とは、DSLのフレームワークという直感を与えるのが、この記事の主眼ですからね。 さらに、構造化定理をいう単語を聞いてもビビらない人を想定しています。逐次、反復、分岐があれば、計算しうる計算はすべて記
状態管理のモデル案: spawn/killモデルの実装を作ってみた。 worldsパッケージがそれだ(露骨な名前だが赦してほしい)。前の記事と違う点は、Worldがモナド変換子として実装されている点だけである。 worlds-exampleは画面内のキャラクターを方向キーで操作する例。メインのプログラムは以下のようになっている: import Include import Types import qualified Entity.Player as Player import Assets main = runGameDefault $ runWorldT $ do player <- spawn $ Player.new (V2 240 240) forever $ do whenM (lift $ keyPress KeyLeft) $ player .! Player.Move L
米Facebookが関数型プログラミング言語「Haskell」向けのデータアクセスライブラリ「Haxl」を公開した。リモートにあるデータベースへのアクセスを簡素化できるというもので、修正BSDライセンスで提供されている。 Haskellは関数型プログラミング言語で、ほかの言語との統合性、並行性/並列性などを特徴とし、デバッガ、プロファイラ、リッチなライブラリなどを備える。 HaxlはHaskell用のデータアクセスライブラリで、これを利用してリモートにあるデータベースやWebベースのサービスにアクセスできる。アプリケーションのコードとデータソースの間のレイヤとして機能し、同一のデータソースに対して複数の要求のバッチ処理、複数のデータソースからのデータ要求、過去の要求のキャッシュ作成などを自動で行うことで、データをフェッチするためのコードが簡潔になるという。 FacebookはHaxlという
今の会社に移って半年経ちました。めでたく試用期間終了です。といっても別に試用期間中に密かに首を切られるような事をしたとか、逆に試用期間が終わったからと言ってこれで定年までのうのうと働ける、という訳ではありません。未来は全く判りません。まあとにかく、一つ区切りがやってきました。 金融を知らないQuantsの仕事 私の職業の肩書きには Quantitatitatitatitative という単語がくっついて超カッコよさそう。普通は Quant というと、金融工学や統計数理に詳しい夜もブイブイいわしている超イケメン20代を想像しますが、私は金融とか全然知らないアラフォーお父さんです。それでも Quant です。お願いですから、私に何を買ったらいいかとか、聞かないでください。金融商品とか買った事ないし。というか、逆に教えて欲しいです。 私のチームは、本当の Quant さん達が開発した、金融派生商
Haskell では IO を理解するのが難しい。さらにそれがモナドなので2重に???になる。最近この2つをわけて考えれるようになったので書いてみたい。(書いてみた結果、無駄文感するのでつらい) 想定する読者 Haskell を始めたばかりで基本的な文法などはわかるが IO???? となっている。 モナドはファンクターであることを知っている。 モナドを押しつぶす join という関数を知っている。 この文章はモナドに対する説明ではなく、Haskell の IO モナドに対する説明という感じです。 ちなみにこの文章での "Haskell" は "Haskell 1.3 以降の Haskell" のことです。 Haskell と IO Haskell は純粋関数型言語です。純粋関数型言語であるということは「外界を変える力」がないということです。 ということは純粋であるためには入力も受け取れない
最近、スタートHaskellで「カリー化された関数のメリットは何か?」という質問が出た。そのすぐ後に、kmizuさんがカリー化の誤用に対して警鐘を鳴らしてしていた。僕からするとkmizuさんの「カリー化の定義」も誤用に思えたので、調べるとともに考えたことのまとめ。 いろんな定義 「カリー化する」という用語は、すくなくとも以下の3つの意味で使われているようだ。 部分適用という意味 これは明らかに間違い 「複数の引数を取る関数」を「一引数を取る関数のチェインに直す」こと これはkmizuさんの定義。世間でもよく使われる。 「構造体を一つ取る関数」を「構造体のメンバーを複数の引数にばらし、一引数を取る関数のチェインに直す」こと これは僕の定義。というか、Haskellコミュニティの定義。 「部分適用」の意味で使うのは明らかに間違いのなで排除。定義2と3について議論する。あとで、部分適用とは何かに
1 2 1 3 2 4 2 5 6 7 8 9 10 11 12 Haskell 13 14 Haskell 15 16 ( ) 17 ) 30 18 static 19 (IORef) 20 21 OK NG 22 Haskell (+) :: Num a => a -> a -> a sort :: Ord a => [a] -> [a] delete :: Eq a => a -> [a] -> [a] hGetLine :: Handle -> IO String writeFile :: FilePath -> String -> IO () writeIORef :: IORef a -> a -> IO () IO IO 23 24 1) Ruby 25 1) Haskell 26 2) > split " foo bar baz " ["foo","bar","baz"]
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く