おさらい
モジュール
Haskellにはモジュールというものがあり、プログラムを分割することが出来、いくつかのプログラムをエクスポートできる
モジュールのインポート
- 標準モジュールをインポートしてみよう
- ghciでもプログラムのファイルからでも可
- import qualified Data.Map as M
標準モジュールの関数で問題を解く
- Data.Listのwords関数など
干し草の中から針を探す
シーザー暗号
かっこいい数
- MaybeとJust
キーから値へのマッピング
Mapを使いこなすなど
6.4 モジュールを作ってみよう
似たような目的の関数と型をまとめてモジュールに分けるのは良い習慣です。
第7章 型や型クラスを 自分で作ろう
7.1 新しいデータ型を定義する
- 型を自作してみる。
- data キーワードを使うと、新しいデータ型を定義する構文になる。
- enumみたいなやつ
7.2 形づくる
2種類の図形を扱う。
data Shape = Circle Float Float Float | Rectangle Float Float Float Float
値コンストラクタは何の変哲もない関数で、データ型にあったフィールドは、値コンストラクタ関数にとっての引数に対応する。
オーバーロードは出来ないけど部分適用は出来る。
適当な型をつくって遊んでみる。
場合分けして定義する。
deriving Show
Point データ型で形を整える
Shape をモジュールとしてエクスポートする
- 値コンストラクタは、フィールドを引数に取ってデータ型(例えば Shape 型)の値を返す関数にすぎない
7.3 レコード構文
今度はデータ型を作る別の方法
もっと良い書き方、それがレコード構文。
7.4 型引数
型引数をとっているので、Maybe は型コンストラクタ。型に引数があるから型引数。
単なる Maybe という型の値は存在できません。なぜなら、Maybe は型コンストラクタであって、型ではないからです。型コンストラクタは、すべての引数を埋めて初めて何かしらの値の型になれます。
Maybeを使って抽象度を上げようっていう話。
具体型とは、型引数を 1 つも取らない型か、あるいは、型引数を取るけれどもそれがすべて埋まっている型のことを指す。
型引数が便利なのは、さまざまな型を収納するデータ型を作れるところで、Maybeを定義するのに、中身の型ごとに別々の型にすることもできなくはないけど、型引数を使ってどんな型の値でも収納できる汎用の Maybe を作ったほうが便利。
Nothingは値を含まない。
今日はP122まで 次回は自動車は型引数を取るべきか?から