top page > computer > haskell > web_lecture > for_programmer > adt_list.html
更新日:
文責: 重城良国

リスト

adt_list.hs

はじめに

今まで普通に使ってきたリストだが、これも構文糖などの特殊な表記以外については普通に代数的データ型として定義できる。

定義

a型の値のリストとは空リストかまたはa型の値のリストの先頭にa型の値を追加したものだ。

data List a = Nil | a :~ List a deriving Show

% ghci adt_list.hs
*Main> 3 :~ (8 :~ (5 :~ Nil))
3 :~ (8 :~ (5 :~ Nil))

関数

関数map

関数mapと同じ関数をList型の値に対して作る。

mapL :: (a -> b) -> List a -> List b
mapL f (x :~ xs) = f x :~ mapL f xs
mapL _ _ = Nil

*Main> mapL (* 2) $ 3 :~ (8 :~ (5 :~ Nil))
6 :~ (16 :~ (10 :~ Nil))

まとめ

リストは構文糖など、特殊な記法ができる以外は、代数的データ型で定義することができる普通の型だ。

課題

  1. 型変数を2つとるリスト型を定義せよ
  2. 課題1で定義した型の値からNil値に保存された値を取りだす関数を作成せよ

「再帰的な多相型」へもどる 「構文: レコード構文」へ

正当なCSSです! HTML5 Powered with CSS3 / styling, and Semantics