Mercurial > hg > Papers > 2015 > atton-thesis
changeset 76:3562c274db60
Fix
author | Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 17 Feb 2015 17:48:30 +0900 |
parents | 0286bbcb59af |
children | ce7701e4a308 |
files | paper/delta.tex paper/main.tex |
diffstat | 2 files changed, 7 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/paper/delta.tex Tue Feb 17 17:41:32 2015 +0900 +++ b/paper/delta.tex Tue Feb 17 17:48:30 2015 +0900 @@ -94,22 +94,21 @@ Delta で記述することで、プログラムの変更に沿った長さ1以上のリスト構造が構築される。 なお、a とは任意の型であり、Delta が任意の型の値に対してもデータ型を構築できることを示す。 -Haskell においてメタ計算とデータ型の対応は Monad によって行なうため、 Monad という型クラスが用意されている。 -型クラスとは特定の性質を持つ型をまとめるための制約である。 -ある型が型クラスに属するためには制約として型クラスによって指定された関数を定義する。 -なお、型aが型クラスCに属することを「型aは型クラスCのインスタンスである」と言う。 -型クラス Monad はリスト\ref{src:monad_class}のように定義されている。 +Haskell においてメタ計算とデータ型の対応は Monad によって行なうため、 Monad という型クラスが用意されている(リスト\ref{src:monad_class})。 \begin{table}[html] \lstinputlisting[label=src:monad_class, caption=Haskell における Monad 型クラス] {src/monad_class.hs} \end{table} +型クラスとは特定の性質を持つ型をまとめるための制約であり、制約はデータ型に対して関数の定義を要請する。 +要請する関数の定義は where 句の後に記述し、関数名と型を定義する。 +型クラスCが要請した関数を型 a 対してに定義することを「型aは型クラスCのインスタンスである」と言う。 + 型クラス Monad に属するために要請される関数は return と \verb/>>=/ である。 \verb/::/ は型注釈であり、 $ term :: type $ のように記述する。 -なお、関数型は \verb/ a -> b / のように引数の型と返り値の型を \verb/->/で挟んで記述する。 -引数が2つ以上の関数は \verb/ a -> b -> ... -> d / のように \verb/->/を増やすことで記述する。 +なお、関数型は \verb/ a -> b / のように引数の型と返り値の型を \verb/->/で挟んで記述し、引数が2つ以上の関数は \verb/ a -> b -> ... -> d / のように \verb/->/を増やす。 関数 return は任意の型aを受けとり、メタ計算と対応された型に対応させて返す。 \verb/>>=/ は中置関数であり、left operand と right operand を取る。