プログラミング Haskell 第 2 版

プログラミング Haskell 第 2 版

 プログラミングHaskell 第2版
Grahum Hutton
ラムダノート
2019-08-02
¥ 3,456

第8章 型と型クラスの定義

p.93

この章では、Haskell で新しい型と型クラスを宣言する方法を説明します。
型を宣言する方法を三つ示した後、再帰型について考察してから、型クラスとそのインスタンスを宣言する方法を解説します。
最後に本章の締めくくりとして、恒真式を検査する関数と抽象機械を開発します。

8.1 typeによる型宣言

新しい型を宣言するいちばん簡単な方法は、既存の型に別名を付けることです。
これには Haskell の typeを使います。
たとえば、プレリュードにある以下の宣言は、String型が文字のリスト [Char]の別名でしかないことを表しています。

  1
type String = [Char]


  • 素朴な疑問
    • Haskellのプレリュード内で行われている宣言って、どうやって確認するんだろうか?
    • つまり、上記の例で言えば、Stringという型が、どこで宣言されているか?
    • ソースコードを見る方法、コマンドなどが用意されているのだろうか?

p.94

8.2 dataによる型宣言

既存の型に別名を付けるのではなく、完全に新しい型を宣言するには、Haskell のdataを使って型の値を指定します。
たとえば、プレリュードにある以下の宣言は、Bool型が Falseと Trueという二つの値から構成されることを表します。

  1
data Bool = False | True

このような型宣言で使う記号「|」は「または」と読み、型の値は構成子と呼びます。
新しく型を定義する場合と同様に、新しく定義する構成子は先頭を大文字にしなければいけません。
さらに、同じ名前の構成子を複数の型で用いることはできません。

構成子

  • Haskell の文法 http://mew.org/~kazu/academic/2013/miyazaki-u/syntax.html

    代数データ型
    代数データ型は、直積型の直和型です。すべてにラベルが付きます。このタグを構成子(constructor)と呼びます。以下は、代数データ型が直和型だと分かる例です。

      1
    
    data Bool = False | True

    Bool が型、False と True が構成子です。"|" が直和(または)を表します。

p.95

GHCi で試す場合には、新しい型の値を GHC が表示できるように、data宣言の最後に deriving Showを追加する必要があります。

引数を取ることから、構成子は関数だといえます。

普通の関数と構成子関数との違いは、後者は定義に等式を持たず、純粋にデータを作るために存在していることです。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-08-29 (木) 01:27:01 (1699d)