この記事は (bouzuya) PureScript Advent Calendar 2016 の 23 日目。 (bouzuya) PureScript Advent Calendar 2016 は bouzuya の PureScript 学習の記録だ。
- ← 22 日目『 PureScript by Example の 6.7, 6.8, 6.9, 6.10 を読む - Qiita 』
- → 24 日目『 PureScript by Example の 7.1, 7.2, 7.3, 7.4 を読む - Qiita 』
概要
PureScript by Example を PureScript Language Guide や Pursuit を見ながら進めていく。
今日は 6.11, 6.12, 6.13 を読む。ソースコードの例は purescript-book の exercises/chapter6 にある。
※注意事項: 英語と日本語訳では大きな差異がある。0.10.x
に対応している英語の側で進める。
- PureScript by Example 2016-12-05 時点で 0.10.x 向け
- 実例による PureScript 2016-12-05 時点で 0.7 向け
- PureScript Language Guide 対象バージョン不明
この章のおさらい
この章では型クラス (type classes) を扱うらしい。
class
/ instance
キーワードおよび型クラス Show
/ Eq
/ Ord
/ Field
/ Semigroup
/ Monoid
/ Foldable
/ Functor
を見た。必要に応じて ::
演算子で型を指定する方法、関数への型注釈 (type annotation) やインスタンスの重複ができないことも見た。型クラスの型変数が 0 個の場合や複数個の場合を見た。型変数間の関係の記述についても見た。 Partial
や Either
が例で出てきた。
Pursuit:
- Data.Either - purescript-either - Pursuit
- Data.Eq - purescript-prelude - Pursuit
- Data.Field - purescript-prelude - Pursuit
- Data.Foldable - purescript-foldable-traversable - Pursuit
- Data.Functor - purescript-prelude - Pursuit
- Data.Maybe - purescript-maybe - Pursuit
- Data.Monoid - purescript-monoid - Pursuit
- Data.Ord - purescript-prelude - Pursuit
- Data.Semigroup - purescript-prelude - Pursuit
- Data.Show - purescript-prelude - Pursuit
PureScript by Example 6.11
スーパークラス (superclass) 。型クラスに他の型クラスへの依存関係を設定できる。
例として Eq
と Ord
や Semigroup
と Monoid
が挙げられている。
class Eq a <= Ord a where
compare :: a -> a -> Ordering
class Semigroup m <= Monoid m where
mempty :: m
<=
で書く感じ。
PureScript by Example 6.12
この章の実例。ハッシュのライブラリをつくる。
newtype HashCode
と class Hashable
をつくって、 instance hashInt :: Hashable Int
などをつくっている。特に面白いところはなさそう。
PureScript by Example 6.13
まとめ。型クラスの紹介だったね。
次回以降の TODO
- PureScript by Example & PureScript Language Guide を読み進める
-
Array
以外でのdo
記法 psc-package
- 24 Days of PureScript, 2016
- 24 Days of PureScript, 2014
- 某氏の記事の紹介
- github.com/purescript のコードを読む
- github.com/purescript-node のコードを読む
- github.com/purescript-contrib のコードを読む