ScalaMatsuriのアンカンファレンスで人類の4分の1くらいが困っているであろう問題について話して来ました。 スライド2日でなんとか錬成したはいいけどストーリー的にあまりScala感がなくて悩んでました。そういえばHaskell以外の話をしたのは久しぶりな気が…
思い立って唐突に実行した。10分くらいで終わった。こんなに簡単にできるとは。 こういうサービスの移行、考えるだけで面倒くさいんだがよくやったなこれ... 旧サービスの要らない部分を選別してサブセットを作って、新サービスに旧サービス(サブセット)が…
エンジニアで周囲だけでも睡眠に困っている人が予想以上に観測できるので、僕自身が行った試行錯誤について書いておこうと思う。 僕は不眠症というわけではないが夜に眠ることがうまく出来ず、長い間(10年以上)試行錯誤を続けてきた。 つい三週間前は0時に…
window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0], t = window.twttr || {}; if (d.getElementById(id)) return t; js = d.createElement(s); js.id = id; js.src = "https://platform.twitter.com/widgets.js"; fjs.paren…
チーム開発で必要な最低限の機能、条件を見極めたいと以前からずっと思っていた。その後の手法も考えているけど今は省略。現状の仮説は以下だ: Parametric polymorphism Closures nullが存在しないこと この条件を満たすとなると途端にHaskellかOCamlあたり…
最近parametricityについてジャバを書きながらずっと考えていたのだけど、割と便利な結論が出てきたと思う。 任意の"デザインパターン"はparametricityを活用して構築出来る 継承を用いたデザインパターンはできないだろ、とか突っ込まれそうだけど実質同じ…
ブログに書くという行為を忘れがちな昨今。 9/13に関数プログラミング交流会があったので発表してきました。http://connpass.com/event/16193/ 並行プログラミングと継続モナド from Kousuke Ruichi 関数プログラミングという題目のため、参加者はかなり広い…
以前から考えていたことを吐き出したのでメモしておく。 あとで検証してまとめたい。 実用上知っておくべき部分はもっと少なくていいはずだし、そちらも出来るならまとめたい。 window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(…
「宣言的」というあやふやな言葉にもう少しまともな定義はつけられないかという試み。 宣言とはInvariantであるとして、対象のシステムを明示した方がいいのでは、という話。 参考link: https://existentialtype.wordpress.com/2013/07/18/what-if-anything-…
函数型なんたらの集い 2014 in Tokyo - connpass 最近私的にモナドが非常に熱いのでそれについて話してきました。 しかし資料としては要改善点が多いですね... 図入れるとか具体的なコード入れるとか色々出来たのですけど。 Engineer-uses-monads from Ruicc…
まず簡単に再帰関数(factorialとした)を、 非末尾再帰呼び出し(fac1) 末尾再帰呼び出し(fac2) で記述した。 fac1 0 = 1 fac1 n = n * fac1 (n-1) fac2 n = fac' 1 n fac' acc 0 = acc fac' acc n = fac' (acc*n) (n - 1) main = do print $ fac1 35 print $ …
window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0], t = window.twttr || {}; if (d.getElementById(id)) return t; js = d.createElement(s); js.id = id; js.src = "https://platform.twitter.com/widgets.js"; fjs.paren…
This is not explanation but raw log. I hope the world needs no more subtyping, and new languages have type class and row polymorphism:) window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0], t = window.twttr || {}…
2015-07-03追記: 現在yesodを使いたい場合は、stackを導入するのが適切だと思います。 https://github.com/commercialhaskell/stack cabal-install-1.18からsandbox機能が付き便利になったわけだが、いまいちyesodでsandbox機能をスマートに使う方法が見つか…
Haskell Advent Calendar 2013 9日目です。 概要 SetはFunctor。 Categorical Programming for Data Types with Restricted Parametricity rmonad: Restricted monad library なぜSetはFunctorになっていないのか Setを要素が重複しないデータ構造とします。…
厄介なのはjoinだ。joinは以下のような型を持つ。 join :: Monad m => m (m a) -> m a 読み下してみよう。「joinは、二重にネストしたモナド(m (m a))をとり、一つに潰して返す(m a)」。 モナドとは、このjoinによって決まる。 モナドの定義でreturn, (>>=)…
ゆるふわHaskell勉強会にてゆるふわなLTしてきました。 ゆるふわすぎましたね、Freeのあたりとか。 ゆるふわなHaskell話 from Ruicc Rail
http://d.hatena.ne.jp/perlcodesample/20130227/1361928810 Haskellが好きな人です。 普段0.4M行くらいのPHPコードなんとかしてます。 Haskellerへ 変な事言ってないかチェックお願いします。 動的型付言語のトレードオフ 変数に型が無い事のトレードオフが…
Haskell Advent Calendar 2012二日目です。 一日目から飛ばしてきましたね。負けずに頑張らなければなりませんね。 QuasiQuotes書くときにdataToExpQ便利ですよね。 便利だけどこんさんが何言っているかわかんねえ!という人向けの記事です。 間違ってたらツ…
repa触ってみたらGPUも触ってみたくなったので触りました。 ライフゲームを略。 次の時刻の盤面を計算する部分です。ドキュメントやサンプルを見ると、どうやらstencilを使うと良いようです。 step :: Board -> Acc Board step arr = Acc.stencil stencil2D …
Haskellのライブラリで前から気になっていたrepaを触ってみます。高速並列演算多次元多相配列ですからね。それは気になります。regular pallalelの「regular」の意味がいまいち分かりませんが。 丁度@shelarcyさん記事が書かれたことをきっかけとしています…
http://hackage.haskell.org/package/hint-0.3.3.4 文字列からevalする感じのライブラリです。 GHCAPIのラッパーとも言います。 えーと。いや、使い方ずっと分かってなかったというか。 Preludeのimportが必要だったのだね.. import qualified Language.Hask…
メモ。 cabal install mysql(現最新は0.1.1.4)でエラーが出る。 ghc7.0.4。 じゃあと思って $ cabal install mysql-simple $ cabal install persistent-mysqlしてみたけどmysqlに依存してるぽい。 仕方ない。 $ cabal install --extra-lib-dirs=/usr/local/m…
Data.Fixedモジュールを用います。 単純に使うだけなら、モジュールをimportして具体的な精度をもつ型(Uni, Deci, Centi, Milli, Micro, Nano, Pico)で数値リテラルをアノテートなどして用います。 JavaのBigDecimalに相当するものでしょうか?(Javaは良く知…
スタートHaskell第5回あたりで発表した資料です。 プログラミングHaskell8章で引っかかる人の助けにでも鳴りましたら。 Programming Haskell Chapter8 View more presentations from Ruicc Rail
Haskell Advent Calendar2011 2日目です。もう42時になってしまいました...さすがに遅いですね。 Haskellと言えば型クラス オブジェクト指向のクラスとHaskellの型クラスは違いますよ的な説明は見ますがどう違うか比べた情報が無い オブジェクト指向知ってい…
先にこちらをどうぞ。Template Haskell入門 - think and error QuasiQuotesで簡単なものを作りましょう。 ここではヒアドキュメントを作ろうと思います。Haskellにはヒアドキュメントがないですから。 参考: こんさんのあれ:準クォートでもてかわゆるふわメ…
関数合成てのは f(g(x))こんなやつです。でもたまには次のようにやりたくなるわけですね。 h(x,y) = f(g(x,y)) Haskellでの関数合成は(.)です。これで上記をやろうとします。 -- 1引数関数 f x = x + 2 -- 2引数関数 g x y = x * y -- fとgを合成しようとす…
Haskellが得意なことのひとつに木構造の操作がありますね。 ということでBTree書いてみました。 初め二分木書こうと思っていたんだけど、あまりにも簡単すぎたのでB木に変更。 そしたら思ったより難しくなってしまい。 参考:http://pfp7.cc.yamaguchi-u.ac.…
本を適当に開いて読んでみるということをたまにする。 Real World Haskell(RWH)のデータ構造の章。 ghci> 3 * 2 + 4 10 ghci> prettyShow $ 3 * 2 + 4 "3 * 2 + 4" こんな感じのものが書いてあった訳だ。 僕には何が起こっているか全然分からなくて、一体ど…