HaskellのType Familiesがわからんよ(改めわかった)

Yesodの本を読んでいて、Type Familiesでいきなり躓いた。

1349308784

class SafeHead a where
    type Content a
    safeHead :: a -> Maybe (Content a)

の type Content aでContentってなんで必要なの?という。

Content a :: *

なんだろうけど

a :: *

にはならんのかね?

ProductName Developing Web Applications With Haskell and Yesod
Michael Snoyman
Oreilly & Associates Inc / 2805円 ( 2012-05-04 )


追記 2012.10.04

@koyama41教えてもらった

「型引数を取って結果の型を返す、型レベルの関数」という表現から抽象への理解がぱっと上がった気がする。

わかってしまうと最初の方の疑問は寝ぼけたものだった。Haskell面白い。

Haskellのモナド内包表記(リスト内包表記じゃないよ)

リスト内包表記とリストモナドのdo表記の関係性がわからない場合にはReal World Haskell 14章のUnderstanding the list monadか、すごいHaskellの13章を読んでおくと良いです。

ProductName すごいHaskellたのしく学ぼう!
Miran Lipovača
オーム社 / 2940円 ( 2012-05-23 )


モナド内包表記

栄光のグラスゴーHaskellコンパイルシステム利用の手引き バージョン7.4.2 (7.3.11)

モナド内包表記はリスト内包表記をあらゆるモナドに一般化したものである。これには並列内包表記(7.3.9. 並行リスト内包表記)と変換内包表記(7.3.10. 一般化(SQL風)リスト内包表記)を含む。

MonadComprehensions拡張を有効にして呼び出す。分かりやすいMaybeモナドで

$ ghci -XMonadComprehensions
GHCi, version 7.4.1: http://www.haskell.org/ghc/  :? for help
Prelude> 
Prelude> [x+y | x <- Just 5, y<- Just 3]
Just 8
Prelude> [x+y | x <- Just 5, y<- Nothing]
Nothing

Maybe箱に入って出てきますね。MaybeはもちろんMonadPlusのインスタンスなのでガードが使える。

Prelude> [x+y | x <- Just 5, y<- Just 3, x < 3]
Nothing

続いてEitherを。これはControl.Monad.Errorを使う。

Prelude> :m +Control.Monad.Error
Prelude Control.Monad.Error> [ x+y | x <- Right 5, y <- Right 3]
Right 8
Prelude Control.Monad.Error> [ x+y | x <- Left "not a number", y <- Right 3]
Left "not a number"

Stateモナドだってできるぞ。

Prelude Control.Monad.State> runState [x | x <- get] 3
(3,3)

しかしこれは読みにくい。

Nexus 7が到着した

Fedexは宅配ボックスに入れておいてくれないとか再配達に同期するタイミングがつかめないとかプチトラブルはあったけど無事に到着した。

1349257804

軽いし片手で持てるので電子書籍リーダーとして使うには良い感じかも。

早速Yesodのepubを購入した。

1349257806

そして読む

Titanium Mobile Cookbook

緑の本読んだら、これを読むのがいいかも。

ProductName Appcelerator Titanium Smartphone App Development Cookbook
Boydlee Pollentine
Packt Publishing / 3810円 ( 2011-12 )


参考になったテク

  • Raphael.jsを使ってチャートを実装
  • 「引っ張って更新」の実装
  • Facebookや他のSNS系サービスとの連携のさせ方

リーンソフトウェア開発を読んだ

アジャイルとは結局のところ何なんだろう?という疑問が再浮上してしまった。

アジャイル・ソフトウエア開発を、トヨタの生産方式とし知られる「リーン思考」の視点から解説したユニークなアジャイル解説本です。「ムダをなくす」という意味のリーン思考と「俊敏さ」を主眼とするアジャイル開発とは、根本的なところで実は同じ考え方であり、方法論としても共通するところが多くあります。

ソフトウェア開発は製造と大きく異なるが、創薬もソフトウェア開発と大きく異なると思う。

開発はレシピの作成であり、製造はレシピにしたがって料理をつくることであると考えていい。

という文脈にならうのであれば、創薬とはレシピの発見である。つまり見つかるかもしれないし、見つからないかもしれないという不確定さが常につきまとう。

ProductName リーンソフトウエア開発~アジャイル開発を実践する22の方法~
メアリー・ポッペンディーク
日経BP社 / ?円 ( 2004-07-23 )


7つのリーン原則

  1. ムダの排除
  2. 学習効果を高める
  3. 決定の遅延
  4. できるだけ早く提供
  5. チームに権限を与える
  6. 統一性
  7. 全体をみる

ムダの排除に関して

だれも読まないペーパーワークは価値を付加しない

バリューストリームマップも重要

学習効果を高める

ある程度の新しい情報を得るためには、ある程度の失敗率がなくてはならない

決定の遅延

イテレーションをくり返すなかで、自然と設計が浮き彫りになってくるようなシステムの作り方をすると、開発中に発生する変更に対応しやすいロバストな設計ができあがる

問題解決に関しては

深さ優先の手法は、照準を合わせる領域を正しく選択した場合にのみ、うまくいく

できるだけ早く提供

プルシステムの特徴は「見える化」つまり目で見るマネジメント

全体をみる

「ヒトは生産性の測定対象となる計測結果を最適化しようとする」ので測定対象は慎重に選ばないといけない。

  • 標準化
  • 仕様化
  • 分解

オースチンの指摘

個人の成果計測値を個人に帰するのではなく集合化することが重要だ

PLEAC18.1&18.2をHaskellで

三島Haskell無名関数の会でHaskell熱が復活したので、PLEACをちょっとやってみた。

mapM inet_ntoa =<< liftM hostAddresses (getHostByName "google.co.jp")

こういうのをbind使わず俳句を読むようにスラスラ書けるようになりたいものだ。

ProductName Real World Haskell―実戦で学ぶ関数型言語プログラミング
Bryan O'Sullivan
オライリージャパン / 3990円 ( 2009-10-26 )


ビジネスモデル・ジェネレーション

いいこと書いてあるけど、処方箋っぽすぎて奥行きが感じられなかったけど、クックブック的に使うものなのだろうな。

ProductName ビジネスモデル・ジェネレーション ビジネスモデル設計書
アレックス・オスターワルダー
翔泳社 / 2604円 ( 2012-02-10 )


価値提案とは、顧客の抱えている問題を解決し、ニーズを満たすもので、顧客がなぜその会社を選ぶのかという理由になります

ビジネスモデルキャンバスは便利。

  • パターンとは
  • イノベーションの原則

とかは読んでいて楽しかったけど、小さくはじめるというか個人ベースでスタートするなら、考具とかアイデア・バイブルのほうがいいんじゃないかな。

ProductName 考具 ―考えるための道具、持っていますか?
加藤 昌治
阪急コミュニケーションズ / 1575円 ( 2003-04-04 )


ProductName アイデア・バイブル
マイケル・マハルコ
ダイヤモンド社 / 2940円 ( 2012-02-17 )


Template Haskellって使ったことないなぁ

この前の三島Haskell無名関数の会でTemplate Haskellの話が出たけど僕は殆ど使ったことないなぁと。

Yesod使うと多用するようになるのかな?

openbabelみたいなライブラリにHaskellにあれば、化学反応を行うDSLを書いてみたいと思うんだけど。

それから HSOEが読みかけだったのを思い出したので再開しよう。

ProductName The Haskell School of Expression: Learning Functional Programming through Multimedia
Professor Paul Hudak
Cambridge University Press / 3963円 ( 2000-06 )


Titanium Mobileの緑の本を読み終えた

5章の食べログとの連携をやろうとしたんだけど、食べログAPIは住所や電話番号といった細かい個人情報を登録する必要があり気持ち悪かったので、登録せずに読み流すだけにした。

というわけで、一通り読んだ。

黒い方の本を最初に読んだのだけど全体像がつかめなくて、緑のほうをススメられたので読んでみたら緑ののほうがわかり易かった。

ただ、Titanium Studioの説明がないので、黒い本を読むかネットの情報を少し漁る必要があるかなと思う。

ProductName Titanium Mobile iPhone/Androidアプリ開発入門―JavaScriptだけで作る
小澤 栄一
秀和システム / 2520円 ( 2012-02 )


用途にもよると思うけどjQuery Mobileで作るようなweb的なレイアウトのものは最初からTitanium Mobile利用してもいいかなと思った。

あとは簡単なゲームを作ろうと思ったら、objective-cで書く必要があるよなという感じで、cocos2d for iphoneぐらいは使えるようになっておこうと。

Spine.jsでつくるスクラムボード

クライアントサイドフレームワークbrunchでアプリを作ってみたが面白かったので、Spine.jsで書いてみた。

spine scrum

demo (source)

jQueryUIをslug.jsonに含めるとjQueryが定義されてないというエラーになるので、application.jsを実行した後に読み込んでいる。

resizeイベントにバインドすると固まるのでデモではサイズの状態が保存されないようにしているが、ドキュメント見てたらresizeStopにバインドすればいいような気がしてきた。というわけでjQueryUIとの連携のさせ方もわかった。

ほかにCSSまわりのTipsも勉強になった。cursorプロパティ初めてなのとinline-blockの使いどころとか。もっとCSS覚えなきゃならないことも理解した。