イントロダクション @Lost_dog_ DSC04841DSC04842

  • スタートHaskell :: [初心者] → IO [経験者]: (トラビスさん)初心者が演習を通じて経験者になる、というのを表わしている。
  • http://www.slideshare.net/YasuyukiOgawa/ss-13433189
  • 遅延評価はnon-strictを実装技術のひとつ
  • The Haskell 98 Report 最初の安定板
  • The Haskell 2010 Report 2番目の安定版
  • Haskell'(プライム)はわすれて。(理想に走りずぎてしまった..)

[2012-06-24 13:25]

HaskellPlathomeのインストール実演

  • GHC:コンパイラー (not GNU)
    • runghc: スクリプトのように実行する(裏でコンパイル)
    • 標準実装
  • Haskell Plathome
    • ghcとよくつかわれるライブラリをパッケージしたもの。
    • ghcがなかなかリリースされないときがあった。
    • リリースと開発をきりはなしたい。
  • cabal(カバル)
    • perlでのCPANに相当
    • パッケージ管理ツール
    • cabalパッケージをどうやってインストールするのか問題(ブートストラップ問題)はHaskell Plathomeでは解決ずみ。
  • Hugsはだれもメンテしていないので忘れてよい。
  • なんちゃらHCはたいていGHCを裏でつかっている拡張機能版。研究用。

1章 @Lost_dog_ DSC04843DSC04844

[2012-06-24 13:36]

  • min (-1) (-2): マイナスを意思表示したいときは negateをつかう。二項演算子のマイナスと解釈されないように。
  • windowsで:loadはめんどい...
  • 挿絵: テキサスレンジャーズとか
  • モジュール名とファイル名は一致させて大文字のcamel caseで。
  • [1..2]のように空白を入れなくてもよい。[1 .. 2]のように空白をいれると見やすくなる? 標準はない。
  • 内包表記で or は || を直接書く。 and は ,で繋げていけばよいが。
  • import Data.Bits で (.&.)でビット演算がつかえるようになる。
  • hoogleで関数検索できる。
  • 演習問題 http://wiki.haskell.jp/Workshop/StartHaskell/LYHGG/exercise/1
  • 1/0と1`div`0は結果がちがう。Infinityとdivide by zero。
  • リスト内包表記は軽いフィルタから書く
  • リスト内包表記でつかうletはモナドのletで糖衣構文。こんなかんじ [(a,b)|a<-[1,2,3],let b=a]

[2012-06-24 15:11]

DSC04845

休憩

DSC04847f7cf3d49.jpg

2章 @skoji DSC04849DSC04850

[2012-06-24 15:33]

  • 型クラスをつかうと既存の型を外からおれおれ型クラスのインスタンスにできる。(open worldとよばれる)
  • プログラムで1とか2と書くと変換関数が実ははさまっていて推論される。文字列だとfromStringを定義するとリテラルを定義できる。
  • 実行時には型情報はもっていないのでfromIntegerはコンパイル時におわっている。
  • defaulting: default宣言。宣言がなかったら勝手に決まる。:t 1+1 は Num になるけど 1+1が2になるのはなぜか?
  • ghciでitをつかうと最後の値がつかえる
  • 型クラスと型は別。型クラスは型のグループ。
  • Haskellにrefrectionはない。(むりやりできないこともない)
  • Num a => a->a->a は Num a->a->a->a のように辞書が渡ってくる形になる。vtblっぽいやつ。

[2012-06-24 16:47]

休憩

型制約が十分じゃない関数はC++のテンプレート展開のようになるかvtbl経由になるか? コンパイラはできるだけ展開するように頑張るはず。分割コンパイルの場合はどうなるか?むつかしい。

2演習

[2012-06-24 17:05]

変数名 :: コンテキスト => 型の式

  • 制約なしにa->aできるの恒等演算しかないのでidとわかる。
  • :info Eq とすると一覧がでる。

[2012-06-24 17:34]

LTタイム

すごいHaskellのテストたのしく学ぼう @shokos DSC04853

@dekosuke DSC04854

  • codeforces
  • 48時間でschemeを書こう パーサコンビネータ ログ解析で正規表現では力不足なときにつかえる
  • Q: オブジェクト指向の設計に対応するHaskellの設計方法は?
  • A:
    • UMLに対応するのは型クラス/型システム。
    • データを定義して関数を中に定義する。
    • データと関数は対等。
    • デザインパターンのいいところ: 共通の言葉ができる
    • わるいところ: 言語が貧弱なのを補うテクニック集。高階関数でできちゃうとかで名前をつける必要がない。

すごいYesodたのしく学ぼう! @seizans DSC04855

おわり

[2012-06-24 18:09]

  • WiMAXがいまいちでsshセッションがちょくちょく切れるので、つかいものにならず。
  • 次回は 7/22(日) を予定しているとのこと。
  • 元祖スタートHaskellと比べて女子率高め?