2014年1月12日日曜日

[haskell][yesod] Hashkell and Yesod(Introduction & Haskell章)学習メモ

Yesodのチュートリアルを一通りなぞったものの、いざ自分でweb appを作ろうとするといろいろとわからないことが多いため、Haskell and Yesodを最初から読むことにしました。
本エントリで主に自分が重要だと感じたポイントをメモにして残しておきます。

  • Introduction
    • YesodおよびHaskellを用いるメリットは以下の通り。
    • Type Safety
      • 入力として期待している型を記述できる
      • データのマーシャリング機能で境界値問題を抑制できる
    • Concise
      • formsライブラリでコーディング量を削減できる
      • routesで型安全性を損なうことなく簡単な宣言ができる
      • DBへのデータの登録・取り出しコードを自動生成してくれる 
    • Performance
      • コンパイル時にHTML, CSS, JavaScriptを解析することで、サーバー実行時のdisk I/Oを削減してくれる
      • Haskell製の最速のウェブサーバーであるWarpを利用しているので高速
  • Haskell
    • Haskell全てに精通していなくてもYesodでアプリケーションは開発できるが、以下の項目は押さえておく必要がある
    • Terminology
      • Data type
        • type GearCount = Int
        • newtype Make = Make Text
        • data Vehicle = Bicycle GearCount | Car Make Model
      • Data constructor
        • PersonMakeBicycleCar
      • Type constructor
        • PersonMakeVehicle
      • Type variables
        • data Maybe a = Just a | Nothing
        • data Person = Person Text Int
    • Language Pragmas
      • Yesodでは強力なtype class, syntax changesなどの言語拡張機能を利用しているがその宣言はソースコードで行うことを強く推奨する
        • {-# LANGUAGE MyLanguageExtension #-}
      • GHCの-XMyLanguageExtensionオプション、cabalのextensionブロックの指定は環境依存になってしまうので使わない方がよい
    • Overloaded Strings
      • HaskellStringには以下の制限があるため、HaskellはOverloadedStringsという仕組みを用意している。
        • メモリアロケーションが各consに必要、要素のcharacter毎にmachine wordを消費するなどのパフォーマンスの問題
        • ByteStringsやHTMLなど、文字列っぽいデータを扱いたいことがある型
      • IsString型のインスタンスにはTextStringより効率がよい)、StringおよびHtmlなどがある。
      • ただし"hello"のように宣言されたデータの型が一意に決まらなくなるため、明示的な型指定が必要になることがある点に注意が必要。
    • Type Families
      • 複数の異なる型の関連を記述する。
    • Template Hashkell(TH)
      • THはコード生成の一つの手順で、Abstract Syntax Tree(AST)を構築する。GHCは、以下のような"$("で始まる関数をTemplate Haskell(TH)関数と認識する。
        • $(hamletFile "myfile.hamlet")
    • QuasiQuotes
      • QuasiQuotes(QQ)はTemplate Haskell(TH)のちょっとした拡張。以下のように"["と最初の"|"の間にquasi-quoteの名前を記述し、contentsを"|"の間に記述する。
      • {-# LANGUAGE QuasiQuotes #-}
        [hamlet|This is quasi-quoted Hamlet.|]
      • Haskell and Yesodのサンプルではコピペ(動作確認)を容易にするためにQQを多様しているが、実際の開発においてはhamletFileなどを用いて外部ファイルを参照することを奨める。

Basicsの章以降は別エントリで。

0 件のコメント:

コメントを投稿