ScalaMatsuri 2019でLTしました

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についてジャバを書きながらずっと考えていたのだけど、割と便利な結論が出てきたと思う。 任意の"デザインパターン"はparametricityを活用して構築出来る 継承を用いたデザインパターンはできないだろ、とか突っ込まれそうだけど実質同じ…

関数プログラミング交流会で発表した

ブログに書くという行為を忘れがちな昨今。 9/13に関数プログラミング交流会があったので発表してきました。http://connpass.com/event/16193/ 並行プログラミングと継続モナド from Kousuke Ruichi 関数プログラミングという題目のため、参加者はかなり広い…

Haskellの遅延評価についてメモ

以前から考えていたことを吐き出したのでメモしておく。 あとで検証してまとめたい。 実用上知っておくべき部分はもっと少なくていいはずだし、そちらも出来るならまとめたい。 window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(…

宣言的とは、宣言とは

「宣言的」というあやふやな言葉にもう少しまともな定義はつけられないかという試み。 宣言とはInvariantであるとして、対象のシステムを明示した方がいいのでは、という話。 参考link: https://existentialtype.wordpress.com/2013/07/18/what-if-anything-…

函数型なんたらの集い2014でモナドについて話してきた

函数型なんたらの集い 2014 in Tokyo - connpass 最近私的にモナドが非常に熱いのでそれについて話してきました。 しかし資料としては要改善点が多いですね... 図入れるとか具体的なコード入れるとか色々出来たのですけど。 Engineer-uses-monads from Ruicc…

GHCの末尾再帰最適化をCore上で確認してみる

まず簡単に再帰関数(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 $ …

Something Object Oriented and Dynamics.

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…

OverloadedRecordFields is row polymorphism

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 || {}…

yesodとcabal sandbox

2015-07-03追記: 現在yesodを使いたい場合は、stackを導入するのが適切だと思います。 https://github.com/commercialhaskell/stack cabal-install-1.18からsandbox機能が付き便利になったわけだが、いまいちyesodでsandbox機能をスマートに使う方法が見つか…

SetはFunctorである

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

ゆるふわHaskell勉強会にてゆるふわなLTしてきました。 ゆるふわすぎましたね、Freeのあたりとか。 ゆるふわなHaskell話 from Ruicc Rail

静的型付言語/動的型付言語のメリット/デメリットについて考えてみる

http://d.hatena.ne.jp/perlcodesample/20130227/1361928810 Haskellが好きな人です。 普段0.4M行くらいのPHPコードなんとかしてます。 Haskellerへ 変な事言ってないかチェックお願いします。 動的型付言語のトレードオフ 変数に型が無い事のトレードオフが…

dataToExpQ

Haskell Advent Calendar 2012二日目です。 一日目から飛ばしてきましたね。負けずに頑張らなければなりませんね。 QuasiQuotes書くときにdataToExpQ便利ですよね。 便利だけどこんさんが何言っているかわかんねえ!という人向けの記事です。 間違ってたらツ…

HaskellでGPUプログラミングしてみた

repa触ってみたらGPUも触ってみたくなったので触りました。 ライフゲームを略。 次の時刻の盤面を計算する部分です。ドキュメントやサンプルを見ると、どうやらstencilを使うと良いようです。 step :: Board -> Acc Board step arr = Acc.stencil stencil2D …

高速並列演算多次元多相配列repaを使ってみる。

Haskellのライブラリで前から気になっていたrepaを触ってみます。高速並列演算多次元多相配列ですからね。それは気になります。regular pallalelの「regular」の意味がいまいち分かりませんが。 丁度@shelarcyさん記事が書かれたことをきっかけとしています…

[Haskell]Haskellで文字列をevalするというかhintパッケージ

http://hackage.haskell.org/package/hint-0.3.3.4 文字列からevalする感じのライブラリです。 GHCAPIのラッパーとも言います。 えーと。いや、使い方ずっと分かってなかったというか。 Preludeのimportが必要だったのだね.. import qualified Language.Hask…

[haskell]OSX Lionでcabal install mysql

メモ。 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…

[haskell]Haskellで任意精度小数を扱う

Data.Fixedモジュールを用います。 単純に使うだけなら、モジュールをimportして具体的な精度をもつ型(Uni, Deci, Centi, Milli, Micro, Nano, Pico)で数値リテラルをアノテートなどして用います。 JavaのBigDecimalに相当するものでしょうか?(Javaは良く知…

Programming Haskell Chapter8

スタートHaskell第5回あたりで発表した資料です。 プログラミングHaskell8章で引っかかる人の助けにでも鳴りましたら。 Programming Haskell Chapter8 View more presentations from Ruicc Rail

オブジェクト指向から理解する型クラス

Haskell Advent Calendar2011 2日目です。もう42時になってしまいました...さすがに遅いですね。 Haskellと言えば型クラス オブジェクト指向のクラスとHaskellの型クラスは違いますよ的な説明は見ますがどう違うか比べた情報が無い オブジェクト指向知ってい…

続・Template Haskell入門 -- QuasiQuotes編

先にこちらをどうぞ。Template Haskell入門 - think and error QuasiQuotesで簡単なものを作りましょう。 ここではヒアドキュメントを作ろうと思います。Haskellにはヒアドキュメントがないですから。 参考: こんさんのあれ:準クォートでもてかわゆるふわメ…

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書いてQuickCheckでテストしてみた

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" こんな感じのものが書いてあった訳だ。 僕には何が起こっているか全然分からなくて、一体ど…